AWS KMS ECDHgantungan kunci - AWS Encryption SDK

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

AWS KMS ECDHgantungan kunci

penting

AWS KMS ECDHKeyring hanya tersedia dengan versi 4. x dari AWS Encryption SDK untuk. NETdan versi 3. x dari AWS Encryption SDK for Java. AWS KMS ECDHKeyring diperkenalkan dalam versi 1.5.0 dari Perpustakaan Penyedia Material.

Sebuah AWS KMS ECDH keyring menggunakan kesepakatan kunci asimetris AWS KMS keysuntuk mendapatkan kunci pembungkus simetris bersama antara dua pihak. Pertama, keyring menggunakan algoritma perjanjian kunci Elliptic Curve Diffie-Hellman (ECDH) untuk mendapatkan rahasia bersama dari kunci pribadi di key pair pengirim dan kunci publik penerima. KMS Kemudian, keyring menggunakan rahasia bersama untuk mendapatkan kunci pembungkus bersama yang melindungi kunci enkripsi data Anda. Fungsi derivasi kunci yang AWS Encryption SDK digunakan (KDF_CTR_HMAC_SHA384) untuk menurunkan kunci pembungkus bersama sesuai dengan NISTrekomendasi untuk derivasi kunci.

Fungsi derivasi kunci mengembalikan 64 byte bahan kunci. Untuk memastikan bahwa kedua belah pihak menggunakan materi kunci yang benar, AWS Encryption SDK menggunakan 32 byte pertama sebagai kunci komitmen dan 32 byte terakhir sebagai kunci pembungkus bersama. Saat mendekripsi, jika keyring tidak dapat mereproduksi kunci komitmen yang sama dan kunci pembungkus bersama yang disimpan di ciphertext header pesan, operasi gagal. Misalnya, jika Anda mengenkripsi data dengan keyring yang dikonfigurasi dengan kunci pribadi Alice dan kunci publik Bob, keyring yang dikonfigurasi dengan kunci pribadi Bob dan kunci publik Alice akan mereproduksi kunci komitmen yang sama dan kunci pembungkus bersama dan dapat mendekripsi data. Jika kunci publik Bob bukan dari KMS key pair, maka Bob dapat membuat ECDHkeyring Raw untuk mendekripsi data.

AWS KMS ECDHKeyring mengenkripsi data dengan kunci simetris menggunakan -. AES GCM Kunci data kemudian dienkripsi dengan kunci pembungkus bersama turunan menggunakan -. AES GCM Setiap AWS KMS ECDH keyring hanya dapat memiliki satu kunci pembungkus bersama, tetapi Anda dapat menyertakan beberapa AWS KMS ECDH gantungan kunci, sendiri atau dengan gantungan kunci lainnya, dalam multi-keyring.

Izin yang diperlukan untuk keyrings AWS KMS ECDH

AWS Encryption SDK Tidak memerlukan AWS akun dan tidak tergantung pada AWS layanan apa pun. Namun, untuk menggunakan AWS KMS ECDH keyring, Anda memerlukan AWS akun dan izin minimum berikut pada keyring Anda. AWS KMS keys Izin bervariasi berdasarkan skema perjanjian kunci yang Anda gunakan.

  • Untuk mengenkripsi dan mendekripsi data menggunakan skema perjanjian KmsPrivateKeyToStaticPublicKey kunci, Anda memerlukan kms: GetPublicKey dan kms: DeriveSharedSecret pada symmetric key pair pengirim. KMS Jika Anda langsung memberikan kunci publik DER -encoded pengirim saat membuat instance keyring, Anda hanya perlu izin kms: pada symmetric key pair DeriveSharedSecret pengirim. KMS

  • Untuk mendekripsi data menggunakan skema perjanjian KmsPublicKeyDiscovery kunci, Anda memerlukan GetPublicKey izin kms: DeriveSharedSecret dan kms: pada key pair asimetris yang ditentukan. KMS

Membuat AWS KMS ECDH keyring

Untuk membuat AWS KMS ECDH keyring yang mengenkripsi dan mendekripsi data, Anda harus menggunakan skema perjanjian kunci. KmsPrivateKeyToStaticPublicKey Untuk menginisialisasi AWS KMS ECDH keyring dengan skema perjanjian KmsPrivateKeyToStaticPublicKey kunci, berikan nilai-nilai berikut:

C# / .NET

Contoh berikut membuat AWS KMS ECDH keyring dengan kunci pengirim, KMS kunci publik pengirim, dan kunci publik penerima. Contoh ini menggunakan SenderPublicKey parameter opsional untuk menyediakan kunci publik pengirim. Jika Anda tidak memberikan kunci publik pengirim, keyring akan memanggil AWS KMS untuk mengambil kunci publik pengirim. Pasangan kunci pengirim dan penerima berada di ECC_NIST_P256 kurva.

// Instantiate material providers var materialProviders = new MaterialProviders(new MaterialProvidersConfig()); // Must be DER-encoded X.509 public keys var BobPublicKey = new MemoryStream(new byte[] { }); var AlicePublicKey = new MemoryStream(new byte[] { }); // Create the AWS KMS ECDH static keyring var staticConfiguration = new KmsEcdhStaticConfigurations { KmsPrivateKeyToStaticPublicKey = new KmsPrivateKeyToStaticPublicKeyInput { SenderKmsIdentifier = "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab", SenderPublicKey = BobPublicKey, RecipientPublicKey = AlicePublicKey } }; var createKeyringInput = new CreateAwsKmsEcdhKeyringInput { CurveSpec = ECDHCurveSpec.ECC_NIST_P256, KmsClient = new AmazonKeyManagementServiceClient(), KeyAgreementScheme = staticConfiguration }; var keyring = materialProviders.CreateAwsKmsEcdhKeyring(createKeyringInput);
Java

Contoh berikut membuat AWS KMS ECDH keyring dengan kunci pengirim, KMS kunci publik pengirim, dan kunci publik penerima. Contoh ini menggunakan senderPublicKey parameter opsional untuk menyediakan kunci publik pengirim. Jika Anda tidak memberikan kunci publik pengirim, keyring akan memanggil AWS KMS untuk mengambil kunci publik pengirim. Pasangan kunci pengirim dan penerima berada di ECC_NIST_P256 kurva.

// Retrieve public keys // Must be DER-encoded X.509 public keys ByteBuffer BobPublicKey = getPublicKeyBytes("arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab"); ByteBuffer AlicePublicKey = getPublicKeyBytes("arn:aws:kms:us-west-2:111122223333:key/0987dcba-09fe-87dc-65ba-ab0987654321"); // Create the AWS KMS ECDH static keyring final CreateAwsKmsEcdhKeyringInput senderKeyringInput = CreateAwsKmsEcdhKeyringInput.builder() .kmsClient(KmsClient.create()) .curveSpec(ECDHCurveSpec.ECC_NIST_P256) .KeyAgreementScheme( KmsEcdhStaticConfigurations.builder() .KmsPrivateKeyToStaticPublicKey( KmsPrivateKeyToStaticPublicKeyInput.builder() .senderKmsIdentifier("arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab") .senderPublicKey(BobPublicKey) .recipientPublicKey(AlicePublicKey) .build()).build()).build();

Membuat AWS KMS ECDH keyring penemuan

Saat mendekripsi, ini adalah praktik terbaik untuk menentukan kunci yang AWS Encryption SDK dapat digunakan. Untuk mengikuti praktik terbaik ini, gunakan AWS KMS ECDH keyring dengan skema perjanjian KmsPrivateKeyToStaticPublicKey kunci. Namun, Anda juga dapat membuat keyring AWS KMS ECDH penemuan, yaitu AWS KMS ECDH keyring yang dapat mendekripsi pesan apa pun di mana kunci publik dari key pair yang ditentukan cocok dengan KMS kunci publik penerima yang disimpan pada ciphertext pesan.

penting

Ketika Anda mendekripsi pesan menggunakan skema perjanjian KmsPublicKeyDiscovery kunci, Anda menerima semua kunci publik, terlepas dari siapa yang memilikinya.

Untuk menginisialisasi AWS KMS ECDH keyring dengan skema perjanjian KmsPublicKeyDiscovery kunci, berikan nilai-nilai berikut:

  • AWS KMS key ID Penerima

    Harus mengidentifikasi asimetris NIST -recommended elliptic curve () KMS key ECC pair dengan nilai. KeyUsage KEY_AGREEMENT

  • Spesifikasi kurva

    Mengidentifikasi spesifikasi kurva eliptik dalam key pair KMS penerima.

    Nilai valid: ECC_NIST_P256, ECC_NIS_P384, ECC_NIST_P512

  • (Opsional) Daftar Token Hibah

    Jika Anda mengontrol akses ke KMS kunci di AWS KMS ECDH keyring Anda dengan hibah, Anda harus memberikan semua token hibah yang diperlukan saat Anda menginisialisasi keyring.

C# / .NET

Contoh berikut membuat keyring AWS KMS ECDH penemuan dengan KMS key pair pada ECC_NIST_P256 kurva. Anda harus memiliki DeriveSharedSecret izin kms: GetPublicKey dan kms: pada key pair KMS yang ditentukan. Keyring ini dapat mendekripsi pesan apa pun di mana kunci publik dari KMS key pair yang ditentukan cocok dengan kunci publik penerima yang disimpan pada ciphertext pesan.

// Instantiate material providers var materialProviders = new MaterialProviders(new MaterialProvidersConfig()); // Create the AWS KMS ECDH discovery keyring var discoveryConfiguration = new KmsEcdhStaticConfigurations { KmsPublicKeyDiscovery = new KmsPublicKeyDiscoveryInput { RecipientKmsIdentifier = "arn:aws:kms:us-west-2:111122223333:key/0987dcba-09fe-87dc-65ba-ab0987654321" } }; var createKeyringInput = new CreateAwsKmsEcdhKeyringInput { CurveSpec = ECDHCurveSpec.ECC_NIST_P256, KmsClient = new AmazonKeyManagementServiceClient(), KeyAgreementScheme = discoveryConfiguration }; var keyring = materialProviders.CreateAwsKmsEcdhKeyring(createKeyringInput);
Java

Contoh berikut membuat keyring AWS KMS ECDH penemuan dengan KMS key pair pada ECC_NIST_P256 kurva. Anda harus memiliki DeriveSharedSecret izin kms: GetPublicKey dan kms: pada key pair KMS yang ditentukan. Keyring ini dapat mendekripsi pesan apa pun di mana kunci publik dari KMS key pair yang ditentukan cocok dengan kunci publik penerima yang disimpan pada ciphertext pesan.

// Create the AWS KMS ECDH discovery keyring final CreateAwsKmsEcdhKeyringInput recipientKeyringInput = CreateAwsKmsEcdhKeyringInput.builder() .kmsClient(KmsClient.create()) .curveSpec(ECDHCurveSpec.ECC_NIST_P256) .KeyAgreementScheme( KmsEcdhStaticConfigurations.builder() .KmsPublicKeyDiscovery( KmsPublicKeyDiscoveryInput.builder() .recipientKmsIdentifier("arn:aws:kms:us-west-2:111122223333:key/0987dcba-09fe-87dc-65ba-ab0987654321").build() ).build()) .build();