AWS KMS ECDH-Schlüsselbünde - AWS Encryption SDK

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

AWS KMS ECDH-Schlüsselbünde

Ein AWS KMS ECDH Schlüsselbund verwendet eine asymmetrische Schlüsselvereinbarung, AWS KMS keysum einen gemeinsamen symmetrischen Wrapping-Schlüssel zwischen zwei Parteien abzuleiten. Zunächst verwendet der Schlüsselbund den Elliptic Curve Diffie-Hellman (ECDH) -Schlüsselvereinbarungsalgorithmus, um ein gemeinsames Geheimnis aus dem privaten Schlüssel im key pair des Absenders und dem öffentlichen KMS Schlüssel des Empfängers abzuleiten. Anschließend leitet der Schlüsselbund anhand des gemeinsamen geheimen Schlüssels den gemeinsamen Wrapping-Schlüssel ab, der Ihre Datenverschlüsselungsschlüssel schützt. Die Schlüsselableitungsfunktion, die (KDF_CTR_HMAC_SHA384) AWS Encryption SDK verwendet, um den gemeinsamen Wrapping-Schlüssel abzuleiten, entspricht den Empfehlungen für die Schlüsselableitung. NIST

Die Funktion zur Schlüsselableitung gibt 64 Byte an Schlüsselmaterial zurück. Um sicherzustellen, dass beide Parteien das richtige Schlüsselmaterial verwenden, AWS Encryption SDK verwendet der die ersten 32 Byte als Commitment-Schlüssel und die letzten 32 Byte als gemeinsamen Wrapping-Schlüssel. Wenn der Schlüsselbund beim Entschlüsseln nicht denselben Commitment-Schlüssel und denselben gemeinsamen Wrapping-Schlüssel reproduzieren kann, die im Chiffretext der Nachrichtenkopfzeile gespeichert sind, schlägt der Vorgang fehl. Wenn Sie beispielsweise Daten mit einem Schlüsselbund verschlüsseln, der mit Alices privatem Schlüssel und Bobs öffentlichem Schlüssel konfiguriert ist, reproduziert ein Schlüsselbund, der mit Bobs privatem Schlüssel und Alices öffentlichem Schlüssel konfiguriert ist, denselben Commitment-Schlüssel und gemeinsamen Wrapping-Schlüssel und kann die Daten entschlüsseln. Wenn Bobs öffentlicher Schlüssel nicht von einem KMS key pair stammt, kann Bob einen ECDHRaw-Schlüsselbund erstellen, um die Daten zu entschlüsseln.

Der AWS KMS ECDH Schlüsselbund verschlüsselt Daten mit einem symmetrischen Schlüssel unter Verwendung von -. AES GCM Der Datenschlüssel wird dann mit dem abgeleiteten gemeinsamen Wrapping-Schlüssel unter Verwendung von - umhüllt. AES GCM Jeder AWS KMS ECDH Schlüsselbund kann nur einen gemeinsamen Wickelschlüssel haben, aber Sie können mehrere Schlüsselbunde, allein oder zusammen mit AWS KMS ECDH anderen Schlüsselbunden, zu einem Mehrfachschlüsselbund zusammenfassen.

Kompatibilität mit Programmiersprachen

Der AWS KMS ECDH Schlüsselbund wurde in Version 1.5.0 der Cryptographic Material Providers Library (MPL) eingeführt und wird von den folgenden Programmiersprachen und Versionen unterstützt:

  • Version 3. x der AWS-Verschlüsselungs-SDK for Java

  • Ausführung 4. x der AWS Encryption SDK Form. NET

  • Ausführung 4. x von AWS-Verschlüsselungs-SDK for Python, wenn es mit der optionalen MPL Abhängigkeit verwendet wird.

Erforderliche Berechtigungen für AWS KMS ECDH Schlüsselanhänger

Für das AWS Encryption SDK ist kein AWS Konto erforderlich und es ist auch nicht von einem AWS Dienst abhängig. Um einen AWS KMS ECDH Schlüsselbund verwenden zu können, benötigen Sie jedoch ein AWS Konto und die folgenden Mindestberechtigungen für AWS KMS keys den Schlüsselbund. Die Berechtigungen variieren je nachdem, welches Schlüsselvereinbarungsschema Sie verwenden.

  • Um Daten mithilfe des KmsPrivateKeyToStaticPublicKey Schlüsselvereinbarungsschemas zu verschlüsseln und zu entschlüsseln, benötigen Sie kms: GetPublicKey und kms: DeriveSharedSecret für das asymmetrische KMS key pair des Absenders. Wenn Sie den DER -codierten öffentlichen Schlüssel des Absenders direkt angeben, wenn Sie Ihren Schlüsselbund instanziieren, benötigen Sie nur die kms: DeriveSharedSecret -Berechtigung für das asymmetrische key pair des Absenders. KMS

  • Um Daten mithilfe des KmsPublicKeyDiscovery Schlüsselvereinbarungsschemas zu entschlüsseln, benötigen Sie die GetPublicKey Berechtigungen kms: DeriveSharedSecret und kms: für das angegebene asymmetrische KMS key pair.

Einen Schlüsselbund erstellen AWS KMS ECDH

Um einen AWS KMS ECDH Schlüsselbund zu erstellen, der Daten ver- und entschlüsselt, müssen Sie das KmsPrivateKeyToStaticPublicKey Schlüsselvereinbarungsschema verwenden. Um einen AWS KMS ECDH Schlüsselbund mit dem Schlüsselvereinbarungsschema zu initialisieren, KmsPrivateKeyToStaticPublicKey geben Sie die folgenden Werte an:

  • ID des Absenders AWS KMS key

    Muss ein asymmetrisches NIST — empfohlenes elliptisches KMS Curve-Schlüsselpaar (ECC) mit einem KeyUsage Wert von identifizieren. KEY_AGREEMENT Der private Schlüssel des Absenders wird verwendet, um den gemeinsamen geheimen Schlüssel abzuleiten.

  • (Optional) Der öffentliche Schlüssel des Absenders

    Muss ein DER -codierter öffentlicher X.509-Schlüssel sein, auch bekannt als SubjectPublicKeyInfo (SPKI), wie in 5280 definiert. RFC

    Die AWS KMS GetPublicKeyOperation gibt den öffentlichen Schlüssel eines asymmetrischen KMS key pair im erforderlichen DER -codierten Format zurück.

    Um die Anzahl der AWS KMS Anrufe zu reduzieren, die Ihr Schlüsselbund tätigt, können Sie den öffentlichen Schlüssel des Absenders direkt angeben. Wenn kein Wert für den öffentlichen Schlüssel des Absenders angegeben wird, ruft der Schlüsselbund auf, AWS KMS um den öffentlichen Schlüssel des Absenders abzurufen.

  • Der öffentliche Schlüssel des Empfängers

    Sie müssen den DER -codierten öffentlichen X.509-Schlüssel des Empfängers, auch bekannt als SubjectPublicKeyInfo (SPKI), wie in 5280 definiert, angeben. RFC

    Die AWS KMS GetPublicKeyOperation gibt den öffentlichen Schlüssel eines asymmetrischen KMS key pair im erforderlichen DER -codierten Format zurück.

  • Spezifikation der Kurve

    Identifiziert die Spezifikation für elliptische Kurven in den angegebenen Schlüsselpaaren. Sowohl die Schlüsselpaare des Absenders als auch des Empfängers müssen dieselbe Kurvenspezifikation haben.

    Zulässige Werte: ECC_NIST_P256, ECC_NIS_P384, ECC_NIST_P512

  • (Optional) Eine Liste von Grant-Tokens

    Wenn Sie den Zugriff auf den KMS Schlüssel in Ihrem AWS KMS ECDH Schlüsselbund mit Grants kontrollieren, müssen Sie bei der Initialisierung des Schlüsselbunds alle erforderlichen Grant-Token angeben.

C# / .NET

Im folgenden Beispiel wird ein AWS KMS ECDH Schlüsselbund mit dem Schlüssel des Absenders, dem öffentlichen KMS Schlüssel des Absenders und dem öffentlichen Schlüssel des Empfängers erstellt. In diesem Beispiel wird der optionale SenderPublicKey Parameter verwendet, um den öffentlichen Schlüssel des Absenders bereitzustellen. Wenn Sie den öffentlichen Schlüssel des Absenders nicht angeben, ruft der Schlüsselbund auf, AWS KMS um den öffentlichen Schlüssel des Absenders abzurufen. Sowohl die Schlüsselpaare des Absenders als auch des Empfängers befinden sich auf der ECC_NIST_P256 Kurve.

// 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

Im folgenden Beispiel wird ein AWS KMS ECDH Schlüsselbund mit dem KMS Schlüssel des Absenders, dem öffentlichen Schlüssel des Absenders und dem öffentlichen Schlüssel des Empfängers erstellt. In diesem Beispiel wird der optionale senderPublicKey Parameter verwendet, um den öffentlichen Schlüssel des Absenders bereitzustellen. Wenn Sie den öffentlichen Schlüssel des Absenders nicht angeben, ruft der Schlüsselbund auf, AWS KMS um den öffentlichen Schlüssel des Absenders abzurufen. Sowohl die Schlüsselpaare des Absenders als auch des Empfängers befinden sich auf der ECC_NIST_P256 Kurve.

// 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();
Python

Im folgenden Beispiel wird ein AWS KMS ECDH Schlüsselbund mit dem KMS Schlüssel des Absenders, dem öffentlichen Schlüssel des Absenders und dem öffentlichen Schlüssel des Empfängers erstellt. In diesem Beispiel wird der optionale senderPublicKey Parameter verwendet, um den öffentlichen Schlüssel des Absenders bereitzustellen. Wenn Sie den öffentlichen Schlüssel des Absenders nicht angeben, ruft der Schlüsselbund auf, AWS KMS um den öffentlichen Schlüssel des Absenders abzurufen. Sowohl die Schlüsselpaare des Absenders als auch des Empfängers befinden sich auf der ECC_NIST_P256 Kurve.

import boto3 from aws_cryptographic_materialproviders.mpl.models import ( CreateAwsKmsEcdhKeyringInput, KmsEcdhStaticConfigurationsKmsPrivateKeyToStaticPublicKey, KmsPrivateKeyToStaticPublicKeyInput, ) from aws_cryptography_primitives.smithygenerated.aws_cryptography_primitives.models import ECDHCurveSpec # Instantiate the material providers library mat_prov: AwsCryptographicMaterialProviders = AwsCryptographicMaterialProviders( config=MaterialProvidersConfig() ) # Retrieve public keys # Must be DER-encoded X.509 public keys bob_public_key = get_public_key_bytes("arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab") alice_public_key = get_public_key_bytes("arn:aws:kms:us-west-2:111122223333:key/0987dcba-09fe-87dc-65ba-ab0987654321") # Create the AWS KMS ECDH static keyring sender_keyring_input = CreateAwsKmsEcdhKeyringInput( kms_client = boto3.client('kms', region_name="us-west-2"), curve_spec = ECDHCurveSpec.ECC_NIST_P256, key_agreement_scheme = KmsEcdhStaticConfigurationsKmsPrivateKeyToStaticPublicKey( KmsPrivateKeyToStaticPublicKeyInput( sender_kms_identifier = "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab", sender_public_key = bob_public_key, recipient_public_key = alice_public_key, ) ) ) keyring = mat_prov.create_aws_kms_ecdh_keyring(sender_keyring_input)

Einen AWS KMS ECDH Discovery-Schlüsselbund erstellen

Beim Entschlüsseln empfiehlt es sich, die Schlüssel anzugeben, die sie verwenden AWS Encryption SDK können. Um dieser bewährten Methode zu folgen, verwenden Sie einen AWS KMS ECDH Schlüsselbund mit dem KmsPrivateKeyToStaticPublicKey Schlüsselvereinbarungsschema. Sie können jedoch auch einen AWS KMS ECDH Discovery-Schlüsselbund erstellen, d. h. einen AWS KMS ECDH Schlüsselbund, der jede Nachricht entschlüsseln kann, bei der der öffentliche Schlüssel des angegebenen Schlüsselpaars mit dem öffentlichen KMS Schlüssel des Empfängers übereinstimmt, der im Nachrichtenchiffretext gespeichert ist.

Wichtig

Wenn Sie Nachrichten mithilfe des KmsPublicKeyDiscovery Schlüsselvereinbarungsschemas entschlüsseln, akzeptieren Sie alle öffentlichen Schlüssel, unabhängig davon, wem sie gehören.

Um einen AWS KMS ECDH Schlüsselbund mit dem Schlüsselvereinbarungsschema zu initialisieren, geben Sie die folgenden Werte an: KmsPublicKeyDiscovery

  • ID des Empfängers AWS KMS key

    Muss ein asymmetrisches NIST — empfohlenes elliptisches KMS Curve-Schlüsselpaar (ECC) mit einem KeyUsage Wert von identifizieren. KEY_AGREEMENT

  • Kurvenspezifikation

    Identifiziert die elliptische Kurvenspezifikation im KMS key pair des Empfängers.

    Zulässige Werte: ECC_NIST_P256, ECC_NIS_P384, ECC_NIST_P512

  • (Optional) Eine Liste von Grant-Tokens

    Wenn Sie den Zugriff auf den KMS Schlüssel in Ihrem AWS KMS ECDH Schlüsselbund mit Grants kontrollieren, müssen Sie bei der Initialisierung des Schlüsselbunds alle erforderlichen Grant-Token angeben.

C# / .NET

Im folgenden Beispiel wird ein AWS KMS ECDH Discovery-Schlüsselbund mit einem KMS key pair auf der ECC_NIST_P256 Kurve erstellt. Sie müssen über die DeriveSharedSecret Berechtigungen kms: GetPublicKey und kms: für das angegebene KMS key pair verfügen. Dieser Schlüsselbund kann jede Nachricht entschlüsseln, bei der der öffentliche Schlüssel des angegebenen key pair mit dem öffentlichen KMS Schlüssel des Empfängers übereinstimmt, der im Nachrichtenchiffretext gespeichert ist.

// 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

Im folgenden Beispiel wird ein AWS KMS ECDH Discovery-Schlüsselbund mit einem KMS key pair auf der ECC_NIST_P256 Kurve erstellt. Sie müssen über die DeriveSharedSecret Berechtigungen kms: GetPublicKey und kms: für das angegebene KMS key pair verfügen. Dieser Schlüsselbund kann jede Nachricht entschlüsseln, bei der der öffentliche Schlüssel des angegebenen key pair mit dem öffentlichen KMS Schlüssel des Empfängers übereinstimmt, der im Nachrichtenchiffretext gespeichert ist.

// 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();
Python

Im folgenden Beispiel wird ein AWS KMS ECDH Discovery-Schlüsselbund mit einem KMS key pair auf der ECC_NIST_P256 Kurve erstellt. Sie müssen über die DeriveSharedSecret Berechtigungen kms: GetPublicKey und kms: für das angegebene KMS key pair verfügen. Dieser Schlüsselbund kann jede Nachricht entschlüsseln, bei der der öffentliche Schlüssel des angegebenen key pair mit dem öffentlichen KMS Schlüssel des Empfängers übereinstimmt, der im Nachrichtenchiffretext gespeichert ist.

import boto3 from aws_cryptographic_materialproviders.mpl.models import ( CreateAwsKmsEcdhKeyringInput, KmsEcdhStaticConfigurationsKmsPublicKeyDiscovery, KmsPublicKeyDiscoveryInput, ) from aws_cryptography_primitives.smithygenerated.aws_cryptography_primitives.models import ECDHCurveSpec # Instantiate the material providers library mat_prov: AwsCryptographicMaterialProviders = AwsCryptographicMaterialProviders( config=MaterialProvidersConfig() ) # Create the AWS KMS ECDH discovery keyring create_keyring_input = CreateAwsKmsEcdhKeyringInput( kms_client = boto3.client('kms', region_name="us-west-2"), curve_spec = ECDHCurveSpec.ECC_NIST_P256, key_agreement_scheme = KmsEcdhStaticConfigurationsKmsPublicKeyDiscovery( KmsPublicKeyDiscoveryInput( recipient_kms_identifier = "arn:aws:kms:us-west-2:111122223333:key/0987dcba-09fe-87dc-65ba-ab0987654321", ) ) ) keyring = mat_prov.create_aws_kms_ecdh_keyring(create_keyring_input)