Usando RSA_verify per verificare una firma, perché il primo parametro?

0

La funzione RSA_verify accetta i seguenti parametri:

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

il primo parametro è il tipo di algoritmo di digest del messaggio, come NID_sha256.

Dato che questo codice non hash il messaggio, la variabile m è il messaggio hash, che scopo c'è di passare il primo parametro?

Il tipo di algoritmo hash è memorizzato da qualche parte, e viene verificato il controllo che lo stesso algoritmo sia utilizzato per verificare come è stato utilizzato per firmare? Se è così, questo int non ha nulla a che fare con la funzione che è stata utilizzata, potrebbe facilmente sbagliare.

    
posta Dov 07.06.2017 - 21:19
fonte

2 risposte

2

Da documentazione puoi vedere che il tipo è importante in RSA_sign perché vengono utilizzati diversi tipi di output a seconda del tipo:

type denotes the message digest algorithm that was used to generate m. It usually is one of NID_sha1, NID_ripemd160 and NID_md5; see objects for details. If type is NID_md5_sha1, an SSL signature (MD5 and SHA1 message digests with PKCS #1 padding and no algorithm identifier) is created.

Simile al tipo deve essere noto quando si verifica la firma perché l'implementazione deve sapere quale formato è la firma per analizzarla correttamente. Se guardi il codice sorgente, vedi la gestione speciale per NID_md5_sha1 e NID_mdc2 .

    
risposta data 07.06.2017 - 22:13
fonte
1

La codifica EMSA imposto da PKCS # 1 per il calcolo dell'hash del messaggio include l'OID delle funzioni hash nei byte dei messaggi. Questo è fatto per rendere più difficile l'uso di un diverso schema di hashing. Questo è descritto in RFC 3447 9.2 .

L'MD5 / SHA1 misto d'altra parte è il formato standard utilizzato con gli handshake TLS precedenti. Non è raro che i primitivi di crypto abbiano alcuni parametri relativi al formato o al padding, specialmente perché sono progettati per proteggersi da errori di implementazioni ingenue.

    
risposta data 08.06.2017 - 03:07
fonte

Leggi altre domande sui tag