Unformatierte Schlüsselanhänger AES - 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.

Unformatierte Schlüsselanhänger AES

AWS Encryption SDK Damit können Sie einen AES symmetrischen Schlüssel verwenden, den Sie als Umschließungsschlüssel angeben, der Ihren Datenschlüssel schützt. Sie müssen das Schlüsselmaterial generieren, speichern und schützen, vorzugsweise in einem Hardware-Sicherheitsmodul (HSM) oder einem Schlüsselverwaltungssystem. Verwenden Sie einen AES Raw-Schlüsselbund, wenn Sie den Wrap-Schlüssel bereitstellen und die Datenschlüssel lokal oder offline verschlüsseln müssen.

Der AES Raw-Schlüsselbund verschlüsselt Daten mithilfe des AES GCM -Algorithmus und eines Umschließungsschlüssels, den Sie als Byte-Array angeben. Sie können in jedem AES Raw-Schlüsselbund nur einen Wrap-Schlüssel angeben, Sie können jedoch mehrere AES Raw-Schlüsselbunde einzeln oder zusammen mit anderen Schlüsselbunden in einen Mehrfachschlüsselbund aufnehmen.

Der AES Raw-Schlüsselbund entspricht der Klasse in der und der JceMasterKeyKlasse in der AWS-Verschlüsselungs-SDK for Java und interagiert mit ihnen, AWS-Verschlüsselungs-SDK for Python wenn sie mit einem Verschlüsselungsschlüssel verwendet werden. RawMasterKeyAES Sie können Ihrer Daten mit einer Programmiersprachen-Implementierung verschlüsseln und mit jeder beliebigen anderen Sprachenimplementierung unter Verwendung desselben Umhüllungsschlüssels entschlüsseln. Details hierzu finden Sie unter Schlüsselbund-Kompatibilität.

Wichtige Namespaces und Namen

Um den AES Schlüssel in einem Schlüsselbund zu identifizieren, verwendet der AES Raw-Schlüsselbund einen Schlüsselnamespace und einen Schlüsselnamen, die Sie angeben. Diese Werte sind nicht geheim. Sie erscheinen im Klartext in der Kopfzeile der verschlüsselten Nachricht, die der Verschlüsselungsvorgang zurückgibt. Wir empfehlen, einen Schlüsselnamespace für Ihr HSM oder Ihr Schlüsselverwaltungssystem und einen Schlüsselnamen zu verwenden, der den AES Schlüssel in diesem System identifiziert.

Anmerkung

Der Schlüsselnamespace und der Schlüsselname entsprechen den Feldern Provider-ID (oder Provider) und Key-ID in den JceMasterKey Feldern und. RawMasterKey

Das AWS-Verschlüsselungs-SDK for C und AWS Encryption SDK für. NETreserviert den aws-kms Schlüssel-Namespace-Wert für KMS Schlüssel. Verwenden Sie diesen Namespace-Wert nicht in einem AES Raw-Schlüsselbund oder Raw-Schlüsselbund mit diesen RSA Bibliotheken.

Wenn Sie verschiedene Schlüsselbunde zum Verschlüsseln und Entschlüsseln einer bestimmten Nachricht erstellen, sind die Namespace- und Namenswerte entscheidend. Wenn der Schlüsselnamespace und der Schlüsselname im Schlüsselbund für die Entschlüsselung nicht exakt und unter Berücksichtigung der Groß- und Kleinschreibung mit dem Schlüsselnamespace und dem Schlüsselnamen im Verschlüsselungsschlüsselbund übereinstimmen, wird der Schlüsselbund nicht verwendet, auch wenn die Schlüsselmaterial-Bytes identisch sind.

Sie könnten beispielsweise einen AES Raw-Schlüsselbund mit Schlüsselnamespace und Schlüsselnamen definieren. HSM_01 AES_256_012 Anschließend verwenden Sie diesen Schlüsselbund, um einige Daten zu verschlüsseln. Um diese Daten zu entschlüsseln, erstellen Sie einen AES Raw-Schlüsselbund mit demselben Schlüsselnamespace, demselben Schlüsselnamen und demselben Schlüsselmaterial.

Die folgenden Beispiele zeigen, wie Sie einen Raw-Schlüsselbund erstellen. AES Die AESWrappingKey Variable steht für das von Ihnen bereitgestellte Schlüsselmaterial.

C

Um einen AES Raw-Schlüsselbund in der zu instanziieren, verwenden Sie AWS-Verschlüsselungs-SDK for C. aws_cryptosdk_raw_aes_keyring_new() Ein vollständiges Beispiel finden Sie unter raw_aes_keyring.c.

struct aws_allocator *alloc = aws_default_allocator(); AWS_STATIC_STRING_FROM_LITERAL(wrapping_key_namespace, "HSM_01"); AWS_STATIC_STRING_FROM_LITERAL(wrapping_key_name, "AES_256_012"); struct aws_cryptosdk_keyring *raw_aes_keyring = aws_cryptosdk_raw_aes_keyring_new( alloc, wrapping_key_namespace, wrapping_key_name, aes_wrapping_key, wrapping_key_len);
C# / .NET

Um einen Raw-Schlüsselbund in für zu erstellen. AES AWS Encryption SDK NET, verwende die materialProviders.CreateRawAesKeyring() Methode. Ein vollständiges Beispiel finden Sie unter R awAESKeyring Example.cs.

Das folgende Beispiel verwendet Version 4. x der AWS Encryption SDK Form. NET.

// Instantiate the AWS Encryption SDK and material providers var esdk = new ESDK(new AwsEncryptionSdkConfig()); var mpl = new MaterialProviders(new MaterialProvidersConfig()); var keyNamespace = "HSM_01"; var keyName = "AES_256_012"; // This example uses the key generator in Bouncy Castle to generate the key material. // In production, use key material from a secure source. var aesWrappingKey = new MemoryStream(GeneratorUtilities.GetKeyGenerator("AES256").GenerateKey()); // Create the keyring that determines how your data keys are protected. var createKeyringInput = new CreateRawAesKeyringInput { KeyNamespace = keyNamespace, KeyName = keyName, WrappingKey = aesWrappingKey, WrappingAlg = AesWrappingAlg.ALG_AES256_GCM_IV12_TAG16 }; var keyring = materialProviders.CreateRawAesKeyring(createKeyringInput);
JavaScript Browser

Das AWS-Verschlüsselungs-SDK for JavaScript im Browser bezieht seine kryptografischen Primitive aus dem. WebCryptoAPI Bevor Sie den Schlüsselbund erstellen, müssen Sie ihn verwenden, RawAesKeyringWebCrypto.importCryptoKey() um das Rohschlüsselmaterial in das Backend zu importieren. WebCrypto Dadurch wird sichergestellt, dass der Schlüsselbund vollständig ist, obwohl alle Aufrufe asynchron sind. WebCrypto

Verwenden Sie dann die Methode, um einen AES Raw-Schlüsselbund zu instanziieren. RawAesKeyringWebCrypto() Sie müssen den AES Wrapping-Algorithmus („Wrapping Suite“) auf der Grundlage der Länge Ihres Schlüsselmaterials angeben. Ein vollständiges Beispiel finden Sie unter aes_simple.ts (Browser). JavaScript

Im folgenden Beispiel wird die buildClient Funktion verwendet, um die Standard-Commitment-Richtlinie anzugeben. REQUIRE_ENCRYPT_REQUIRE_DECRYPT Sie können die auch verwendenbuildClient, um die Anzahl der verschlüsselten Datenschlüssel in einer verschlüsselten Nachricht zu begrenzen. Weitere Informationen finden Sie unter Beschränkung verschlüsselter Datenschlüssel.

import { RawAesWrappingSuiteIdentifier, RawAesKeyringWebCrypto, synchronousRandomValues, buildClient, CommitmentPolicy, } from '@aws-crypto/client-browser' const { encrypt, decrypt } = buildClient( CommitmentPolicy.REQUIRE_ENCRYPT_REQUIRE_DECRYPT ) const keyNamespace = 'HSM_01' const keyName = 'AES_256_012' const wrappingSuite = RawAesWrappingSuiteIdentifier.AES256_GCM_IV12_TAG16_NO_PADDING /* Import the plaintext AES key into the WebCrypto backend. */ const aesWrappingKey = await RawAesKeyringWebCrypto.importCryptoKey( rawAesKey, wrappingSuite ) const rawAesKeyring = new RawAesKeyringWebCrypto({ keyName, keyNamespace, wrappingSuite, aesWrappingKey })
JavaScript Node.js

Um einen AES Raw-Schlüsselbund in der Datei AWS-Verschlüsselungs-SDK for JavaScript für Node.js zu instanziieren, erstellen Sie eine Instanz der Klasse. RawAesKeyringNode Sie müssen den AES Wrapping-Algorithmus („Wrapping Suite“) auf der Grundlage der Länge Ihres Schlüsselmaterials angeben. Ein vollständiges Beispiel finden Sie unter aes_simple.ts (Node.js). JavaScript

Im folgenden Beispiel wird die buildClient Funktion verwendet, um die Standard-Commitment-Richtlinie anzugeben. REQUIRE_ENCRYPT_REQUIRE_DECRYPT Sie können die auch verwendenbuildClient, um die Anzahl der verschlüsselten Datenschlüssel in einer verschlüsselten Nachricht zu begrenzen. Weitere Informationen finden Sie unter Beschränkung verschlüsselter Datenschlüssel.

import { RawAesKeyringNode, buildClient, CommitmentPolicy, RawAesWrappingSuiteIdentifier, } from '@aws-crypto/client-node' const { encrypt, decrypt } = buildClient( CommitmentPolicy.REQUIRE_ENCRYPT_REQUIRE_DECRYPT ) const keyName = 'AES_256_012' const keyNamespace = 'HSM_01' const wrappingSuite = RawAesWrappingSuiteIdentifier.AES256_GCM_IV12_TAG16_NO_PADDING const rawAesKeyring = new RawAesKeyringNode({ keyName, keyNamespace, aesWrappingKey, wrappingSuite, })
Java

Um einen AES Raw-Schlüsselbund in der zu instanziieren, verwenden Sie AWS-Verschlüsselungs-SDK for Java. matProv.CreateRawAesKeyring()

final CreateRawAesKeyringInput keyringInput = CreateRawAesKeyringInput.builder() .keyName("AES_256_012") .keyNamespace("HSM_01") .wrappingKey(AESWrappingKey) .wrappingAlg(AesWrappingAlg.ALG_AES256_GCM_IV12_TAG16) .build(); final MaterialProviders matProv = MaterialProviders.builder() .MaterialProvidersConfig(MaterialProvidersConfig.builder().build()) .build(); IKeyring rawAesKeyring = matProv.CreateRawAesKeyring(keyringInput);
Python

Das folgende Beispiel instanziiert den AWS Encryption SDK Client mit der Standard-Commitment-Richtlinie,. REQUIRE_ENCRYPT_REQUIRE_DECRYPT Ein vollständiges Beispiel finden Sie unter raw_aes_keyring_example.py im AWS-Verschlüsselungs-SDK for Python Repository unter. GitHub

# Instantiate the AWS Encryption SDK client client = aws_encryption_sdk.EncryptionSDKClient( commitment_policy=CommitmentPolicy.REQUIRE_ENCRYPT_REQUIRE_DECRYPT ) # Define the key namespace and key name key_name_space = "HSM_01" key_name = "AES_256_012" # Optional: Create an encryption context encryption_context: Dict[str, str] = { "encryption": "context", "is not": "secret", "but adds": "useful metadata", "that can help you": "be confident that", "the data you are handling": "is what you think it is", } # Instantiate the material providers mat_prov: AwsCryptographicMaterialProviders = AwsCryptographicMaterialProviders( config=MaterialProvidersConfig() ) # Create Raw AES keyring keyring_input: CreateRawAesKeyringInput = CreateRawAesKeyringInput( key_namespace=key_name_space, key_name=key_name, wrapping_key=AESWrappingKey, wrapping_alg=AesWrappingAlg.ALG_AES256_GCM_IV12_TAG16 ) raw_aes_keyring: IKeyring = mat_prov.create_raw_aes_keyring( input=keyring_input )