AWS-Verschlüsselungs-SDK for Java - 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-Verschlüsselungs-SDK for Java

In diesem Thema wird erklärt, wie das AWS-Verschlüsselungs-SDK for Java installiert und verwendet wird. Einzelheiten zur Programmierung mit dem AWS-Verschlüsselungs-SDK for Java finden Sie im aws-encryption-sdk-javaRepository unter GitHub. Die API Dokumentation finden Sie im Javadoc für die. AWS-Verschlüsselungs-SDK for Java

Voraussetzungen

Stellen Sie vor der Installation von sicher AWS-Verschlüsselungs-SDK for Java, dass Sie die folgenden Voraussetzungen erfüllen.

Eine Java-Entwicklungsumgebung

Sie benötigen Java 8 oder höher. Gehen Sie auf der Oracle-Website zu Java SE Downloads und laden Sie dann das Java SE Development Kit herunter und installieren Sie es (JDK).

Wenn Sie Oracle verwendenJDK, müssen Sie auch die Java Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy Files herunterladen und installieren.

Bouncy Castle

Das AWS-Verschlüsselungs-SDK for Java erfordert Bouncy Castle.

  • AWS-Verschlüsselungs-SDK for Java Versionen 1.6.1 und höher verwenden Bouncy Castle, um kryptografische Objekte zu serialisieren und zu deserialisieren. Sie können Bouncy Castle oder Bouncy Castle verwenden, um diese Anforderung zu erfüllen. FIPS Hilfe zur Installation und Konfiguration von Bouncy Castle FIPS finden Sie in der FIPSBC-Dokumentation, insbesondere in den Benutzerhandbüchern und den Sicherheitsrichtlinien. PDFs

  • Frühere Versionen von AWS-Verschlüsselungs-SDK for Java verwenden die Kryptografie von Bouncy Castle für JavaAPI. Diese Anforderung wird nur von anderen Anbietern erfüllt, die nicht zu FIPS Bouncy Castle gehören.

Wenn Sie nicht über Bouncy Castle verfügen, gehen Sie zu den neuesten Versionen von Bouncy Castle, um die entsprechende Anbieterdatei herunterzuladen. JDK Sie können auch Apache Maven verwenden, um das Artefakt für den Standard-Bouncy Castle-Anbieter (bcprov-ext-jdk15on) oder das Artefakt für Bouncy Castle (bc-fips) zu erhalten. FIPS

AWS SDK for Java

Version 3. x der AWS-Verschlüsselungs-SDK for Java erfordert das AWS SDK for Java 2.x, auch wenn Sie keine AWS KMS Schlüsselringe verwenden.

Ausführung 2. x oder früher von benötigt AWS-Verschlüsselungs-SDK for Java das nicht AWS SDK for Java. Die AWS SDK for Java ist jedoch erforderlich, um AWS Key Management Service(AWS KMS) als Hauptschlüsselanbieter zu verwenden. Ab AWS-Verschlüsselungs-SDK for Java Version 2.4.0 AWS-Verschlüsselungs-SDK for Java unterstützt der sowohl Version 1.x als auch 2.x von. AWS SDK for Java AWS Encryption SDK Der Code für AWS SDK for Java 1.x und 2.x ist interoperabel. Sie können beispielsweise Daten mit AWS Encryption SDK Code verschlüsseln, der 1.x unterstützt, und sie mit Code entschlüsseln, der AWS SDK for Java 1.x unterstützt AWS SDK for Java 2.x (oder umgekehrt). Versionen vor 2.4.0 AWS-Verschlüsselungs-SDK for Java unterstützen nur 1.x. AWS SDK for Java Hinweise zur Aktualisierung Ihrer Version von finden Sie unter AWS Encryption SDK. Migrieren Sie IhreAWS Encryption SDK

Wenn Sie Ihren AWS-Verschlüsselungs-SDK for Java Code von AWS SDK for Java 1.x auf aktualisieren AWS SDK for Java 2.x, ersetzen Sie Verweise auf die AWSKMSSchnittstelle in AWS SDK for Java 1.x durch Verweise auf die KmsClientSchnittstelle in. AWS SDK for Java 2.xDas AWS-Verschlüsselungs-SDK for Java unterstützt die Schnittstelle nicht. KmsAsyncClient Aktualisieren Sie außerdem Ihren Code, sodass die AWS KMS zugehörigen Objekte im kmssdkv2 Namespace statt im kms Namespace verwendet werden.

Verwenden Sie Apache Maven AWS SDK for Java, um das zu installieren.

  • Um das gesamte AWS SDK for Java als Abhängigkeit zu importieren, deklarieren Sie es in Ihrer pom.xml-Datei.

  • Um eine Abhängigkeit nur für das AWS KMS Modul in AWS SDK for Java 1.x zu erstellen, folgen Sie den Anweisungen zur Angabe bestimmter Module und setzen Sie den artifactId Wert auf. aws-java-sdk-kms

  • Um eine Abhängigkeit nur für das AWS KMS Modul in AWS SDK for Java 2.x zu erstellen, folgen Sie den Anweisungen zur Angabe bestimmter Module. Stellen Sie „groupIdbis“ software.amazon.awssdk und „artifactIdBiskms“ ein.

Weitere Änderungen finden Sie unter Was ist der Unterschied zwischen AWS SDK for Java 1.x und 2.x im AWS SDK for Java 2.x Entwicklerhandbuch.

In den Java-Beispielen im AWS Encryption SDK Developer Guide wird der verwendet. AWS SDK for Java 2.x

Installation

Installieren Sie die neueste Version von AWS-Verschlüsselungs-SDK for Java.

Anmerkung

Alle AWS-Verschlüsselungs-SDK for Java Versionen vor 2.0.0 befinden sich in der end-of-supportPhase.

Sie können sicher von Version 2.0 aus aktualisieren. x und höher auf die neueste Version von AWS-Verschlüsselungs-SDK for Java ohne Code- oder Datenänderungen. In Version 2.0 wurden jedoch neue Sicherheitsfunktionen eingeführt. x sind nicht abwärtskompatibel. Um von Versionen vor 1.7 zu aktualisieren. x auf Version 2.0. x und höher, Sie müssen zuerst auf die neueste Version 1 aktualisieren. x-Version von AWS Encryption SDK. Details hierzu finden Sie unter Migrieren Sie IhreAWS Encryption SDK.

Sie können das AWS-Verschlüsselungs-SDK for Java auf folgende Weise installieren.

manuell

Um das aws-encryption-sdk-java GitHubRepository zu installieren AWS-Verschlüsselungs-SDK for Java, klonen oder laden Sie es herunter.

Verwenden von Apache Maven

Das AWS-Verschlüsselungs-SDK for Java ist über Apache Maven mit der folgenden Abhängigkeitsdefinition verfügbar.

<dependency> <groupId>com.amazonaws</groupId> <artifactId>aws-encryption-sdk-java</artifactId> <version>3.0.0</version> </dependency>

Schauen Sie sich nach der SDK Installation von zunächst den Java-Beispielcode in diesem Handbuch und den Javadoc an. GitHub

AWS KMS Schlüsselanhänger in der AWS-Verschlüsselungs-SDK for Java

Ausführung 3. x von AWS-Verschlüsselungs-SDK for Java verwendet Schlüsselringe, um die Umschlagverschlüsselung durchzuführen. Für die grundlegenden AWS KMS Schlüsselanhänger ist nur ein AWS-Verschlüsselungs-SDK for Java KMS Schlüssel erforderlich. Sie benötigen außerdem einen AWS KMS Client, der Ihnen die Möglichkeit gibt, den Client für den AWS-Region KMS Schlüssel zu konfigurieren.

Um einen AWS KMS Schlüsselbund mit einem oder mehreren Schlüsseln zu erstellen, verwenden Sie einen Schlüsselbund mit mehreren Schlüsseln. Der AWS-Verschlüsselungs-SDK for Java hat einen speziellen Mehrfachschlüsselbund, der einen oder mehrere AWS KMS Schlüssel akzeptiert, und einen Standard-Mehrfachschlüsselbund, der einen oder mehrere Schlüsselringe eines beliebigen unterstützten Typs akzeptiert. Manche Programmierer ziehen es vor, eine Methode mit mehreren Schlüsselbunden zu verwenden, um all ihre Schlüsselbunde zu erstellen, und die Methode unterstützt diese Strategie. AWS-Verschlüsselungs-SDK for Java

Das AWS-Verschlüsselungs-SDK for Java bietet grundlegende Einzelschlüsselringe und Schlüsselanhänger mit mehreren Schlüsseln für alle typischen Anwendungsfälle, einschließlich Schlüssel mit mehreren Regionen. AWS KMS

Um beispielsweise einen AWS KMS Schlüsselbund mit einem Schlüssel zu erstellen, können Sie die] -Methode AWS KMS verwenden. CreateAwsKmsKeyring()

// Instantiate the AWS Encryption SDK and material providers final AwsCrypto crypto = AwsCrypto.builder().build(); final MaterialProviders materialProviders = MaterialProviders.builder() .MaterialProvidersConfig(MaterialProvidersConfig.builder().build()) .build(); // Create the keyring CreateAwsKmsKeyringInput kmsKeyringInput = CreateAwsKmsKeyringInput.builder() .kmsKeyId(keyArn) .kmsClient(KmsClient.create()) .build(); IKeyring kmsKeyring = materialProviders.CreateAwsKmsKeyring(kmsKeyringInput);

Verwenden Sie die Methode, um einen Schlüsselbund mit einem oder mehreren AWS KMS Schlüsseln zu erstellen. CreateAwsKmsMultiKeyring() In diesem Beispiel werden zwei KMS Schlüssel verwendet. Um einen KMS Schlüssel anzugeben, verwenden Sie nur den generator Parameter. Der msKeyIds Parameter, der zusätzliche KMS Schlüssel angibt, ist optional.

Die Eingabe für diesen Schlüsselbund benötigt keinen AWS KMS Client. Stattdessen AWS Encryption SDK verwendet der den AWS KMS Standard-Client für jede Region, die durch einen KMS Schlüssel im Schlüsselbund repräsentiert wird. Wenn sich der durch den Wert des Generator Parameters identifizierte KMS Schlüssel beispielsweise in der Region USA West (Oregon) (us-west-2) befindet, AWS Encryption SDK wird ein AWS KMS Standard-Client für die us-west-2 Region erstellt. Wenn Sie den AWS KMS Client anpassen müssen, verwenden Sie die CreateAwsKmsKeyring() Methode.

// Instantiate the AWS Encryption SDK and material providers final AwsCrypto crypto = AwsCrypto.builder().build(); final MaterialProviders materialProviders = MaterialProviders.builder() .MaterialProvidersConfig(MaterialProvidersConfig.builder().build()) .build(); String generatorKey = "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab"; List<String> additionalKey = Collections.singletonList("arn:aws:kms:us-west-2:111122223333:key/0987dcba-09fe-87dc-65ba-ab0987654321"); // Create the keyring final CreateAwsKmsMultiKeyringInput keyringInput = CreateAwsKmsMultiKeyringInput.builder() .generator(generatorKey) .kmsKeyIds(additionalKey) .build(); final IKeyring kmsKeyring = materialProviders.CreateAwsKmsMultiKeyring(keyringInput);

AWS-Verschlüsselungs-SDK for Java unterstützt AWS KMS Schlüsselringe, die symmetrische Verschlüsselung (SYMMETRIC_DEFAULT) oder RSA KMS asymmetrische Schlüssel verwenden. AWS KMS Schlüsselringe, die mit asymmetrischen RSA KMS Schlüsseln erstellt wurden, können nur ein key pair enthalten.

Um mit einem asymmetrischen RSA AWS KMS Schlüsselbund zu verschlüsseln, benötigen Sie kms: GenerateDataKey oder kms:Encrypt nicht, da Sie bei der Erstellung des Schlüsselbunds das Material der öffentlichen Schlüssel angeben müssen, das Sie für die Verschlüsselung verwenden möchten. Bei der Verschlüsselung mit diesem Schlüsselbund werden keine AWS KMS Anrufe getätigt. Um mit einem asymmetrischen RSA AWS KMS Schlüsselbund zu entschlüsseln, benötigen Sie die kms:Decrypt-Berechtigung.

Um einen asymmetrischen RSA AWS KMS Schlüsselbund zu erstellen, müssen Sie den öffentlichen Schlüssel und den privaten Schlüssel aus Ihrem asymmetrischen Schlüssel angeben. ARN RSA KMS Der öffentliche Schlüssel muss codiert sein. PEM Im folgenden Beispiel wird ein AWS KMS Schlüsselbund mit einem asymmetrischen RSA key pair erstellt.

// Instantiate the AWS Encryption SDK and material providers final AwsCrypto crypto = AwsCrypto.builder() // Specify algorithmSuite without asymmetric signing here // // ALG_AES_128_GCM_IV12_TAG16_NO_KDF("0x0014"), // ALG_AES_192_GCM_IV12_TAG16_NO_KDF("0x0046"), // ALG_AES_256_GCM_IV12_TAG16_NO_KDF("0x0078"), // ALG_AES_128_GCM_IV12_TAG16_HKDF_SHA256("0x0114"), // ALG_AES_192_GCM_IV12_TAG16_HKDF_SHA256("0x0146"), // ALG_AES_256_GCM_IV12_TAG16_HKDF_SHA256("0x0178") .withEncryptionAlgorithm(CryptoAlgorithm.ALG_AES_256_GCM_IV12_TAG16_HKDF_SHA256) .build(); final MaterialProviders matProv = MaterialProviders.builder() .MaterialProvidersConfig(MaterialProvidersConfig.builder().build()) .build(); // Create a KMS RSA keyring. // This keyring takes in: // - kmsClient // - kmsKeyId: Must be an ARN representing an asymmetric RSA KMS key // - publicKey: A ByteBuffer of a UTF-8 encoded PEM file representing the public // key for the key passed into kmsKeyId // - encryptionAlgorithm: Must be either RSAES_OAEP_SHA_256 or RSAES_OAEP_SHA_1 final CreateAwsKmsRsaKeyringInput createAwsKmsRsaKeyringInput = CreateAwsKmsRsaKeyringInput.builder() .kmsClient(KmsClient.create()) .kmsKeyId(rsaKeyArn) .publicKey(publicKey) .encryptionAlgorithm(EncryptionAlgorithmSpec.RSAES_OAEP_SHA_256) .build(); IKeyring awsKmsRsaKeyring = matProv.CreateAwsKmsRsaKeyring(createAwsKmsRsaKeyringInput);

Erforderliche Verschlüsselungskontexte in Version 3.x

Mit Version 3. x von AWS-Verschlüsselungs-SDK for Java, Sie können den erforderlichen Verschlüsselungskontext verwenden, CMM um Verschlüsselungskontexte für Ihre kryptografischen Operationen erforderlich zu machen. Ein Verschlüsselungskontext ist eine Gruppe von nicht geheimen Schlüssel-Wert-Paaren. Der Verschlüsselungskontext ist kryptografisch an die verschlüsselten Daten gebunden, sodass derselbe Verschlüsselungskontext erforderlich ist, um das Feld zu entschlüsseln. Wenn Sie den erforderlichen Verschlüsselungskontext verwendenCMM, können Sie einen oder mehrere erforderliche Verschlüsselungskontextschlüssel (erforderliche Schlüssel) angeben, die in allen Verschlüsselungs- und Entschlüsselungsaufrufen enthalten sein müssen.

Anmerkung

Der erforderliche Verschlüsselungskontext CMM ist nur mit Version 4 kompatibel. x des Forums AWS Encryption SDK . NET. Es ist mit keiner anderen Programmiersprachenimplementierung interoperabel. Wenn Sie Daten mit dem erforderlichen Verschlüsselungskontext verschlüsselnCMM, können Sie sie nur mit Version 3 entschlüsseln. x der AWS-Verschlüsselungs-SDK for Java oder Version 4. x der AWS Encryption SDK Form. NET.

Beim Verschlüsseln AWS Encryption SDK wird überprüft, ob alle erforderlichen Verschlüsselungskontextschlüssel in dem von Ihnen angegebenen Verschlüsselungskontext enthalten sind. Das AWS Encryption SDK signiert die von Ihnen angegebenen Verschlüsselungskontexte. Nur die Schlüssel-Wert-Paare, bei denen es sich nicht um erforderliche Schlüssel handelt, werden serialisiert und im Klartext-Format im Header der verschlüsselten Nachricht gespeichert, die der Verschlüsselungsvorgang zurückgibt.

Beim Entschlüsseln müssen Sie einen Verschlüsselungskontext angeben, der alle Schlüssel-Wert-Paare enthält, die die erforderlichen Schlüssel darstellen. Der AWS Encryption SDK verwendet diesen Verschlüsselungskontext und die im Header der verschlüsselten Nachricht gespeicherten Schlüssel-Wert-Paare, um den ursprünglichen Verschlüsselungskontext zu rekonstruieren, den Sie beim Verschlüsselungsvorgang angegeben haben. Wenn der ursprüngliche Verschlüsselungskontext AWS Encryption SDK nicht rekonstruiert werden kann, schlägt der Entschlüsselungsvorgang fehl. Wenn Sie ein Schlüssel-Wert-Paar angeben, das den erforderlichen Schlüssel mit einem falschen Wert enthält, kann die verschlüsselte Nachricht nicht entschlüsselt werden. Sie müssen dasselbe Schlüssel-Wert-Paar angeben, das bei Encrypt angegeben wurde.

Wichtig

Überlegen Sie sich sorgfältig, welche Werte Sie für die erforderlichen Schlüssel in Ihrem Verschlüsselungskontext wählen. Sie müssen in der Lage sein, dieselben Schlüssel und die entsprechenden Werte beim Entschlüsseln erneut anzugeben. Wenn Sie die erforderlichen Schlüssel nicht reproduzieren können, kann die verschlüsselte Nachricht nicht entschlüsselt werden.

Im folgenden Beispiel wird ein AWS KMS Schlüsselbund mit dem erforderlichen Verschlüsselungskontext initialisiert. CMM

// Instantiate the AWS Encryption SDK final AwsCrypto crypto = AwsCrypto.builder() .withCommitmentPolicy(CommitmentPolicy.RequireEncryptRequireDecrypt) .build(); // Create your encryption context final Map<String, String> encryptionContext = new HashMap<>(); encryptionContext.put("encryption", "context"); encryptionContext.put("is not", "secret"); encryptionContext.put("but adds", "useful metadata"); encryptionContext.put("that can help you", "be confident that"); encryptionContext.put("the data you are handling", "is what you think it is"); // Create a list of required encryption contexts final List<String> requiredEncryptionContextKeys = Arrays.asList("encryption", "context"); // Create the keyring final MaterialProviders materialProviders = MaterialProviders.builder() .MaterialProvidersConfig(MaterialProvidersConfig.builder().build()) .build(); final CreateAwsKmsKeyringInput keyringInput = CreateAwsKmsKeyringInput.builder() .kmsKeyId(keyArn) .kmsClient(KmsClient.create()) .build(); IKeyring kmsKeyring = materialProviders.CreateAwsKmsKeyring(keyringInput); // Create the required encryption context CMM ICryptographicMaterialsManager cmm = materialProviders.CreateDefaultCryptographicMaterialsManager( CreateDefaultCryptographicMaterialsManagerInput.builder() .keyring(kmsKeyring) .build() ); ICryptographicMaterialsManager requiredCMM = materialProviders.CreateRequiredEncryptionContextCMM( CreateRequiredEncryptionContextCMMInput.builder() .requiredEncryptionContextKeys(requiredEncryptionContextKeys) .underlyingCMM(cmm) .build() );