RSA, public/private key và hybrid encryption
Public key có thể phân phối; private key phải bí mật. RSA encryption dùng public key để encrypt và private key để decrypt, nhưng chỉ cho message ngắn và phải dùng padding hiện đại như OAEP.
Hybrid encryption
Tạo random data-encryption key (DEK), mã hóa dữ liệu bằng AEAD, rồi wrap DEK bằng RSA-OAEP hoặc KMS. Cách này nhanh hơn và hỗ trợ envelope encryption.
Cipher rsa = Cipher.getInstance("RSA/ECB/OAEPWithSHA-256AndMGF1Padding"); rsa.init(Cipher.ENCRYPT_MODE, publicKey); byte[] wrappedKey = rsa.doFinal(aesKey.getEncoded());- Không dùng textbook RSA hoặc PKCS#1 v1.5 cho thiết kế encryption mới khi OAEP khả dụng.
- 2048-bit thường là baseline hiện tại, nhưng lifetime và compliance cần review.
- Encryption và signing khác nhau; “encrypt bằng private key” không phải mental model đúng cho signature.