Data terautentikasi tambahan

Data terautentikasi tambahan (AAD) adalah string apa pun yang Anda teruskan ke Cloud Key Management Service sebagai bagian dari permintaan enkripsi atau dekripsi. AAD digunakan sebagai pemeriksaan integritas dan dapat membantu melindungi data Anda dari serangan deputy yang bingung. String AAD tidak boleh lebih besar dari 64 KiB.

Cloud KMS tidak akan mendekripsi ciphertext kecuali jika nilai AAD yang sama digunakan untuk enkripsi dan dekripsi.

AAD terikat dengan data terenkripsi, karena Anda tidak dapat mendekripsi ciphertext kecuali jika Anda mengetahui AAD, tetapi AAD tidak disimpan sebagai bagian dari ciphertext. AAD juga tidak meningkatkan kekuatan kriptografis ciphertext. Sebaliknya, ini adalah pemeriksaan tambahan oleh Cloud KMS untuk mengautentikasi permintaan dekripsi.

Di Cloud KMS, AAD selalu ada saat Anda melakukan panggilan untuk mengenkripsi atau mendekripsi - jika Anda tidak memberikan nilai untuk AAD, string kosong akan digunakan. Jika string kosong digunakan sebagai AAD untuk enkripsi teks biasa, hanya string kosong yang akan mengizinkan dekripsi ciphertext.

AAD tidak dicatat ke dalam log oleh Cloud Audit Logs.

Kapan harus menggunakan AAD

Salah satu contoh penggunaan AAD adalah saat aplikasi Anda berfungsi sebagai proxy wrap/unwrap dengan satu kunci dan jumlah klien yang tidak terbatas, dengan setiap klien dalam batas keamanan yang berbeda. Misalnya, aplikasi dapat berupa aplikasi diary yang memungkinkan pengguna mengelola diary pribadi. Saat pengguna perlu melihat entri buku harian pribadi, aplikasi dapat menggunakan nama pengguna unik sebagai AAD dalam permintaan unwrap (dekripsi) untuk mengautentikasi pengguna secara eksplisit. Dalam skenario ini, Anda dapat menggunakan satu kunci untuk melayani beberapa pengguna (tanpa batas). Manfaat utama adalah Anda tidak perlu mempertahankan status untuk setiap pengguna.

Contoh lainnya adalah jika aplikasi Anda perlu menggunakan token pembawa yang berisi beberapa informasi pribadi, seperti alamat email. Input ke token pembawa akan berupa data yang diautentikasi yang digunakan untuk token pembawa ditambah alamat email teks biasa. Input ini kemudian akan dienkripsi sehingga token pembawa yang ditukarkan akan berbentuk Data Autentikasi Terenkripsi Tambahan (AEAD).

Contoh serangan deputy yang bingung

Contoh ini menunjukkan bagaimana aplikasi dapat ditipu untuk mendekripsi ciphertext atas nama pengguna berbahaya. Aplikasi adalah deputi yang bingung dalam contoh ini karena aplikasi tidak mengetahui bahwa penyerang telah mengelabui aplikasi untuk menyalahgunakan otorisasinya. Akibatnya, penyerang dapat melihat data yang didekripsi yang awalnya dienkripsi untuk pengguna lain. Perhatikan bahwa dalam serangan ini, penyerang tidak perlu mengetahui kunci enkripsi, karena bergantung pada deputi yang bingung untuk melakukan dekripsi.

  1. Aplikasi buku harian memungkinkan pengguna mengelola buku harian pribadi. Setiap entri diary dienkripsi dan dimaksudkan untuk didekripsi hanya oleh pengguna yang membuat entri diary.

  2. Alice membuat entri diari. Aplikasi mengenkripsi entri buku harian, lalu menyimpan entri buku harian terenkripsi di lokasi yang dicadangkan untuk entri buku harian milik Alice.

  3. Alice mengirimkan permintaan untuk melihat entri diarinya. Karena entri diary terenkripsi berada di lokasi yang dicadangkan untuk Alice, aplikasi mendekripsi data dan menampilkannya sebagai respons terhadap permintaan Alice. Ini adalah perilaku yang dimaksudkan aplikasi.

  4. Mallory menyalin entri buku harian Alice dari lokasi yang dicadangkan untuk Alice ke lokasi yang dicadangkan untuk Mallory.

  5. Mallory mengirim permintaan untuk melihat salinan entri buku harian Alice milik Mallory. Karena salinan entri buku harian Alice berada di lokasi yang dicadangkan untuk Mallory, aplikasi mendekripsi entri buku harian dan menampilkan teks biasa sebagai respons atas permintaan Mallory. Mallory kemudian dapat melihat entri buku harian Alice, yang bukan perilaku yang diinginkan aplikasi.

Untuk mempertahankan diri dari jenis serangan ini, aplikasi dapat menggunakan string yang tidak kosong sebagai AAD untuk enkripsi dan dekripsi. AAD memberikan pemeriksaan tambahan untuk permintaan dekripsi. Saat Mallory mengirim permintaan dekripsi untuk melihat salinan entri buku harian Alice milik Mallory, permintaan Mallory tidak akan berhasil kecuali Mallory juga dapat mengelabui aplikasi agar menggunakan AAD yang benar.

Menyimpan atau mereproduksi AAD

Sebelum mengenkripsi dengan AAD, tentukan apakah Anda akan menyimpan AAD secara berdampingan dengan data terenkripsi, atau mereproduksi AAD, untuk dekripsi berikutnya.

Alasan untuk menyimpan AAD adalah untuk memudahkan penggunaan AAD saat Anda perlu mendekode ciphertext. Misalnya, baris database dapat berisi ciphertext dan AAD yang digunakan saat teks biasa dienkripsi. Saat permintaan dekripsi diterima, aplikasi dapat mengambil AAD dan ciphertext dari database. Aplikasi kemudian dapat menggunakan AAD untuk proses dekripsi ciphertext.

Alasan untuk mereproduksi AAD adalah untuk memverifikasi data non-pribadi sekaligus menghindari penyimpanan AAD. Misalnya, jika ingin memastikan bahwa jalur file dan nama file terenkripsi belum berubah, Anda dapat menyertakan jalur file dan nama file sebagai AAD saat mengenkripsi file. Kemudian, saat permintaan dekripsi dikirim untuk file, Anda dapat mereproduksi AAD dengan memeriksa jalur file dan nama file.

Menyimpan AAD

Menyimpan AAD berarti AAD disimpan, lalu tersedia oleh aplikasi Anda untuk digunakan pada masa mendatang. Misalnya, tabel database dapat berisi kolom untuk ciphertext dan kolom untuk AAD yang digunakan saat ciphertext dibuat. Saat saatnya mendekripsi ciphertext, aplikasi akan mengambil AAD dan menggunakannya untuk dekripsi.

Pertimbangkan aplikasi buku harian yang dirancang untuk menampilkan entri buku harian hanya kepada pengguna yang membuatnya. Saat dibuat, entri buku harian dienkripsi, lalu disimpan ke database, di kolom ENCRYPTED_DIARY_ENTRY. Untuk setiap permintaan guna melihat entri buku harian, aplikasi akan mengautentikasi pengguna, lalu memberikan entri buku harian kepada pengguna.

Misalkan tidak ada AAD yang digunakan (selain string kosong default) dan secara hipotetis Mallory dapat menyalin data ENCRYPTED_DIARY_ENTRY Alice ke data ENCRYPTED_DIARY_ENTRY Mallory. Saat Mallory mengirim permintaan dekripsi untuk data ENCRYPTED_DIARY_ENTRY Mallory (yang disalin dari data Alice), aplikasi akan melakukan dekripsi tanpa menyadari bahwa aplikasi telah ditipu. Mallory dapat melihat entri buku harian Alice sebagai teks biasa.

Sekarang, anggaplah alamat email pengguna digunakan sebagai AAD saat entri diary dienkripsi. Saat Alice membuat entri buku harian, aplikasi akan menyimpan alamat emailnya yang tidak dienkripsi di kolom EMAIL, berdampingan dengan data ENCRYPTED_DIARY_ENTRY. Mari kita asumsikan lagi bahwa Mallory dapat menyalin data ENCRYPTED_DIARY_ENTRY Alice ke data ENCRYPTED_DIARY_ENTRY Mallory. Saat Mallory mengirim permintaan dekripsi, aplikasi akan mengambil alamat email Mallory dari kolom EMAIL untuk digunakan sebagai AAD untuk permintaan dekripsi. Alamat email Mallory tidak akan berhasil sebagai AAD untuk dekripsi, sehingga aplikasi tidak mengizinkan Mallory melihat entri buku harian Alice sebagai teks biasa.

Mereproduksi AAD

Membuat ulang AAD berarti AAD tidak disimpan di mana pun, tetapi Anda dapat membuatnya ulang saat waktunya mendekripsi.

Misalnya, Anda dapat menggunakan jalur file dan nama file sebagai AAD. Selama proses enkripsi, misalkan file terenkripsi disimpan ke MY_PATH\MY_FILE1.enc, sehingga "MY_PATH\MY_FILE1.enc" digunakan sebagai AAD. AAD ini tidak disimpan. Saat permintaan dekripsi diterima, aplikasi akan mereproduksi AAD dengan memeriksa jalur file dan nama file yang akan didekripsi. Jika file terenkripsi belum dipindahkan ke lokasi lain, "MY_PATH\MY_FILE1.enc" akan digunakan sebagai AAD selama dekripsi, yang sama dengan AAD yang digunakan selama enkripsi, sehingga dekripsi dapat dilanjutkan.

Jika file terenkripsi telah dipindahkan, misalnya ke SOME_OTHER_PATH\MY_FILE1.enc, "SOME_OTHER_PATH\MY_FILE1.enc" akan digunakan sebagai AAD untuk dekripsi. Nilai AAD ini tidak cocok dengan nilai AAD yang digunakan untuk enkripsi, sehingga dekripsi akan gagal.