Pular para o conteúdo
ecdsa.com

DER (Distinguished Encoding Rules)

A codificação binária canônica do ASN.1, definida na ITU-T X.690, que dá a cada valor exatamente uma representação em bytes; é por isso que certificados, CSRs, CRLs, chaves e muitas assinaturas são codificados em DER.
Também escrito comoDistinguished Encoding RulesDER encodingBERX.690

Todo valor é tag–comprimento–valor: um byte de tag (0x30 SEQUENCE, 0x02 INTEGER, 0x03 BIT STRING, 0x04 OCTET STRING, 0x05 NULL, 0x06 OBJECT IDENTIFIER, 0x0C UTF8String, 0x17 UTCTime), um comprimento (um byte abaixo de 128; caso contrário, 0x81/0x82… seguido dos bytes de comprimento) e o conteúdo. O DER é uma forma restrita do BER: só comprimentos definidos, codificações mínimas de comprimentos e de inteiros, 0xFF para TRUE e elementos de SET OF ordenados.

A codificação canônica importa porque as assinaturas cobrem bytes exatos: o tbsCertificate de um certificado precisa ser recodificado de forma idêntica para que a assinatura seja verificada. Parsers permissivos que aceitam BER onde o DER é exigido já causaram maleabilidade de assinaturas (o BIP 66 do Bitcoin) e falhas que permitiam contornar a verificação em várias bibliotecas.

Os inteiros DER têm sinal, então um valor positivo cujo bit mais alto está ligado recebe um 0x00 à frente; é por isso que as assinaturas ECDSA em DER variam entre 70 e 72 bytes na P-256. O PEM é simplesmente o base64 do DER com linhas de cabeçalho. O decodificador de ASN.1 decodifica localmente qualquer estrutura DER.

Padrões e referências

Todos os termos