Primitif Authenticated Encryption with Associated Data (AEAD) adalah primitif yang paling umum untuk enkripsi data dan cocok untuk sebagian besar kebutuhan.
AEAD memiliki properti berikut:
- Secrecy: Tidak ada yang diketahui tentang teks biasa, kecuali panjangnya.
- Keaslian: Teks biasa terenkripsi yang mendasari teks tersandi tidak dapat diubah tanpa terdeteksi.
- Simetris: Mengenkripsi teks biasa dan mendekripsi teks tersandi dilakukan dengan kunci yang sama.
- Pengacakan: Enkripsi diacak. Dua pesan dengan teks polos yang sama menghasilkan teks tersandi yang berbeda. Penyerang tidak dapat mengetahui teks tersandi mana yang sesuai dengan teks polos tertentu. Jika Anda ingin menghindarinya, gunakan Deterministic AEAD.
Data terkait
AEAD dapat digunakan untuk mengaitkan ciphertext ke data terkait tertentu. Misalnya, Anda memiliki database dengan kolom user-id
dan encrypted-medical-history. Dalam skenario ini, user-id dapat digunakan sebagai
data terkait saat mengenkripsi encrypted-medical-history. Hal ini mencegah penyerang memindahkan histori medis dari satu pengguna ke pengguna lain.
Data terkait bersifat opsional. Jika ditentukan, dekripsi hanya berhasil jika data terkait yang sama diteruskan ke panggilan enkripsi dan dekripsi.
Pilih jenis kunci
Meskipun kami merekomendasikan AES128_GCM untuk sebagian besar penggunaan, ada berbagai jenis kunci untuk berbagai kebutuhan (untuk keamanan 256-bit, ganti AES128 dengan AES256 di bawah). Secara umum:
- AES128_CTR_HMAC_SHA256 dengan Vektor Inisialisasi (IV) 16 byte adalah mode paling konservatif dengan batas yang baik.
- AES128_EAX sedikit kurang konservatif dan sedikit lebih cepat daripada AES128_CTR_HMAC_SHA256.
- AES128_GCM biasanya merupakan mode tercepat, dengan batas paling ketat pada jumlah pesan dan ukuran pesan. Jika batas panjang data plaintext dan terkait (di bawah) ini terlampaui, AES128_GCM akan gagal dan membocorkan materi kunci.
- AES128_GCM_SIV hampir secepat AES128_GCM. AES256_GCM memiliki batas yang sama dengan AES128_GCM pada jumlah pesan dan ukuran pesan, tetapi jika batas ini terlampaui, AES256_GCM akan gagal dengan cara yang tidak terlalu fatal: AES256_GCM hanya dapat membocorkan fakta bahwa dua pesan sama. Hal ini membuatnya lebih aman digunakan daripada AES128_GCM, tetapi kurang banyak digunakan dalam praktiknya. Untuk menggunakannya di Java, Anda harus menginstal Conscrypt.
- XChaCha20Poly1305 memiliki batas yang jauh lebih besar pada jumlah pesan dan ukuran pesan daripada AES128_GCM, tetapi jika gagal (sangat tidak mungkin), XChaCha20Poly1305 juga membocorkan materi kunci. Mode ini tidak menggunakan akselerasi hardware, sehingga dapat lebih lambat daripada mode AES dalam situasi saat akselerasi hardware tersedia.
Jaminan keamanan
Implementasi AEAD menawarkan:
- Keamanan CCA2.
- Kekuatan autentikasi minimal 80 bit.
- Kemampuan untuk mengenkripsi minimal 232 pesan dengan total 250 byte. Tidak ada serangan dengan hingga 232 chosen plaintext atau chosen ciphertext yang memiliki probabilitas keberhasilan lebih besar dari 2-32.
Contoh kasus penggunaan
Lihat Saya ingin mengenkripsi data dan saya ingin mengikat ciphertext ke konteksnya.