Come vengono calcolate le firme ECDSA per i certificati X509?

2

Sto cercando di verificare una firma del certificato per conto mio. Per fare questo, ho creato un certificato autofirmato usando OpenSSL con le due seguenti linee di comando:

openssl ecparam -name secp256k1 -genkey -param_enc explicit -out private-key.pem

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

Potete dare un'occhiata al mio certificato qui.

Posso distinguere chiaramente la chiave pubblica e la firma che sono rispettivamente:

chiave pubblica

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

firma

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

Il mio problema è che non capisco qual è l'input dell'algoritmo di firma (ECDSA con SHA256)?

Ho provato a verificare la firma eseguendo calcoli ECC su un hash (SHA256) di tutti i dati prima della firma TLV ( i.e. tutti tranne 03 48 00 30 45 02 20 32 BA FB EB A8 E9 BB 4B 2D 2B 19 12 65 11 CE 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) ma sembra che la firma non sia valida con questo input.

    
posta Raoul722 09.01.2017 - 18:09
fonte

1 risposta

1

La firma è calcolata sui dati tbsCertificate (To-Be-Signed).

link :

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

Il link dice:

The signatureValue field contains a digital signature computed upon the ASN.1 DER encoded tbsCertificate. The ASN.1 DER encoded tbsCertificate is used as the input to the signature function. This signature value is encoded as a BIT STRING and included in the signature field. The details of this process are specified for each of the algorithms listed in [RFC3279], [RFC4055], and [RFC4491].

By generating this signature, a CA certifies the validity of the information in the tbsCertificate field. In particular, the CA certifies the binding between the public key material and the subject of the certificate.

Quindi, la versione banale di ciò che hai sbagliato è che devi anche escludere il leader 30 82 03 02 . E non hai tagliato abbastanza la fine. Vale a dire, la parte 30 0A 06 ... (l'identificatore dell'algoritmo della firma).

Ma, usando l'analisi ASN / DER già mostrata, si vede che la radice SEQUENCE contiene tre figli. La firma è solo per il primo figlio.

    
risposta data 09.01.2017 - 19:07
fonte

Leggi altre domande sui tag