View a markdown version of this page

Detail caching kunci data - AWS Encryption SDK

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Detail caching kunci data

Sebagian besar aplikasi dapat menggunakan implementasi default caching kunci data tanpa menulis kode khusus. Bagian ini menjelaskan implementasi default dan beberapa detail tentang opsi.

Cara kerja caching kunci data

Saat Anda menggunakan cache kunci data dalam permintaan untuk mengenkripsi atau mendekripsi data, yang AWS Encryption SDK pertama mencari cache untuk kunci data yang cocok dengan permintaan. Jika menemukan kecocokan yang valid, ia menggunakan kunci data yang di-cache untuk mengenkripsi data. Jika tidak, ia menghasilkan kunci data baru, sama seperti tanpa cache.

Caching kunci data tidak digunakan untuk data dengan ukuran yang tidak diketahui, seperti data yang dialirkan. Hal ini memungkinkan CMM caching untuk menerapkan ambang batas byte maksimum dengan benar. Untuk menghindari perilaku ini, tambahkan ukuran pesan ke permintaan enkripsi.

Selain cache, caching kunci data menggunakan manajer materi kriptografi caching (caching CMM). Caching CMM adalah manajer materi kriptografi khusus (CMM) yang berinteraksi dengan cache dan CMM yang mendasarinya. Manajer materi kriptografi (Saat Anda menentukan penyedia kunci utama atau keyring, CMM AWS Encryption SDK default akan dibuat untuk Anda.) CMM caching menyimpan kunci data yang dikembalikan CMM yang mendasarinya. CMM caching juga memberlakukan ambang keamanan cache yang Anda tetapkan.

Untuk mencegah kunci data yang salah dipilih dari cache, semua CMM caching yang kompatibel mengharuskan properti berikut dari materi kriptografi yang di-cache sesuai dengan permintaan materi.

catatan

AWS Encryption SDK Cache kunci data hanya ketika rangkaian algoritma menggunakan fungsi derivasi kunci.

Alur kerja berikut menunjukkan bagaimana permintaan untuk mengenkripsi data diproses dengan dan tanpa caching kunci data. Mereka menunjukkan bagaimana komponen caching yang Anda buat, termasuk cache dan caching CMM, digunakan dalam proses.

Enkripsi data tanpa cache

Untuk mendapatkan materi enkripsi tanpa caching:

  1. Aplikasi meminta AWS Encryption SDK untuk mengenkripsi data.

    Permintaan menentukan penyedia kunci utama atau keyring. Membuat AWS Encryption SDK CMM default yang berinteraksi dengan penyedia kunci utama atau keyring Anda.

  2. Mem AWS Encryption SDK inta CMM untuk materi enkripsi (dapatkan materi kriptografi).

  3. CMM meminta keyring (C dan JavaScript) atau penyedia kunci master (Java dan Python) untuk materi kriptografi. Ini mungkin melibatkan panggilan ke layanan kriptografi, seperti AWS Key Management Service (AWS KMS). CMM mengembalikan materi enkripsi ke AWS Encryption SDK.

  4. Menggunakan AWS Encryption SDK kunci data plaintext untuk mengenkripsi data. Ini menyimpan data terenkripsi dan kunci data teren kripsi dalam pesan terenkripsi, yang dikembalikan ke pengguna.

Enkripsi data tanpa cache

Enkripsi data dengan caching

Untuk mendapatkan materi enkripsi dengan caching kunci data:

  1. Aplikasi meminta AWS Encryption SDK untuk mengenkripsi data.

    Permintaan menentukan manajer materi kripto grafi caching (caching CMM) yang terkait dengan manajer materi kriptografi (CMM) yang mendasarinya. Saat Anda menentukan penyedia kunci utama atau keyring, maka akan membuat AWS Encryption SDK CMM default untuk Anda.

  2. SDK meminta CMM caching yang ditentukan untuk materi enkripsi.

  3. CMM caching meminta materi enkripsi dari cache.

    1. Jika cache menemukan kecocokan, cache memperbarui usia dan nilai penggunaan dari entri cache yang cocok, dan mengembalikan materi enkripsi yang di-cache ke CMM caching.

      Jika entri cache sesuai dengan ambang ke amanannya, CMM caching mengembalikannya ke SDK. Jika tidak, itu memberi tahu cache untuk mengusir entri dan melanjutkan seolah-olah tidak ada kecocokan.

    2. Jika cache tidak dapat menemukan kecocokan yang valid, CMM caching meminta CMM yang mendasarinya untuk menghasilkan kunci data baru.

      CMM yang mendasarinya mendapatkan materi kriptografi dari keyring (C dan JavaScript) atau penyedia kunci master (Java dan Python). Ini mungkin melibatkan panggilan ke layanan, seperti AWS Key Management Service. CMM yang mendasarinya mengembalikan plaintext dan salinan terenkripsi dari kunci data ke CMM caching.

      CMM caching menyimpan materi enkripsi baru dalam cache.

  4. CMM caching mengembalikan materi enkripsi ke. AWS Encryption SDK

  5. Menggunakan AWS Encryption SDK kunci data plaintext untuk mengenkripsi data. Ini menyimpan data terenkripsi dan kunci data teren kripsi dalam pesan terenkripsi, yang dikembalikan ke pengguna.

Enkripsi data dengan caching kunci data

Membuat cache materi kriptografi

Men AWS Encryption SDK definisikan persyaratan untuk cache materi kriptografi yang digunakan dalam caching kunci data. Ini juga menyediakan cache lokal, yang merupakan cache yang dapat dikonfigurasi, dalam memori, yang paling tidak digunakan (LRU). Untuk membuat instance cache lokal, gunakan LocalCryptoMaterialsCache konstruktor di Java dan Python, LocalCryptographicMaterialsCache fungsi get in JavaScript, atau aws_cryptosdk_materials_cache_local_new konstruktor di C.

Cache lokal mencakup logika untuk manajemen cache dasar, termasuk menambahkan, mengusir, dan mencocokkan entri cache, dan memelihara cache. Anda tidak perlu menulis logika manajemen cache khusus. Anda dapat menggunakan cache lokal apa adanya, menyesuaikannya, atau mengganti cache yang kompatibel.

Saat Anda membuat cache lokal, Anda mengatur kapasitasnya, yaitu jumlah maksimum entri yang dapat ditampung cache. Pengaturan ini membantu Anda merancang cache yang efisien dengan penggunaan kembali kunci data terbatas.

Dan AWS Encryption SDK for Java AWS Encryption SDK for Python juga menyediakan cache materi kriptografi nol (NullCryptoMaterialsCache). Meng NullCryptoMaterialsCache embalikan kesalahan untuk semua GET operasi dan tidak menanggapi PUT operasi. Anda dapat menggunakan pengujian NullCryptoMaterialsCache dalam atau untuk menonaktifkan sementara caching dalam aplikasi yang menyertakan kode caching.

Di dalamnya AWS Encryption SDK, setiap cache materi kriptografi dikaitkan dengan manajer materi kripto grafi caching (caching CMM). CMM caching mendapatkan kunci data dari cache, menempatkan kunci data di cache, dan memberlakukan ambang keamanan yang Anda tetapkan. Saat Anda membuat CMM caching, Anda menentukan cache yang digunakan dan penyedia kunci utama atau CMM yang mendasarinya yang menghasilkan kunci data yang di-cache.

Membuat manajer materi kriptografi caching

Untuk mengaktifkan caching kunci data, Anda membuat cache dan manajer materi kriptografi caching (caching CMM). Kemudian, dalam permintaan Anda untuk mengenkripsi atau mendekripsi data, Anda menentukan CMM caching, bukan manajer bahan kriptografi standar (CMM), atau penyedia kunci utama atau key ring. Gantungan kunci dan penyedia kunci utama

Ada dua jenis CMM. Keduanya mendapatkan kunci data (dan materi kriptografi terkait), tetapi dengan cara yang berbeda, sebagai berikut:

  • CMM dikaitkan dengan keyring (C atau JavaScript) atau penyedia kunci master (Java dan Python). Ketika SDK meminta materi enkripsi atau dekripsi kepada CMM, CMM mendapatkan materi dari keyring atau penyedia kunci masternya. Di Java dan Python, CMM menggunakan kunci master untuk menghasilkan, mengenkripsi, atau mendekripsi kunci data. Di C dan JavaScript, keyring menghasilkan, mengenkripsi, dan mengembalikan materi kriptografi.

  • CMM caching dikaitkan dengan satu cache, seperti cache lokal, dan CMM yang mendasarinya. Ketika SDK meminta CMM caching untuk materi kriptografi, CMM caching mencoba mendapatkannya dari cache. Jika tidak dapat menemukan kecocokan, CMM caching meminta CMM yang mendasarinya untuk materi. Kemudian, ia menyimpan materi kriptografi baru sebelum mengembalikannya ke penelepon.

CMM caching juga memberlakukan ambang keamanan yang Anda tetapkan untuk setiap entri cache. Karena ambang keamanan diatur dan ditegakkan oleh CMM caching, Anda dapat menggunakan cache yang kompatibel, bahkan jika cache tidak dirancang untuk materi sensitif.

Apa yang ada dalam entri cache kunci data?

Caching kunci data menyimpan kunci data dan materi kriptografi terkait dalam cache. Setiap entri mencakup elemen-elemen yang tercantum di bawah ini. Ada cache terpisah untuk enkripsi dan dekripsi, jadi mengenkripsi pesan tidak menghangatkan entri cache untuk dekripsi. Anda mungkin menemukan informasi ini berguna ketika Anda memutuskan apakah akan menggunakan fitur caching kunci data, dan ketika Anda menetapkan ambang batas keamanan pada pengelola materi kriptografi caching (caching CMM).

Entri Cache untuk Permintaan Enkripsi

Entri yang ditambahkan ke cache kunci data sebagai hasil dari operasi enkripsi mencakup elemen-elemen berikut:

  • Kunci data teks biasa

  • Kunci data terenkripsi (satu atau lebih)

  • Konteks enkripsi

  • Kunci penandatanganan pesan (jika digunakan)

  • Suite algoritma

  • Metadata, termasuk penghitung penggunaan untuk menegakkan ambang keamanan

Entri Cache untuk Permintaan Dekripsi

Entri yang ditambahkan ke cache kunci data sebagai hasil dari operasi dekripsi mencakup elemen-elemen berikut:

  • Kunci data teks biasa

  • Kunci verifikasi tanda tangan (jika digunakan)

  • Metadata, termasuk penghitung penggunaan untuk menegakkan ambang keamanan

Konteks enkripsi: Cara memilih entri cache

Anda dapat menentukan konteks enkripsi dalam permintaan apa pun untuk mengenkripsi data. Namun, konteks enkripsi memainkan peran khusus dalam caching kunci data. Ini memungkinkan Anda membuat subkelompok kunci data di cache Anda, bahkan ketika kunci data berasal dari CMM caching yang sama.

Konteks enkripsi adalah seperangkat pasangan nilai kunci yang berisi data non-rahasia yang berubah-ubah. Selama enkripsi, konteks enkripsi terikat secara kriptografis ke data terenkripsi sehingga konteks enkripsi yang sama diperlukan untuk mendekripsi data. Dalam konteks AWS Encryption SDK enkripsi disimpan dalam pesan terenkripsi dengan data terenkripsi dan kunci data.

Saat Anda menggunakan cache kunci data, Anda juga dapat menggunakan konteks enkripsi untuk memilih kunci data cache tertentu untuk operasi enkripsi Anda. Konteks enkripsi disimpan dalam entri cache dengan kunci data (itu bagian dari ID entri cache). Kunci data yang di-cache digunakan kembali hanya jika konteks enkripsinya cocok. Jika Anda ingin menggunakan kembali kunci data tertentu untuk permintaan enkripsi, tentukan konteks enkripsi yang sama. Jika Anda ingin menghindari kunci data tersebut, tentukan konteks enkripsi yang berbeda.

Konteks enkripsi selalu opsional, tetapi disarankan. Jika Anda tidak menentukan konteks enkripsi dalam permintaan Anda, konteks enkripsi kosong disertakan dalam pengenal entri cache dan dicocokkan dengan setiap permintaan.

Apakah aplikasi saya menggunakan kunci data yang di-cache?

Caching kunci data adalah strategi pengoptimalan yang sangat efektif untuk aplikasi dan beban kerja tertentu. Namun, karena mengandung beberapa risiko, penting untuk menentukan seberapa efektif kemungkinan untuk situasi Anda, dan kemudian memutuskan apakah manfaatnya lebih besar daripada risikonya.

Karena caching kunci data menggunakan kembali kunci data, efek yang paling jelas adalah mengurangi jumlah panggilan untuk menghasilkan kunci data baru. Ketika caching kunci data diimplementasikan, AWS KMS GenerateDataKey operasi AWS Encryption SDK memanggil hanya untuk membuat kunci data awal dan ketika cache hilang. Namun, caching meningkatkan kinerja secara nyata hanya dalam aplikasi yang menghasilkan banyak kunci data dengan karakteristik yang sama, termasuk konteks enkripsi dan rangkaian algoritma yang sama.

Untuk menentukan apakah implementasi Anda AWS Encryption SDK benar-benar menggunakan kunci data dari cache, coba teknik berikut.

  • Di log infrastruktur kunci utama Anda, periksa frekuensi panggilan untuk membuat kunci data baru. Ketika caching kunci data efektif, jumlah panggilan untuk membuat kunci baru akan turun secara nyata. Misalnya, jika Anda menggunakan penyedia kunci AWS KMS utama atau keyring, cari CloudTrail log untuk GenerateDataKey panggilan.

  • Bandingkan pesan terenkripsi yang dikem AWS Encryption SDK balikan sebagai respons terhadap permintaan enkripsi yang berbeda. Misalnya, jika Anda menggunakan AWS Encryption SDK for Java, bandingkan ParsedCiphertext objek dari panggilan enkripsi yang berbeda. Di AWS Encryption SDK for JavaScript dalamnya, bandingkan isi encryptedDataKeys properti MessageHeader. Ketika kunci data digunakan kembali, kunci data terenkripsi dalam pesan terenkripsi identik.