Loại Proc: 4, ĐƯỢC MÃ HÓA
chỉ ra rằng khóa được lấy từ mật khẩu được chỉ định bởi RFC 1421 §4.6.1.1 f.. Đối với ý nghĩa của Thông tin DEK
, RFC 1423 cũ hơn AES và tôi không biết tài liệu tham khảo nào khác ngoài mã nguồn OpenSSL.
Khóa mã hóa được lấy từ mật khẩu sử dụng PBKDF1-MD5 như được chỉ định bởi PKCS#5. Muối là phần thứ hai của Thông tin DEK
tiêu đề và số lần lặp lại là 1. (Vâng, điều này yếu một cách lố bịch. Chỉ sử dụng mật khẩu entropy cao để mã hóa PEM, không phải mật khẩu thực sự đáng nhớ!) Một lần nữa, tài liệu tham khảo duy nhất tôi biết là mã nguồn OpenSSL: pem_bytes_read_bio_flags
cuộc gọi PEM_do_header
cuộc gọi nào EVP_BytesToKey
.
Không có cơ chế tích hợp để kiểm tra xem mật khẩu có chính xác khi giải mã hay không. Mật khẩu không hợp lệ rất có thể dẫn đến rác. Nếu bạn chuyển đầu vào bị cắt bớt cho một công cụ mong đợi khóa RSA hợp lệ, thì nó sẽ luôn báo lỗi. Bạn có thể phải viết công cụ của riêng bạn.
Để xác định xem phần giải mã của phần bạn có có chính xác hay không, hãy kiểm tra xem phần đó có khớp với định dạng của khóa riêng tư RSA được tìm thấy bên trong tệp PEM như vậy hay không. Định dạng này được chỉ định trong PKCS#1 §A.1.2. Nếu bạn chưa quen với ASN.1, mồi Let's Encrypt ASN.1 sẽ hữu ích, và tất nhiên bạn nên xem xét một số ví dụ.Khóa riêng RSA bắt đầu bằng 0x30 (chỉ báo trình tự), sau đó là độ dài (thường là 0x82 và hai byte nữa) của toàn bộ, sau đó là 0x02 0x01 0x00 (mã hóa phiên bản dưới dạng số nguyên ASN.1), sau đó (đối với 2048 -bit số mũ, như một ví dụ) 0x02 0x82 0x01 0x01 0x00 và 256 byte của giá trị số mũ, sau đó 0x02 0x03 0x01 0x00 0x01 cho số mũ công khai 65537, v.v.