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 dalam AWS 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 SDK Enkripsi 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 SDK Menyimpan 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 AES - enkripsi GCM simetris, 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 SDK Apakah 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

Dalam AWS 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.

AWS Encryption SDK Mendukung beberapa kunci pembungkus yang umum digunakan, seperti AWS Key Management Service (AWS KMS) simetris (termasuk kunci Multi-region), raw AES - AWS KMS keysGCM(Advanced Encryption Standard/Galois Counter Mode) KMS kunci, dan kunci mentah. RSA 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 sarankan AWS KMS. AWS Encryption SDK Terintegrasi 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 atau penyedia kunci utama. Anda dapat menggunakan keyrings dan penyedia kunci master yang AWS Encryption SDK menyediakan atau merancang implementasi Anda sendiri. AWS Encryption SDK Menyediakan 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 bahasa pemrograman berikut:

  • AWS Encryption SDK for C

  • AWS Encryption SDK for JavaScript

  • AWS Encryption SDK untuk. NET

  • Versi 3. x dari AWS Encryption SDK for Java

  • Versi 4. x dari AWS Encryption SDK for Python, bila digunakan dengan dependensi Library (MPL) Penyedia Materi Kriptografi opsional.

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 utama didukung di Java, Python, dan Enkripsi. AWS CLI

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 SDK Termasuk 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 materi kriptografi (CMM). Secara khusus, setiap kali Anda menggunakan algoritma enkripsi dengan penandatanganan, akan 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 AADdi Referensi Format Pesan.

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

"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.

  • Di AWS Encryption SDK Command Line Interface (CLI), jika Anda memberikan konteks enkripsi dalam perintah dekripsi, CLI memverifikasi bahwa nilai hadir dalam konteks enkripsi pesan terenkripsi sebelum mengembalikan data teks biasa.

  • 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. NETdan versi 3. x dari AWS Encryption SDK for Java, Anda dapat memerlukan konteks enkripsi di semua permintaan enkripsi dengan konteks CMM enkripsi 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 menggunakan AWS 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 dengan AWS 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 algoritme

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

AWS Encryption SDK Menetapkan 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 pengelola 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 HMAC berbasis (HKDF), komitmen kunci, 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 secara CMM langsung. Metode enkripsi dan dekripsi menanganinya untuk Anda.

Anda dapat menggunakan default CMM atau caching CMM yang AWS Encryption SDK disediakan, atau menulis kustomCMM. Dan Anda dapat menentukanCMM, tetapi itu tidak diperlukan. Saat Anda menentukan keyring atau penyedia kunci master, akan AWS Encryption SDK membuat default CMM untuk Anda. Default CMM 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 SDK Ini menyediakan caching CMM 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.

AWS Encryption SDK Menggunakan 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 mentah atau. RSA JceMasterKey

Komitmen utama

AWS Encryption SDK Mendukung 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 itu. Mengenkripsi dan mendekripsi dengan komitmen utama adalah praktik terbaik.AWS Encryption SDK

Sebagian besar cipher simetris modern (termasukAES) mengenkripsi plaintext di bawah satu kunci rahasia, seperti kunci data unik yang AWS Encryption SDK digunakan untuk mengenkripsi setiap pesan teks biasa. 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 SDK Selalu 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 yang 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. Nilai ini, diperkenalkan dalam versi 1.7. x, 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

AWS Encryption SDK Enkripsi 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 key sebagai kunci pembungkus, pengguna dengan kms:Decrypt izin dapat membuat ciphertext terenkripsi tanpa menelepon. 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 SDK Menyimpan kunci publik dalam konteks enkripsi kunci data dan membuang kunci pribadi. Ini memastikan bahwa tidak ada yang dapat membuat tanda tangan lain yang memverifikasi dengan kunci publik. Algoritma mengikat kunci publik ke kunci data terenkripsi sebagai data otentikasi tambahan di header pesan, mencegah pengguna yang hanya dapat mendekripsi pesan dari mengubah kunci publik atau memengaruhi verifikasi tanda tangan.

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.

catatan

Jika keyring atau akses ke materi kriptografi pembungkus tidak menggambarkan antara enkripsi dan dekripsi, tanda tangan digital tidak memberikan nilai kriptografi.

AWS KMS keyrings, termasuk RSA AWS KMS keyring asimetris, dapat menggambarkan antara enkripsi dan dekripsi berdasarkan kebijakan dan kebijakan utama. AWS KMS IAM

Karena sifat kriptografinya, gantungan kunci berikut tidak dapat menggambarkan antara enkripsi dan dekripsi:

  • AWS KMS Gantungan kunci hierarkis

  • AWS KMS ECDHgantungan kunci

  • AESGantungan kunci mentah

  • RSAGantungan kunci mentah

  • ECDHGantungan kunci mentah