2013-07-22 25 views
6

Tôi đã thực hiện một số thử nghiệm với mật mã. Bây giờ tôi có khóa công khai của người nhận và tôi muốn mã hóa một số dữ liệu và chuyển cho người nhận.Làm thế nào để mã hóa dữ liệu bằng RSA, với SHA-256 là hàm băm và MGF1 làm chức năng tạo mặt nạ?

Tôi muốn sử dụng thuật toán RSAES-OAEP. với hàm SHA-256 là hàm băm và hàm MGF1 làm chức năng tạo mặt nạ.

Tôi muốn thực hiện việc này bằng openssl. Tôi tìm thấy một hàm RSA_public_encrypt() với hàm này, chúng ta có thể chỉ định padding. Một trong những lựa chọn đệm có sẵn là

RSA_PKCS1_OAEP_PADDING
EME-OAEP theo quy định tại PKCS # 1 v2.0 với SHA-1, MGF1.

họ đang sử dụng lệnh sha-1.

Tôi muốn cấu hình lại hàm để sử dụng hàm SHA256 làm hàm băm làm MGF1 làm hàm băm. Tôi làm nó như thế nào ?

Trả lời

3

OpenSSL sử dụng định nghĩa từ PKCS #1 v2.0 và do đó mặc định cho EME-OAEPSHA-1MGF1. Nếu bạn cần sử dụng SHA-256, bạn sẽ cần tự mình thực hiện mã hóa. Tuy nhiên, điều này không quá khó khăn, hãy xem PKCS #1 v2.2 PDF Trang 18 để biết chi tiết.

1

Trong phiên bản mới nhất của Openssl (1.0.2k), chữ ký của API được thay đổi giúp chúng tôi linh hoạt hơn. Vui lòng xem chi tiết dưới đây,

int RSA_padding_check_PKCS1_OAEP_mgf1 (unsigned char * để, int Tlen, const unsigned char * từ, int Flen, int num, const unsigned char * param, int plen, const EVP_MD * md, const EVP_MD * mgf1md)

Bạn có thể chuyển cấu trúc EVP_MD để gọi hàm băm SHA-256 bằng cách sử dụng này.

3

Đoạn trích sau đây cho phép sử dụng OAEP với SHA256 cho cả MGF và hàm băm. Được thử nghiệm với 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()); 
Các vấn đề liên quan