Streaming Enkripsi yang Diautentikasi dengan Data Terkait (Streaming AEAD)

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

Enkripsi dilakukan dalam segmen, yang terikat ke lokasinya dalam sebuah teks cipher dan tidak dapat dihapus atau disusun 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 berjalan cepat karena hanya sebagian ciphertext yang didekripsi dan diautentikasi pada satu waktu. Teks biasa parsial dapat diperoleh tanpa memproses seluruh teks tersandi.

Implementasi AEAD streaming memenuhi definisi AEAD dan aman OAE2. Class tersebut 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.

Data terkait

Streaming 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

Untuk sebagian besar penggunaan, sebaiknya gunakan AES128_GCM_HKDF_1MB. Umumnya:

  • AES128_GCM_HKDF_1MB (atau AES256_GCM_HKDF_1MB) adalah opsi yang lebih cepat. Cloud SQL dapat mengenkripsi 264 file dengan masing-masing hingga 264 byte. ~1 MB memori 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

Streaming implementasi AEAD menawarkan:

  • Keamanan CCA2.
  • Kekuatan autentikasi minimal 80 bit.
  • Kemampuan untuk mengenkripsi setidaknya 264 pesan3 dengan total 251 byte2 . Tidak ada serangan dengan maksimal 232 teks biasa yang dipilih atau ciphertext terpilih yang memiliki probabilitas keberhasilan lebih besar dari 2-32.

Contoh kasus penggunaan

Lihat Saya ingin mengenkripsi file besar atau aliran data.


  1. Alasan pembatasan ini adalah penggunaan penyandian AES-GCM. Mengenkripsi segmen teks biasa yang berbeda di lokasi yang sama akan sama dengan menggunakan kembali IV, yang melanggar jaminan keamanan AES-GCM. Alasan lain adalah mencegah serangan roll-back, di mana penyerang dapat mencoba memulihkan versi file sebelumnya tanpa terdeteksi. 

  2. 232 segmen 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 jika kombinasi kunci turunan (128-bit) dan awalan nonce (nilai 7 byte acak independen) diulang. Kita memiliki ketahanan terhadap tabrakan 184-bit, yang kira-kira berarti 264 pesan jika kita ingin probabilitas keberhasilan kurang dari 2-32