En las respuestas OCSP de un cierto eIDAS PKI I de vez en cuando, obtengo valores de firma que, cuando se descomprimen de su BIT STRING, contienen una firma ECDSA cuyos componentes INTEGER tienen un byte inicial de 00 bytes innecesario y, por lo tanto, no están codificados DER , por ejemplo,
376 10: . . . . . SEQUENCE {
378 8: . . . . . . OBJECT IDENTIFIER ecdsaWithSHA256 (1 2 840 10045 4 3 2)
: . . . . . . . (ANSI X9.62 ECDSA algorithm with SHA256)
: . . . . . . }
388 71: . . . . . BIT STRING, encapsulates {
391 68: . . . . . . SEQUENCE {
393 32: . . . . . . . INTEGER
: . . . . . . . . 6D 7F 95 D5 8E 9B E1 18 m.......
: . . . . . . . . 60 DC A6 D6 91 37 0D B4 '....7..
: . . . . . . . . AF D5 C9 A0 E8 21 40 4A .....!@J
: . . . . . . . . 94 8B 9F AA 6C DC F2 8C
427 32: . . . . . . . INTEGER
: . . . . . . . . 00 1B FD 92 CB 1E E2 A8 ........
: . . . . . . . . 2B 18 FC 37 ED 42 D0 66 +..7.B.f
: . . . . . . . . E6 52 63 88 47 88 EE 00 .Rc.G...
: . . . . . . . . FF 37 CF 20 8F F8 3C C1
: . . . . . . . . Error: Integer has non-DER encoding.
: . . . . . . . }
: . . . . . . }
Aquí, la utilidad de volcado ASN.1 afirma que esta codificación no DER es un error, y también lo hace la versión actual de BouncyCastle (se ha introducido una comprobación de codificación DER en octubre de 2016, desafortunadamente sin ningún problema ni norma) Referencia en el comentario).
Me gustaría saber si BouncyCastle es demasiado estricto o si el respondedor de OCSP realmente crea respuestas no válidas. Desafortunadamente, todavía no he encontrado ninguna norma (relevante para las PKI de eIDAS) que indique claramente qué codificación se puede usar allí.
RFC 6960 en OCSP dice
El valor para la respuesta DEBE ser la codificación DER de BasicOCSPResponse.
BasicOCSPResponse ::= SEQUENCE { tbsResponseData ResponseData, signatureAlgorithm AlgorithmIdentifier, signature BIT STRING, certs [0] EXPLICIT SEQUENCE OF Certificate OPTIONAL }
pero esto solo requiere que BIT STRING signature
esté codificado en DER, no todos los datos encapsulados en él.
TR-03111 (Guía técnica sobre criptografía de curva elíptica de la Oficina Federal Alemana para la Seguridad de la Información) dice
En el formato X9.62, la firma ECDSA (r; s) se codifica como estructura ASN.1 con lo siguiente sintaxis:
ECDSA-Sig-Value ::= SEQUENCE { r INTEGER, s INTEGER }
Para incrustar la firma en una BIT STRING el DER codificado ECDSA-Sig-Value DEBE ser el valor de la cadena de bits (incluida la etiqueta y el campo de longitud).
pero un requisito de la Oficina Federal Alemana para la Seguridad de la Información difícilmente es normativo para las PKI de eIDAS en general.
En X9.62 solo encuentro
Si bien es probable que estos Las definiciones de ASN.1 se codificarán utilizando las Reglas de codificación distinguida ( DER ), otras reglas de codificación también pueden ser utilizado.