Usando RSA_verify para verificar una firma, ¿por qué el primer parámetro?

0

La función RSA_verify toma los siguientes parámetros:

int RSA_verify(int type, unsigned char*m, unsigned int m_len,
               unsigned char *sigbuf, unsigned int siglen, RSA* rsa);

el primer parámetro es el tipo de algoritmo de resumen de mensajes, como NID_sha256.

Dado que este código no tiene hash en el mensaje, la variable m es el mensaje con hash, ¿cuál es el propósito de pasar el primer parámetro?

¿Se almacena el tipo de algoritmo hash en algún lugar y se verifica que se esté utilizando el mismo algoritmo para verificar que se usó para firmar? Si es así, este int no tiene nada que ver con la función que se usó, fácilmente podría estar equivocado.

    
pregunta Dov 07.06.2017 - 21:19
fuente

2 respuestas

2

En la documentación puede ver que el tipo es importante en RSA_sign porque se utilizan diferentes tipos de salida dependiendo del tipo:

  tipo

denota el algoritmo de resumen del mensaje que se utilizó para generar m. Por lo general, es uno de NID_sha1, NID_ripemd160 y NID_md5; ver los objetos para más detalles. Si el tipo es NID_md5_sha1, se crea una firma SSL (compendios de mensajes MD5 y SHA1 con relleno PKCS # 1 y sin identificador de algoritmo) .

Es necesario conocer el tipo similar al verificar la firma porque la implementación necesita saber en qué formato se encuentra la firma para analizarla correctamente. Si observa el código fuente, verá un manejo especial para NID_md5_sha1 y NID_mdc2 .

    
respondido por el Steffen Ullrich 07.06.2017 - 22:13
fuente
1

La codificación EMSA ordenada por PKCS # 1 para calcular el hash de mensaje incluye el OID de las funciones de hash en los bytes del mensaje. Esto se hace para que sea más difícil usar un esquema de hashing diferente. Esto se describe en RFC 3447 9.2 .

La MD5 / SHA1 mixta, por otro lado, es el formato estándar que se usa con los más viejos apretones de manos TLS. No es raro que los primitivos criptográficos tengan algún formato o parámetros relacionados con el relleno, especialmente porque están diseñados para proteger contra fallas de implementaciones ingenuas.

    
respondido por el eckes 08.06.2017 - 03:07
fuente

Lea otras preguntas en las etiquetas