View a markdown version of this page

Praktik terbaik untuk AWS Encryption SDK - AWS Encryption SDK

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

Praktik terbaik untuk AWS Encryption SDK

AWS Encryption SDK Ini dirancang untuk memudahkan Anda melindungi data Anda menggunakan standar industri dan praktik terbaik. Meskipun banyak praktik terbaik dipilih untuk Anda dalam nilai default, beberapa praktik bersifat opsional tetapi disarankan kapan pun itu praktis.

Gunakan versi terbaru

Saat Anda mulai menggunakan AWS Encryption SDK, gunakan versi terbaru yang ditawarkan dalam bahasa pemrograman pilihan Anda. Jika Anda telah menggunakan AWS Encryption SDK, tingkatkan ke setiap versi terbaru sesegera mungkin. Ini memastikan bahwa Anda menggunakan konfigurasi yang disarankan dan memanfaatkan properti keamanan baru untuk melindungi data Anda. Untuk detail tentang versi yang didukung, termasuk panduan untuk migrasi dan penerapan, lihat Support dan pemeliharaan danVersi dari AWS Encryption SDK.

Jika versi baru menghentikan elemen dalam kode Anda, ganti mereka sesegera mungkin. Peringatan penghentian dan komentar kode biasanya merekomendasikan alternatif yang baik.

Untuk membuat peningkatan signifikan lebih mudah dan kurang rentan terhadap kesalahan, kami kadang-kadang menyediakan rilis sementara atau transisi. Gunakan rilis ini, dan dokumentasi yang menyertainya, untuk memastikan bahwa Anda dapat meningkatkan aplikasi tanpa mengganggu alur kerja produksi Anda.

Gunakan nilai default

Prakti AWS Encryption SDK k terbaik mendesain menjadi nilai defaultnya. Jika memungkinkan, gunakanlah. Untuk kasus di mana defaultnya tidak praktis, kami menyediakan alternatif, seperti suite algoritma tanpa penandatanganan. Kami juga memberikan kesempatan kepada pengguna tingkat lanjut untuk penyesuaian, seperti gantungan kunci khusus, penyedia kunci utama, dan manajer materi kriptografi (CMM). Gunakan alternatif canggih ini dengan hati-hati dan minta pilihan Anda diverifikasi oleh insinyur keamanan bila memungkinkan.

Gunakan konteks enkripsi

Untuk meningkatkan keamanan operasi kriptografi Anda, sertakan konteks enkripsi dengan nilai yang berarti di semua permintaan untuk mengenkripsi data. Menggunakan konteks enkripsi adalah opsional, tetapi ini adalah praktik terbaik kriptografi yang kami rekomendasikan. Konteks enkripsi menyediakan data otentikasi tambahan (AAD) untuk enkripsi yang diautentikasi di. AWS Encryption SDK Meskipun bukan rahasia, konteks enkripsi dapat membantu Anda melindungi integritas dan keaslian data teren kripsi Anda.

Di dalamnya AWS Encryption SDK, Anda menentukan konteks enkripsi hanya saat mengenkripsi. Saat mendekripsi, AWS Encryption SDK menggunakan konteks enkripsi di header pesan terenkripsi yang dikem AWS Encryption SDK balikan. Sebelum aplikasi mengembalikan data plaintext, verifikasi bahwa konteks enkripsi yang Anda gunakan untuk mengenkripsi pesan disertakan dalam konteks enkripsi yang digunakan untuk mendekripsi pesan. Untuk detailnya, lihat contoh dalam bahasa pemrograman Anda.

Saat Anda menggunakan antarmuka baris perintah, AWS Encryption SDK memverifikasi konteks enkripsi untuk Anda.

Konteks enkripsi yang diperlukan dengan Material Providers Library

Dimulai dengan versi AWS Encryption SDK yang mengintegrasikan AWS Cryptographic Material Providers Library (MPL) (misalnya, versi 3. x dan yang lebih baru dari AWS Encryption SDK for Java dan versi 4. x dan yang lebih baru dari AWS Encryption SDK for Python), Anda dapat mengonfigurasi CMM konteks enkripsi yang diperlukan yang menandai kunci konteks enkripsi yang dipilih sesuai kebutuhan. Kunci konteks enkripsi yang diperlukan dan nilainya masih terikat ke ciphertext sebagai data otentikasi tambahan (AAD), tetapi kunci tidak disimpan dalam header pesan terenkripsi. Penelepon harus menyediakan kunci konteks enkripsi yang diperlukan dan nilai yang sama saat mendekripsi; jika tidak, dekripsi gagal. Ini mengurangi ukuran ciphertext untuk konteks enkripsi yang sudah dimiliki pemanggil, sambil mempertahankan properti otentikasi dan integritas dari konteks enkripsi.

Cross-version dan kompatibilitas lintas bahasa

Pesan yang menyertakan seluruh konteks enkripsi dalam header (dihasilkan oleh AWS Encryption SDK rilis yang tidak mengonfigurasi konteks enkripsi CMM yang diperlukan) dapat didekripsi oleh AWS Encryption SDK versi yang kompatibel, termasuk rilis yang mendahului integrasi MPL. Pesan yang dihasilkan dengan konteks enkripsi yang diperlukan CMM hanya dapat didekripsi oleh AWS Encryption SDK versi yang mengintegrasikan MPL, dan pemanggil harus menyediakan kunci konteks enkripsi yang diperlukan dan nilai pada waktu dekripsi. Untuk informasi selengkapnya tentang versi bahasa mana yang mengintegrasikan MPL, lihatAWS Encryption SDK bahasa pemrograman. Untuk detail tentang kompatibilitas lintas-versi, lihatVersi dari AWS Encryption SDK.

Lindungi kunci pembungkus Anda

Mengh AWS Encryption SDK asilkan kunci data unik untuk mengenkripsi setiap pesan plaintext. Kemudian mengenkripsi kunci data dengan kunci pembungkus yang Anda berikan. Jika kunci pembungkus Anda hilang atau dihapus, data terenkripsi Anda tidak dapat dipulihkan. Jika kunci Anda tidak aman, data Anda mungkin rentan.

Gunakan kunci pembungkus yang dilindungi oleh infrastruktur kunci aman, seperti AWS Key Management Service (AWS KMS). Saat menggunakan kunci AES mentah atau RSA mentah, gunakan sumber keacakan dan penyimpanan tahan lama yang memenuhi persyaratan keamanan Anda. Menghasilkan dan menyimpan kunci pembungkus dalam modul keamanan perangkat keras (HSM), atau layanan yang menyediakan HSM, seperti AWS CloudHSM, adalah praktik terbaik.

Gunakan mekanisme otorisasi infrastruktur kunci Anda untuk membatasi akses ke kunci pembungkus Anda hanya untuk pengguna yang membutuhkannya. Menerapkan prinsip-prinsip praktik terbaik, seperti hak istimewa paling sedikit. Saat menggunakan AWS KMS keys, gunakan kebijakan utama dan kebijakan IAM yang menerapkan prinsip-prinsip praktik terbaik.

Tentukan kunci pembungkus Anda

Ini selalu merupakan praktik terbaik untuk menentukan kunci pembungkus Anda secara eksplisit saat mendekripsi, serta mengenkripsi. Ketika Anda melakukannya, hanya AWS Encryption SDK menggunakan kunci yang Anda tentukan. Praktik ini memastikan bahwa Anda hanya menggunakan kunci enkripsi yang Anda inginkan. Untuk AWS KMS membungkus kunci, ini juga meningkatkan kinerja dengan mencegah Anda menggunakan kunci secara tidak sengaja di Wilayah Akun AWS atau yang berbeda, atau mencoba mendekripsi dengan kunci yang tidak memiliki izin untuk digunakan.

Saat mengenkripsi, gantungan kunci dan penyedia kunci utama yang disediakan mengharuskan AWS Encryption SDK Anda menentukan kunci pembungkus. Mereka menggunakan semua dan hanya kunci pembungkus yang Anda tentukan. Anda juga diminta untuk menentukan kunci pembungkus saat mengenkripsi dan mendekripsi dengan gantungan kunci AES mentah, gantungan kunci RSA mentah, dan. JCEMasterKeys

Namun, saat mendekripsi dengan AWS KMS gantungan kunci dan penyedia kunci utama, Anda tidak perlu menentukan kunci pembungkus. AWS Encryption SDK Bisa mendapatkan pengenal kunci dari metadata kunci data terenkripsi. Tetapi menentukan kunci pembungkus adalah praktik terbaik yang kami rekomendasikan.

Untuk mendukung praktik terbaik ini saat bekerja dengan kunci AWS KMS pembungkus, kami merekomendasikan hal berikut:

  • Gunakan gant AWS KMS ungan kunci yang menentukan kunci pembungkus. Saat mengenkripsi dan mendekripsi, gantungan kunci ini hanya menggunakan kunci pembungkus tertentu yang Anda tentukan.

  • Saat menggunakan kunci AWS KMS master dan penyedia kunci master, gunakan konstruktor mode ketat yang diperkenalkan di versi 1.7. x dari AWS Encryption SDK. Mereka membuat penyedia yang mengenkripsi dan mendekripsi hanya dengan kunci pembungkus yang Anda tentukan. Konstruktor untuk penyedia kunci master yang selalu mendekripsi dengan kunci pembungkus apa pun tidak digunakan lagi di versi 1.7. x dan dihapus dalam versi 2.0. x.

Saat menentukan kunci AWS KMS pembungkus untuk dekripsi tidak praktis, Anda dapat menggunakan penyedia penemuan. G AWS Encryption SDK antungan kunci dalam C dan JavaScript dukungan AWS KMS penemuan. Penyedia kunci utama dengan mode penemuan tersedia untuk Java dan Python dalam versi 1.7. x dan seterusnya. Penyedia penemuan ini, yang hanya digunakan untuk mendekripsi dengan kunci AWS KMS pembungkus, secara eksplisit mengarahkan AWS Encryption SDK untuk menggunakan kunci pembungkus apa pun yang mengenkripsi kunci data.

Jika Anda harus menggunakan penyedia penemuan, gunakan fitur filter penemuannya untuk membatasi kunci pembungkus yang mereka gunakan. Misalnya, gantungan kunci penemuan AWS KMS regional hanya menggunakan kunci pembungkus pada kunci tertentu Wilayah AWS. Anda juga dapat mengonfigur AWS KMS asi gantungan kunci dan AWS KMS penyedia kunci utama untuk hanya menggunakan kunci pem bungkus secara khusus. Akun AWS Juga, seperti biasa, gunakan kebijakan utama dan kebijakan IAM untuk mengontrol akses ke kunci AWS KMS pembungkus Anda.

Gunakan tanda tangan digital

Ini adalah praktik terbaik untuk menggunakan rangkaian algoritma dengan penandatanganan. Tanda tangan digital memverifikasi pengirim pesan diberi wewenang untuk mengirim pesan dan melindungi integritas pesan. Semua versi AWS Encryption SDK menggunakan suite algoritma dengan penandatanganan secara default.

Jika persyaratan keamanan Anda tidak menyertakan tanda tangan digital, Anda dapat memilih rangkaian algoritma tanpa tanda tangan digital. Namun, sebaiknya gunakan tanda tangan digital, terutama ketika satu kelompok pengguna mengenkripsi data dan kumpulan pengguna yang berbeda mendekripsi data tersebut.

Gunakan komitmen utama

Ini adalah praktik terbaik untuk menggunakan fitur keamanan komitmen utama. Dengan memverifikasi identitas kunci data unik yang mengenkripsi data Anda, komitmen kunci mencegah Anda mendekripsi ciphertext apa pun yang mungkin menghasilkan lebih dari satu pesan plaintext.

Ini AWS Encryption SDK memberikan dukungan penuh untuk mengenkripsi dan mendekripsi dengan komitmen kunci dimulai pada versi 2.0. x . Secara default, semua pesan Anda dienkripsi dan didekripsi dengan komitmen kunci. Versi 1.7. x dari AWS Encryption SDK dapat mendekripsi ciphertext dengan komitmen kunci. Ini dirancang untuk membantu pengguna versi sebelumnya menerapkan versi 2.0. x berhasil.

Dukungan untuk komitmen kunci mencakup rang kaian algoritma baru dan format pesan baru yang menghasilkan ciphertext hanya 30 byte lebih besar dari ciphertext tanpa komitmen kunci. Desain meminimalkan dampaknya pada kinerja sehingga sebagian besar pengguna dapat menikmati manfaat dari komitmen utama. Jika aplikasi Anda sangat sensitif terhadap ukuran dan kinerja, Anda mungkin memutuskan untuk menggunakan pengaturan kebijakan komitmen untuk menonaktifkan komitmen utama atau mengizinkan AWS Encryption SDK mendekripsi pesan tanpa komitmen, tetapi lakukan hanya jika Anda harus melakukannya.

Batasi jumlah kunci data terenkripsi

Ini adalah praktik terbaik untuk membatasi jumlah kunci data terenkripsi dalam pesan yang Anda dekripsi, terutama pesan dari sumber yang tidak tepercaya. Mendekripsi pesan dengan banyak kunci data terenkripsi yang tidak dapat Anda dekripsi dapat menyebabkan penundaan yang berkepanjangan, menghabiskan biaya, membatasi aplikasi Anda dan orang lain yang berbagi akun Anda, dan berpotensi menghabiskan infrastruktur kunci Anda. Tanpa batas, pesan terenkripsi dapat memiliki hingga 65.535 (2^16 - 1) kunci data terenkripsi. Lihat perinciannya di Membatasi kunci data terenkripsi.

Untuk informasi selengkapnya tentang fitur AWS Encryption SDK keamanan yang mendasari praktik terbaik ini, lihat Pen ingkatan enkripsi sisi klien: Komitmen eksplisit KeyIds dan kunci di Blog Keamanan. AWS