¿Cómo se calculan las firmas de ECDSA para los Certificados X509?

2

Estoy intentando verificar una firma de certificado por mi cuenta. Para hacer esto, creé un certificado autofirmado utilizando OpenSSL con las siguientes dos líneas de comando:

  

openssl ecparam -name secp256k1 -genkey -param_enc explícito -out   private-key.pem

     

openssl req -new -x509 -key private-key.pem -out   server.pem -days 730

Usted puede echar un vistazo a mi certificado aquí.

Puedo distinguir claramente la clave pública y la firma que respectivamente son:

clave pública

  

93 99 FD 9F 7F 04 48 AF 51 2C 6D 2D 69 04 B9 1F 88 A9 C2 64 31 8E 68   70 5B 55 C8 63 C2 C3 AC A4 17 BD 89 1A 5E 8E 08 C4 B7 92 AD AF 51 28   D3 AC BC CE 73 FA 5D D2 FE A7 EB 53 C7 6E 1A 00 84 2C

signature

  

32 BA FB EB A8 E9 BB 4B 2D 2B 19 12 65 11 EC BB F5 46 5E B5 59 3A 9D   42 F2 62 74 BA A0 E7 73 03   E1 4C CE 67 2B 7D 3B BA 75 E9 8B 95 95 57 E7 17 B7 C1 99 4B 71 96   74 89 67 5F DC B1 0C 71 3B 5F

Mi problema es que no entiendo ¿cuál es la entrada del algoritmo de firma (ECDSA con SHA256)?

Intenté verificar la firma realizando cálculos de ECC en un hash (SHA256) de todos los datos antes de la firma TLV ( es decir todos excepto 03 48 00 30 45 02 20 32 BA FB EB A8 E9 BB 4B 2D 2B 19 12 65 11 EC BB F5 46 5E B5 59 3A 9D 42 F2 62 74 BA A0 E7 73 03 02 21 00 E1 4C CE 67 2B 7D 3B BA 75 E9 8B 95 95 57 E7 17 B7 C1 99 4B 71 96 74 89 67 5F DC B1 0C 71 3B 5F) pero parece que la firma no es válida con esta entrada.

    
pregunta Raoul722 09.01.2017 - 18:09
fuente

1 respuesta

1

La firma se calcula sobre los datos de tbsCertificate (para ser firmado).

enlace :

Certificate  ::=  SEQUENCE  {
    tbsCertificate       TBSCertificate,
    signatureAlgorithm   AlgorithmIdentifier,
    signatureValue       BIT STRING  }

enlace dice:

  

El campo signatureValue contiene una firma digital calculada en      el ASN.1 DER codificado tbsCertificate. El ASN.1 DER codificado      tbsCertificate se utiliza como entrada para la función de firma. Esta      el valor de la firma se codifica como BIT STRING y se incluye en el      campo de firma Los detalles de este proceso se especifican para cada uno.      de los algoritmos enumerados en [RFC3279], [RFC4055] y [RFC4491].

     

Al generar esta firma, una CA certifica la validez de la      Información en el campo tbsCertificate. En particular, la CA      Certifica la vinculación entre el material de clave pública y el sujeto.      del certificado.

Por lo tanto, la versión trivial de lo que se equivocó es que también debe excluir el 30 82 03 02 . Y no recortaste lo suficiente del final. A saber, la parte 30 0A 06 ... (el identificador del algoritmo de firma).

Pero, al utilizar el análisis ASN / DER ya mostrado, se ve que la SECUENCIA raíz contiene tres hijos. La firma es solo sobre el primer hijo.

    
respondido por el bartonjs 09.01.2017 - 19:07
fuente

Lea otras preguntas en las etiquetas