Quale algoritmo di hash usare per la verifica della firma ECDSA (OpenSSL)?

-1

Autenticarsi con un ePassport inviando una richiesta di 8 byte e ottenendo una firma ECDSA. Prima, ho letto la chiave pubblica da ePassport e poi l'ho usata per verificare la firma.

Ho letto la chiave pubblica da oPKEY che è una matrice codificata DER ( {0x30, 0x82, 0x01, 0x33, 0x30, 0x81, 0xec, 0x06, 0x07, 0x2a, ... )

EVP_PKEY* pPubkey;
BIO* keyBio = BIO_new_mem_buf(&oPKEY[0], (int)oPKEY.size());
pPubkey = d2i_PUBKEY_bio(keyBio, NULL);
BIO_free(keyBio);

quindi utilizzo EVP_DigestVerifyInit(ctx, NULL, md, NULL, pPubkey) per leggere la chiave pubblica pPubkey con md come algoritmo di hash utilizzato. Ecco la parte difficile:

Come faccio a sapere se prendere EVP_sha1() , EVP_sha224() ecc. come md ?

Ho due ePassports in cui la chiave pubblica codificata DER oKEY ha la stessa lunghezza (311 byte) e anche la lunghezza della firma è la stessa (64 byte). Ma uno solo verifica quando uso EVP_sha1() in EVP_DigestVerifyInit() e l'altro solo verifica quando utilizzo EVP_sha256() .

Ho un terzo caso ma con un PublicKey lungo 279 byte. E quello ha bisogno di EVP_sha224() per verificare.

C'è un modo per dire dalla chiave pubblica quale algoritmo hash usare?

Grazie!

    
posta tzippy 24.11.2017 - 09:57
fonte

1 risposta

1

Chiedere "c'è un modo per dire dalla chiave pubblica quale algoritmo hash usare?" è come chiedere a "c'è da dire dalla chiave di casa che tipo di la macchina che il proprietario guida? "

La risposta ingenua è "no" . Gli algoritmi di hash delle chiavi crittografiche non sono correlati, a parte una correlazione basata sull'età dei cifrari (allo stesso modo le chiavi di casa ei modelli di auto non sono correlati, eccetto che probabilmente non si può indovinare nessuno usando un tasto stile 1800 per guidare una Porsche).

Tuttavia, per alcune firme, è possibile determinare l'hash utilizzato da utilizzando la chiave. Con RSA (ma apparentemente non DSA o ECDSA, vedi il commento di @ dave_thompson_085 sotto), puoi (in alcuni casi) usare la chiave pubblica per ripristinare una firma nel digest crittografico da cui è stata creata. Potresti quindi esaminare il digest risultante e vedere quanto è lungo, e usarlo per indovinare quale algoritmo hash è stato usato per generarlo. (Questo è analogo a essere in grado di determinare il modello dell'auto usando la chiave di casa per controllare il garage del proprietario.)

Generalmente, una firma verrà fornita con un tipo di indicatore (una stringa di testo normale o un valore di enumerazione) che indica sia l'algoritmo della firma che l'algoritmo di hash.

    
risposta data 24.11.2017 - 20:17
fonte

Leggi altre domande sui tag