¿Qué algoritmo hash usar para la verificación de firmas ECDSA (OpenSSL)?

-1

Me autentico con un pasaporte electrónico enviando un desafío de 8 bytes y obteniendo una firma ECDSA. Antes, leí la clave pública del pasaporte electrónico y luego la uso para verificar la firma.

Leí la clave pública de oPKEY que es una matriz codificada 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);

luego uso EVP_DigestVerifyInit(ctx, NULL, md, NULL, pPubkey) para leer la clave pública pPubkey y md es el algoritmo hash utilizado. Aquí está la parte difícil:

¿Cómo puedo saber si debo tomar EVP_sha1() , EVP_sha224() etc. como md ?

Tengo dos pasaportes electrónicos en los que la clave pública codificada en DER oKEY es de la misma longitud (311 bytes) y también la longitud de la firma es la misma (64 bytes). Pero uno de ellos solo verifica cuando uso EVP_sha1() en EVP_DigestVerifyInit() y el otro solo verifica cuando uso EVP_sha256() .

Tengo un tercer caso, pero con un PublicKey de 279 bytes de longitud. Y ese uno necesita EVP_sha224() para verificar.

¿Hay alguna forma de saber a partir de la clave pública qué algoritmo hash usar?

¡Gracias!

    
pregunta tzippy 24.11.2017 - 09:57
fuente

1 respuesta

1

Preguntando "¿hay alguna forma de saber de la clave pública qué algoritmo hash usar?" es como preguntar "¿hay alguna que decir de la clave de la casa qué tipo de ¿Coche que conduce el propietario? "

La respuesta ingenua es "no" . Los algoritmos de hash de las claves criptográficas no están relacionados, aparte de una correlación basada en la antigüedad de los cifrados (de la misma manera que las claves de casa y los modelos de automóviles no están relacionados, excepto que probablemente no pueda adivinar que alguien que use una clave de estilo 1800 conduzca un Porsche).

Sin embargo, para algunas firmas, puede determinar el hash utilizado por usando la clave. Con RSA (pero aparentemente no DSA o ECDSA, vea el comentario de @dave_thompson_085 a continuación), puede (en algunos casos) usar la clave pública para revertir una firma al resumen criptográfico desde el cual se creó. Luego, puede mirar el compendio resultante y ver qué tan largo es, y usarlo para adivinar qué algoritmo hash se usó para generarlo. (Esto es análogo a poder determinar el modelo de automóvil usando la llave de la casa para verificar el garaje del propietario).

En general, una firma vendrá con algún tipo de indicador (ya sea una cadena de texto sin formato o un valor de enumeración) que indica tanto el algoritmo de firma como el algoritmo de hash.

    
respondido por el CBHacking 24.11.2017 - 20:17
fuente

Lea otras preguntas en las etiquetas