Streaming Enkripsi yang Diautentikasi dengan Data Terkait (Streaming AEAD)

Primitive Streaming AEAD menyediakan enkripsi yang diautentikasi untuk data streaming. Model ini berguna jika data yang akan dienkripsi terlalu besar untuk diproses dalam satu langkah. Kasus penggunaan umum mencakup enkripsi file besar atau streaming data live.

Enkripsi dilakukan dalam segmen, yang terikat dengan lokasinya dalam ciphertext dan tidak dapat dihapus atau diurutkan ulang. Segmen dari satu teks tersandi tidak dapat dimasukkan ke dalam teks tersandi lainnya. Untuk mengubah ciphertext yang ada, seluruh aliran data harus dienkripsi ulang.1

Dekripsi cepat karena hanya sebagian ciphertext yang didekripsi dan diautentikasi dalam satu waktu. Teks biasa sebagian dapat diperoleh tanpa memproses seluruh ciphertext.

Implementasi AEAD streaming memenuhi definisi AEAD dan aman nOAE. Properti ini 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 dilakukan secara acak. Dua pesan dengan plaintext yang sama menghasilkan ciphertext yang berbeda. Penyerang tidak bisa tahu {i>ciphertext<i} mana yang sesuai dengan teks polos yang diberikan.

Data terkait

Streaming 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

Sebaiknya gunakan AES128_GCM_HKDF_1MB untuk sebagian besar penggunaan. Ketentuan Umum:

  • AES128_GCM_HKDF_1MB (atau AES256_GCM_HKDF_1MB) adalah opsi yang lebih cepat. File ini dapat mengenkripsi 264 file dengan masing-masing ukuran hingga 264 byte. Memori sebesar ~1 MB digunakan selama proses enkripsi dan dekripsi.
  • AES128_GCM_HKDF_4KB menggunakan memori ~4 KB dan merupakan pilihan yang baik jika sistem Anda tidak memiliki banyak memori.
  • AES128_CTR_HMAC_SHA256_1MB (atau AES256_CTR_HMAC_SHA256_1MB) adalah opsi yang lebih konservatif.

Jaminan keamanan

Penerapan AEAD streaming menawarkan:

  • Keamanan CCA2.
  • Kekuatan autentikasi minimal 80-bit.
  • Kemampuan untuk mengenkripsi minimal 264 pesan3 dengan total 251 byte2 . 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

Lihat Saya ingin mengenkripsi file besar atau streaming data.


  1. Alasan pembatasan ini adalah penggunaan penyandian AES-GCM. Mengenkripsi segmen teks biasa yang berbeda di lokasi yang sama akan setara dengan menggunakan kembali IV, yang melanggar jaminan keamanan AES-GCM. Alasan lainnya adalah tindakan ini mencegah serangan rollback, saat penyerang mungkin mencoba memulihkan versi file sebelumnya tanpa terdeteksi. 

  2. 2 segmen 32 didukung, dengan setiap segmen berisi segment_size - tag_size byte teks biasa. Untuk segmen 1 MB, total ukuran teks biasa adalah 232 * (220-16) ~= 251 byte. 

  3. Streaming AEAD menjadi tidak aman saat kombinasi kunci turunan (128-bit) dan awalan nonce (nilai acak 7 byte independen) diulang. Kita memiliki resistensi tabrakan 184-bit, yang kira-kira diterjemahkan menjadi 264 pesan jika kita ingin probabilitas keberhasilan kurang dari 2-32