Saltar al contenido
ecdsa.com

DER (reglas de codificación distinguidas)

La codificación binaria canónica de ASN.1, definida en ITU-T X.690, que da a cada valor exactamente una representación en bytes; por eso los certificados, las CSR, las CRL, las claves y muchas firmas se codifican en DER.
También se escribeDistinguished Encoding RulesDER encodingBERX.690

Cada valor sigue el esquema etiqueta–longitud–valor: un byte de etiqueta (0x30 SEQUENCE, 0x02 INTEGER, 0x03 BIT STRING, 0x04 OCTET STRING, 0x05 NULL, 0x06 OBJECT IDENTIFIER, 0x0C UTF8String, 0x17 UTCTime), una longitud (un byte si es menor que 128; si no, 0x81/0x82… seguido de los bytes de la longitud) y el contenido. DER es una forma restringida de BER: solo longitudes definidas, codificaciones mínimas de longitudes y enteros, 0xFF para TRUE y elementos de SET OF ordenados.

La codificación canónica importa porque las firmas cubren bytes exactos: el tbsCertificate de un certificado debe volver a codificarse de forma idéntica para que la firma se verifique. Los analizadores permisivos que aceptan BER donde se exige DER han provocado maleabilidad de firmas (BIP 66 de Bitcoin) y fallos que permitían eludir la verificación en varias bibliotecas.

Los enteros DER tienen signo, así que un valor positivo con el bit más alto a 1 lleva un 0x00 inicial; por eso las firmas ECDSA en DER ocupan entre 70 y 72 bytes con P-256. PEM no es más que DER en base64 con líneas de encabezado. El explorador de ASN.1 decodifica en local cualquier estructura DER.

Estándares y referencias

Todos los términos