Data tambahan yang diautentikasi

Data terautentikasi tambahan (AAD) adalah string 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 wakil 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 teks tersandi kecuali Anda mengenal AAD, tetapi teks tersebut tidak disimpan sebagai bagian dari teks tersandi. AAD juga tidak meningkatkan kekuatan kriptografis teks tersandi. 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 teks tersandi tersebut.

AAD tidak dicatat 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 memiliki batasan keamanan yang jelas. Misalnya, aplikasi tersebut dapat berupa aplikasi buku harian yang memungkinkan pengguna mengelola buku harian pribadi. Saat pengguna perlu melihat entri buku harian pribadi, aplikasi dapat menggunakan nama pengguna unik sebagai AAD dalam permintaan pembukaan (dekripsi) untuk mengautentikasi pengguna secara eksplisit. Dalam skenario ini, Anda dapat menggunakan satu kunci untuk melayani beberapa pengguna (tidak terbatas). Manfaat utamanya adalah Anda tidak perlu mempertahankan status untuk pengguna individu.

Contoh lainnya adalah jika aplikasi Anda perlu menggunakan token pemilik yang berisi beberapa informasi pribadi, seperti alamat email. Input ke token pemilik adalah data yang diautentikasi yang digunakan untuk token pemilik dan alamat email teks biasa. Input ini kemudian akan dienkripsi sehingga token pemilik yang dipertukarkan berupa Additional Encrypted Authenticated Data (AEAD).

Contoh serangan wakil kebingungan

Contoh ini menunjukkan bagaimana aplikasi dapat ditipu untuk mendekripsi teks cipher atas nama pengguna berbahaya. Aplikasi adalah wakil yang bingung dalam contoh ini karena aplikasi tidak menyadari bahwa penyerang telah menipu aplikasi untuk menyalahgunakan otoritasnya. Hasilnya adalah penyerang dapat melihat data yang didekripsi yang awalnya dienkripsi untuk pengguna lain. Catatan 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 buku harian dienkripsi dan dimaksudkan untuk didekripsi hanya oleh pengguna yang membuat entri buku harian.

  2. Alice membuat entri buku harian. Aplikasi mengenkripsi entri buku harian lalu menyimpan entri buku harian yang dienkripsi di lokasi yang disediakan untuk entri buku harian milik Alice.

  3. Alice mengirimkan permintaan untuk melihat entri buku hariannya. Karena entri buku harian yang terenkripsi berada di lokasi yang disediakan untuk Alice, aplikasi akan mendekripsi data dan menampilkannya sebagai respons atas permintaan Alice. Ini adalah perilaku aplikasi yang dimaksudkan.

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

  5. Mallory mengirim permintaan untuk melihat salinan entri buku harian Alice Melati. Karena salinan entri buku harian Alice berada di lokasi yang disediakan untuk Mallory, aplikasi mendekripsi entri buku harian dan menampilkan teks biasa sebagai respons atas permintaan Mallory. Kemudian Mallory dapat melihat entri buku harian Alice, yang bukan perilaku aplikasi yang dimaksudkan.

Untuk melindungi 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 Malory, 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 membongkar enkripsi ciphertext. Misalnya, baris database dapat berisi teks cipher dan AAD yang digunakan saat teks biasa dienkripsi. Saat permintaan dekripsi diterima, aplikasi dapat mengambil AAD dan ciphertext dari database. Selanjutnya, aplikasi dapat menggunakan AAD untuk proses dekripsi teks cipher.

Alasan untuk mereproduksi AAD adalah untuk memverifikasi data non-pribadi sekaligus menghindari penyimpanan AAD. Misalnya, jika Anda ingin memastikan bahwa jalur file dan nama file dari file terenkripsi tidak berubah, Anda dapat menyertakan jalur file dan nama file sebagai AAD saat mengenkripsi file. Kemudian, saat permintaan dekripsi dikirim untuk file tersebut, 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 di masa mendatang. Misalnya, tabel database dapat berisi kolom untuk ciphertext dan kolom untuk AAD yang digunakan saat ciphertext dibuat. Jika waktunya untuk 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. Ketika dibuat, entri buku harian akan dienkripsi lalu disimpan ke database, di kolom ENCRYPTED_DIARY_ENTRY. Agar setiap permintaan melihat entri buku harian, aplikasi mengautentikasi pengguna, lalu memberikan entri buku harian kepada pengguna.

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

Sekarang, misalkan alamat email pengguna digunakan sebagai AAD saat entri buku harian dienkripsi. Saat Alice membuat entri buku harian, aplikasi tersebut akan menyimpan alamat emailnya yang tidak terenkripsi di kolom EMAIL, secara berdampingan dengan data ENCRYPTED_DIARY_ENTRY. Mari kita anggap lagi bahwa Mallory dapat menyalin data ENCRYPTED_DIARY_ENTRY Alice ke data ENCRYPTED_DIARY_ENTRY Mallory. Saat Mallory mengirim permintaan dekripsi, aplikasi 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

Mereproduksi AAD berarti AAD tidak disimpan di mana pun, tetapi Anda dapat mereproduksi ketika waktunya untuk dekripsi.

Sebagai contoh, Anda dapat menggunakan jalur file dan nama file sebagai AAD. Selama proses enkripsi, anggaplah file yang dienkripsi 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 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.