2013-07-22 24 views
6

Stavo facendo alcuni esperimenti con la crittografia. Ora ho la chiave pubblica del destinatario e voglio crittografare alcuni dati e passare al ricevitore.Come crittografare i dati utilizzando RSA, con SHA-256 come funzione hash e MGF1 come funzione di generazione maschera?

Desidero utilizzare l'algoritmo RSAES-OAEP. con SHA-256 come funzione hash e MGF1 come funzione di generazione maschera.

Voglio farlo usando openssl. Ho trovato una funzione RSA_public_encrypt() con questa funzione possiamo specificare il padding. Una delle possibilità imbottitura a disposizione era

RSA_PKCS1_OAEP_PADDING
EME-OAEP come definito nella PKCS # 1 v2.0 con SHA-1, MGF1.

utilizzano lo sha-1.

Desidero riconfigurare la funzione per utilizzare SHA256 come funzione hash e MGF1 come funzione hash. Come posso farlo ?

risposta

3

OpenSSL utilizza definizioni da PKCS #1 v2.0 e quindi l'impostazione predefinita per EME-OAEP è SHA-1 e MGF1. Se è necessario utilizzare SHA-256, è necessario eseguire la codifica autonomamente. Tuttavia, ciò non è particolarmente difficile, per i dettagli vedere PKCS #1 v2.2 PDF Page 18.

1

Nella versione più recente di Openssl (1.0.2k) viene modificata la firma dell'API che ci offre maggiore flessibilità. Si prega di trovare i dettagli qui sotto,

int RSA_padding_check_PKCS1_OAEP_mgf1 (unsigned char * a, int tlen, const char * da, int Flen, int num, const char * param, Int Plen, const EVP_MD * md, const EVP_MD * mgf1md)

È possibile passare la struttura EVP_MD per richiamare l'hashing SHA-256 utilizzando questo.

3

Il seguente estratto consente di utilizzare OAEP con SHA256 per la funzione MGF e hash. Provato con OpenSSL 1.0.2L

int flags = CMS_BINARY | CMS_PARTIAL | CMS_KEY_PARAM; 
cms = CMS_encrypt(NULL, in, cipher, flags) 
ri = CMS_add1_recipient_cert(cms, cert, flags); 
pctx = CMS_RecipientInfo_get0_pkey_ctx(ri); 
EVP_PKEY_CTX_set_rsa_padding(pctx, RSA_PKCS1_OAEP_PADDING); 
EVP_PKEY_CTX_set_rsa_oaep_md(pctx, EVP_sha256()); 
EVP_PKEY_CTX_set_rsa_mgf1_md(pctx, EVP_sha256());