RSARaw-Schlüsselringe - 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.

RSARaw-Schlüsselringe

Der RSA Raw-Schlüsselbund führt eine asymmetrische Verschlüsselung und Entschlüsselung von Datenschlüsseln im lokalen Speicher mit RSA öffentlichen und privaten Schlüsseln durch, die Sie bereitstellen. Sie müssen den privaten Schlüssel generieren, speichern und schützen, vorzugsweise in einem Hardware-Sicherheitsmodul (HSM) oder einem Schlüsselverwaltungssystem. Die Verschlüsselungsfunktion verschlüsselt den Datenschlüssel unter dem RSA öffentlichen Schlüssel. Die Entschlüsselungsfunktion entschlüsselt den Datenschlüssel mithilfe des privaten Schlüssels. Sie können zwischen den verschiedenen RSAPadding-Modi wählen.

Ein RSA Raw-Schlüsselbund, der verschlüsselt und entschlüsselt, muss ein asymmetrisches Paar aus öffentlichem Schlüssel und privatem Schlüssel enthalten. Sie können Daten jedoch mit einem RSA Raw-Schlüsselbund verschlüsseln, der nur über einen öffentlichen Schlüssel verfügt, und Sie können Daten mit einem RSA Raw-Schlüsselbund entschlüsseln, der nur über einen privaten Schlüssel verfügt. Sie können einen beliebigen Raw-Schlüsselbund in einen RSA Mehrfachschlüsselbund aufnehmen. Wenn Sie einen RSA Raw-Schlüsselbund mit einem öffentlichen und einem privaten Schlüssel konfigurieren, stellen Sie sicher, dass sie Teil desselben key pair sind. Einige Sprachimplementierungen von AWS Encryption SDK werden keinen RSA Raw-Schlüsselbund mit Schlüsseln aus verschiedenen Paaren erstellen. Andere verlassen sich darauf, dass Sie überprüfen, ob Ihre Schlüssel von demselben key pair stammen.

Der RSA Raw-Schlüsselbund entspricht in der und der JceMasterKeyRawMasterKeyin der AWS-Verschlüsselungs-SDK for Java und interagiert mit ihnen, AWS-Verschlüsselungs-SDK for Python wenn sie mit RSA asymmetrischen Verschlüsselungsschlüsseln verwendet werden. 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.

Anmerkung

Der RSA Raw-Schlüsselbund unterstützt keine asymmetrischen Schlüssel. KMS Wenn Sie asymmetrische RSA KMS Schlüssel verwenden möchten, Version 4. x der Form AWS Encryption SDK . NETund Version 3. x der AWS-Verschlüsselungs-SDK for Java unterstützten AWS KMS Schlüsselbunde, die symmetrische Verschlüsselung (SYMMETRIC_DEFAULT) oder asymmetrische Verschlüsselung verwenden. RSA AWS KMS keys

Wenn Sie Daten mit einem RSA Raw-Schlüsselbund verschlüsseln, der den öffentlichen Schlüssel eines Schlüssels enthält, kann weder der noch den RSA KMS AWS Encryption SDK Schlüssel entschlüsseln. AWS KMS Sie können den privaten Schlüssel eines AWS KMS asymmetrischen Schlüssels nicht in einen KMS Raw-Schlüsselbund exportieren. RSA Der AWS KMS Entschlüsselungsvorgang kann die verschlüsselte Nachricht, die zurückgegeben wird, nicht entschlüsseln. AWS Encryption SDK

Achten Sie beim Aufbau eines RSA Raw-Schlüsselbunds in der darauf AWS-Verschlüsselungs-SDK for C, den Inhalt der PEM Datei, die jeden Schlüssel enthält, als Null-terminierte C-Zeichenfolge anzugeben, nicht als Pfad oder Dateiname. Achten Sie bei der Erstellung eines RSA Raw-Schlüsselbundes auf mögliche Inkompatibilitäten mit JavaScript anderen Sprachimplementierungen.

Namespaces und Namen

Um das RSA Schlüsselmaterial in einem Schlüsselbund zu identifizieren, verwendet der RSA 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, den Schlüsselnamespace und den Schlüsselnamen zu verwenden, die das RSA key pair (oder seinen privaten Schlüssel) in Ihrem HSM oder dem Schlüsselverwaltungssystem identifizieren.

Anmerkung

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

Der AWS-Verschlüsselungs-SDK for C reserviert den aws-kms Schlüsselnamespace-Wert für KMS Schlüssel. Verwenden Sie ihn nicht in einem AES Raw-Schlüsselbund oder einem RSA Raw-Schlüsselbund mit dem. AWS-Verschlüsselungs-SDK for C

Wenn Sie verschiedene Schlüsselbunde zum Verschlüsseln und Entschlüsseln einer bestimmten Nachricht erstellen, sind der Namespace und die Namenswerte entscheidend. Wenn der Schlüsselnamespace und der Schlüsselname im Entschlüsselungsschlüsselbund nicht exakt und unter Berücksichtigung der Groß- und Kleinschreibung für den Schlüsselnamespace und den Schlüsselnamen im Verschlüsselungsschlüsselbund übereinstimmen, wird der Entschlüsselungsschlüsselbund nicht verwendet, auch wenn die Schlüssel aus demselben key pair stammen.

Der Schlüsselnamespace und der Schlüsselname des Schlüsselmaterials in den Verschlüsselungs- und Entschlüsselungsschlüsselbunden müssen identisch sein, unabhängig davon, ob der Schlüsselbund den RSA öffentlichen Schlüssel, den RSA privaten Schlüssel oder beide Schlüssel im key pair enthält. Nehmen wir beispielsweise an, Sie verschlüsseln Daten mit einem RSA Raw-Schlüsselbund für einen RSA öffentlichen Schlüssel mit Schlüsselnamespace und Schlüsselname. HSM_01 RSA_2048_06 Um diese Daten zu entschlüsseln, erstellen Sie einen RSA Raw-Schlüsselbund mit dem privaten Schlüssel (oder key pair) und demselben Schlüsselnamespace und Namen.

Padding-Modus

Sie müssen einen Füllmodus für RSA Raw-Schlüsselringe angeben, die zur Verschlüsselung und Entschlüsselung verwendet werden, oder Funktionen Ihrer Sprachimplementierung verwenden, die ihn für Sie spezifizieren.

Der AWS Encryption SDK unterstützt die folgenden Füllmodi, die den Einschränkungen der einzelnen Sprachen unterliegen. Wir empfehlen einen Füllmodus, insbesondere bei SHA -256 und OAEP MGF1 bei SHA -256 OAEPPadding. Der PKCS1Padding-Modus wird nur aus Gründen der Abwärtskompatibilität unterstützt.

  • OAEPmit SHA -1 und MGF1 mit SHA -1 Padding

  • OAEPmit SHA -256 und MGF1 mit -256 Padding SHA

  • OAEPmit SHA -384 und mit -384 Padding MGF1 SHA

  • OAEPmit SHA -512 und mit -512 Padding MGF1 SHA

  • PKCS1v1.5 Polsterung

Die folgenden Beispiele zeigen, wie Sie einen RSA Raw-Schlüsselbund mit dem öffentlichen und privaten Schlüssel eines RSA key pair und den Padding-Modus OAEP mit SHA -256 und MGF1 mit SHA -256 erstellen. Die RSAPrivateKey Variablen RSAPublicKey und stehen für das von Ihnen bereitgestellte Schlüsselmaterial.

C

Um einen RSA Raw-Schlüsselbund in der zu erstellen AWS-Verschlüsselungs-SDK for C, verwenden Sieaws_cryptosdk_raw_rsa_keyring_new.

Achten Sie beim Aufbau eines RSA Raw-Schlüsselbunds in der darauf AWS-Verschlüsselungs-SDK for C, dass Sie den Inhalt der PEM Datei, die jeden Schlüssel enthält, als Null-terminierte C-Zeichenfolge angeben, nicht als Pfad oder Dateiname. Ein vollständiges Beispiel finden Sie unter raw_rsa_keyring.c.

struct aws_allocator *alloc = aws_default_allocator(); AWS_STATIC_STRING_FROM_LITERAL(key_namespace, "HSM_01"); AWS_STATIC_STRING_FROM_LITERAL(key_name, "RSA_2048_06"); struct aws_cryptosdk_keyring *rawRsaKeyring = aws_cryptosdk_raw_rsa_keyring_new( alloc, key_namespace, key_name, private_key_from_pem, public_key_from_pem, AWS_CRYPTOSDK_RSA_OAEP_SHA256_MGF1);
C# / .NET

Um einen Raw-Schlüsselbund in der Form zu instanziieren. RSA AWS Encryption SDK NET, verwende die Methode. materialProviders.CreateRawRsaKeyring() Ein vollständiges Beispiel finden Sie unter R awRSAKeyring 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 = "RSA_2048_06"; // Get public and private keys from PEM files var publicKey = new MemoryStream(System.IO.File.ReadAllBytes("RSAKeyringExamplePublicKey.pem")); var privateKey = new MemoryStream(System.IO.File.ReadAllBytes("RSAKeyringExamplePrivateKey.pem")); // Create the keyring input var createRawRsaKeyringInput = new CreateRawRsaKeyringInput { KeyNamespace = keyNamespace, KeyName = keyName, PaddingScheme = PaddingScheme.OAEP_SHA512_MGF1, PublicKey = publicKey, PrivateKey = privateKey }; // Create the keyring var rawRsaKeyring = materialProviders.CreateRawRsaKeyring(createRawRsaKeyringInput);
JavaScript Browser

Das AWS-Verschlüsselungs-SDK for JavaScript im Browser bezieht seine kryptografischen Primitive aus der WebCryptoBibliothek. Bevor Sie den Schlüsselbund erstellen, müssen Sie das Rohschlüsselmaterial verwenden importPublicKey() und/oder importPrivateKey() in das Backend importieren. WebCrypto Dadurch wird sichergestellt, dass der Schlüsselbund vollständig ist, obwohl alle Aufrufe asynchron sind. WebCrypto Das Objekt, das die Importmethoden verwenden, beinhaltet den Wrapping-Algorithmus und seinen Padding-Modus.

Verwenden Sie nach dem Import des Schlüsselmaterials die RawRsaKeyringWebCrypto() Methode, um den Schlüsselbund zu instanziieren. Beachten Sie bei der Erstellung eines RSA Raw-Schlüsselbundes die mögliche Inkompatibilität mit anderen Sprachimplementierungen. JavaScript

Ein vollständiges Beispiel finden Sie unter rsa_simple.ts (Browser). JavaScript

const privateKey = await RawRsaKeyringWebCrypto.importPrivateKey( privateRsaJwKKey ) const publicKey = await RawRsaKeyringWebCrypto.importPublicKey( publicRsaJwKKey ) const keyNamespace = 'HSM_01' const keyName = 'RSA_2048_06' const keyring = new RawRsaKeyringWebCrypto({ keyName, keyNamespace, publicKey, privateKey, })
JavaScript Node.js

Um einen RSA Raw-Schlüsselbund in AWS-Verschlüsselungs-SDK for JavaScript Node.js zu instanziieren, erstellen Sie eine neue Instanz der Klasse. RawRsaKeyringNode Der wrapKey Parameter enthält den öffentlichen Schlüssel. Der unwrapKey Parameter enthält den privaten Schlüssel. Der RawRsaKeyringNode Konstruktor berechnet einen Standard-Füllmodus für Sie, obwohl Sie einen bevorzugten Füllmodus angeben können.

Achten Sie bei der Erstellung eines unformatierten RSA Schlüsselbundes auf mögliche JavaScript Inkompatibilitäten mit anderen Sprachimplementierungen.

Ein vollständiges Beispiel finden Sie unter rsa_simple.ts (Node.js). JavaScript

const keyNamespace = 'HSM_01' const keyName = 'RSA_2048_06' const keyring = new RawRsaKeyringNode({ keyName, keyNamespace, rsaPublicKey, rsaPrivateKey})
Java
final CreateRawRsaKeyringInput keyringInput = CreateRawRsaKeyringInput.builder() .keyName("RSA_2048_06") .keyNamespace("HSM_01") .paddingScheme(PaddingScheme.OAEP_SHA256_MGF1) .publicKey(RSAPublicKey) .privateKey(RSAPrivateKey) .build(); final MaterialProviders matProv = MaterialProviders.builder() .MaterialProvidersConfig(MaterialProvidersConfig.builder().build()) .build(); IKeyring rawRsaKeyring = matProv.CreateRawRsaKeyring(keyringInput);