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 kustom. Bagian ini menjelaskan implementasi default dan beberapa detail tentang opsi.
Topik
Cara kerja caching kunci data
Saat Anda menggunakan caching kunci data dalam permintaan untuk mengenkripsi atau mendekripsi data, yang AWS Encryption SDK pertama akan mencari cache untuk kunci data yang cocok dengan permintaan. Jika menemukan kecocokan yang valid, ia menggunakan kunci data cache untuk mengenkripsi data. Jika tidak, itu menghasilkan kunci data baru, seperti halnya 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 pengelola bahan kriptografi caching (caching CMM). CMM caching adalah manajer bahan kriptografi khusus (CMM) yang berinteraksi dengan cache dan CMM yang mendasarinya. (Saat Anda menentukan penyedia kunci master atau keyring, CMM AWS Encryption SDK default akan dibuat untuk Anda.) CMM caching menyimpan kunci data yang dikembalikan oleh CMM yang mendasarinya. CMM caching juga memberlakukan ambang keamanan cache yang Anda tetapkan.
Untuk mencegah kunci data yang salah dipilih dari cache, semua caching yang kompatibel CMMs mengharuskan properti berikut dari bahan kriptografi yang di-cache cocok dengan permintaan bahan.
-
Konteks enkripsi (bahkan saat kosong)
-
Nama partisi (string yang mengidentifikasi CMM caching)
-
(Hanya dekripsi) Kunci data terenkripsi
catatan
Kunci data AWS Encryption SDK cache 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 CMM caching, digunakan dalam proses.
Enkripsi data tanpa caching
Untuk mendapatkan materi enkripsi tanpa caching:
-
Aplikasi meminta AWS Encryption SDK untuk mengenkripsi data.
Permintaan menentukan penyedia kunci master atau keyring. AWS Encryption SDK Membuat CMM default yang berinteraksi dengan penyedia kunci master atau keyring Anda.
-
Mereka AWS Encryption SDK meminta CMM untuk bahan enkripsi (dapatkan bahan kriptografi).
-
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 file. AWS Encryption SDK
-
AWS Encryption SDK Menggunakan kunci data plaintext untuk mengenkripsi data. Ini menyimpan data terenkripsi dan kunci data terenkripsi dalam pesan terenkripsi, yang dikembalikan ke pengguna.

Enkripsi data dengan caching
Untuk mendapatkan materi enkripsi dengan caching kunci data:
-
Aplikasi meminta AWS Encryption SDK untuk mengenkripsi data.
Permintaan tersebut menentukan manajer bahan kriptografi caching (caching CMM) yang terkait dengan manajer bahan kriptografi yang mendasarinya (CMM). Saat Anda menentukan penyedia kunci master atau keyring, CMM AWS Encryption SDK default akan dibuat untuk Anda.
-
SDK meminta CMM caching yang ditentukan untuk materi enkripsi.
-
CMM caching meminta materi enkripsi dari cache.
-
Jika cache menemukan kecocokan, cache akan memperbarui usia dan menggunakan nilai entri cache yang cocok, dan mengembalikan materi enkripsi yang di-cache ke CMM caching.
Jika entri cache sesuai dengan ambang keamanannya, CMM caching mengembalikannya ke SDK. Jika tidak, ia memberitahu cache untuk mengusir entri dan melanjutkan seolah-olah tidak ada kecocokan.
-
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 mendasari mengembalikan plaintext dan salinan terenkripsi dari kunci data ke CMM caching.
CMM caching menyimpan materi enkripsi baru dalam cache.
-
-
CMM caching mengembalikan materi enkripsi ke file. AWS Encryption SDK
-
AWS Encryption SDK Menggunakan kunci data plaintext untuk mengenkripsi data. Ini menyimpan data terenkripsi dan kunci data terenkripsi dalam pesan terenkripsi, yang dikembalikan ke pengguna.

Membuat cache bahan kriptografi
AWS Encryption SDK Mendefinisikan persyaratan untuk cache bahan kriptografi yang digunakan dalam caching kunci data. Ini juga menyediakan cache lokal, yang merupakan cache yang dapat dikonfigurasi, dalam memori, yang paling jarang digunakan (LRULocalCryptoMaterialsCache
konstruktor di Java dan Python, fungsi JavaScript di, getLocalCryptographic MaterialsCache 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 apa pun. Anda dapat menggunakan cache lokal apa adanya, menyesuaikannya, atau mengganti cache yang kompatibel.
Saat Anda membuat cache lokal, Anda mengatur kapasitasnya, yaitu jumlah entri maksimum yang dapat disimpan cache. Pengaturan ini membantu Anda merancang cache yang efisien dengan penggunaan kembali kunci data terbatas.
The AWS Encryption SDK for Java and the AWS Encryption SDK for Python juga menyediakan cache materi kriptografi null ()NullCryptoMaterialsCache. NullCryptoMaterialsCache Pengembalian kehilangan untuk semua GET
operasi dan tidak menanggapi PUT
operasi. Anda dapat menggunakan NullCryptoMaterialsCache dalam pengujian atau untuk menonaktifkan sementara caching dalam aplikasi yang menyertakan kode caching.
Dalam AWS Encryption SDK, setiap cache materi kriptografi dikaitkan dengan manajer bahan kriptografi caching (caching CMM). CMM caching mendapatkan kunci data dari cache, menempatkan kunci data dalam cache, dan memberlakukan ambang keamanan yang Anda tetapkan. Saat Anda membuat CMM caching, Anda menentukan cache yang digunakannya dan CMM atau penyedia kunci master yang mendasarinya yang menghasilkan kunci data yang di-cache.
Membuat manajer materi kriptografi caching
Untuk mengaktifkan caching kunci data, Anda membuat cache dan pengelola 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 master atau keyring.
Ada dua jenis CMMs. 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 CMM untuk bahan enkripsi atau dekripsi, CMM mendapatkan materi dari keyring atau penyedia kunci masternya. Di Java dan Python, CMM menggunakan kunci master untuk menghasilkan, mengenkripsi, atau mendekripsi kunci data. Dalam 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 untuk mendapatkannya dari cache. Jika tidak dapat menemukan kecocokan, CMM caching menanyakan 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 diberlakukan 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. Anda mungkin menemukan informasi ini berguna ketika Anda memutuskan apakah akan menggunakan fitur caching kunci data, dan ketika Anda menetapkan ambang keamanan pada manajer bahan 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)
-
Kunci penandatanganan pesan (jika digunakan)
-
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 AWS Encryption SDK, konteks enkripsi disimpan dalam pesan terenkripsi dengan data terenkripsi dan kunci data.
Bila 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 (ini adalah bagian dari ID entri cache). Kunci data yang di-cache hanya digunakan kembali jika konteks enkripsi mereka 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 cache?
Data key caching adalah strategi optimasi 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 Encryption SDK panggilan AWS KMS GenerateDataKey
operasi hanya untuk membuat kunci data awal dan ketika cache meleset. 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 master Anda, periksa frekuensi panggilan untuk membuat kunci data baru. Ketika caching kunci data efektif, jumlah panggilan untuk membuat kunci baru akan turun dengan jelas. Misalnya, jika Anda menggunakan penyedia kunci AWS KMS master atau keyring, cari CloudTrail log untuk GenerateDataKeypanggilan.
-
Bandingkan pesan terenkripsi yang AWS Encryption SDK dikembalikan sebagai respons terhadap permintaan enkripsi yang berbeda. Misalnya, jika Anda menggunakan AWS Encryption SDK for Java, bandingkan ParsedCiphertext
objek dari panggilan enkripsi yang berbeda. Dalam AWS Encryption SDK for JavaScript, bandingkan isi encryptedDataKeys
properti MessageHeader. Ketika kunci data digunakan kembali, kunci data terenkripsi dalam pesan terenkripsi identik.