

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

# Penyedia bahan kriptografi
<a name="crypto-materials-providers"></a>

**catatan**  
Pustaka enkripsi sisi klien kami [diubah namanya menjadi AWS Database Encryption SDK](DDBEC-rename.md). Topik berikut memberikan informasi tentang versi 1. *x* —2. *x* dari DynamoDB Encryption Client untuk Java dan versi 1. *x* —3. *x* dari Klien Enkripsi DynamoDB untuk Python. Untuk informasi selengkapnya, lihat [SDK Enkripsi AWS Database untuk dukungan versi DynamoDB](legacy-dynamodb-encryption-client.md#legacy-support).

Salah satu keputusan terpenting yang Anda buat saat menggunakan DynamoDB Encryption Client adalah memilih [penyedia bahan kriptografi](DDBEC-legacy-concepts.md#concept-material-provider) (CMP). CMP merakit dan mengembalikan bahan kriptografi untuk enkriptor item. Hal ini juga menentukan bagaimana kunci enkripsi dan penandatanganan dihasilkan, apakah bahan kunci baru dihasilkan untuk setiap item atau digunakan kembali, serta algoritma enkripsi dan penandatanganan yang digunakan. 

Anda dapat memilih CMP dari implementasi yang disediakan di pustaka DynamoDB Encryption Client atau membangun CMP kustom yang kompatibel. Pilihan CMP Anda mungkin juga tergantung pada [bahasa pemrograman](programming-languages.md) yang Anda gunakan.

Topik ini menjelaskan yang paling umum CMPs dan menawarkan beberapa saran untuk membantu Anda memilih yang terbaik untuk aplikasi Anda.

**Penyedia Bahan KMS Langsung**  
Penyedia Bahan KMS Langsung melindungi item tabel Anda di bawah item [AWS KMS key](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#master_keys)yang tidak pernah meninggalkan [AWS Key Management Service](https://docs.aws.amazon.com/kms/latest/developerguide/)(AWS KMS) tidak terenkripsi. Aplikasi Anda tidak harus menghasilkan atau mengelola bahan kriptografi apa pun. Karena menggunakan AWS KMS key untuk menghasilkan enkripsi unik dan kunci penandatanganan untuk setiap item, penyedia ini memanggil AWS KMS setiap kali mengenkripsi atau mendekripsi item.   
Jika Anda menggunakan AWS KMS dan satu AWS KMS panggilan per transaksi praktis untuk aplikasi Anda, penyedia ini adalah pilihan yang baik.  
Lihat perinciannya di [Penyedia Bahan KMS Langsung](direct-kms-provider.md).

**Penyedia Bahan Terbungkus (CMP Terbungkus)**  
Penyedia Bahan Terbungkus (CMP Terbungkus) memungkinkan Anda menghasilkan dan mengelola kunci pembungkus dan penandatanganan di luar DynamoDB Encryption Client.   
CMP Terbungkus menghasilkan kunci enkripsi yang unik untuk setiap item. Kemudian itu menggunakan kunci pembungkus (atau pembuka bungkus) dan penandatanganan yang Anda berikan. Dengan demikian, Anda menentukan bagaimana kunci pembungkus dan penandatanganan dihasilkan dan apakah mereka itu unik untuk setiap item atau digunakan kembali. Wrapped CMP adalah alternatif yang aman untuk [Direct KMS Provider](direct-kms-provider.md) untuk aplikasi yang tidak menggunakan AWS KMS dan dapat mengelola materi kriptografi dengan aman.  
Lihat perinciannya di [Penyedia Materi Terbungkus](wrapped-provider.md).

**Penyedia Terbaru**  
*Penyedia Terbaru* adalah [penyedia bahan kriptografi](DDBEC-legacy-concepts.md#concept-material-provider) (CMP) yang dirancang untuk bekerja dengan [toko penyedia](DDBEC-legacy-concepts.md#provider-store). Itu didapat CMPs dari toko penyedia, dan mendapatkan materi kriptografi yang dikembalikan dari toko. CMPs Penyedia Terbaru biasanya menggunakan setiap CMP untuk memenuhi beberapa permintaan untuk bahan kriptografi, tetapi Anda dapat menggunakan fitur dari toko penyedia untuk mengendalikan sejauh mana bahan akan digunakan kembali, menentukan seberapa sering CMP dirotasi, dan bahkan mengubah jenis CMP yang digunakan tanpa mengubah Penyedia Terbaru.  
Anda dapat menggunakan Penyedia Terbaru dengan toko penyedia yang kompatibel. Klien Enkripsi DynamoDB mencakup, MetaStore yang merupakan toko penyedia yang mengembalikan Wrapped. CMPs  
Penyedia Terbaru adalah pilihan yang baik untuk aplikasi yang perlu meminimalkan panggilan ke sumber kriptografi mereka, dan aplikasi yang dapat menggunakan kembali beberapa bahan kriptografi tanpa melanggar persyaratan keamanan mereka. Misalnya, ini memungkinkan Anda untuk melindungi materi kriptografi Anda di bawah [AWS KMS key](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#master_keys)in [AWS Key Management Service](https://docs.aws.amazon.com/kms/latest/developerguide/)(AWS KMS) tanpa menelepon AWS KMS setiap kali Anda mengenkripsi atau mendekripsi item.  
Lihat perinciannya di [Penyedia Terbaru](most-recent-provider.md).

**Penyedia Bahan Statis**  
Penyedia Bahan Statis dirancang untuk pengujian, proof-of-concept demonstrasi, dan kompatibilitas lama. Penyedia ini tidak menghasilkan bahan kriptografi yang unik untuk setiap item. Ia mengembalikan enkripsi dan kunci penandatanganan yang sama yang Anda berikan, dan kunci-kunci tersebut digunakan langsung untuk mengenkripsi, mendekripsi, dan menandatangani item tabel Anda.   
[Penyedia Statis Asimetris](https://aws.github.io/aws-dynamodb-encryption-java/com/amazonaws/services/dynamodbv2/datamodeling/encryption/providers/AsymmetricStaticProvider.html) di pustaka Java bukan penyedia statis. Penyedia ini hanya memasok konstruktor alternatif untuk [CMP Terbungkus](wrapped-provider.md). Hal ini aman untuk penggunaan produksi, tetapi Anda harus menggunakan CMP Terbungkus langsung bila memungkinkan.

**Topics**
+ [Penyedia Bahan KMS Langsung](direct-kms-provider.md)
+ [Penyedia Materi Terbungkus](wrapped-provider.md)
+ [Penyedia Terbaru](most-recent-provider.md)
+ [Penyedia Materi Statis](static-provider.md)

# Penyedia Bahan KMS Langsung
<a name="direct-kms-provider"></a>

**catatan**  
Pustaka enkripsi sisi klien kami [diubah namanya menjadi AWS Database Encryption SDK](DDBEC-rename.md). Topik berikut memberikan informasi tentang versi 1. *x* —2. *x* dari DynamoDB Encryption Client untuk Java dan versi 1. *x* —3. *x* dari Klien Enkripsi DynamoDB untuk Python. Untuk informasi selengkapnya, lihat [SDK Enkripsi AWS Database untuk dukungan versi DynamoDB](legacy-dynamodb-encryption-client.md#legacy-support).

*Penyedia Bahan KMS Langsung (Penyedia* KMS Langsung) melindungi item tabel Anda di bawah item [AWS KMS key](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#master_keys)yang tidak pernah meninggalkan [AWS Key Management Service](https://docs.aws.amazon.com/kms/latest/developerguide/)(AWS KMS) tidak terenkripsi. [Penyedia bahan kriptografi](DDBEC-legacy-concepts.md#concept-material-provider) ini mengembalikan kunci enkripsi yang unik dan kunci penandatanganan untuk setiap item tabel. Untuk melakukannya, ia memanggil AWS KMS setiap kali Anda mengenkripsi atau mendekripsi item.

Jika Anda memproses item DynamoDB pada frekuensi tinggi dan skala besar, Anda mungkin melebihi batas, menyebabkan AWS KMS [requests-per-secondpenundaan](https://docs.aws.amazon.com/kms/latest/developerguide/limits.html#requests-per-second) pemrosesan. Jika Anda perlu melebihi batas, buat kasing di [AWS Dukungan Pusat](https://console.aws.amazon.com/support/home). Anda juga dapat mempertimbangkan untuk menggunakan penyedia bahan kriptografi dengan penggunaan kembali kunci secara terbatas, seperti [Penyedia Terbaru](most-recent-provider.md).

Untuk menggunakan Penyedia KMS Langsung, penelepon harus [memiliki Akun AWS](https://aws.amazon.com/premiumsupport/knowledge-center/create-and-activate-aws-account/), setidaknya satu AWS KMS key, dan izin untuk memanggil [GenerateDataKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKey.html)dan [mendekripsi operasi](https://docs.aws.amazon.com/kms/latest/APIReference/API_Decrypt.html) pada. AWS KMS key AWS KMS key Harus berupa kunci enkripsi simetris; Klien Enkripsi DynamoDB tidak mendukung enkripsi asimetris. Jika Anda menggunakan [tabel global DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/GlobalTables.html), Anda mungkin ingin menentukan [kunci multi-Wilayah AWS KMS](https://docs.aws.amazon.com/kms/latest/developerguide/multi-region-keys-overview.html). Lihat perinciannya di [Cara menggunakannya](#provider-kms-how-to-use).

**catatan**  
Saat Anda menggunakan Penyedia KMS Langsung, nama dan nilai atribut kunci utama Anda muncul dalam teks biasa dalam [konteks AWS KMS enkripsi](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#encrypt_context) dan AWS CloudTrail log operasi terkait. AWS KMS Namun, DynamoDB Encryption Client tidak pernah mengekspos plaintext dari nilai-nilai atribut terenkripsi.

Direct KMS Provider adalah salah satu dari beberapa [penyedia materi kriptografi](DDBEC-legacy-concepts.md#concept-material-provider) (CMPs) yang didukung oleh Klien Enkripsi DynamoDB. Untuk informasi tentang yang lain CMPs, lihat[Penyedia bahan kriptografi](crypto-materials-providers.md).

**Misalnya kode, lihat:**
+ Java: [AwsKmsEncryptedItem](https://github.com/aws/aws-dynamodb-encryption-java/blob/master/examples/src/main/java/com/amazonaws/examples/AwsKmsEncryptedItem.java)
+ Python:, [aws-kms-encrypted-table[aws-kms-encrypted-item](https://github.com/aws/aws-dynamodb-encryption-python/blob/master/examples/src/dynamodb_encryption_sdk_examples/aws_kms_encrypted_item.py)](https://github.com/aws/aws-dynamodb-encryption-python/blob/master/examples/src/dynamodb_encryption_sdk_examples/aws_kms_encrypted_table.py)

**Topics**
+ [Cara menggunakannya](#provider-kms-how-to-use)
+ [Cara kerjanya](#provider-kms-how-it-works)

## Cara menggunakannya
<a name="provider-kms-how-to-use"></a>

Untuk membuat Penyedia KMS Langsung, gunakan parameter ID kunci untuk menentukan [kunci KMS](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#master_keys) enkripsi simetris di akun Anda. Nilai parameter ID kunci dapat berupa ID kunci, ARN kunci, nama alias, atau alias ARN dari. AWS KMS key Untuk detail tentang pengidentifikasi kunci, lihat [Pengidentifikasi kunci](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#key-id) dalam *Panduan Developer AWS Key Management Service *.

Penyedia KMS Langsung memerlukan kunci KMS enkripsi simetris. Anda tidak dapat menggunakan kunci KMS asimetris. Namun, Anda dapat menggunakan kunci KMS Multi-wilayah, kunci KMS dengan bahan kunci yang diimpor, atau kunci KMS di toko kunci khusus. Anda harus memiliki izin [kms: GenerateDataKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKey.html) dan [kms:Decrypt](https://docs.aws.amazon.com/kms/latest/APIReference/API_Decrypt.html) pada kunci KMS. Dengan demikian, Anda harus menggunakan kunci yang dikelola pelanggan, bukan kunci KMS yang AWS dikelola atau AWS dimiliki.

Klien Enkripsi DynamoDB untuk Python menentukan Wilayah untuk AWS KMS memanggil dari Wilayah dalam nilai parameter ID kunci, jika termasuk satu. Jika tidak, ia menggunakan Wilayah di AWS KMS klien, jika Anda menentukan satu, atau Wilayah yang Anda konfigurasikan di AWS SDK untuk Python (Boto3). Untuk informasi tentang pemilihan Wilayah dengan Python, lihat [Konfigurasi](https://boto3.amazonaws.com/v1/documentation/api/latest/guide/configuration.html) di AWS SDK for Python (Boto3) API Referensi.

Klien Enkripsi DynamoDB untuk Java menentukan Wilayah untuk AWS KMS memanggil dari Wilayah di AWS KMS klien, jika klien yang Anda tentukan menyertakan Wilayah. Jika tidak, ia akan menggunakan Wilayah yang Anda konfigurasi di AWS SDK untuk Java. Untuk informasi tentang pemilihan Wilayah di AWS SDK untuk Java, lihat [Wilayah AWS seleksi](https://docs.aws.amazon.com/sdk-for-java/v1/developer-guide/java-dg-region-selection.html) di Panduan AWS SDK untuk Java Pengembang.

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

```
// Replace the example key ARN and Region with valid values for your application
final String keyArn = 'arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab'
final String region = 'us-west-2'
      
final AWSKMS kms = AWSKMSClientBuilder.standard().withRegion(region).build();
final DirectKmsMaterialProvider cmp = new DirectKmsMaterialProvider(kms, keyArn);
```

------
#### [ Python ]

Contoh berikut menggunakan kunci ARN untuk menentukan. AWS KMS key Jika pengenal kunci Anda tidak menyertakan Wilayah AWS, Klien Enkripsi DynamoDB mendapatkan Wilayah dari sesi Botocore yang dikonfigurasi, jika ada, atau dari default Boto.

```
# Replace the example key ID with a valid value
kms_key = 'arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab'
kms_cmp = AwsKmsCryptographicMaterialsProvider(key_id=kms_key)
```

------

Jika Anda menggunakan tabel [global Amazon DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/GlobalTables.html), sebaiknya enkripsi data Anda di bawah kunci Multi-wilayah. AWS KMS Kunci Multi-Region berbeda Wilayah AWS yang dapat digunakan secara bergantian karena memiliki ID kunci dan bahan kunci yang sama. AWS KMS keys Untuk detailnya, lihat [Menggunakan kunci multi-Wilayah](https://docs.aws.amazon.com/kms/latest/developerguide/multi-region-keys-overview.html) dalam *Panduan Developer AWS Key Management Service *.

**catatan**  
Jika Anda menggunakan tabel global [versi 2017.11.29](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/globaltables.V1.html), Anda harus menetapkan tindakan atribut agar bidang replikasi yang dicadangkan tidak dienkripsi atau ditandatangani. Lihat perinciannya di [Masalah dengan tabel global versi lama](troubleshooting.md#fix-global-tables).

Untuk menggunakan kunci multi-Wilayah dengan DynamoDB Encryption Client, buat kunci multi-Wilayah dan replikasi ke Wilayah di mana aplikasi Anda berjalan. Kemudian konfigurasi Penyedia Langsung KMS untuk menggunakan kunci multi-Wilayah di wilayah di mana klien DynamoDB Encryption Client memanggil AWS KMS.

Contoh berikut mengonfigurasi DynamoDB Encryption Client untuk mengenkripsi data di Wilayah AS Timur (N. Virginia) (us-east-1) dan mendekripsi di Wilayah AS Barat (Oregon) (us-west-2) menggunakan kunci multi-Wilayah.

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

Dalam contoh ini, Klien Enkripsi DynamoDB mendapatkan Wilayah untuk AWS KMS memanggil dari Wilayah di klien. AWS KMS Nilai `keyArn` mengidentifikasi kunci multi-Wilayah dalam Wilayah yang sama.

```
// Encrypt in us-east-1

// Replace the example key ARN and Region with valid values for your application
final String usEastKey = 'arn:aws:kms:us-east-1:111122223333:key/mrk-1234abcd12ab34cd56ef1234567890ab'
final String region = 'us-east-1'
      
final AWSKMS kms = AWSKMSClientBuilder.standard().withRegion(region).build();
final DirectKmsMaterialProvider cmp = new DirectKmsMaterialProvider(kms, usEastKey);
```

```
// Decrypt in us-west-2

// Replace the example key ARN and Region with valid values for your application
final String usWestKey = 'arn:aws:kms:us-west-2:111122223333:key/mrk-1234abcd12ab34cd56ef1234567890ab'
final String region = 'us-west-2'
      
final AWSKMS kms = AWSKMSClientBuilder.standard().withRegion(region).build();
final DirectKmsMaterialProvider cmp = new DirectKmsMaterialProvider(kms, usWestKey);
```

------
#### [ Python ]

Dalam contoh ini, Klien Enkripsi DynamoDB mendapatkan Wilayah untuk AWS KMS memanggil dari Wilayah di ARN kunci.

```
# Encrypt in us-east-1

# Replace the example key ID with a valid value
us_east_key = 'arn:aws:kms:us-east-1:111122223333:key/mrk-1234abcd12ab34cd56ef1234567890ab'
kms_cmp = AwsKmsCryptographicMaterialsProvider(key_id=us_east_key)
```

```
# Decrypt in us-west-2

# Replace the example key ID with a valid value
us_west_key = 'arn:aws:kms:us-west-2:111122223333:key/mrk-1234abcd12ab34cd56ef1234567890ab'
kms_cmp = AwsKmsCryptographicMaterialsProvider(key_id=us_west_key)
```

------

## Cara kerjanya
<a name="provider-kms-how-it-works"></a>

Penyedia KMS Langsung mengembalikan kunci enkripsi dan penandatanganan yang dilindungi oleh AWS KMS key yang Anda tentukan, seperti yang ditunjukkan pada diagram berikut.

![\[Input, pemrosesan, dan output dari Penyedia KMS Langsung di DynamoDB Encryption Client\]](http://docs.aws.amazon.com/id_id/database-encryption-sdk/latest/devguide/images/directKMS.png)

+ Untuk menghasilkan materi enkripsi, Penyedia KMS Langsung meminta AWS KMS untuk [membuat kunci data unik](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKey.html) untuk setiap item menggunakan AWS KMS key yang Anda tentukan. Penyedia ini mendapatkan kunci enkripsi dan penandatanganan untuk item dari salinan plaintext dari [kunci data](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#data-keys), kemudian mengembalikan kunci enkripsi dan penandatanganan, bersama dengan kunci data terenkripsi, yang disimpan dalam [atribut deskripsi bahan](DDBEC-legacy-concepts.md#legacy-material-description) item tersebut. 

  Enkriptor item menggunakan kunci enkripsi dan penandatanganan serta membuangnya dari memori secepat mungkin. Hanya salinan terenkripsi dari kunci data dari lokasi mereka diambil yang disimpan dalam item yang dienkripsi.
+ Untuk menghasilkan materi dekripsi, Penyedia KMS Langsung meminta AWS KMS untuk mendekripsi kunci data terenkripsi. Kemudian, ia mendapatkan verifikasi dan kunci penandatanganan dari kunci data plaintext, dan mengembalikan mereka ke enkriptor item.

  Enkriptor item memverifikasi item dan, jika verifikasi berhasil, mendekripsi nilai terenkripsi. Kemudian, ia menghapus kunci dari memori sesegera mungkin.

### Dapatkan bahan enkripsi
<a name="direct-kms-get-encryption-materials"></a>

Bagian ini menjelaskan secara detail input, output, dan pemrosesan Penyedia KMS Langsung ketika menerima permintaan bahan enkripsi dari [enkriptor item](DDBEC-legacy-concepts.md#item-encryptor).

**Input ** (dari aplikasi)
+ ID kunci dari sebuah AWS KMS key. 

**Input** (dari enkriptor item)
+ [Konteks enkripsi DynamoDB](concepts.md#encryption-context)

**Output** (untuk enkriptor item)
+ Kunci enkripsi (plaintext)
+ Kunci penandatanganan
+ Dalam [deskripsi bahan aktual](DDBEC-legacy-concepts.md#legacy-material-description): Nilai-nilai ini disimpan dalam atribut deskripsi bahan yang ditambahkan klien ke item.
  + amzn-ddb-env-key: Kunci data yang dikodekan Base64 dienkripsi oleh AWS KMS key
  + amzn-ddb-env-alg: Algoritma enkripsi, secara default [AES/256](https://csrc.nist.gov/projects/cryptographic-standards-and-guidelines/archived-crypto-projects/aes-development)
  + amzn-ddb-sig-alg: Algoritma penandatanganan, secara default, [Hmac /256 SHA256](https://en.wikipedia.org/wiki/HMAC)
  + amzn-ddb-wrap-alg: km

**Pengolahan**

1. Penyedia KMS Langsung mengirimkan AWS KMS permintaan untuk menggunakan yang ditentukan AWS KMS key untuk [menghasilkan kunci data unik](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKey.html) untuk item tersebut. Operasi mengembalikan kunci plaintext dan salinan yang dienkripsi di bawah file. AWS KMS key Hal ini dikenal sebagai *bahan kunci awal*.

   Permintaan tersebut mencakup nilai-nilai berikut dalam plaintext pada [konteks enkripsi AWS KMS](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#encrypt_context). Nilai-nilai non-rahasia ini secara kriptografi terikat pada objek terenkripsi, sehingga konteks enkripsi yang sama diperlukan pada dekripsi. Anda dapat menggunakan nilai-nilai ini untuk mengidentifikasi panggilan ke AWS KMS dalam [AWS CloudTrail log](https://docs.aws.amazon.com/kms/latest/developerguide/monitoring-overview.html).
   + amzn-ddb-env-alg — Algoritma enkripsi, secara default AES/256
   + amzn-ddb-sig-alg — Algoritma penandatanganan, secara default Hmac /256 SHA256
   + (Opsional) aws-kms-table - *table name*
   + (Opsional) *partition key name* - *partition key value* (nilai biner adalah Base64-dikodekan)
   + (Opsional) *sort key name* - *sort key value* (nilai biner adalah Base64-dikodekan)

   Direct KMS Provider mendapatkan nilai untuk konteks AWS KMS enkripsi dari konteks enkripsi [DynamoDB](concepts.md#encryption-context) untuk item tersebut. Jika konteks enkripsi DynamoDB tidak menyertakan nilai, seperti nama tabel, pasangan nama-nilai itu dihilangkan dari konteks enkripsi. AWS KMS 

1. Penyedia KMS Langsung mendapat kunci enkripsi simetris dan kunci penandatanganan dari kunci data. Secara default, ia menggunakan [Secure Hash Algorithm (SHA) 256](https://en.wikipedia.org/wiki/SHA-2) dan [Fungsi Derivasi Kunci RFC5869 berbasis HMAC untuk mendapatkan kunci](https://tools.ietf.org/html/rfc5869) enkripsi simetris AES 256-bit dan kunci penandatanganan HMAC-SHA-256 256-bit. 

1. Penyedia KMS Langsung mengembalikan output ke enkriptor item.

1. Enkriptor item menggunakan kunci enkripsi untuk mengenkripsi atribut yang ditentukan dan kunci penandatanganan untuk menandatanganinya, menggunakan algoritma yang ditentukan dalam deskripsi bahan yang aktual. Ia akan menghapus kunci plaintext dari memori sesegera mungkin.

### Dapatkan materi dekripsi
<a name="direct-kms-get-decryption-materials"></a>

Bagian ini menjelaskan secara detail input, output, dan pemrosesan Penyedia KMS Langsung ketika menerima permintaan bahan dekripsi dari [enkriptor item](DDBEC-legacy-concepts.md#item-encryptor).

**Input ** (dari aplikasi)
+ ID kunci dari sebuah AWS KMS key. 

  Nilai ID kunci dapat berupa ID kunci, kunci ARN, nama alias atau alias ARN dari. AWS KMS key Nilai apa pun yang tidak disertakan dalam ID kunci, seperti Wilayah, harus tersedia di [profil AWS bernama](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-files.html#cli-configure-files-using-profiles). Kunci ARN menyediakan semua nilai yang AWS KMS dibutuhkan.

**Input** (dari enkriptor item)
+ Salinan [konteks enkripsi DynamoDB](concepts.md#encryption-context) yang berisi konten atribut deskripsi materi.

**Output** (untuk enkriptor item)
+ Kunci enkripsi (plaintext)
+ Kunci penandatanganan

**Pengolahan**

1. Penyedia KMS Langsung mendapatkan kunci data terenkripsi dari atribut deskripsi material dalam item yang dienkripsi. 

1. Ia meminta AWS KMS untuk menggunakan yang ditentukan AWS KMS key untuk [mendekripsi kunci](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKey.html) data terenkripsi. Operasi mengembalikan kunci plaintext.

   Permintaan ini harus menggunakan [konteks enkripsi AWS KMS](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#encrypt_context) yang digunakan untuk membuat dan mengenkripsi kunci data.
   + aws-kms-table – *table name*
   + *partition key name*— *partition key value* (nilai biner adalah Base64-dikodekan)
   + (Opsional) *sort key name* - *sort key value* (nilai biner adalah Base64-dikodekan)
   + amzn-ddb-env-alg — Algoritma enkripsi, secara default AES/256
   + amzn-ddb-sig-alg — Algoritma penandatanganan, secara default Hmac /256 SHA256

1. Penyedia KMS Langsung menggunakan [Secure Hash Algorithm (SHA) 256](https://en.wikipedia.org/wiki/SHA-2) dan [Fungsi Derivasi Kunci RFC5869 berbasis HMAC untuk mendapatkan kunci](https://tools.ietf.org/html/rfc5869) enkripsi simetris AES 256-bit dan kunci penandatanganan HMAC-SHA-256 256-bit dari kunci data. 

1. Penyedia KMS Langsung mengembalikan output ke enkriptor item.

1. Enkriptor item menggunakan kunci penandatanganan untuk memverifikasi item. Jika berhasil, ia menggunakan kunci enkripsi simetris untuk mendekripsi nilai atribut terenkripsi. Operasi ini menggunakan algoritma enkripsi dan penandatanganan yang ditentukan dalam deskripsi bahan aktual. Enkriptor item akan menghapus kunci plaintext dari memori sesegera mungkin.

# Penyedia Materi Terbungkus
<a name="wrapped-provider"></a>

**catatan**  
Pustaka enkripsi sisi klien kami [diubah namanya menjadi AWS Database Encryption SDK](DDBEC-rename.md). Topik berikut memberikan informasi tentang versi 1. *x* —2. *x* dari DynamoDB Encryption Client untuk Java dan versi 1. *x* —3. *x* dari Klien Enkripsi DynamoDB untuk Python. Untuk informasi selengkapnya, lihat [SDK Enkripsi AWS Database untuk dukungan versi DynamoDB](legacy-dynamodb-encryption-client.md#legacy-support).

*Penyedia Bahan Terbungkus* (Wrapped CMP) memungkinkan Anda menggunakan kunci pembungkus dan penandatanganan dari sumber mana pun dengan DynamoDB Encryption Client. CMP yang Dibungkus tidak bergantung pada AWS layanan apa pun. Namun, Anda harus menghasilkan dan mengelola kunci pembungkus dan penandatanganan di luar klien, termasuk menyediakan kunci yang benar untuk memverifikasi dan mendekripsi item. 

Wrapped CMP menghasilkan kunci enkripsi item yang unik untuk setiap item. CMP ini membungkus kunci enkripsi item dengan kunci pembungkus yang Anda masukkan dan menyimpan kunci enkripsi item terbungkus dalam [atribut deskripsi materi](DDBEC-legacy-concepts.md#legacy-material-description) item. Karena Anda memasukkan kunci pembungkus dan penandatangan, Anda menentukan bagaimana kunci pembungkus dan penandatanganan dihasilkan dan apakah kunci itu unik untuk setiap item atau digunakan kembali. 

Wrapped CMP adalah implementasi yang aman dan pilihan yang baik untuk aplikasi yang dapat mengelola materi kriptografis.

Wrapped CMP adalah salah satu dari beberapa [penyedia bahan kriptografi](DDBEC-legacy-concepts.md#concept-material-provider) (CMPs) yang didukung oleh Klien Enkripsi DynamoDB. Untuk informasi tentang yang lain CMPs, lihat[Penyedia bahan kriptografi](crypto-materials-providers.md).

**Misalnya kode, lihat:**
+ Java: [AsymmetricEncryptedItem](https://github.com/aws/aws-dynamodb-encryption-java/blob/master/examples/src/main/java/com/amazonaws/examples/AsymmetricEncryptedItem.java)
+ Python:, [wrapped-rsa-encrypted-table[wrapped-symmetric-encrypted-table](https://github.com/aws/aws-dynamodb-encryption-python/blob/master/examples/src/dynamodb_encryption_sdk_examples/wrapped_symmetric_encrypted_table.py)](https://github.com/aws/aws-dynamodb-encryption-python/blob/master/examples/src/dynamodb_encryption_sdk_examples/wrapped_rsa_encrypted_table.py)

**Topics**
+ [Cara menggunakannya](#wrapped-cmp-how-to-use)
+ [Cara kerjanya](#wrapped-cmp-how-it-works)

## Cara menggunakannya
<a name="wrapped-cmp-how-to-use"></a>

Untuk membuat Wrapped CMP, tentukan kunci pembungkus (diperlukan saat enkripsi), kunci pembuka pembungkus (diperlukan saat dekripsi), dan kunci penandatanganan. Anda harus menyediakan kunci ketika Anda mengenkripsi dan mendekripsi item.

Kunci pembungkus, pembuka pembungkus, dan penandatanganan dapat berupa kunci simetris atau pasangan kunci asimetris. 

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

```
// This example uses asymmetric wrapping and signing key pairs
final KeyPair wrappingKeys = ...
final KeyPair signingKeys = ...

final WrappedMaterialsProvider cmp = 
    new WrappedMaterialsProvider(wrappingKeys.getPublic(),
                                 wrappingKeys.getPrivate(),
                                 signingKeys);
```

------
#### [ Python ]

```
# This example uses symmetric wrapping and signing keys
wrapping_key = ...
signing_key  = ...

wrapped_cmp = WrappedCryptographicMaterialsProvider(
    wrapping_key=wrapping_key,
    unwrapping_key=wrapping_key,
    signing_key=signing_key
)
```

------

## Cara kerjanya
<a name="wrapped-cmp-how-it-works"></a>

Wrapped CMP menghasilkan kunci enkripsi item baru untuk setiap item. CMP ini menggunakan kunci pembungkus, pembuka pembungkus, dan penandatanganan yang Anda berikan, seperti yang ditunjukkan dalam diagram berikut.

![\[Input, pengolahan, dan output dari Penyedia Materi Terbungkus di DynamoDB Encryption Client\]](http://docs.aws.amazon.com/id_id/database-encryption-sdk/latest/devguide/images/wrappedCMP.png)


### Dapatkan materi enkripsi
<a name="wrapped-cmp-get-encryption-materials"></a>

Bagian ini menjelaskan secara terperinci input, output, dan pengolahan Penyedia Materi Terbungkus (Wrapped CMP) ketika menerima permintaan materi enkripsi. 

**Input** (dari aplikasi)
+ Kunci pembungkus: Sebuah kunci simetris [Standar Enkripsi Lanjutan](https://en.wikipedia.org/wiki/Advanced_Encryption_Standard) (AES), atau kunci publik [RSA](https://en.wikipedia.org/wiki/RSA_(cryptosystem)). Diperlukan jika ada nilai atribut yang dienkripsi. Jika tidak, itu bersifat opsional dan diabaikan.
+ Kunci pembuka pembungkus: Opsional dan diabaikan. 
+ Kunci penandatanganan

**Input** (dari enkriptor item)
+ [Konteks enkripsi DynamoDB](concepts.md#encryption-context)

**Output** (untuk enkriptor item):
+ Kunci enkripsi item plaintext
+ Kunci penandatanganan (tidak berubah)
+ [Deskripsi materi aktual](DDBEC-legacy-concepts.md#legacy-material-description): Nilai-nilai ini disimpan dalam [atribut deskripsi materi](DDBEC-legacy-concepts.md#legacy-material-description) yang ditambahkan klien ke item. 
  + `amzn-ddb-env-key`: Kunci enkripsi item terbungkus yang didekodekan Base64
  + `amzn-ddb-env-alg`: Algoritma enkripsi yang digunakan untuk mengenkripsi item. Defaultnya adalah AES-256-CBC.
  + `amzn-ddb-wrap-alg`: Algoritma pembungkus yang digunakan Wrapped CMP untuk membungkus kunci enkripsi item. Jika kunci pembungkus adalah kunci AES, kuncinya dibungkus menggunakan `AES-Keywrap` tanpa pad sebagaimana didefinisikan dalam [RFC 3394](https://tools.ietf.org/html/rfc3394.html). Jika kunci pembungkus adalah kunci RSA, kunci dienkripsi dengan menggunakan RSA OAEP dengan padding. MGF1 

**Pengolahan**

Saat mengenkripsi item, Anda memasukkan kunci pembungkus dan kunci penandatanganan. Kunci pembuka pembungkus bersifat opsional dan diabaikan.

1. Wrapped CMP menghasilkan kunci enkripsi item simetris yang unik untuk setiap item tabel.

1. CMP ini menggunakan kunci pembungkus yang Anda tentukan untuk membungkus kunci enkripsi item. Kemudian, ia menghapusnya dari memori sesegera mungkin.

1. Ia mengembalikan kunci enkripsi item plaintext, kunci penandatanganan yang Anda berikan, dan [deskripsi materi aktual](DDBEC-legacy-concepts.md#legacy-material-description) yang mencakup kunci enkripsi item terbungkus, serta algoritma enkripsi dan pembungkus.

1. Enkriptor item menggunakan kunci enkripsi plaintext untuk mengenkripsi item. Ia menggunakan kunci penandatanganan yang Anda masukkan untuk menandatangani item. Kemudian, ia menghapus kunci plaintext dari memori sesegera mungkin. Ia menyalin bidang dalam deskripsi materi aktual, termasuk kunci enkripsi terbungkus (`amzn-ddb-env-key`), ke atribut deskripsi materi item.

### Dapatkan materi dekripsi
<a name="wrapped-cmp-get-decryption-materials"></a>

Bagian ini menjelaskan secara terperinci input, output, dan pengolahan Penyedia Materi Terbungkus (Wrapped CMP) ketika menerima permintaan materi dekripsi. 

**Input** (dari aplikasi)
+ Kunci pembungkus: Opsional dan diabaikan.
+ Kunci pembuka pembungkus: Kunci simetris [Standar Enkripsi Lanjutan](https://en.wikipedia.org/wiki/Advanced_Encryption_Standard) (AES) yang sama atau kunci privat [RSA](https://en.wikipedia.org/wiki/RSA_(cryptosystem)) yang sesuai dengan kunci publik RSA yang digunakan untuk mengenkripsi. Diperlukan jika ada nilai atribut yang dienkripsi. Jika tidak, itu bersifat opsional dan diabaikan.
+ Kunci penandatanganan

**Input** (dari enkriptor item)
+ Salinan [konteks enkripsi DynamoDB](concepts.md#encryption-context) yang berisi konten atribut deskripsi materi.

**Output** (untuk enkriptor item)
+ Kunci enkripsi item plaintext
+ Kunci penandatanganan (tidak berubah)

**Pengolahan**

Ketika Anda mendekripsi item, Anda memasukkan kunci pembuka pembungkus dan kunci penandatanganan. Kunci pembuka pembungkus bersifat opsional dan diabaikan.

1. Wrapped CMP mendapatkan kunci enkripsi item terbungkus dari atribut deskripsi materi dari item.

1. Ia menggunakan kunci pembuka pembungkus dan algoritma untuk membuka bungkus kunci enkripsi item. 

1. Ia mengembalikan kunci enkripsi item plaintext, kunci penandatanganan, serta algoritma enkripsi dan penandatanganan ke enkriptor item.

1. Enkriptor item menggunakan kunci penandatanganan untuk memverifikasi item. Jika berhasil, ia menggunakan kunci enkripsi item untuk mendekripsi item. Kemudian, ia menghapus kunci plaintext dari memori sesegera mungkin.

# Penyedia Terbaru
<a name="most-recent-provider"></a>

**catatan**  
Pustaka enkripsi sisi klien kami [diubah namanya menjadi AWS Database Encryption SDK](DDBEC-rename.md). Topik berikut memberikan informasi tentang versi 1. *x* —2. *x* dari DynamoDB Encryption Client untuk Java dan versi 1. *x* —3. *x* dari Klien Enkripsi DynamoDB untuk Python. Untuk informasi selengkapnya, lihat [SDK Enkripsi AWS Database untuk dukungan versi DynamoDB](legacy-dynamodb-encryption-client.md#legacy-support).

*Penyedia Terbaru* adalah [penyedia bahan kriptografi](DDBEC-legacy-concepts.md#concept-material-provider) (CMP) yang dirancang untuk bekerja dengan [toko penyedia](DDBEC-legacy-concepts.md#provider-store). Itu didapat CMPs dari toko penyedia, dan mendapatkan materi kriptografi yang dikembalikan dari toko. CMPs Ia biasanya menggunakan setiap CMP untuk memenuhi beberapa permintaan untuk bahan kriptografi. Namun, Anda dapat menggunakan fitur dari toko penyedia untuk mengendalikan sejauh mana bahan akan digunakan kembali, menentukan seberapa sering CMP dirotasi, dan bahkan mengubah jenis CMP yang digunakan tanpa mengubah Penyedia Terbaru.

**catatan**  
Kode yang terkait dengan simbol `MostRecentProvider` untuk Penyedia Terbaru mungkin menyimpan bahan kriptografi dalam memori untuk seumur hidup proses. Kode ini mungkin membuat pemanggil dapat menggunakan tombol yang tidak lagi diotorisasi untuk digunakan.   
Simbol `MostRecentProvider` tidak lagi digunakan di versi terdukung yang lebih lama dari DynamoDB Encryption Client dan dihapus dari versi 2.0.0. Simbol ini digantikan oleh simbol `CachingMostRecentProvider`. Untuk detail selengkapnya, lihat [Pembaruan untuk Penyedia Terbaru](#mrp-versions).

Penyedia Terbaru adalah pilihan yang baik untuk aplikasi yang perlu meminimalkan panggilan ke toko penyedia dan sumber kriptografi mereka, serta aplikasi yang dapat menggunakan kembali beberapa bahan kriptografi tanpa melanggar persyaratan keamanan mereka. Misalnya, ini memungkinkan Anda untuk melindungi materi kriptografi Anda di bawah [AWS KMS key](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#master_keys)in [AWS Key Management Service](https://docs.aws.amazon.com/kms/latest/developerguide/)(AWS KMS) tanpa menelepon AWS KMS setiap kali Anda mengenkripsi atau mendekripsi item.

Toko penyedia yang Anda pilih menentukan jenis CMPs yang digunakan Penyedia Terbaru dan seberapa sering mendapatkan CMP baru. Anda dapat menggunakan toko penyedia yang kompatibel dengan Penyedia Terbaru, termasuk toko penyedia kustom yang Anda desain. 

Klien Enkripsi DynamoDB menyertakan *MetaStore*yang membuat dan [mengembalikan Penyedia Bahan Terbungkus (Dibungkus](wrapped-provider.md)). CMPs MetaStore Menyimpan beberapa versi Wrapped CMPs yang dihasilkannya dalam tabel DynamoDB internal dan melindunginya dengan enkripsi sisi klien oleh instance internal Klien Enkripsi DynamoDB. 

Anda dapat mengonfigurasi MetaStore untuk menggunakan semua jenis CMP internal untuk melindungi materi dalam tabel, termasuk [Penyedia KMS Langsung](direct-kms-provider.md) yang menghasilkan materi kriptografi yang dilindungi oleh Anda AWS KMS key, CMP Wrapped yang menggunakan kunci pembungkus dan penandatanganan yang Anda berikan, atau CMP kustom yang kompatibel yang Anda desain.

**Misalnya kode, lihat:**
+ Java: [MostRecentEncryptedItem](https://github.com/aws/aws-dynamodb-encryption-java/blob/master/examples/src/main/java/com/amazonaws/examples/MostRecentEncryptedItem.java)
+ Python: [most\$1recent\$1provider\$1encrypted\$1table](https://github.com/aws/aws-dynamodb-encryption-python/blob/master/examples/src/dynamodb_encryption_sdk_examples/most_recent_provider_encrypted_table.py)

**Topics**
+ [Cara menggunakannya](#mrp-how-to-use-it)
+ [Cara kerjanya](#mrp-how-it-works)
+ [Pembaruan untuk Penyedia Terbaru](#mrp-versions)

## Cara menggunakannya
<a name="mrp-how-to-use-it"></a>

Untuk membuat Penyedia Terbaru, Anda perlu membuat dan mengonfigurasi toko penyedia, kemudian membuat Penyedia Terbaru yang menggunakan toko penyedia. 

[Contoh berikut menunjukkan cara membuat Penyedia Terbaru yang menggunakan MetaStore dan melindungi versi dalam tabel DynamoDB internalnya dengan materi kriptografi dari Penyedia KMS Langsung.](direct-kms-provider.md) Contoh-contoh ini menggunakan simbol [`CachingMostRecentProvider`](#mrp-versions). 

Setiap Penyedia Terbaru memiliki nama yang mengidentifikasinya CMPs dalam MetaStore tabel, pengaturan [time-to-live](#most-recent-provider-ttl)(TTL), dan pengaturan ukuran cache yang menentukan berapa banyak entri yang dapat disimpan cache. Contoh ini mengatur ukuran cache hingga 1000 entri dan TTL selama 60 detik.

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

```
// Set the name for MetaStore's internal table
final String keyTableName = 'metaStoreTable'

// Set the Region and AWS KMS key
final String region = 'us-west-2'
final String keyArn = 'arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab'

// Set the TTL and cache size
final long ttlInMillis = 60000;
final long cacheSize = 1000;

// Name that identifies the MetaStore's CMPs in the provider store
final String materialName = 'testMRP'

// Create an internal DynamoDB client for the MetaStore
final AmazonDynamoDB ddb = AmazonDynamoDBClientBuilder.standard().withRegion(region).build();

// Create an internal Direct KMS Provider for the MetaStore
final AWSKMS kms = AWSKMSClientBuilder.standard().withRegion(region).build();
final DirectKmsMaterialProvider kmsProv = new DirectKmsMaterialProvider(kms, keyArn);

// Create an item encryptor for the MetaStore,
// including the Direct KMS Provider
final DynamoDBEncryptor keyEncryptor = DynamoDBEncryptor.getInstance(kmsProv);

// Create the MetaStore
final MetaStore metaStore = new MetaStore(ddb, keyTableName, keyEncryptor);

//Create the Most Recent Provider
final CachingMostRecentProvider cmp = new CachingMostRecentProvider(metaStore, materialName, ttlInMillis, cacheSize);
```

------
#### [ Python ]

```
# Designate an AWS KMS key
kms_key_id = 'arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab'

# Set the name for MetaStore's internal table
meta_table_name = 'metaStoreTable'

# Name that identifies the MetaStore's CMPs in the provider store
material_name = 'testMRP'

# Create an internal DynamoDB table resource for the MetaStore
meta_table = boto3.resource('dynamodb').Table(meta_table_name)

# Create an internal Direct KMS Provider for the MetaStore
kms_cmp = AwsKmsCryptographicMaterialsProvider(key_id=kms_key_id)
    
# Create the MetaStore with the Direct KMS Provider
meta_store = MetaStore(
    table=meta_table,
    materials_provider=kms_cmp
)

# Create a Most Recent Provider using the MetaStore
#    Sets the TTL (in seconds) and cache size (# entries)
most_recent_cmp = MostRecentProvider(
    provider_store=meta_store,
    material_name=material_name,
    version_ttl=60.0,
    cache_size=1000
)
```

------

## Cara kerjanya
<a name="mrp-how-it-works"></a>

Penyedia Terbaru didapat CMPs dari toko penyedia. Kemudian, penyedia ini menggunakan CMP untuk menghasilkan bahan kriptografi yang dikembalikan ke enkriptor item.

### Tentang Penyedia Terbaru
<a name="about-mrp"></a>

Penyedia Terbaru mendapatkan [penyedia bahan kriptografi](DDBEC-legacy-concepts.md#concept-material-provider) (CMP) dari [penyimpanan penyedia](DDBEC-legacy-concepts.md#provider-store). Kemudian, penyedia ini menggunakan CMP untuk menghasilkan bahan kriptografi yang akan dikembalikan. Setiap Penyedia Terbaru dikaitkan dengan satu toko penyedia, tetapi toko penyedia dapat memasok CMPs ke beberapa penyedia di beberapa host.

Penyedia Terbaru dapat digunakan dengan CMP yang kompatibel dari toko penyedia. Ia meminta bahan enkripsi atau dekripsi dari CMP dan mengembalikan output ke enkriptor item. Ia tidak melakukan operasi kriptografis apa pun.

Untuk meminta CMP dari toko penyedia, Penyedia Terbaru memasok nama bahan dan versi CMP yang ada yang hendak digunakan. Untuk bahan enkripsi, Penyedia Terbaru selalu meminta versi maksimum (“terbaru”). Untuk bahan dekripsi, ia meminta versi CMP yang digunakan untuk membuat bahan enkripsi, seperti yang ditunjukkan dalam diagram berikut.

![\[Penyedia Terbaru\]](http://docs.aws.amazon.com/id_id/database-encryption-sdk/latest/devguide/images/most-recent-provider-1.png)


Penyedia Terbaru menyimpan versi CMPs yang dikembalikan oleh toko penyedia dalam cache Last Recent Used (LRU) lokal di memori. Cache memungkinkan Penyedia Terbaru untuk mendapatkan CMPs yang dibutuhkan tanpa memanggil toko penyedia untuk setiap item. Anda dapat menghapus cache sesuai permintaan.

Penyedia Terbaru menggunakan [time-to-livenilai](#most-recent-provider-ttl) yang dapat dikonfigurasi yang dapat Anda sesuaikan berdasarkan karakteristik aplikasi Anda.

### Tentang MetaStore
<a name="about-metastore"></a>

Anda dapat menggunakan Penyedia Terbaru dengan toko penyedia apa pun, termasuk toko penyedia kustom yang kompatibel. Klien Enkripsi DynamoDB mencakup MetaStore, implementasi aman yang dapat Anda konfigurasi dan sesuaikan.

A *MetaStore*adalah [toko penyedia](DDBEC-legacy-concepts.md#provider-store) yang membuat dan mengembalikan [Wrapped CMPs](wrapped-provider.md) yang dikonfigurasi dengan kunci pembungkus, membuka kunci, dan kunci penandatanganan yang diperlukan Wrapped. CMPs A MetaStore adalah opsi aman untuk Penyedia Terbaru karena Wrapped CMPs selalu menghasilkan kunci enkripsi item unik untuk setiap item. Hanya kunci pembungkus yang melindungi kunci enkripsi item dan tombol penandatanganan digunakan kembali.

Diagram berikut menunjukkan komponen MetaStore dan bagaimana berinteraksi dengan Penyedia Terbaru.

![\[A MetaStore\]](http://docs.aws.amazon.com/id_id/database-encryption-sdk/latest/devguide/images/most-recent-provider-2.png)


 MetaStore Menghasilkan Wrapped CMPs, dan kemudian menyimpannya (dalam bentuk terenkripsi) dalam tabel DynamoDB internal. Kunci partisi adalah nama dari bahan Penyedia Terbaru; kunci pengurutan nomor versinya. Bahan-bahan dalam tabel dilindungi oleh DynamoDB Encryption Client internal, termasuk enkriptor item dan [penyedia bahan kriptografi](DDBEC-legacy-concepts.md#concept-material-provider) (CMP) internal.

Anda dapat menggunakan semua jenis CMP internal di Anda MetaStore, termasuk [Penyedia KMS Langsung](wrapped-provider.md), CMP Terbungkus dengan materi kriptografi yang Anda berikan, atau CMP kustom yang kompatibel. Jika CMP internal Anda MetaStore adalah Penyedia KMS Langsung, kunci pembungkus dan penandatanganan yang dapat digunakan kembali dilindungi di bawah in (). [AWS KMS key[AWS Key Management Service](https://docs.aws.amazon.com/kms/latest/developerguide/)](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#master_keys)AWS KMS MetaStore Panggilan AWS KMS setiap kali menambahkan versi CMP baru ke tabel internalnya atau mendapatkan versi CMP dari tabel internalnya.

### Menetapkan time-to-live nilai
<a name="most-recent-provider-ttl"></a>

Anda dapat menetapkan nilai time-to-live (TTL) untuk setiap Penyedia Terbaru yang Anda buat. Secara umum, gunakan nilai TTL terendah yang praktis untuk aplikasi Anda.

Penggunaan nilai TTL berubah dalam simbol `CachingMostRecentProvider` untuk Penyedia Terbaru. 

**catatan**  
Simbol `MostRecentProvider` untuk Penyedia Terbaru tidak lagi digunakan di versi terdukung yang lebih lama dari DynamoDB Encryption Client dan dihapus dari versi 2.0.0. Simbol ini digantikan oleh simbol `CachingMostRecentProvider`. Kami menyarankan agar Anda memperbarui kode sesegera mungkin. Untuk detail selengkapnya, lihat [Pembaruan untuk Penyedia Terbaru](#mrp-versions).

**`CachingMostRecentProvider`**  
Parameter `CachingMostRecentProvider` menggunakan nilai TTL dalam dua cara yang berbeda.   
+ TTL menentukan seberapa sering Penyedia Terbaru memeriksa toko penyedia untuk versi baru CMP. Jika versi baru tersedia, Penyedia Terbaru menggantikan CMP dan menyegarkan bahan kriptografinya. Jika tidak, ia akan terus menggunakan CMP dan bahan kriptografi saat ini.
+ TTL menentukan berapa lama CMPs cache dapat digunakan. Sebelum ia menggunakan CMP cache untuk enkripsi, Penyedia Terbaru mengevaluasi waktu dalam cache. Jika waktu cache CMP melebihi TTL, CMP dikosongkan dari cache dan Penyedia Terbaru mendapat CMP versi paling baru dari toko penyedianya.

**`MostRecentProvider`**  
Di `MostRecentProvider`, TTL menentukan seberapa sering Penyedia Terbaru memeriksa toko penyedia untuk versi baru CMP. Jika versi baru tersedia, Penyedia Terbaru menggantikan CMP dan menyegarkan bahan kriptografinya. Jika tidak, ia akan terus menggunakan CMP dan bahan kriptografi saat ini.

TTL tidak menentukan seberapa sering versi CMP baru dibuat. Anda membuat versi CMP baru dengan [memutar bahan kriptografi](#most-recent-provider-rotate).

Nilai TTL yang ideal bervariasi dengan aplikasi dan tujuan latensi dan ketersediaannya. TTL yang lebih rendah meningkatkan profil keamanan Anda dengan mengurangi waktu untuk menyimpan bahan kriptografi di dalam memori. Selain itu, TTL lebih rendah menyegarkan informasi penting lebih sering. Misalnya, jika CMP internal Anda adalah [Penyedia KMS Langsung](direct-kms-provider.md), itu memverifikasi lebih sering bahwa penelepon masih berwenang untuk menggunakan. AWS KMS key

Jika TTL terlalu singkat, panggilan berulang ke toko penyedia dapat meningkatkan biaya dan menyebabkan toko penyedia Anda untuk membatasi permintaan dari aplikasi Anda dan aplikasi lain yang juga menggunakan akun layanan Anda. Anda juga dapat memperoleh manfaat dari koordinasi TTL dengan tingkat di mana Anda memutar bahan kriptografi. 

Selama pengujian, variasikan ukuran TTL dan cache di bawah beban kerja yang berbeda sampai Anda menemukan konfigurasi yang pas untuk aplikasi Anda serta standar keamanan dan performa Anda.

### Memutar bahan kriptografi
<a name="most-recent-provider-rotate"></a>

Ketika Penyedia Terbaru membutuhkan bahan enkripsi, ia selalu menggunakan versi terbaru dari CMP yang dikenalnya. Frekuensi yang diperiksa untuk versi yang lebih baru ditentukan oleh nilai [time-to-live](#most-recent-provider-ttl)(TTL) yang Anda tetapkan saat Anda mengonfigurasi Penyedia Terbaru. 

Ketika TTL kedaluwarsa, Penyedia Terbaru memeriksa toko penyedia untuk versi CMP lebih baru. Jika ada yang tersedia, Provider Terbaru mendapatkannya dan menggantikan CMP dalam cache-nya. Ia menggunakan CMP ini dan bahan kriptografi sampai menemukan bahwa toko penyedia memiliki versi yang lebih baru.

Untuk memberi tahu toko penyedia untuk membuat versi baru dari CMP untuk Penyedia Terbaru, panggil operasi Buat Penyedia Baru toko penyedia dengan nama bahan Penyedia Terbaru. Toko penyedia membuat CMP baru dan menyimpan salinan terenkripsi dalam penyimpanan internal dengan nomor versi yang lebih besar. (Hal ini juga mengembalikan CMP, tetapi Anda dapat membuangnya.) Akibatnya, lain kali Penyedia Terbaru menanyakan toko penyedia untuk nomor versi maksimumnya CMPs, ia mendapatkan nomor versi baru yang lebih besar, dan menggunakannya dalam permintaan berikutnya ke toko untuk melihat apakah versi baru CMP telah dibuat.

Anda dapat menjadwalkan panggilan Buat Penyedia Baru berdasarkan waktu, jumlah item atau atribut yang diproses, atau metrik lain yang masuk akal untuk aplikasi Anda.

### Dapatkan bahan enkripsi
<a name="most-recent-provider-encrypt"></a>

Penyedia Terbaru menggunakan proses berikut, ditunjukkan dalam diagram ini, untuk mendapatkan bahan enkripsi yang kembali ke enkriptor item. Output bergantung pada jenis CMP yang dikembalikan toko penyedia. Penyedia Terbaru dapat menggunakan toko penyedia yang kompatibel, termasuk MetaStore yang disertakan dalam Klien Enkripsi DynamoDB.

![\[Input, pemrosesan, dan output dari Penyedia Terbaru di DynamoDB Encryption Client\]](http://docs.aws.amazon.com/id_id/database-encryption-sdk/latest/devguide/images/most-recent-provider-provider-store.png)


Saat Anda membuat Penyedia Terbaru menggunakan [`CachingMostRecentProvider`simbol](#mrp-versions), Anda menentukan toko penyedia, nama untuk Penyedia Terbaru, dan nilai [time-to-live](#most-recent-provider-ttl)(TTL). Anda juga dapat secara opsional menentukan ukuran cache, yang menentukan jumlah maksimum bahan kriptografi yang dapat ditempatkan di cache.

Ketika enkriptor item meminta Penyedia Terbaru untuk bahan enkripsi, Penyedia Terbaru dimulai dengan mencari cache untuk versi terbaru dari CMP.
+ Jika ia menemukan versi terbaru CMP dalam cache dan CMP tidak melebihi nilai TTL, Penyedia Terbaru menggunakan CMP untuk menghasilkan bahan enkripsi. Kemudian, ia mengembalikan bahan enkripsi ke enkriptor item. Operasi ini tidak memerlukan panggilan ke toko penyedia.
+ Jika versi terbaru dari CMP tidak berada dalam cache, atau jika berada dalam cache tetapi telah melebihi nilai TTL, Penyedia Terbaru meminta CMP dari toko penyedia. Permintaan tersebut mencakup nama bahan Penyedia Terbaru dan nomor versi maksimum yang diketahui.

  1. Toko penyedia mengembalikan CMP dari penyimpanan tetap. Jika toko penyedia adalah a MetaStore, ia mendapatkan CMP Wrapped terenkripsi dari tabel DynamoDB internalnya dengan menggunakan nama materi Penyedia Terbaru sebagai kunci partisi dan nomor versi sebagai kunci pengurutan. MetaStore Menggunakan enkripsi item internal dan CMP internal untuk mendekripsi CMP Wrapped. Kemudian, ia mengembalikan CMP plaintext ke Penyedia Terbaru. Jika CMP internal adalah [Penyedia KMS Langsung](direct-kms-provider.md), langkah ini mencakup panggilan ke [AWS Key Management Service](https://docs.aws.amazon.com/kms/latest/developerguide/) (AWS KMS).

  1. CMP menambahkan bidang `amzn-ddb-meta-id` ke [deskripsi bahan aktual](DDBEC-legacy-concepts.md#legacy-material-description). Nilainya adalah nama bahan dan versi CMP dalam tabel internalnya. Toko penyedia mengembalikan CMP ke Penyedia Terbaru.

  1. Penyedia Terbaru menyimpan cache CMP dalam memori.

  1. Penyedia Terbaru menggunakan CMP untuk menghasilkan bahan enkripsi. Kemudian, ia mengembalikan bahan enkripsi ke enkriptor item.

### Dapatkan bahan dekripsi
<a name="most-recent-provider-decrypt"></a>

Ketika enkriptor item meminta Penyedia Terbaru untuk bahan dekripsi, Penyedia Terbaru menggunakan proses berikut untuk mendapatkan dan mengembalikannya.

1. Penyedia Terbaru meminta toko penyedia untuk nomor versi bahan kriptografi yang digunakan untuk mengenkripsi item. Ia meneruskan deskripsi bahan aktual dari [atribut deskripsi bahan](DDBEC-legacy-concepts.md#legacy-material-description) dari item. 

1. Toko penyedia mendapatkan nomor versi CMP pengenkripsi dari bidang `amzn-ddb-meta-id` di deskripsi bahan aktual dan mengembalikannya ke Penyedia Terbaru.

1. Penyedia Terbaru mencari cache untuk versi CMP yang digunakan untuk mengenkripsi dan menandatangani item.
+ Jika menemukan versi CMP yang cocok ada di cache dan CMP belum melebihi [nilai time-to-live (TTL)](#most-recent-provider-ttl), Penyedia Terbaru menggunakan CMP untuk menghasilkan bahan dekripsi. Kemudian, ia mengembalikan bahan dekripsi ke enkriptor item. Operasi ini tidak memerlukan panggilan ke toko penyedia atau CMP lainnya.
+ Jika versi CMP yang cocok tidak ada dalam cache-nya, atau jika cache AWS KMS key telah melebihi nilai TTL-nya, Penyedia Terbaru meminta CMP dari toko penyedianya. Ia mengirimkan nama bahan dan nomor versi CMP pengenkripsi dalam permintaan.

  1. Toko penyedia mencari penyimpanan tetap untuk CMP dengan menggunakan nama Penyedia Terbaru sebagai kunci partisi dan nomor versi sebagai kunci pengurutan.
     + Jika nama dan nomor versi tidak berada dalam penyimpanan tetap, toko penyedia akan memunculkan pengecualian. Jika toko penyedia digunakan untuk menghasilkan CMP, CMP harus disimpan dalam penyimpanan tetap, kecuali jika itu sengaja dihapus.
     + Jika CMP dengan nama yang cocok dan nomor versi berada dalam penyimpanan tetap toko penyedia, toko penyedia mengembalikan CMP yang ditentukan untuk Penyedia Terbaru. 

       Jika toko penyedia adalah a MetaStore, ia mendapatkan CMP terenkripsi dari tabel DynamoDB-nya. Kemudian, ia menggunakan bahan kriptografi dari CMP internal untuk mendekripsi CMP terenkripsi sebelum mengembalikan CMP ke Penyedia Terbaru. Jika CMP internal adalah [Penyedia KMS Langsung](direct-kms-provider.md), langkah ini mencakup panggilan ke [AWS Key Management Service](https://docs.aws.amazon.com/kms/latest/developerguide/) (AWS KMS).

  1. Penyedia Terbaru menyimpan cache CMP dalam memori.

  1. Penyedia Terbaru menggunakan CMP untuk menghasilkan bahan dekripsi. Kemudian, ia mengembalikan bahan dekripsi ke enkriptor item.

## Pembaruan untuk Penyedia Terbaru
<a name="mrp-versions"></a>

Simbol untuk Penyedia Terbaru diubah dari `MostRecentProvider` ke `CachingMostRecentProvider`. 

**catatan**  
Simbol `MostRecentProvider`, yang mewakili Penyedia Terbaru, tidak lagi digunakan dalam versi 1.15 DynamoDB Encryption Client untuk Java dan versi 1.3 DynamoDB DynamoDB Encryption Client untuk Python dan dihapus dari versi 2.0.0 DynamoDB Encryption Client di kedua implementasi bahasa. Sebagai gantinya, gunakan `CachingMostRecentProvider`.

`CachingMostRecentProvider` menerapkan perubahan berikut:
+ `CachingMostRecentProvider`Secara berkala menghapus materi kriptografi dari memori ketika waktu mereka dalam memori melebihi nilai yang dikonfigurasi [time-to-live (TTL)](#most-recent-provider-ttl). 

  `MostRecentProvider` mungkin menyimpan bahan kriptografi dalam memori selama masa proses. Akibatnya, Penyedia Terbaru mungkin tidak menyadari perubahan otorisasi. Ia mungkin menggunakan kunci enkripsi setelah izin pemanggil untuk menggunakannya dicabut. 

  Jika Anda tidak dapat memperbarui ke versi baru ini, Anda bisa mendapatkan efek yang sama dengan secara berkala memanggil metode `clear()` pada cache. Metode ini secara manual membuang isi cache dan membutuhkan Penyedia Terbaru untuk meminta CMP baru dan bahan kriptografi baru. 
+ `CachingMostRecentProvider` juga mencakup pengaturan ukuran cache yang memberi Anda lebih banyak kontrol atas cache.

Untuk memperbarui ke `CachingMostRecentProvider`, Anda harus mengubah nama simbol dalam kode Anda. Dalam semua hal lainnya, `CachingMostRecentProvider` kompatibel mundur sepenuhnya dengan `MostRecentProvider`. Anda tidak perlu mengenkripsi ulang item tabel.

Namun, `CachingMostRecentProvider` menghasilkan lebih banyak panggilan ke infrastruktur kunci yang mendasarinya. Ini memanggil toko penyedia setidaknya sekali dalam setiap interval time-to-live (TTL). Aplikasi dengan banyak aktif CMPs (karena rotasi yang sering) atau aplikasi dengan armada besar kemungkinan besar sensitif terhadap perubahan ini. 

Sebelum merilis kode yang diperbarui, uji secara menyeluruh untuk memastikan bahwa panggilan yang lebih sering tidak mengganggu aplikasi Anda atau menyebabkan pembatasan oleh layanan tempat penyedia Anda bergantung, seperti AWS Key Management Service () atau AWS KMS Amazon DynamoDB. Untuk mengurangi masalah kinerja, sesuaikan ukuran cache dan time-to-live dari `CachingMostRecentProvider` berdasarkan karakteristik kinerja yang Anda amati. Untuk panduan, lihat [Menetapkan time-to-live nilai](#most-recent-provider-ttl).

# Penyedia Materi Statis
<a name="static-provider"></a>

**catatan**  
Pustaka enkripsi sisi klien kami [diubah namanya menjadi AWS Database Encryption SDK](DDBEC-rename.md). Topik berikut memberikan informasi tentang versi 1. *x* —2. *x* dari DynamoDB Encryption Client untuk Java dan versi 1. *x* —3. *x* dari Klien Enkripsi DynamoDB untuk Python. Untuk informasi selengkapnya, lihat [SDK Enkripsi AWS Database untuk dukungan versi DynamoDB](legacy-dynamodb-encryption-client.md#legacy-support).

*Penyedia Bahan Statis* (CMP Statis) adalah [penyedia bahan kriptografi](DDBEC-legacy-concepts.md#concept-material-provider) (CMP) yang sangat sederhana yang ditujukan untuk pengujian, proof-of-concept demonstrasi, dan kompatibilitas warisan.

Untuk menggunakan Static CMP guna mengenkripsi item tabel, Anda menyediakan kunci enkripsi simetris [Standar Enkripsi Lanjutan](https://en.wikipedia.org/wiki/Advanced_Encryption_Standard) (AES) dan kunci penandatanganan atau pasangan kunci. Anda harus menyediakan kunci yang sama untuk mendekripsi item yang dienkripsi. Static CMP tidak melakukan operasi kriptografis apa pun. Sebaliknya, Static CMP meneruskan kunci enkripsi yang Anda sediakan ke enkriptor item tanpa perubahan. Enkriptor item mengenkripsi item secara langsung dengan kunci enkripsi. Kemudian, ia menggunakan kunci penandatanganan secara langsung untuk menandatanganinya. 

Karena Static CMP tidak menghasilkan materi kriptografis yang unik, semua item tabel yang Anda proses dienkripsi dengan kunci enkripsi yang sama dan ditandatangani dengan kunci penandatanganan yang sama. Ketika Anda menggunakan kunci yang sama untuk mengenkripsi nilai atribut pada banyak item atau menggunakan kunci yang sama atau pasangan kunci untuk menandatangani semua item, ada risiko Anda melebihi batas kriptografis kunci. 

**catatan**  
[Penyedia Statis Asimetris](https://aws.github.io/aws-dynamodb-encryption-java/com/amazonaws/services/dynamodbv2/datamodeling/encryption/providers/AsymmetricStaticProvider.html) di pustaka Java bukan penyedia statis. Itu hanya memasok konstruktor alternatif untuk [Wrapped CMP](wrapped-provider.md). Penyedia ini aman untuk penggunaan produksi, tetapi Anda harus menggunakan Wrapped CMP secara langsung bila memungkinkan.

CMP Statis adalah salah satu dari beberapa [penyedia bahan kriptografi](DDBEC-legacy-concepts.md#concept-material-provider) (CMPs) yang didukung oleh Klien Enkripsi DynamoDB. Untuk informasi tentang yang lain CMPs, lihat[Penyedia bahan kriptografi](crypto-materials-providers.md).

**Misalnya kode, lihat:**
+ Java: [SymmetricEncryptedItem](https://github.com/aws/aws-dynamodb-encryption-java/blob/master/examples/src/main/java/com/amazonaws/examples/SymmetricEncryptedItem.java)

**Topics**
+ [Cara menggunakannya](#static-cmp-how-to-use)
+ [Cara kerjanya](#static-cmp-how-it-works)

## Cara menggunakannya
<a name="static-cmp-how-to-use"></a>

Untuk membuat penyedia statis, masukkan kunci enkripsi atau pasangan kunci dan kunci penandatanganan atau pasangan kunci. Anda perlu menyediakan materi kunci untuk mengenkripsi dan mendekripsi item tabel.

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

```
// To encrypt
SecretKey cek = ...;        // Encryption key
SecretKey macKey =  ...;    // Signing key
EncryptionMaterialsProvider provider = new SymmetricStaticProvider(cek, macKey);

// To decrypt
SecretKey cek = ...;        // Encryption key
SecretKey macKey =  ...;    // Verification key
EncryptionMaterialsProvider provider = new SymmetricStaticProvider(cek, macKey);
```

------
#### [ Python ]

```
# You can provide encryption materials, decryption materials, or both
encrypt_keys = EncryptionMaterials(
    encryption_key = ...,
    signing_key = ...
)

decrypt_keys = DecryptionMaterials(
    decryption_key = ...,
    verification_key = ...
)

static_cmp = StaticCryptographicMaterialsProvider(
    encryption_materials=encrypt_keys
    decryption_materials=decrypt_keys
)
```

------

## Cara kerjanya
<a name="static-cmp-how-it-works"></a>

Provider Statis meneruskan enkripsi dan kunci penandatanganan yang Anda masukkan ke enkriptor item, di mana kunci itu digunakan secara langsung untuk mengenkripsi dan menandatangani item tabel Anda. Kecuali Anda menyediakan kunci yang berbeda untuk setiap item, kunci yang sama digunakan untuk setiap item.

![\[Input, pengolahan, dan output dari Penyedia Materi Statis di DynamoDB Encryption Client\]](http://docs.aws.amazon.com/id_id/database-encryption-sdk/latest/devguide/images/staticCMP.png)


### Dapatkan materi enkripsi
<a name="static-cmp-get-encryption-materials"></a>

Bagian ini menjelaskan secara terperinci input, output, dan pengolahan Penyedia Materi Statis (Static CMP) ketika menerima permintaan materi enkripsi.

**Input** (dari aplikasi)
+ Kunci enkripsi – Harus berupa kunci simetris, seperti kunci [Standar Enkripsi Lanjutan](https://tools.ietf.org/html/rfc3394.html) (AES). 
+ Kunci penandatanganan – Bisa berupa kunci simetris atau pasangan kunci asimetris. 

**Input** (dari enkriptor item)
+ [Konteks enkripsi DynamoDB](concepts.md#encryption-context)

**Output** (untuk enkriptor item)
+ Kunci enkripsi diteruskan sebagai input.
+ Kunci penandatanganan diteruskan sebagai input.
+ Deskripsi materi aktual: [Deskripsi materi yang diminta](DDBEC-legacy-concepts.md#legacy-material-description), jika ada, tanpa perubahan.

### Dapatkan materi dekripsi
<a name="static-cmp-get-decryption-materials"></a>

Bagian ini menjelaskan secara terperinci input, output, dan pengolahan Penyedia Materi Statis (Static CMP) ketika menerima permintaan materi dekripsi.

Meskipun mencakup metode berbeda untuk mendapatkan materi enkripsi dan mendapatkan materi dekripsi, perilakunya sama. 

**Input** (dari aplikasi)
+ Kunci enkripsi – Harus berupa kunci simetris, seperti kunci [Standar Enkripsi Lanjutan](https://tools.ietf.org/html/rfc3394.html) (AES). 
+ Kunci penandatanganan – Bisa berupa kunci simetris atau pasangan kunci asimetris. 

**Input** (dari enkriptor item)
+ [Konteks enkripsi DynamoDB](concepts.md#encryption-context) (tidak digunakan)

**Output** (untuk enkriptor item)
+ Kunci enkripsi diteruskan sebagai input.
+ Kunci penandatanganan diteruskan sebagai input.