Primitif Enkripsi yang Diautentikasi dengan Data Terkait (AEAD) adalah primitif yang paling umum untuk enkripsi data dan cocok untuk sebagian besar kebutuhan.
AEAD memiliki properti berikut:
- Kerahasiaan: 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 diacak. Dua pesan dengan teks polos yang sama menghasilkan teks tersandi yang berbeda. Penyerang tidak dapat mengetahui teks {i>cipher<i} mana yang sesuai dengan teks polos. Jika Anda ingin menghindarinya, gunakan Deterministic AEAD.
Data terkait
AEAD dapat digunakan untuk mengikat ciphertext ke data
terkait tertentu. Misalkan 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.
Pilih 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). Umumnya:
- 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 terkait jumlah pesan dan ukuran pesan. Jika batas teks biasa dan panjang data terkait (di bawah) ini terlampaui, AES128_GCM akan gagal dan akan membocorkan materi kunci.
- AES128_GCM_SIV hampir sama cepatnya dengan AES128_GCM, dengan batas yang sangat baik untuk pesan dalam jumlah besar, tetapi kurang mapan. Untuk menggunakannya di Java, Anda harus menginstal Conscrypt.
- XChaCha20Poly1305 memiliki batas jumlah pesan dan ukuran pesan yang jauh lebih besar daripada AES128_GCM. Namun, ketika gagal (sangat tidak mungkin), ia juga akan membocorkan materi kunci. Akselerasi tidak mengaktifkan akselerasi hardware, sehingga dapat lebih lambat daripada mode AES dalam situasi yang menyediakan akselerasi hardware.
Jaminan keamanan
Implementasi AEAD menawarkan:
- Keamanan CCA2.
- Kekuatan autentikasi minimal 80 bit.
- Kemampuan untuk mengenkripsi setidaknya 232 pesan dengan total 250 byte. Tidak ada serangan dengan maksimal 232 teks biasa yang dipilih atau ciphertext yang dipilih memiliki probabilitas keberhasilan lebih besar dari 2-32.
Contoh kasus penggunaan
Saya ingin mengenkripsi data dan saya ingin mengikat ciphertext ke konteksnya.