Konsep dalam 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.

Konsep dalam AWS Encryption SDK

Bagian ini memperkenalkan konsep yang digunakan dalamAWS Encryption SDK, dan memberikan glosarium dan referensi. Ini dirancang untuk membantu Anda memahami cara AWS Encryption SDK kerja dan istilah yang kami gunakan untuk menggambarkannya.

Butuh bantuan?

Enkripsi amplop

Keamanan data terenkripsi Anda sebagian bergantung pada perlindungan kunci data yang dapat mendekripsi itu. Salah satu praktik terbaik yang diterima untuk melindungi kunci data adalah mengenkripsinya. Untuk melakukan ini, Anda memerlukan kunci enkripsi lain, yang dikenal sebagai kunci enkripsi kunci atau kunci pembungkus. Praktek menggunakan kunci pembungkus untuk mengenkripsi kunci data dikenal sebagai enkripsi amplop.

Melindungi kunci data

AWS Encryption SDKEnkripsi setiap pesan dengan kunci data yang unik. Kemudian mengenkripsi kunci data di bawah kunci pembungkus yang Anda tentukan. Ini menyimpan kunci data terenkripsi dengan data terenkripsi dalam pesan terenkripsi yang dikembalikan.

Untuk menentukan kunci pembungkus Anda, Anda menggunakan keyring atau penyedia kunci master.

Enkripsi amplop dengan AWS Encryption SDK
Mengenkripsi data yang sama di bawah beberapa kunci pembungkus

Anda dapat mengenkripsi kunci data di bawah beberapa kunci pembungkus. Anda mungkin ingin memberikan kunci pembungkus yang berbeda untuk pengguna yang berbeda, atau kunci pembungkus dari jenis yang berbeda, atau di lokasi yang berbeda. Setiap kunci pembungkus mengenkripsi kunci data yang sama. AWS Encryption SDKMenyimpan semua kunci data terenkripsi dengan data terenkripsi dalam pesan terenkripsi.

Untuk mendekripsi data, Anda perlu menyediakan kunci pembungkus yang dapat mendekripsi salah satu kunci data terenkripsi.

Setiap kunci pembungkus mengenkripsi kunci data yang sama, menghasilkan satu kunci data terenkripsi untuk setiap kunci pembungkus
Menggabungkan kekuatan dari beberapa algoritme

Untuk mengenkripsi data Anda, secara default, AWS Encryption SDK menggunakan rangkaian algoritma canggih dengan enkripsi simetris AES-GCM, fungsi derivasi kunci (HKDF), dan penandatanganan. Untuk mengenkripsi kunci data, Anda dapat menentukan algoritma enkripsi simetris atau asimetris yang sesuai dengan kunci pembungkus Anda.

Secara umum, algoritma enkripsi kunci simetris lebih cepat dan menghasilkan ciphertext yang lebih kecil daripada enkripsi kunci asimetris atau publik. Namun algoritme kunci publik memberikan pemisahan peran yang melekat dan manajemen kunci yang lebih mudah. Untuk menggabungkan kekuatan masing-masing, Anda dapat mengenkripsi data Anda dengan enkripsi kunci simetris, dan kemudian mengenkripsi kunci data dengan enkripsi kunci publik.

Kunci data

Kunci data adalah kunci enkripsi yang AWS Encryption SDK digunakan untuk mengenkripsi data Anda. Setiap kunci data adalah array byte yang sesuai dengan persyaratan untuk kunci kriptografi. Kecuali Anda menggunakan caching kunci data, AWS Encryption SDK menggunakan kunci data unik untuk mengenkripsi setiap pesan.

Anda tidak perlu menentukan, menghasilkan, mengimplementasikan, memperluas, melindungi, atau menggunakan kunci data. AWS Encryption SDKApakah itu bekerja untuk Anda ketika Anda memanggil operasi enkripsi dan dekripsi.

Untuk melindungi kunci data Anda, AWS Encryption SDK mengenkripsi mereka di bawah satu atau beberapa kunci enkripsi kunci yang dikenal sebagai kunci pembungkus atau kunci master. Setelah AWS Encryption SDK menggunakan kunci data plaintext Anda untuk mengenkripsi data Anda, itu akan menghapusnya dari memori sesegera mungkin. Kemudian menyimpan kunci data terenkripsi dengan data terenkripsi dalam pesan terenkripsi yang dikembalikan oleh operasi enkripsi. Untuk detailnya, lihat Bagaimana cara AWS Encryption SDK kerjanya.

Tip

DalamAWS Encryption SDK, kami membedakan kunci data dari kunci enkripsi data. Beberapa suite algoritma yang didukung, termasuk suite default, menggunakan fungsi derivasi kunci yang mencegah kunci data mencapai batas kriptografinya. Fungsi derivasi kunci mengambil kunci data sebagai input dan mengembalikan kunci enkripsi data yang sebenarnya digunakan untuk mengenkripsi data. Untuk alasan ini, kita sering mengatakan bahwa data dienkripsi “di bawah” kunci data daripada “oleh” kunci data.

Setiap kunci data terenkripsi mencakup metadata, termasuk pengidentifikasi kunci pembungkus yang mengenkripsi itu. Metadata ini memudahkan untuk mengidentifikasi kunci pembungkus yang valid saat AWS Encryption SDK mendekripsi.

Kunci pembungkus

Kunci pembungkus adalah kunci enkripsi kunci yang AWS Encryption SDK digunakan untuk mengenkripsi kunci data yang mengenkripsi data Anda. Setiap kunci data plaintext dapat dienkripsi di bawah satu atau lebih kunci pembungkus. Anda menentukan kunci pembungkus mana yang digunakan untuk melindungi data Anda saat mengonfigurasi keyring atau penyedia kunci utama.

catatan

Kunci pembungkus mengacu pada kunci di keyring atau penyedia kunci master. Kunci master biasanya dikaitkan dengan MasterKey kelas yang Anda buat instance saat Anda menggunakan penyedia kunci master.

Ini AWS Encryption SDK mendukung beberapa kunci pembungkus yang umum digunakan, seperti AWS Key Management Service (AWS KMS) simetris AWS KMS keys(termasuk kunci KMS Multi-wilayah), kunci mentah AES-GCM (Advanced Encryption Standard/Galois Counter Mode), dan kunci RSA mentah. Anda juga dapat memperluas atau mengimplementasikan kunci pembungkus Anda sendiri.

Saat Anda menggunakan enkripsi amplop, Anda perlu melindungi kunci pembungkus Anda dari akses yang tidak sah. Anda dapat melakukan ini dengan salah satu cara berikut:

Jika Anda tidak memiliki sistem manajemen kunci, kami sarankanAWS KMS. AWS Encryption SDKTerintegrasi dengan AWS KMS untuk membantu Anda melindungi dan menggunakan kunci pembungkus Anda. Namun, AWS Encryption SDK tidak memerlukan AWS atau AWS layanan apa pun.

Gantungan kunci dan penyedia kunci utama

Untuk menentukan kunci pembungkus yang Anda gunakan untuk enkripsi dan dekripsi, Anda menggunakan keyring (C, C #/.NET, dan JavaScript) atau penyedia kunci master (Java, Python, CLI). Anda dapat menggunakan keyrings dan penyedia kunci master yang AWS Encryption SDK menyediakan atau merancang implementasi Anda sendiri. AWS Encryption SDKMenyediakan keyrings dan penyedia kunci master yang kompatibel satu sama lain tunduk pada kendala bahasa. Untuk detailnya, lihat Kompatibilitas keyring.

Sebuah keyring menghasilkan, mengenkripsi, dan mendekripsi kunci data. Saat Anda menentukan keyring, Anda dapat menentukan kunci pembungkus yang mengenkripsi kunci data Anda. Kebanyakan keyrings menentukan setidaknya satu kunci pembungkus atau layanan yang menyediakan dan melindungi kunci pembungkus. Anda juga dapat menentukan keyring tanpa tombol pembungkus atau keyring yang lebih kompleks dengan opsi konfigurasi tambahan. Untuk bantuan memilih dan menggunakan gantungan kunci yang AWS Encryption SDK didefinisikan, lihat. Menggunakan keyrings Keyrings didukung dalam C, C# /.NET JavaScript, dan versi 3. x dariAWS Encryption SDK for Java.

Penyedia kunci master adalah alternatif untuk keyring. Penyedia kunci master mengembalikan kunci pembungkus (atau kunci master) yang Anda tentukan. Setiap kunci master dikaitkan dengan satu penyedia kunci master, tetapi penyedia kunci master biasanya menyediakan beberapa kunci master. Penyedia kunci master didukung di Java, Python, dan AWS CLI Enkripsi.

Anda harus menentukan keyring (atau penyedia kunci utama) untuk enkripsi. Anda dapat menentukan keyring yang sama (atau penyedia kunci utama), atau yang lain, untuk dekripsi. Saat mengenkripsi, AWS Encryption SDK menggunakan semua kunci pembungkus yang Anda tentukan untuk mengenkripsi kunci data. Saat mendekripsi, hanya AWS Encryption SDK menggunakan kunci pembungkus yang Anda tentukan untuk mendekripsi kunci data terenkripsi. Menentukan kunci pembungkus untuk dekripsi adalah opsional, tetapi ini adalah praktik terbaik. AWS Encryption SDK

Untuk detail tentang menentukan kunci pembungkus, lihat. Memilih tombol pembungkus

Konteks enkripsi

Untuk meningkatkan keamanan operasi kriptografi Anda, sertakan konteks enkripsi dalam semua permintaan untuk mengenkripsi data. Menggunakan konteks enkripsi adalah opsional, tetapi ini adalah praktik terbaik kriptografi yang kami rekomendasikan.

Konteks enkripsi adalah sekumpulan pasangan nama-nilai yang berisi data otentikasi tambahan non-rahasia yang sewenang-wenang. Konteks enkripsi dapat berisi data apa pun yang Anda pilih, tetapi biasanya terdiri dari data yang berguna dalam pencatatan dan pelacakan, seperti data tentang jenis file, tujuan, atau kepemilikan. Saat Anda mengenkripsi data, konteks enkripsi terikat secara kriptografis ke data terenkripsi sehingga konteks enkripsi yang sama diperlukan untuk mendekripsi data. AWS Encryption SDKTermasuk konteks enkripsi dalam plaintext di header pesan terenkripsi yang dikembalikan.

Konteks enkripsi yang AWS Encryption SDK digunakan terdiri dari konteks enkripsi yang Anda tentukan dan public key pair yang ditambahkan oleh manajer bahan kriptografi (CMM). Secara khusus, setiap kali Anda menggunakan algoritma enkripsi dengan penandatanganan, CMM menambahkan pasangan nama-nilai ke konteks enkripsi yang terdiri dari nama cadanganaws-crypto-public-key, dan nilai yang mewakili kunci verifikasi publik. aws-crypto-public-keyNama dalam konteks enkripsi dicadangkan oleh AWS Encryption SDK dan tidak dapat digunakan sebagai nama dalam pasangan lain dalam konteks enkripsi. Untuk detailnya, lihat AAD di Referensi Format Pesan.

Contoh konteks enkripsi berikut terdiri dari dua pasangan konteks enkripsi yang ditentukan dalam permintaan dan public key pair yang ditambahkan CMM.

"Purpose"="Test", "Department"="IT", aws-crypto-public-key=<public key>

Untuk mendekripsi data, Anda meneruskan pesan terenkripsi. Karena AWS Encryption SDK dapat mengekstrak konteks enkripsi dari header pesan terenkripsi, Anda tidak diharuskan untuk menyediakan konteks enkripsi secara terpisah. Namun, konteks enkripsi dapat membantu Anda mengonfirmasi bahwa Anda mendekripsi pesan terenkripsi yang benar.

  • Dalam AWS Encryption SDKCommand Line Interface (CLI), jika Anda memberikan konteks enkripsi dalam perintah dekripsi, CLI memverifikasi bahwa nilai-nilai hadir dalam konteks enkripsi pesan terenkripsi sebelum mengembalikan data plaintext.

  • Dalam implementasi bahasa pemrograman lainnya, respon dekripsi mencakup konteks enkripsi dan data plaintext. Fungsi dekripsi dalam aplikasi Anda harus selalu memverifikasi bahwa konteks enkripsi dalam respons dekripsi menyertakan konteks enkripsi dalam permintaan enkripsi (atau subset) sebelum mengembalikan data teks biasa.

catatan

Dengan versi 4. x dari AWS Encryption SDK untuk .NET dan versi 3. x dari AWS Encryption SDK for Java, Anda dapat memerlukan konteks enkripsi di semua permintaan enkripsi dengan konteks enkripsi CMM yang diperlukan.

Saat memilih konteks enkripsi, ingatlah bahwa itu bukan rahasia. Konteks enkripsi ditampilkan dalam plaintext di header pesan terenkripsi yang dikembalikan. AWS Encryption SDK Jika Anda menggunakanAWS Key Management Service, konteks enkripsi juga mungkin muncul dalam teks biasa dalam catatan audit dan log, seperti. AWS CloudTrail

Untuk contoh mengirimkan dan memverifikasi konteks enkripsi dalam kode Anda, lihat contoh untuk bahasa pemrograman pilihan Anda.

Pesan terenkripsi

Ketika Anda mengenkripsi data denganAWS Encryption SDK, ia mengembalikan pesan terenkripsi.

Pesan terenkripsi adalah struktur data berformat portabel yang mencakup data terenkripsi bersama dengan salinan kunci data terenkripsi, ID algoritma, dan, secara opsional, konteks enkripsi dan tanda tangan digital. Enkripsi operasi dalam AWS Encryption SDK pengembalian pesan terenkripsi dan operasi dekripsi mengambil pesan terenkripsi sebagai input.

Menggabungkan data terenkripsi dan kunci data terenkripsi merampingkan operasi dekripsi dan membebaskan Anda dari keharusan menyimpan dan mengelola kunci data terenkripsi secara independen dari data yang mereka enkripsi.

Untuk informasi teknis tentang pesan terenkripsi, lihat Format Pesan Terenkripsi.

Suite algoritma

AWS Encryption SDKMenggunakan rangkaian algoritma untuk mengenkripsi dan menandatangani data dalam pesan terenkripsi yang dikembalikan oleh operasi enkripsi dan dekripsi. AWS Encryption SDKMendukung beberapa suite algoritma. Semua suite yang didukung menggunakan Advanced Encryption Standard (AES) sebagai algoritma utama, dan menggabungkannya dengan algoritma dan nilai lainnya.

AWS Encryption SDKMenetapkan suite algoritma yang direkomendasikan sebagai default untuk semua operasi enkripsi. Default mungkin berubah seiring dengan peningkatan standar dan praktik terbaik. Anda dapat menentukan rangkaian algoritme alternatif dalam permintaan untuk mengenkripsi data atau saat membuat manajer bahan kriptografi (CMM), tetapi kecuali alternatif diperlukan untuk situasi Anda, yang terbaik adalah menggunakan default. Default saat ini adalah AES-GCM dengan fungsi derivasi extract-and-expand kunci berbasis HMAC (HKDF), komitmen utama, tanda tangan Elliptic Curve Digital Signature Algorithm (ECDSA), dan kunci enkripsi 256-bit.

Jika aplikasi Anda memerlukan kinerja tinggi dan pengguna yang mengenkripsi data dan mereka yang mendekripsi data sama-sama dipercaya, Anda dapat mempertimbangkan untuk menentukan rangkaian algoritme tanpa tanda tangan digital. Namun, kami sangat merekomendasikan rangkaian algoritme yang mencakup komitmen kunci dan fungsi derivasi kunci. Suite algoritma tanpa fitur ini hanya didukung untuk kompatibilitas mundur.

Manajer materi kriptografi

Manajer bahan kriptografi (CMM) merakit bahan kriptografi yang digunakan untuk mengenkripsi dan mendekripsi data. Materi kriptografi termasuk plaintext dan kunci data terenkripsi, dan kunci penandatanganan pesan opsional. Anda tidak pernah berinteraksi dengan CMM secara langsung. Metode enkripsi dan dekripsi menanganinya untuk Anda.

Anda dapat menggunakan CMM default atau CMM caching yang AWS Encryption SDK disediakan, atau menulis CMM kustom. Dan Anda dapat menentukan CMM, tetapi itu tidak diperlukan. Saat Anda menentukan keyring atau penyedia kunci master, CMM AWS Encryption SDK default akan dibuat untuk Anda. CMM default mendapatkan materi enkripsi atau dekripsi dari keyring atau penyedia kunci utama yang Anda tentukan. Ini mungkin melibatkan panggilan ke layanan kriptografi, seperti AWS Key Management Service(AWS KMS).

Karena CMM bertindak sebagai penghubung antara keyring AWS Encryption SDK dan keyring (atau penyedia kunci utama), ini adalah titik ideal untuk penyesuaian dan ekstensi, seperti dukungan untuk penegakan kebijakan dan caching. AWS Encryption SDKIni menyediakan CMM caching untuk mendukung caching kunci data.

Enkripsi simetris dan asimetris

Enkripsi simetris menggunakan kunci yang sama untuk mengenkripsi dan mendekripsi data.

Enkripsi asimetris menggunakan data key pair yang terkait secara matematis. Satu kunci dalam pasangan mengenkripsi data; hanya kunci lain dalam pasangan yang dapat mendekripsi data. Untuk detailnya, lihat Algoritma kriptografi di Panduan Layanan dan AWS Alat Kriptografi.

AWS Encryption SDKMenggunakan enkripsi amplop. Ini mengenkripsi data Anda dengan kunci data simetris. Ini mengenkripsi kunci data simetris dengan satu atau lebih tombol pembungkus simetris atau asimetris. Ia mengembalikan pesan terenkripsi yang mencakup data terenkripsi dan setidaknya satu salinan kunci data terenkripsi.

Mengenkripsi data Anda (enkripsi simetris)

Untuk mengenkripsi data Anda, AWS Encryption SDK menggunakan kunci data simetris dan rangkaian algoritma yang menyertakan algoritma enkripsi simetris. Untuk mendekripsi data, AWS Encryption SDK menggunakan kunci data yang sama dan rangkaian algoritma yang sama.

Mengenkripsi kunci data Anda (enkripsi simetris atau asimetris)

Penyedia keyring atau kunci utama yang Anda berikan ke operasi enkripsi dan dekripsi menentukan bagaimana kunci data simetris dienkripsi dan didekripsi. Anda dapat memilih keyring atau penyedia kunci utama yang menggunakan enkripsi simetris, seperti AWS KMS keyring, atau yang menggunakan enkripsi asimetris, seperti keyring RSA mentah atau. JceMasterKey

Komitmen utama

AWS Encryption SDKMendukung komitmen kunci (kadang-kadang dikenal sebagai ketahanan), properti keamanan yang menjamin bahwa setiap ciphertext dapat didekripsi hanya untuk satu teks biasa. Untuk melakukan ini, komitmen utama menjamin bahwa hanya kunci data yang mengenkripsi pesan Anda yang akan digunakan untuk mendekripsi. Mengenkripsi dan mendekripsi dengan komitmen utama adalah praktik terbaik. AWS Encryption SDK

Sebagian besar cipher simetris modern (termasuk AES) mengenkripsi plaintext di bawah satu kunci rahasia, seperti kunci data unik yang digunakan untuk mengenkripsi setiap pesan teks biasa. AWS Encryption SDK Mendekripsi data ini dengan kunci data yang sama mengembalikan plaintext yang identik dengan aslinya. Mendekripsi dengan kunci yang berbeda biasanya akan gagal. Namun, dimungkinkan untuk mendekripsi ciphertext di bawah dua kunci yang berbeda. Dalam kasus yang jarang terjadi, adalah layak untuk menemukan kunci yang dapat mendekripsi beberapa byte ciphertext menjadi plaintext yang berbeda, tetapi masih dapat dipahami.

AWS Encryption SDKSelalu mengenkripsi setiap pesan teks biasa di bawah satu kunci data unik. Mungkin mengenkripsi kunci data itu di bawah beberapa kunci pembungkus (atau kunci master), tetapi kunci pembungkus selalu mengenkripsi kunci data yang sama. Meskipun demikian, pesan terenkripsi yang canggih dan dibuat secara manual mungkin sebenarnya berisi kunci data yang berbeda, masing-masing dienkripsi oleh kunci pembungkus yang berbeda. Misalnya, jika satu pengguna mendekripsi pesan terenkripsi, ia mengembalikan 0x0 (false) sementara pengguna lain yang mendekripsi pesan terenkripsi yang sama mendapat 0x1 (true).

Untuk mencegah skenario ini, AWS Encryption SDK mendukung komitmen utama saat mengenkripsi dan mendekripsi. Ketika AWS Encryption SDK mengenkripsi pesan dengan komitmen utama, secara kriptografis mengikat kunci data unik yang menghasilkan ciphertext ke string komitmen kunci, pengidentifikasi kunci data non-rahasia. Kemudian menyimpan string komitmen utama dalam metadata pesan terenkripsi. Ketika mendekripsi pesan dengan komitmen utama, AWS Encryption SDK memverifikasi bahwa kunci data adalah satu-satunya kunci untuk pesan terenkripsi itu. Jika verifikasi kunci data gagal, operasi dekripsi gagal.

Support untuk komitmen utama diperkenalkan di versi 1.7. x, yang dapat mendekripsi pesan dengan komitmen utama, tetapi tidak akan mengenkripsi dengan komitmen utama. Anda dapat menggunakan versi ini untuk sepenuhnya menyebarkan kemampuan untuk mendekripsi ciphertext dengan komitmen utama. Versi 2.0. x mencakup dukungan penuh untuk komitmen utama. Secara default, ini mengenkripsi dan mendekripsi hanya dengan komitmen utama. Ini adalah konfigurasi ideal untuk aplikasi yang tidak perlu mendekripsi ciphertext yang dienkripsi oleh versi sebelumnya. AWS Encryption SDK

Meskipun mengenkripsi dan mendekripsi dengan komitmen utama adalah praktik terbaik, kami membiarkan Anda memutuskan kapan itu digunakan, dan membiarkan Anda menyesuaikan kecepatan Anda mengadopsinya. Dimulai pada versi 1.7. x, AWS Encryption SDK mendukung kebijakan komitmen yang menetapkan rangkaian algoritme default dan membatasi rangkaian algoritme yang dapat digunakan. Kebijakan ini menentukan apakah data Anda dienkripsi dan didekripsi dengan komitmen utama.

Komitmen utama menghasilkan pesan terenkripsi yang sedikit lebih besar (+ 30 byte) dan membutuhkan lebih banyak waktu untuk diproses. Jika aplikasi Anda sangat sensitif terhadap ukuran atau kinerja, Anda dapat memilih untuk keluar dari komitmen utama. Tetapi lakukan hanya jika Anda harus.

Untuk informasi selengkapnya tentang migrasi ke versi 1.7. x dan 2.0. x, termasuk fitur komitmen utama mereka, lihatMigrasiAWS Encryption SDK. Untuk informasi teknis tentang komitmen utama, lihat AWS Encryption SDK referensi algoritma danAWS Encryption SDK referensi format pesan.

Kebijakan komitmen

Kebijakan komitmen adalah pengaturan konfigurasi yang menentukan apakah aplikasi Anda mengenkripsi dan mendekripsi dengan komitmen utama. Mengenkripsi dan mendekripsi dengan komitmen utama adalah praktik terbaik. AWS Encryption SDK

Kebijakan komitmen memiliki tiga nilai.

catatan

Anda mungkin harus menggulir secara horizontal atau vertikal untuk melihat seluruh tabel.

Nilai-nilai kebijakan komitmen
Nilai Enkripsi dengan komitmen utama Enkripsi tanpa komitmen utama Dekripsi dengan komitmen utama Mendekripsi tanpa komitmen utama
ForbidEncryptAllowDecrypt Red circle with white X inside, indicating prohibition or cancellation. Green checkmark icon indicating approval or confirmation. Green checkmark icon indicating approval or confirmation. Green checkmark icon indicating approval or confirmation.
RequireEncryptAllowDecrypt Green checkmark icon indicating approval or confirmation. Red circle with white X inside, indicating prohibition or cancellation. Green checkmark icon indicating approval or confirmation. Green checkmark icon indicating approval or confirmation.
RequireEncryptRequireDecrypt Green checkmark icon indicating approval or confirmation. Red circle with white X inside, indicating prohibition or cancellation. Green checkmark icon indicating approval or confirmation. Red circle with white X inside, indicating prohibition or cancellation.

Pengaturan kebijakan komitmen diperkenalkan di AWS Encryption SDK versi 1.7. x. Ini berlaku di semua bahasa pemrograman yang didukung.

  • ForbidEncryptAllowDecryptmendekripsi dengan atau tanpa komitmen utama, tetapi tidak akan mengenkripsi dengan komitmen utama. Ini adalah satu-satunya nilai valid untuk kebijakan komitmen di versi 1.7. x dan digunakan untuk semua operasi enkripsi dan dekripsi. Ini dirancang untuk mempersiapkan semua host yang menjalankan aplikasi Anda untuk mendekripsi dengan komitmen utama sebelum mereka menemukan ciphertext yang dienkripsi dengan komitmen utama.

  • RequireEncryptAllowDecryptselalu mengenkripsi dengan komitmen utama. Itu dapat mendekripsi dengan atau tanpa komitmen utama. Nilai ini, diperkenalkan dalam versi 2.0. x, memungkinkan Anda mulai mengenkripsi dengan komitmen utama, tetapi masih mendekripsi ciphertext lama tanpa komitmen utama.

  • RequireEncryptRequireDecryptmengenkripsi dan mendekripsi hanya dengan komitmen utama. Nilai ini adalah default untuk versi 2.0. x. Gunakan nilai ini ketika Anda yakin bahwa semua ciphertext Anda dienkripsi dengan komitmen utama.

Pengaturan kebijakan komitmen menentukan rangkaian algoritme mana yang dapat Anda gunakan. Dimulai pada versi 1.7. x, AWS Encryption SDK mendukung rangkaian algoritma untuk komitmen utama; dengan dan tanpa penandatanganan. Jika Anda menentukan rangkaian algoritme yang bertentangan dengan kebijakan komitmen Anda, AWS Encryption SDK kesalahan akan ditampilkan.

Untuk bantuan menetapkan kebijakan komitmen Anda, lihatMenetapkan kebijakan komitmen Anda.

Tanda tangan digital

Untuk memastikan integritas pesan digital saat berada di antara sistem, Anda dapat menerapkan tanda tangan digital ke pesan tersebut. Tanda tangan digital selalu asimetris. Anda menggunakan kunci pribadi untuk membuat tanda tangan, dan menambahkannya ke pesan asli. Penerima Anda menggunakan kunci publik untuk memverifikasi bahwa pesan belum diubah sejak Anda menandatanganinya.

AWS Encryption SDKEnkripsi data Anda menggunakan algoritma enkripsi yang diautentikasi, AES-GCM, dan proses dekripsi memverifikasi integritas dan keaslian pesan terenkripsi tanpa menggunakan tanda tangan digital. Tetapi karena AES-GCM menggunakan kunci simetris, siapa pun yang dapat mendekripsi kunci data yang digunakan untuk mendekripsi ciphertext juga dapat secara manual membuat ciphertext terenkripsi baru, yang menyebabkan masalah keamanan potensial. Misalnya, jika Anda menggunakan AWS KMS kunci sebagai kunci pembungkus, ini berarti bahwa dimungkinkan bagi pengguna dengan izin Dekripsi KMS untuk membuat ciphertext terenkripsi tanpa memanggil KMS Encrypt.

Untuk menghindari masalah ini, AWS Encryption SDK dukungan menambahkan tanda tangan Elliptic Curve Digital Signature Algorithm (ECDSA) ke akhir pesan terenkripsi. Ketika rangkaian algoritma penandatanganan digunakan, akan AWS Encryption SDK menghasilkan kunci pribadi sementara dan public key pair untuk setiap pesan terenkripsi. AWS Encryption SDKMenyimpan kunci publik dalam konteks enkripsi kunci data dan membuang kunci pribadi, dan tidak ada yang dapat membuat tanda tangan lain yang memverifikasi dengan kunci publik. Karena algoritme mengikat kunci publik ke kunci data terenkripsi sebagai data otentikasi tambahan di header pesan, pengguna yang hanya dapat mendekripsi pesan tidak dapat mengubah kunci publik.

Verifikasi tanda tangan menambahkan biaya kinerja yang signifikan pada dekripsi. Jika pengguna mengenkripsi data dan pengguna yang mendekripsi data sama-sama dipercaya, pertimbangkan untuk menggunakan rangkaian algoritme yang tidak menyertakan penandatanganan.