

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

# Apa itu SDK Enkripsi AWS Database?
<a name="what-is-database-encryption-sdk"></a>


****  

|  | 
| --- |
| Pustaka enkripsi sisi klien kami diubah namanya menjadi SDK Enkripsi AWS Database. Panduan pengembang ini masih memberikan informasi tentang Klien Enkripsi [DynamoDB](legacy-dynamodb-encryption-client.md). | 

 AWS Database Encryption SDK adalah sekumpulan pustaka perangkat lunak yang memungkinkan Anda menyertakan enkripsi sisi klien dalam desain database Anda. AWS Database Encryption SDK menyediakan solusi enkripsi tingkat rekaman. Anda menentukan bidang mana yang dienkripsi dan bidang mana yang disertakan dalam tanda tangan yang memastikan keaslian data Anda. Mengenkripsi data sensitif Anda saat transit dan diam membantu memastikan bahwa data teks biasa Anda tidak tersedia untuk pihak ketiga mana pun, termasuk. AWS AWS Database Encryption SDK disediakan secara gratis di bawah lisensi Apache 2.0.

Panduan pengembang ini memberikan gambaran konseptual SDK Enkripsi AWS Database, termasuk [pengenalan arsitekturnya](concepts.md), detail tentang [cara melindungi data Anda](how-it-works.md), perbedaannya dari [enkripsi sisi server](client-server-side.md), dan panduan [memilih komponen penting untuk aplikasi Anda untuk membantu Anda memulai](configure.md).

SDK Enkripsi AWS Database mendukung Amazon *DynamoDB* dengan enkripsi tingkat atribut.

SDK Enkripsi AWS Database memiliki manfaat sebagai berikut:

**Dirancang khusus untuk aplikasi database**  
Anda tidak perlu menjadi ahli kriptografi untuk menggunakan AWS Database Encryption SDK. Implementasi termasuk metode pembantu yang dirancang untuk bekerja dengan aplikasi yang ada.   
Setelah Anda membuat dan mengonfigurasi komponen yang diperlukan, klien enkripsi secara transparan mengenkripsi dan menandatangani catatan Anda saat Anda menambahkannya ke database, dan memverifikasi serta mendekripsi saat Anda mengambilnya.

**Termasuk aman dan penandatanganan yang aman**  
SDK Enkripsi AWS Database mencakup implementasi aman yang mengenkripsi nilai bidang di setiap catatan menggunakan kunci enkripsi data unik, lalu menandatangani catatan untuk melindunginya dari perubahan yang tidak sah, seperti menambahkan atau menghapus bidang, atau menukar nilai terenkripsi.

**Menggunakan materi kriptografis dari sumber mana pun**  
 AWS Database Encryption SDK menggunakan [keyrings](concepts.md#keyring-concept) untuk menghasilkan, mengenkripsi, dan mendekripsi kunci enkripsi data unik yang melindungi catatan Anda. Keyrings menentukan kunci [pembungkus yang mengenkripsi kunci](concepts.md#wrapping-key) data tersebut.   
Anda dapat menggunakan kunci pembungkus dari sumber apa pun, termasuk layanan kriptografi, seperti [AWS Key Management Service](https://docs.aws.amazon.com/kms/latest/developerguide/)(AWS KMS) atau. [AWS CloudHSM](https://docs.aws.amazon.com/cloudhsm/latest/userguide/) SDK Enkripsi AWS Database tidak memerlukan layanan Akun AWS atau AWS layanan apa pun.

**Support untuk caching materi kriptografi**  
[AWS KMS Hierarchical keyring](use-hierarchical-keyring.md) adalah solusi caching materi kriptografi yang mengurangi jumlah AWS KMS panggilan dengan menggunakan *kunci cabang yang AWS KMS dilindungi yang disimpan dalam tabel Amazon DynamoDB, dan kemudian secara lokal menyimpan materi kunci cabang* yang digunakan dalam operasi enkripsi dan dekripsi. Ini memungkinkan Anda untuk melindungi materi kriptografi Anda di bawah kunci KMS enkripsi simetris tanpa menelepon AWS KMS setiap kali Anda mengenkripsi atau mendekripsi catatan. AWS KMS Hierarchical keyring adalah pilihan yang baik untuk aplikasi yang perlu meminimalkan panggilan ke. AWS KMS

**Enkripsi yang dapat dicari**  
Anda dapat merancang database yang dapat mencari catatan terenkripsi tanpa mendekripsi seluruh database. Bergantung pada model ancaman dan persyaratan kueri, Anda dapat menggunakan [enkripsi yang dapat dicari](searchable-encryption.md) untuk melakukan penelusuran yang sama persis atau kueri kompleks yang lebih disesuaikan pada basis data terenkripsi Anda.

**Support untuk skema database multitenant**  
SDK Enkripsi AWS Database memungkinkan Anda untuk melindungi data yang disimpan dalam database dengan skema bersama dengan mengisolasi setiap penyewa dengan bahan enkripsi yang berbeda. Jika Anda memiliki beberapa pengguna yang melakukan operasi enkripsi dalam database Anda, gunakan salah satu AWS KMS keyrings untuk menyediakan setiap pengguna dengan kunci yang berbeda untuk digunakan dalam operasi kriptografi mereka. Untuk informasi selengkapnya, lihat [Bekerja dengan database multitenant](configure.md#config-multitenant-databases).

**Support untuk pembaruan skema yang mulus**  
Saat Anda mengonfigurasi SDK Enkripsi AWS Database, Anda memberikan [tindakan kriptografi](concepts.md#crypt-actions) yang memberi tahu klien bidang mana yang akan dienkripsi dan ditandatangani, bidang mana yang akan ditandatangani (tetapi tidak dienkripsi), dan mana yang harus diabaikan. Setelah Anda menggunakan AWS Database Encryption SDK untuk melindungi catatan Anda, Anda masih dapat [membuat perubahan pada model data Anda](ddb-update-data-model.md). Anda dapat memperbarui tindakan kriptografi Anda, seperti menambahkan atau menghapus bidang terenkripsi, dalam satu penerapan.

## Dikembangkan dalam repositori sumber terbuka
<a name="dbesdk-repos"></a>

 AWS Database Encryption SDK dikembangkan dalam repositori open-source pada. GitHub Anda dapat menggunakan repositori ini untuk melihat kode, membaca dan mengirimkan masalah, dan menemukan informasi yang spesifik untuk implementasi Anda. 

**SDK Enkripsi AWS Database untuk DynamoDB**
+ Repositori [aws-database-encryption-sdk-dynamodb aktif](https://github.com/aws/aws-database-encryption-sdk-dynamodb/) GitHub mendukung versi terbaru SDK AWS Enkripsi Database untuk DynamoDB di Java, .NET, dan Rust.

  SDK Enkripsi AWS Database untuk DynamoDB adalah produk [dari](https://github.com/dafny-lang/dafny/blob/master/README.md) Dafny, bahasa yang sadar verifikasi di mana Anda menulis spesifikasi, kode untuk mengimplementasikannya, dan bukti untuk mengujinya. Hasilnya adalah pustaka yang mengimplementasikan fitur SDK Enkripsi AWS Database untuk DynamoDB dalam kerangka kerja yang menjamin kebenaran fungsional.

## Support dan pemeliharaan
<a name="support"></a>

SDK Enkripsi AWS Database menggunakan [kebijakan pemeliharaan](https://docs.aws.amazon.com/sdkref/latest/guide/maint-policy.html) yang sama dengan yang digunakan AWS SDK dan Tools, termasuk fase pembuatan versi dan siklus hidupnya. Sebagai praktik terbaik, kami menyarankan Anda menggunakan SDK Enkripsi AWS Database versi terbaru yang tersedia untuk implementasi database Anda, dan memutakhirkan saat versi baru dirilis.

Untuk informasi selengkapnya, lihat [kebijakan pemeliharaan AWS SDKs dan Alat](https://docs.aws.amazon.com/sdkref/latest/guide/maint-policy.html) di Panduan Referensi Alat AWS SDKs dan.

## Mengirim umpan balik
<a name="feedback"></a>

Kami menyambut umpan balik Anda\$1 Jika Anda memiliki pertanyaan atau komentar, atau masalah yang perlu dilaporkan, silakan gunakan sumber daya berikut.

Jika Anda menemukan potensi kerentanan keamanan di SDK Enkripsi AWS Database, harap [beri tahu AWS](https://aws.amazon.com/security/vulnerability-reporting/) keamanan. Jangan membuat GitHub masalah publik.

Untuk memberikan umpan balik tentang dokumentasi ini, gunakan tautan umpan balik pada halaman mana pun.

# AWS Konsep SDK Enkripsi Database
<a name="concepts"></a>


****  

|  | 
| --- |
| Pustaka enkripsi sisi klien kami diubah namanya menjadi SDK Enkripsi AWS Database. Panduan pengembang ini masih memberikan informasi tentang Klien Enkripsi [DynamoDB](legacy-dynamodb-encryption-client.md). | 

Topik ini menjelaskan konsep dan terminologi yang digunakan dalam AWS Database Encryption SDK. 

Untuk mempelajari bagaimana komponen SDK Enkripsi AWS Database berinteraksi, lihat[Cara kerja SDK Enkripsi AWS Database](how-it-works.md).

Untuk mempelajari lebih lanjut tentang SDK Enkripsi AWS Database, lihat topik berikut.
+ Pelajari cara SDK Enkripsi AWS Database menggunakan [enkripsi amplop](#envelope-encryption) untuk melindungi data Anda.
+ Pelajari tentang elemen enkripsi amplop: [kunci data](#data-key) yang melindungi catatan Anda dan kunci [pembungkus yang melindungi kunci](#wrapping-key) data Anda. 
+ Pelajari tentang [gantungan kunci](#keyring-concept) yang menentukan kunci pembungkus yang Anda gunakan.
+ Pelajari tentang [konteks enkripsi](#encryption-context) yang menambahkan integritas pada proses enkripsi Anda.
+ Pelajari tentang [deskripsi materi](#material-description) yang ditambahkan metode enkripsi ke catatan Anda.
+ Pelajari tentang [tindakan kriptografi](#crypt-actions) yang memberi tahu SDK Enkripsi AWS Database bidang apa yang harus dienkripsi dan ditandatangani.

**Topics**
+ [Enkripsi amplop](#envelope-encryption)
+ [Kunci data](#data-key)
+ [Kunci pembungkus](#wrapping-key)
+ [Gantungan kunci](#keyring-concept)
+ [Tindakan kriptografi](#crypt-actions)
+ [Deskripsi materi](#material-description)
+ [Konteks enkripsi](#encryption-context)
+ [Manajer materi kriptografi](#crypt-materials-manager)
+ [Enkripsi simetris dan asimetris](#symmetric-key-encryption)
+ [Komitmen utama](#key-commitment)
+ [Tanda tangan digital](#digital-sigs)

## Enkripsi amplop
<a name="envelope-encryption"></a>

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](#wrapping-key). Praktek menggunakan kunci pembungkus untuk mengenkripsi kunci data dikenal sebagai enkripsi *amplop*.

**Melindungi kunci data**  
 AWS Database Encryption SDK mengenkripsi setiap bidang dengan kunci data yang unik. Kemudian mengenkripsi setiap kunci data di bawah kunci pembungkus yang Anda tentukan. Ini menyimpan kunci data terenkripsi dalam deskripsi [materi](#material-description).  
Untuk menentukan kunci pembungkus Anda, Anda menggunakan [keyring](#keyring-concept).  

![\[Enkripsi amplop dengan SDK Enkripsi AWS Database\]](http://docs.aws.amazon.com/id_id/database-encryption-sdk/latest/devguide/images/dbesdk-envelope.png)


**Mengenkripsi data yang sama di bawah beberapa kunci pembungkus**  
Anda dapat mengenkripsi kunci data dengan beberapa tombol 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 [Database Encryption SDK menyimpan semua kunci data terenkripsi bersama bidang terenkripsi dalam deskripsi material.](#material-description)  
Untuk mendekripsi data, Anda harus menyediakan setidaknya satu kunci pembungkus yang dapat mendekripsi kunci data terenkripsi.

**Menggabungkan kekuatan dari beberapa algoritme**  
[Untuk mengenkripsi data Anda, secara default, AWS Database Encryption SDK menggunakan [rangkaian algoritme](supported-algorithms.md) dengan enkripsi simetris AES-GCM, fungsi derivasi kunci berbasis HMAC (HKDF), dan penandatanganan ECDSA.](#digital-sigs) Untuk mengenkripsi kunci data, Anda dapat menentukan [algoritma enkripsi simetris atau asimetris](#symmetric-key-encryption) 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.* Tetapi algoritma kunci publik memberikan pemisahan peran yang melekat. Untuk menggabungkan kekuatan masing-masing, Anda dapat mengenkripsi kunci data dengan enkripsi kunci publik.  
Kami merekomendasikan menggunakan salah satu AWS KMS gantungan kunci bila memungkinkan. Saat Anda menggunakan [AWS KMS keyring](use-kms-keyring.md), Anda dapat memilih untuk menggabungkan kekuatan beberapa algoritma dengan menentukan RSA AWS KMS key asimetris sebagai kunci pembungkus Anda. Anda juga dapat menggunakan kunci KMS enkripsi simetris.

## Kunci data
<a name="data-key"></a>

*Kunci data adalah kunci* enkripsi yang digunakan SDK Enkripsi AWS Database untuk mengenkripsi bidang dalam catatan yang ditandai `ENCRYPT_AND_SIGN` dalam tindakan [kriptografi](#crypt-actions). Setiap kunci data adalah array byte yang sesuai dengan persyaratan untuk kunci kriptografi. AWS Database Encryption SDK menggunakan kunci data unik untuk mengenkripsi setiap atribut.

Anda tidak perlu menentukan, menghasilkan, mengimplementasikan, memperluas, melindungi, atau menggunakan kunci data. SDK Enkripsi AWS Database berfungsi untuk Anda saat Anda memanggil operasi enkripsi dan dekripsi. 

[Untuk melindungi kunci data Anda, AWS Database Encryption SDK mengenkripsi mereka di bawah satu atau beberapa kunci *enkripsi kunci yang dikenal sebagai kunci pembungkus*.](#wrapping-key) Setelah SDK Enkripsi AWS Database menggunakan kunci data teks biasa Anda untuk mengenkripsi data Anda, itu akan menghapusnya dari memori sesegera mungkin. Kemudian menyimpan kunci data terenkripsi dalam deskripsi [materi](#material-description). Lihat perinciannya di [Cara kerja SDK Enkripsi AWS Database](how-it-works.md).

**Tip**  
Dalam SDK Enkripsi AWS Database, kami membedakan *kunci data dari kunci* *enkripsi data*. Sebagai praktik terbaik, semua [suite algoritma](supported-algorithms.md) yang didukung menggunakan [fungsi derivasi kunci](https://en.wikipedia.org/wiki/Key_derivation_function). Fungsi derivasi kunci mengambil kunci data sebagai input dan mengembalikan kunci enkripsi data yang sebenarnya digunakan untuk mengenkripsi catatan Anda. 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 memungkinkan SDK Enkripsi AWS Database mengidentifikasi kunci pembungkus yang valid saat mendekripsi.

## Kunci pembungkus
<a name="wrapping-key"></a>

Kunci *pembungkus adalah kunci* enkripsi kunci yang digunakan SDK Enkripsi AWS Database untuk mengenkripsi [kunci data](#data-key) yang mengenkripsi catatan Anda. Setiap kunci data dapat dienkripsi di bawah satu atau lebih kunci pembungkus. Anda menentukan kunci pembungkus mana yang digunakan untuk melindungi data Anda saat Anda mengonfigurasi [keyring](#keyring-concept).

![\[Enkripsi satu kunci data dengan beberapa tombol pembungkus\]](http://docs.aws.amazon.com/id_id/database-encryption-sdk/latest/devguide/images/dbesdk-wrapping-key.png)


 AWS Database Encryption SDK mendukung beberapa kunci pembungkus yang umum digunakan, seperti [AWS Key Management Service](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#master_keys)(AWS KMS) kunci KMS enkripsi simetris (termasuk kunci [Multi-region) dan kunci KMS RSA asimetris, AWS KMS kunci](use-kms-keyring.md#config-mrks) [mentah AES-GCM (Advanced Encryption Counter Mode), dan kunci](https://docs.aws.amazon.com/kms/latest/developerguide/asymmetric-key-specs.html#key-spec-rsa) RSA mentah. Standard/Galois Kami merekomendasikan menggunakan tombol KMS bila memungkinkan. Untuk memutuskan kunci pembungkus mana yang harus Anda gunakan, lihat [Memilih kunci pembungkus](configure.md#config-keys).

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:
+ Gunakan layanan yang dirancang untuk tujuan ini, seperti [AWS Key Management Service (AWS KMS)](https://aws.amazon.com/kms/).
+ Gunakan [modul keamanan perangkat keras (HSM)](https://en.wikipedia.org/wiki/Hardware_security_module) seperti yang ditawarkan oleh [AWS CloudHSM](https://aws.amazon.com/cloudhsm/).
+ Gunakan alat dan layanan manajemen kunci lainnya.

Jika Anda tidak memiliki sistem manajemen kunci, kami sarankan AWS KMS. SDK Enkripsi AWS Database terintegrasi AWS KMS untuk membantu Anda melindungi dan menggunakan kunci pembungkus Anda.

## Gantungan kunci
<a name="keyring-concept"></a>

Untuk menentukan kunci pembungkus yang Anda gunakan untuk enkripsi dan dekripsi, Anda menggunakan keyring. Anda dapat menggunakan keyrings yang disediakan oleh AWS Database Encryption SDK atau mendesain implementasi Anda sendiri.

Sebuah *keyring* menghasilkan, mengenkripsi, dan mendekripsi kunci data. Ini juga menghasilkan kunci MAC yang digunakan untuk menghitung Kode Otentikasi Pesan Berbasis Hash (HMACs) dalam tanda tangan. Saat Anda menentukan keyring, Anda dapat menentukan kunci [pembungkus yang mengenkripsi kunci](#wrapping-key) data Anda. Kebanyakan keyrings menentukan setidaknya satu kunci pembungkus atau layanan yang menyediakan dan melindungi kunci pembungkus. Saat mengenkripsi, AWS Database Encryption SDK menggunakan semua kunci pembungkus yang ditentukan dalam keyring untuk mengenkripsi kunci data. [Untuk bantuan dalam memilih dan menggunakan keyrings yang didefinisikan oleh AWS Database Encryption SDK, lihat Menggunakan keyrings.](keyrings.md)

## Tindakan kriptografi
<a name="crypt-actions"></a>

*Tindakan kriptografi* memberi tahu enkripsi tindakan mana yang harus dilakukan pada setiap bidang dalam catatan. 

Nilai tindakan kriptografi dapat berupa salah satu dari yang berikut:
+ **Enkripsi dan tandatangani** — Enkripsi bidang. Sertakan bidang terenkripsi dalam tanda tangan.
+ **Hanya tanda** tangan — Sertakan bidang di tanda tangan.
+ **Masuk dan sertakan dalam konteks enkripsi** — Sertakan bidang dalam [konteks tanda tangan dan enkripsi](#encryption-context).

  Secara default, kunci partisi dan sortir adalah satu-satunya atribut yang disertakan dalam konteks enkripsi. Anda dapat mempertimbangkan untuk mendefinisikan bidang tambahan `SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT` agar pemasok ID kunci cabang untuk [keyring AWS KMS Hierarkis](use-hierarchical-keyring.md) Anda dapat mengidentifikasi kunci cabang mana yang diperlukan untuk dekripsi dari konteks enkripsi. Untuk informasi selengkapnya, lihat [pemasok ID kunci cabang](use-hierarchical-keyring.md#branch-key-id-supplier).
**catatan**  
Untuk menggunakan tindakan `SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT` kriptografi, Anda harus menggunakan SDK Enkripsi AWS Database versi 3.3 atau yang lebih baru. Terapkan versi baru ke semua pembaca sebelum [memperbarui model data Anda](ddb-update-data-model.md) untuk disertakan`SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT`.
+ **Jangan melakukan apa-apa** — Jangan mengenkripsi atau menyertakan bidang dalam tanda tangan.

Untuk bidang apa pun yang dapat menyimpan data sensitif, gunakan **Enkripsi dan tandatangani**. Untuk nilai kunci primer (misalnya, kunci partisi dan kunci sortir dalam tabel DynamoDB), **gunakan Sign only atau Sign** **dan sertakan** dalam konteks enkripsi. Jika Anda menentukan **Tanda dan menyertakan atribut konteks enkripsi**, maka atribut partisi dan sortir juga harus **Tanda dan sertakan dalam konteks enkripsi**. Anda tidak perlu menentukan tindakan kriptografi untuk [deskripsi materi](#material-description). SDK Enkripsi AWS Database secara otomatis menandatangani bidang tempat deskripsi materi disimpan.

Pilih tindakan kriptografi Anda dengan hati-hati. Bila ragu, gunakan **Enkripsi dan tanda tangan**. Setelah Anda menggunakan SDK Enkripsi AWS Database untuk melindungi catatan Anda, Anda tidak dapat mengubah `SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT` bidang yang ada `ENCRYPT_AND_SIGN``SIGN_ONLY`, atau menjadi`DO_NOTHING`, atau mengubah tindakan kriptografi yang ditetapkan ke bidang yang ada`DO_NOTHING`. Namun, Anda masih dapat [membuat perubahan lain pada model data Anda](ddb-update-data-model.md). Misalnya, Anda dapat menambahkan atau menghapus bidang terenkripsi, dalam satu penerapan.

## Deskripsi materi
<a name="material-description"></a>

Deskripsi materi berfungsi sebagai header untuk catatan terenkripsi. Saat Anda mengenkripsi dan menandatangani bidang dengan SDK Enkripsi AWS Database, enkripsi mencatat deskripsi materi saat merakit materi kriptografi dan menyimpan deskripsi materi di bidang baru (`aws_dbe_head`) yang ditambahkan enkripsi ke catatan Anda.

Deskripsi materi adalah [struktur data berformat](reference.md#material-description-format) portabel yang berisi salinan terenkripsi dari kunci data dan informasi lainnya, seperti algoritma enkripsi, [konteks enkripsi, dan instruksi enkripsi](#encryption-context) dan penandatanganan. Enkripsi mencatat deskripsi materi saat merakit bahan kriptografi untuk enkripsi dan penandatanganan. Kemudian, ketika perlu merakit bahan kriptografi untuk memverifikasi dan mendekripsi suatu bidang, ia menggunakan deskripsi materi sebagai panduannya.

Menyimpan kunci data terenkripsi di samping bidang 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 deskripsi materi, lihat[Format deskripsi bahan](reference.md#material-description-format).

## Konteks enkripsi
<a name="encryption-context"></a>

Untuk meningkatkan keamanan operasi kriptografi Anda, AWS Database Encryption SDK menyertakan konteks enkripsi dalam semua permintaan untuk mengenkripsi dan menandatangani catatan.

*Konteks enkripsi* adalah sekumpulan pasangan nama-nilai yang berisi data otentikasi tambahan non-rahasia yang arbitrer. AWS Database Encryption SDK menyertakan nama logis untuk database Anda dan nilai kunci primer (misalnya, kunci partisi dan kunci sortir dalam tabel DynamoDB) dalam konteks enkripsi. Saat Anda mengenkripsi dan menandatangani bidang, konteks enkripsi terikat secara kriptografis ke catatan terenkripsi sehingga konteks enkripsi yang sama diperlukan untuk mendekripsi bidang tersebut.

Jika Anda menggunakan AWS KMS keyring, SDK Enkripsi AWS Database juga menggunakan konteks enkripsi untuk menyediakan data terautentikasi tambahan (AAD) dalam panggilan yang dilakukan oleh keyring. AWS KMS

Setiap kali Anda menggunakan [rangkaian algoritme default](supported-algorithms.md#recommended-algorithms), [manajer bahan kriptografi](#crypt-materials-manager) (CMM) menambahkan pasangan nama-nilai ke konteks enkripsi yang terdiri dari nama yang dicadangkan`aws-crypto-public-key`, dan nilai yang mewakili kunci verifikasi publik. Kunci verifikasi publik disimpan dalam [deskripsi materi](#material-description).

## Manajer materi kriptografi
<a name="crypt-materials-manager"></a>

Manajer bahan kriptografi (CMM) merakit materi kriptografi yang digunakan untuk mengenkripsi, mendekripsi, dan menandatangani data Anda. Setiap kali Anda menggunakan [rangkaian algoritme default](supported-algorithms.md#recommended-algorithms), *materi kriptografi* mencakup teks biasa dan kunci data terenkripsi, kunci penandatanganan simetris, dan kunci penandatanganan asimetris. Anda tidak pernah berinteraksi dengan CMM secara langsung. Metode enkripsi dan dekripsi menanganinya untuk Anda.

Karena CMM bertindak sebagai penghubung antara SDK Enkripsi AWS Database dan keyring, ini adalah titik ideal untuk penyesuaian dan ekstensi, seperti dukungan untuk penegakan kebijakan. Anda dapat secara eksplisit menentukan CMM, tetapi itu tidak diperlukan. Saat Anda menentukan keyring, AWS Database Encryption SDK akan membuat CMM default untuk Anda. CMM default mendapatkan materi enkripsi atau dekripsi dari keyring yang Anda tentukan. Ini mungkin melibatkan panggilan ke layanan kriptografi, seperti [AWS Key Management Service](https://docs.aws.amazon.com/kms/latest/developerguide/)(AWS KMS).

## Enkripsi simetris dan asimetris
<a name="symmetric-key-encryption"></a>

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

SDK Enkripsi AWS Database menggunakan enkripsi [amplop](#envelope-encryption). Ini mengenkripsi data Anda dengan kunci data simetris. Ini mengenkripsi kunci data simetris dengan satu atau lebih tombol pembungkus simetris atau asimetris. Ini menambahkan [deskripsi material](#material-description) ke catatan yang mencakup setidaknya satu salinan kunci data terenkripsi.

**Mengenkripsi data Anda (enkripsi simetris)**  
Untuk mengenkripsi data Anda, AWS Database Encryption SDK menggunakan [kunci data](#data-key) simetris dan [rangkaian algoritma yang menyertakan algoritma](supported-algorithms.md) enkripsi simetris. Untuk mendekripsi data, AWS Database Encryption SDK menggunakan kunci data yang sama dan rangkaian algoritma yang sama.

**Mengenkripsi kunci data Anda (enkripsi simetris atau asimetris)**  
[Keyring](#keyring-concept) yang Anda berikan ke operasi enkripsi dan dekripsi menentukan bagaimana kunci data simetris dienkripsi dan didekripsi. Anda dapat memilih keyring yang menggunakan enkripsi simetris, seperti AWS KMS keyring dengan kunci KMS enkripsi simetris, atau yang menggunakan enkripsi asimetris, seperti AWS KMS keyring dengan kunci KMS RSA asimetris.

## Komitmen utama
<a name="key-commitment"></a>

 AWS Database Encryption SDK mendukung *komitmen utama* (kadang-kadang dikenal sebagai *ketahanan*), properti keamanan yang memastikan bahwa setiap ciphertext dapat didekripsi hanya untuk satu plaintext. Untuk melakukan ini, komitmen utama memastikan bahwa hanya kunci data yang mengenkripsi catatan Anda yang akan digunakan untuk mendekripsi itu. SDK Enkripsi AWS Database mencakup komitmen utama untuk semua operasi enkripsi dan dekripsi.

Sebagian besar cipher simetris modern (termasuk AES) mengenkripsi plaintext di bawah satu kunci rahasia, seperti [kunci data unik](#data-key) yang digunakan AWS Database Encryption SDK untuk mengenkripsi setiap bidang plaintext yang ditandai dalam catatan. `ENCRYPT_AND_SIGN` Mendekripsi catatan ini dengan kunci data yang sama mengembalikan plaintext yang identik dengan aslinya. Mendekripsi dengan kunci yang berbeda biasanya akan gagal. Meskipun sulit, secara teknis dimungkinkan untuk mendekripsi ciphertext di bawah dua kunci yang berbeda. Dalam kasus yang jarang terjadi, adalah layak untuk menemukan kunci yang sebagian dapat mendekripsi ciphertext menjadi teks biasa yang berbeda, tetapi masih dapat dipahami.

 AWS Database Encryption SDK selalu mengenkripsi setiap atribut di bawah satu kunci data unik. Mungkin mengenkripsi kunci data itu di bawah beberapa kunci pembungkus, tetapi kunci pembungkus selalu mengenkripsi kunci data yang sama. Meskipun demikian, catatan 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 catatan terenkripsi, ia mengembalikan 0x0 (false) sementara pengguna lain yang mendekripsi catatan terenkripsi yang sama mendapat 0x1 (true).

Untuk mencegah skenario ini, AWS Database Encryption SDK menyertakan komitmen utama saat mengenkripsi dan mendekripsi. Metode enkripsi secara kriptografis mengikat kunci data unik yang menghasilkan ciphertext ke *komitmen kunci*, Hash Based Message Authentication Code (HMAC) dihitung atas deskripsi material menggunakan derivasi dari kunci data. Kemudian menyimpan komitmen utama dalam [deskripsi materi](#material-description). Saat mendekripsi catatan dengan komitmen utama, SDK Enkripsi AWS Database memverifikasi bahwa kunci data adalah satu-satunya kunci untuk catatan terenkripsi tersebut. Jika verifikasi kunci data gagal, operasi dekripsi gagal.

## Tanda tangan digital
<a name="digital-sigs"></a>

SDK Enkripsi AWS Database mengenkripsi 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, [rangkaian algoritme default](supported-algorithms.md#recommended-algorithms) menambahkan tanda tangan Elliptic Curve Digital Signature Algorithm (ECDSA) ke catatan terenkripsi. Rangkaian algoritme default mengenkripsi bidang dalam catatan Anda yang ditandai `ENCRYPT_AND_SIGN` menggunakan algoritma enkripsi yang diautentikasi, AES-GCM. Kemudian, ia menghitung Kode Otentikasi Pesan Berbasis Hash (HMACs) dan tanda tangan ECDSA asimetris atas bidang dalam catatan Anda yang ditandai,, dan. `ENCRYPT_AND_SIGN` `SIGN_ONLY` `SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT` Proses dekripsi menggunakan tanda tangan untuk memverifikasi bahwa pengguna yang berwenang mengenkripsi catatan.

Ketika rangkaian algoritme default digunakan, SDK Enkripsi AWS Database menghasilkan kunci pribadi sementara dan public key pair untuk setiap record terenkripsi. SDK Enkripsi AWS Database menyimpan kunci publik dalam [deskripsi materi](#material-description) 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 dalam deskripsi materi, mencegah pengguna yang hanya dapat mendekripsi bidang dari mengubah kunci publik atau memengaruhi verifikasi tanda tangan.

SDK Enkripsi AWS Database selalu menyertakan verifikasi HMAC. Tanda tangan digital ECDSA diaktifkan secara default, tetapi tidak diperlukan. Jika pengguna yang mengenkripsi data dan pengguna yang mendekripsi data sama-sama dipercaya, Anda dapat mempertimbangkan untuk menggunakan rangkaian algoritme yang tidak menyertakan tanda tangan digital untuk meningkatkan kinerja Anda. Untuk informasi selengkapnya tentang memilih rangkaian algoritme alternatif, lihat [Memilih rangkaian algoritma](ddb-java-using.md#config-algorithm).

**catatan**  
Jika keyring tidak menggambarkan antara enkripsi dan dekripsi, tanda tangan digital tidak memberikan nilai kriptografi.

[AWS KMS keyrings](use-kms-keyring.md), termasuk AWS KMS keyring RSA asimetris, dapat menggambarkan antara enkripsi dan dekripsi berdasarkan kebijakan utama dan kebijakan IAM. AWS KMS 

Karena sifat kriptografinya, gantungan kunci berikut tidak dapat menggambarkan antara enkripsi dan dekripsi:
+ AWS KMS Gantungan kunci hierarkis
+ AWS KMS Gantungan kunci ECDH
+ Gantungan kunci AES mentah
+ Gantungan kunci RSA mentah
+ Gantungan kunci ECDH mentah

# Cara kerja SDK Enkripsi AWS Database
<a name="how-it-works"></a>


****  

|  | 
| --- |
| Pustaka enkripsi sisi klien kami diubah namanya menjadi SDK Enkripsi AWS Database. Panduan pengembang ini masih memberikan informasi tentang Klien Enkripsi [DynamoDB](legacy-dynamodb-encryption-client.md). | 

 AWS Database Encryption SDK menyediakan pustaka enkripsi sisi klien yang dirancang khusus untuk melindungi data yang Anda simpan dalam database. Pustakanya meliputi implementasi aman yang dapat Anda perluas atau gunakan tanpa perubahan. Untuk informasi selengkapnya tentang mendefinisikan dan menggunakan komponen kustom, lihat GitHub repositori untuk implementasi database Anda.

Alur kerja di bagian ini menjelaskan cara SDK Enkripsi AWS Database mengenkripsi dan menandatangani serta mendekripsi serta memverifikasi data dalam database Anda. Alur kerja ini menjelaskan proses dasar menggunakan elemen abstrak dan fitur default. Untuk detail tentang cara kerja SDK Enkripsi AWS Database dengan implementasi database Anda, lihat topik *Apa yang dienkripsi* untuk database Anda.

 AWS Database Encryption SDK menggunakan [enkripsi amplop](concepts.md#envelope-encryption) untuk melindungi data Anda. Setiap catatan dienkripsi di bawah kunci [data](concepts.md#data-key) unik. Kunci data digunakan untuk mendapatkan *kunci enkripsi data* unik untuk setiap bidang yang ditandai `ENCRYPT_AND_SIGN` dalam tindakan kriptografi Anda. Kemudian, salinan kunci data dienkripsi oleh kunci pembungkus yang Anda tentukan. Untuk mendekripsi catatan terenkripsi, AWS Database Encryption SDK menggunakan kunci pembungkus yang Anda tentukan untuk mendekripsi setidaknya satu kunci data terenkripsi. Kemudian dapat mendekripsi ciphertext dan mengembalikan entri plaintext.

Untuk informasi selengkapnya tentang istilah yang digunakan dalam SDK Enkripsi AWS Database, lihat[AWS Konsep SDK Enkripsi Database](concepts.md).

## Enkripsi dan tandatangani
<a name="encrypt-and-sign"></a>

Pada intinya, AWS Database Encryption SDK adalah enkripsi rekaman yang mengenkripsi, menandatangani, memverifikasi, dan mendekripsi catatan dalam database Anda. Dibutuhkan informasi tentang catatan dan instruksi Anda tentang bidang mana yang akan dienkripsi dan ditandatangani. Ini mendapatkan materi enkripsi, dan instruksi tentang cara menggunakannya, dari [manajer bahan kriptografi](concepts.md#crypt-materials-manager) yang dikonfigurasi dari kunci pembungkus yang Anda tentukan.

Panduan berikut menjelaskan cara SDK Enkripsi AWS Database mengenkripsi dan menandatangani entri data Anda.

1. Manajer bahan kriptografi menyediakan SDK Enkripsi AWS Database dengan kunci enkripsi data unik: satu kunci [data teks biasa, salinan kunci data](concepts.md#data-key) yang dienkripsi oleh kunci [pembungkus](concepts.md#wrapping-key) yang ditentukan, dan kunci MAC.
**catatan**  
Anda dapat mengenkripsi kunci data di bawah beberapa kunci pembungkus. Masing-masing kunci pembungkus mengenkripsi salinan terpisah dari kunci data. AWS [Database Encryption SDK menyimpan semua kunci data terenkripsi dalam deskripsi material.](concepts.md#material-description) AWS Database Encryption SDK menambahkan field baru (`aws_dbe_head`) ke record yang menyimpan deskripsi material.  
Kunci MAC diturunkan untuk setiap salinan kunci data yang dienkripsi. Tombol MAC tidak disimpan dalam deskripsi materi. Sebagai gantinya, metode dekripsi menggunakan kunci pembungkus untuk mendapatkan kunci MAC lagi.

1. Metode enkripsi mengenkripsi setiap bidang yang ditandai seperti `ENCRYPT_AND_SIGN` dalam [tindakan kriptografi](concepts.md#crypt-actions) yang Anda tentukan.

1. Metode enkripsi berasal `commitKey` dari kunci data dan menggunakannya untuk menghasilkan [nilai komitmen kunci](concepts.md#key-commitment), dan kemudian membuang kunci data.

1. Metode enkripsi menambahkan [deskripsi material](concepts.md#material-description) ke catatan. Deskripsi materi berisi kunci data terenkripsi dan informasi lain tentang catatan terenkripsi. Untuk daftar lengkap informasi yang disertakan dalam deskripsi materi, lihat [Format deskripsi materi](reference.md#material-description-format).

1. Metode enkripsi menggunakan kunci MAC yang dikembalikan pada **Langkah 1** untuk menghitung nilai Kode Otentikasi Pesan Berbasis Hash (HMAC) di atas kanonikalisasi deskripsi material, [konteks enkripsi](concepts.md#encryption-context), dan setiap bidang yang ditandai `ENCRYPT_AND_SIGN``SIGN_ONLY`, atau dalam tindakan kriptografi. `SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT` Nilai HMAC disimpan dalam bidang baru (`aws_dbe_foot`) yang ditambahkan metode enkripsi ke catatan.

1. Metode enkripsi menghitung [tanda tangan ECDSA](concepts.md#digital-sigs) atas kanonikalisasi deskripsi material, konteks enkripsi, dan setiap bidang yang ditandai `ENCRYPT_AND_SIGN``SIGN_ONLY`, atau `SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT` dan menyimpan tanda tangan ECDSA di lapangan. `aws_dbe_foot`
**catatan**  
Tanda tangan ECDSA diaktifkan secara default, tetapi tidak diperlukan.

1. Metode enkripsi menyimpan catatan terenkripsi dan ditandatangani dalam database Anda

## Dekripsi dan verifikasi
<a name="decrypt-and-verify"></a>

1. [Manajer bahan kriptografi (CMM) menyediakan metode dekripsi dengan bahan dekripsi yang disimpan dalam deskripsi materi, termasuk kunci data teks biasa dan kunci MAC terkait.](concepts.md#data-key)

   1. CMM mendekripsi kunci data terenkripsi dengan kunci [pembungkus di keyring yang ditentukan dan mengembalikan kunci](concepts.md#wrapping-key) data plaintext.

1. Metode dekripsi membandingkan dan memverifikasi nilai komitmen utama dalam deskripsi material.

1. Metode dekripsi memverifikasi tanda tangan di bidang tanda tangan.

   Ini mengidentifikasi bidang mana yang ditandai`ENCRYPT_AND_SIGN`,`SIGN_ONLY`, atau `SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT` dari daftar bidang tidak [diautentikasi yang diizinkan yang Anda tetapkan](ddb-java-using.md#allowed-unauth). Metode dekripsi menggunakan kunci MAC yang dikembalikan pada **Langkah 1** untuk menghitung ulang dan membandingkan nilai HMAC untuk bidang yang ditandai,, atau. `ENCRYPT_AND_SIGN` `SIGN_ONLY` `SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT` [Kemudian, memverifikasi [tanda tangan ECDSA](concepts.md#digital-sigs) menggunakan kunci publik yang disimpan dalam konteks enkripsi.](concepts.md#encryption-context)

1. Metode dekripsi menggunakan kunci data plaintext untuk mendekripsi setiap nilai yang ditandai. `ENCRYPT_AND_SIGN` AWS Database Encryption SDK kemudian membuang kunci data plaintext.

1. Metode dekripsi mengembalikan catatan plaintext.

# Rangkaian algoritme yang didukung di SDK Enkripsi AWS Database
<a name="supported-algorithms"></a>


****  

|  | 
| --- |
| Pustaka enkripsi sisi klien kami diubah namanya menjadi SDK Enkripsi AWS Database. Panduan pengembang ini masih memberikan informasi tentang Klien Enkripsi [DynamoDB](legacy-dynamodb-encryption-client.md). | 

Sebuah *algoritma suite* adalah kumpulan algoritma kriptografi dan nilai-nilai terkait. Sistem kriptografi menggunakan implementasi algoritma untuk menghasilkan ciphertext.

SDK Enkripsi AWS Database menggunakan rangkaian algoritme untuk mengenkripsi dan menandatangani bidang di database Anda. Semua suite algoritma yang didukung menggunakan algoritma Advanced Encryption Standard (AES) dengan Galois/Counter Mode (GCM), yang dikenal sebagai AES-GCM, untuk mengenkripsi data mentah. AWS Database Encryption SDK mendukung kunci enkripsi 256-bit. Panjang tag otentikasi selalu 16 byte.


**AWS Enkripsi Database SDK Algoritma Suites**  

| Algoritme | Enkripsi algoritme | Panjang kunci data (dalam bit) | Algoritma derivasi kunci | Algoritma tanda tangan simetris | Algoritma tanda tangan asimetris | Komitmen utama | 
| --- | --- | --- | --- | --- | --- | --- | 
| Default | AES-GCM | 256 | HKDF dengan SHA-512 | HMAC-SHA-384 | ECDSA dengan P-384 dan SHA-384 | HKDF dengan SHA-512 | 
| AES-GCM tanpa tanda tangan digital ECDSA | AES-GCM | 256 | HKDF dengan SHA-512 | HMAC-SHA-384 | Tidak ada | HKDF dengan SHA-512 | 

**Enkripsi algoritme**  
Nama dan mode algoritma enkripsi yang digunakan. Suite algoritma dalam SDK Enkripsi AWS Database menggunakan algoritma Advanced Encryption Standard (AES) dengan Galois/Counter Mode (GCM).  


**Panjang kunci data**  
Panjang [kunci data](concepts.md#data-key) dalam bit. AWS Database Encryption SDK mendukung kunci data 256-bit. Kunci data digunakan sebagai input ke fungsi derivasi extract-and-expand kunci berbasis HMAC (HKDF). Output dari HKDF digunakan sebagai kunci enkripsi data dalam algoritma enkripsi.

**Algoritma derivasi kunci**  
Fungsi derivasi extract-and-expand kunci berbasis HMAC (HKDF) digunakan untuk menurunkan kunci enkripsi data. AWS [Database Encryption SDK menggunakan HKDF yang didefinisikan dalam RFC 5869.](https://tools.ietf.org/html/rfc5869)   
+ Fungsi hash yang digunakan adalah SHA-512
+ Untuk langkah ekstrak:
  + Tidak ada garam yang digunakan. Per RFC, garam diatur ke string nol.
  + Bahan kunci input adalah kunci data dari [keyring](concepts.md#keyring-concept).
+ Untuk langkah perluasan:
  + Kunci pseudorandom input adalah output dari langkah ekstrak.
  + Label kuncinya adalah byte yang dikodekan UTF-8 dari `DERIVEKEY` string dalam urutan byte endian besar.
  + Info input adalah gabungan dari ID algoritma dan label kunci (dalam urutan itu).
  + Panjang bahan kunci keluaran adalah **panjang kunci Data**. Output ini digunakan sebagai kunci enkripsi data dalam algoritma enkripsi.

**Algoritma tanda tangan simetris**  
Algoritma Hash Based Message Authentication Code (HMAC) digunakan untuk menghasilkan tanda tangan simetris. Semua suite algoritma yang didukung termasuk verifikasi HMAC.  
 AWS Database Encryption SDK membuat serialisasi deskripsi material dan semua bidang yang ditandai`ENCRYPT_AND_SIGN`,`SIGN_ONLY`, atau. `SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT` Kemudian, ia menggunakan HMAC dengan algoritma fungsi hash kriptografi (SHA-384) untuk menandatangani kanonikalisasi.  
Tanda tangan HMAC simetris disimpan di bidang baru (`aws_dbe_foot`) yang ditambahkan SDK Enkripsi AWS Database ke catatan.

**Algoritma tanda tangan asimetris**  
Algoritma tanda tangan digunakan untuk menghasilkan tanda tangan digital asimetris.  
 AWS Database Encryption SDK membuat serialisasi deskripsi material dan semua bidang yang ditandai`ENCRYPT_AND_SIGN`,`SIGN_ONLY`, atau. `SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT` Kemudian, ia menggunakan Elliptic Curve Digital Signature Algorithm (ECDSA) dengan spesifikasi berikut untuk menandatangani kanonikalisasi:  
+ Kurva elips yang digunakan adalah P-384, sebagaimana didefinisikan dalam [Digital Signature Standard (DSS) (FIPS PUB 186-4)](http://doi.org/10.6028/NIST.FIPS.186-4).
+ Fungsi hash yang digunakan adalah SHA-384.
Tanda tangan ECDSA asimetris disimpan dengan tanda tangan HMAC simetris di lapangan. `aws_dbe_foot`  
Tanda tangan digital ECDSA disertakan secara default, tetapi tidak diperlukan.

**Komitmen utama**  
Fungsi derivasi extract-and-expand kunci berbasis HMAC (HKDF) digunakan untuk menurunkan kunci komit.  
+ Fungsi hash yang digunakan adalah SHA-512
+ Untuk langkah ekstrak:
  + Tidak ada garam yang digunakan. Per RFC, garam diatur ke string nol.
  + Bahan kunci input adalah kunci data dari [keyring](concepts.md#keyring-concept).
+ Untuk langkah perluasan:
  + Kunci pseudorandom input adalah output dari langkah ekstrak.
  + Info masukan adalah byte yang dikodekan UTF-8 dari `COMMITKEY` string dalam urutan byte endian besar.
  + Panjang bahan kunci keluaran adalah 256 bit. Output ini digunakan sebagai kunci komit.
[Kunci komit menghitung [komitmen rekaman](reference.md#format-commitment), hash 256-bit Hash Based Message Authentication Code (HMAC) yang berbeda, di atas deskripsi materi.](reference.md#material-description-format) Untuk penjelasan teknis tentang menambahkan komitmen utama ke rangkaian algoritme, lihat [Key Committing AEADs](https://eprint.iacr.org/2020/1153) in Cryptology ePrint Archive. 

## Rangkaian algoritme default
<a name="recommended-algorithms"></a>

Secara default, AWS Database Encryption SDK menggunakan rangkaian algoritma dengan AES-GCM, fungsi derivasi extract-and-expand kunci berbasis HMAC (HKDF), verifikasi HMAC, tanda tangan digital ECDSA, komitmen kunci, dan kunci enkripsi 256-bit.

Rangkaian algoritme default mencakup verifikasi HMAC (tanda tangan simetris) dan tanda tangan [digital ECDSA](concepts.md#digital-sigs) (tanda tangan asimetris). Tanda tangan ini disimpan di bidang baru (`aws_dbe_foot`) yang ditambahkan SDK Enkripsi AWS Database ke catatan. Tanda tangan digital ECDSA sangat berguna ketika kebijakan otorisasi memungkinkan satu set pengguna untuk mengenkripsi data dan satu set pengguna yang berbeda untuk mendekripsi data.

Rangkaian algoritme default juga memperoleh [komitmen utama](concepts.md#key-commitment) — hash HMAC yang mengikat kunci data ke catatan. Nilai komitmen utama adalah HMAC yang dihitung dari deskripsi material dan kunci komit. Nilai komitmen utama kemudian disimpan dalam deskripsi materi. Komitmen utama memastikan bahwa setiap ciphertext hanya mendekripsi menjadi satu teks biasa. Mereka melakukan ini dengan memvalidasi kunci data yang digunakan sebagai input ke algoritma enkripsi. Saat mengenkripsi, rangkaian algoritma memperoleh komitmen utama HMAC. Sebelum mendekripsi, mereka memvalidasi bahwa kunci data menghasilkan komitmen kunci yang sama HMAC. Jika tidak, panggilan dekripsi gagal.

## AES-GCM tanpa tanda tangan digital ECDSA
<a name="other-algorithms"></a>

Meskipun rangkaian algoritme default kemungkinan cocok untuk sebagian besar aplikasi, Anda dapat memilih rangkaian algoritme alternatif. Misalnya, beberapa model kepercayaan akan dipenuhi oleh rangkaian algoritma tanpa tanda tangan digital ECDSA. Gunakan suite ini hanya ketika pengguna yang mengenkripsi data dan pengguna yang mendekripsi data sama-sama dipercaya.

Semua rangkaian algoritma SDK Enkripsi AWS Database menyertakan verifikasi HMAC (tanda tangan simetris). Satu-satunya perbedaan, adalah bahwa rangkaian algoritma AES-GCM tanpa tanda tangan digital ECDSA tidak memiliki tanda tangan asimetris yang memberikan lapisan keaslian dan non-penolakan tambahan.

Misalnya, jika Anda memiliki beberapa kunci pembungkus di keyring,,, dan `wrappingKeyA` `wrappingKeyB``wrappingKeyC`, dan Anda mendekripsi rekaman menggunakan`wrappingKeyA`, tanda tangan simetris HMAC memverifikasi bahwa catatan dienkripsi oleh pengguna dengan akses ke. `wrappingKeyA` Jika Anda menggunakan rangkaian algoritme default, HMACs berikan verifikasi yang sama`wrappingKeyA`, dan juga menggunakan tanda tangan digital ECDSA untuk memastikan catatan dienkripsi oleh pengguna dengan izin enkripsi untuk. `wrappingKeyA`

Untuk memilih rangkaian algoritma AES-GCM tanpa tanda tangan digital, sertakan cuplikan berikut dalam konfigurasi enkripsi Anda.

------
#### [ Java ]

Cuplikan berikut menentukan rangkaian algoritma AES-GCM tanpa tanda tangan digital ECDSA. Untuk informasi selengkapnya, lihat [Konfigurasi enkripsi dalam SDK Enkripsi AWS Database untuk DynamoDB](ddb-java-using.md#ddb-config-encrypt).

```
.algorithmSuiteId(
    DBEAlgorithmSuiteId.ALG_AES_256_GCM_HKDF_SHA512_COMMIT_KEY_SYMSIG_HMAC_SHA384)
```

------
#### [ C\$1 / .NET ]

Cuplikan berikut menentukan rangkaian algoritma AES-GCM tanpa tanda tangan digital ECDSA. Untuk informasi selengkapnya, lihat [Konfigurasi enkripsi dalam SDK Enkripsi AWS Database untuk DynamoDB](ddb-net-using.md#ddb-net-config-encrypt).

```
AlgorithmSuiteId = DBEAlgorithmSuiteId.ALG_AES_256_GCM_HKDF_SHA512_COMMIT_KEY_SYMSIG_HMAC_SHA384
```

------
#### [ Rust ]

Cuplikan berikut menentukan rangkaian algoritma AES-GCM tanpa tanda tangan digital ECDSA. Lihat informasi yang lebih lengkap di [Konfigurasi enkripsi dalam SDK Enkripsi AWS Database untuk DynamoDB](ddb-rust-using.md#ddb-rust-config-encrypt).

```
.algorithm_suite_id(
    DbeAlgorithmSuiteId::AlgAes256GcmHkdfSha512CommitKeyEcdsaP384SymsigHmacSha384,
)
```

------