Enkripsi Terautentikasi dengan Data Terkait (SSBD)

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: Tidak mungkin mengubah teks biasa terenkripsi yang mendasari ciphertext tanpa terdeteksi.
  • Simetris: Mengenkripsi teks biasa dan mendekripsi ciphertext dilakukan dengan kunci yang sama.
  • Pengacakan: Enkripsi diacak. Dua pesan dengan teks polos yang sama akan menghasilkan teks tersandi yang berbeda. Penyerang tidak dapat mengetahui ciphertext mana yang sesuai dengan plaintext tertentu. Jika Anda ingin menghindari hal ini, gunakan AEAD Deterministik.

Data terkait

AEAD dapat digunakan untuk mengaitkan 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.

Data terkait bersifat opsional. Jika ditentukan, dekripsi hanya akan 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:

  1. QPS: Berapa banyak pesan yang dienkripsi dengan kunci yang sama?
  2. Ukuran pesan: Seberapa besar pesannya?

Jenis kunci yang didukung:

  • 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.
    • Key-committing.
  • AES-EAX (AES128_EAX, AES256_EAX) sedikit kurang konservatif dan sedikit lebih cepat daripada AES128_CTR_HMAC_SHA256.
    • Tidak melakukan commit kunci MLGR.
  • AES-GCM (AES128_GCM, AES256_GCM) biasanya merupakan mode tercepat dengan batasan paling ketat pada jumlah pesan (232) dan ukuran pesan (~64 GB per pesan). Jika batas ini terlampaui, AES-GCM akan gagal total dengan membocorkan teks biasa dan bagian autentikasi kunci internal AES-GCM.
    • AES-GCM tidak kuat [ABN] maupun key-committing [GLR]. Ciphertext yang dapat didekripsi dengan dua kunci yang berbeda dapat dibuat. Hal ini dapat menyebabkan serangan praktis [DGRW]. Tinjau model ancaman Anda dengan cermat jika kunci dipilih oleh musuh.
  • AES-GCM-SIV (AES128_GCM_SIV, AES256_GCM_SIV) [RFC8452] tahan terhadap penyalahgunaan nonce yang tidak disengaja dan performanya hampir sama dengan AES-GCM. Batas jumlah pesan dan ukuran pesan untuk AES-GCM-SIV dengan IV acak jauh lebih tinggi daripada batas AES-GCM. Jika batas ini terlampaui, AES-GCM-SIV tidak akan gagal secara fatal: AES-GCM-SIV hanya akan membocorkan bahwa dua pesan sama. AES-GCM-SIV lebih aman digunakan, tetapi jarang digunakan dalam praktik.
    • Batas untuk nonce acak:
      • 232 pesan, dengan setiap teks biasa berukuran maksimal 8 GiB
      • 248 pesan, dengan setiap teks biasa berukuran maksimal 32 MiB
      • 264 pesan, dengan setiap teks biasa berukuran maksimal 128 KiB
    • Untuk menggunakannya di Java, instal Conscrypt.
    • ADGKLS yang tidak mengikat kunci.
  • 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 membocorkan materi kunci. Mode ini tidak menggunakan akselerasi hardware, sehingga dapat lebih lambat daripada mode AES dalam situasi saat akselerasi hardware tersedia.
    • LGR tanpa key-committing.

Pelajari lebih lanjut format kabel ciphertext AEAD.

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 teks biasa yang dipilih atau ciphertext yang dipilih memiliki probabilitas keberhasilan lebih besar dari 2-32.

Contoh kasus penggunaan

Lihat Saya ingin mengenkripsi data dan mengikat teks tersandi ke konteksnya.