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 biasa 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 kebutuhan yang berbeda. AES128 menawarkan keamanan 128-bit, dan AES256 menawarkan keamanan 256-bit.
Dua batasan keamanan penting saat memilih mode adalah:
- QPS: Berapa banyak pesan yang dienkripsi dengan kunci yang sama?
- Ukuran pesan: Seberapa besar ukuran pesan?
Umumnya:
- AES-CTR-HMAC (AES128_CTR_HMAC_SHA256, AES256_CTR_HMAC_SHA256) dengan Vektor Inisialisasi (IV) 16 byte adalah mode paling konservatif dengan batas yang baik.
- AES-EAX (AES128_EAX, AES256_EAX) sedikit kurang konservatif dan sedikit lebih cepat daripada AES128_CTR_HMAC_SHA256.
- AES-GCM (AES128_GCM, AES256_GCM) biasanya merupakan mode tercepat dengan batas paling ketat pada jumlah pesan dan ukuran pesan. Jika batas panjang data plaintext dan data terkait (di bawah) terlampaui, AES-GCM akan gagal secara fatal dan membocorkan materi kunci.
- AES-GCM-SIV (AES128_GCM_SIV, AES256_GCM_SIV) hampir secepat AES-GCM. Algoritma ini memiliki batas yang sama dengan AES-GCM pada jumlah pesan dan ukuran pesan, tetapi jika batas ini terlampaui, algoritma ini akan gagal dengan cara yang tidak terlalu fatal: algoritma ini hanya dapat membocorkan fakta bahwa dua pesan sama. Hal ini membuatnya lebih aman digunakan daripada AES-GCM, tetapi kurang banyak digunakan dalam praktiknya. Untuk menggunakan ini di Java, Anda harus menginstal Conscrypt.
- XChaCha20-Poly1305 (XCHACHA20_POLY1305) memiliki batas yang jauh lebih besar pada jumlah pesan dan ukuran pesan daripada AES-GCM, tetapi jika gagal (sangat tidak mungkin), XChaCha20-Poly1305 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 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.