Primitive Authenticated Encryption with Associated Data (AEAD) adalah primitive 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 ciphertext tidak dapat diubah tanpa terdeteksi.
- Simetris: Mengenkripsi teks biasa dan mendekripsi ciphertext dilakukan dengan kunci yang sama.
- Pengacakan: Enkripsi dilakukan secara acak. Dua pesan dengan plaintext yang sama menghasilkan ciphertext yang berbeda. Penyerang tidak dapat mengetahui ciphertext mana yang sesuai dengan teks biasa tertentu. Jika Anda ingin menghindari hal ini, gunakan AEAD Deterministik.
Data terkait
AEAD dapat digunakan untuk mengikat 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.
Memilih jenis kunci
Meskipun kami merekomendasikan AES128_GCM untuk sebagian besar penggunaan, ada berbagai jenis kunci untuk kebutuhan yang berbeda (untuk keamanan 256-bit, ganti AES128 dengan AES256 di bawah). Secara umum:
- AES128_CTR_HMAC_SHA256 dengan Initialization Vector (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 ini pada teks biasa dan panjang data terkait (di bawah) terlampaui, AES128_GCM akan gagal dan membocorkan materi kunci.
- AES128_GCM_SIV hampir secepat AES128_GCM. Algoritma ini memiliki batas yang sama dengan AES128_GCM pada jumlah pesan dan ukuran pesan, tetapi jika batas ini dilampaui, algoritma ini akan gagal dengan cara yang tidak terlalu buruk: algoritma ini hanya dapat membocorkan fakta bahwa dua pesan sama. Hal ini membuatnya lebih aman digunakan daripada AES128_GCM, tetapi lebih jarang digunakan dalam praktiknya. Untuk menggunakannya di Java, Anda harus menginstal Conscrypt.
- XChaCha20Poly1305 memiliki batas jumlah pesan dan ukuran pesan yang jauh lebih besar daripada AES128_GCM, tetapi jika gagal (sangat tidak mungkin), algoritma ini juga akan 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 plaintext yang dipilih atau ciphertext yang dipilih yang memiliki probabilitas keberhasilan lebih besar dari 2-32.
Contoh kasus penggunaan
Lihat, saya ingin mengenkripsi data dan saya ingin mengikat ciphertext ke konteksnya.