AWS Encryption SDK für. NET - 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 Encryption SDK für. NET

Das AWS Encryption SDK für. NETist eine clientseitige Verschlüsselungsbibliothek für Entwickler, die Anwendungen in C# und anderen schreiben. NETProgrammiersprachen. Sie wird unter Windows, macOS und Linux unterstützt.

Anmerkung

Version 4.0.0 des AWS Encryption SDK für. NETweicht von der AWS Encryption SDK Nachrichtenspezifikation ab. Aus diesem Grund können Nachrichten, die mit Version 4.0.0 verschlüsselt wurden, nur mit Version 4.0.0 oder höher von for entschlüsselt werden. AWS Encryption SDK NET. Sie können durch keine andere Programmiersprachenimplementierung entschlüsselt werden.

Version 4.0.1 des AWS Encryption SDK für. NETschreibt Nachrichten gemäß der AWS Encryption SDK Nachrichtenspezifikation und ist mit anderen Programmiersprachenimplementierungen interoperabel. Standardmäßig kann Version 4.0.1 Nachrichten lesen, die mit Version 4.0.0 verschlüsselt wurden. Wenn Sie jedoch mit Version 4.0.0 verschlüsselte Nachrichten nicht entschlüsseln möchten, können Sie die NetV4_0_0_RetryPolicyEigenschaft so angeben, dass der Client diese Nachrichten nicht lesen kann. Weitere Informationen finden Sie in den Versionshinweisen zu Version 4.0.1 im Repository unter. aws-encryption-sdk-dafny GitHub

Das AWS Encryption SDK für. NETunterscheidet sich von einigen anderen Programmiersprachenimplementierungen von AWS Encryption SDK in folgenden Punkten:

Das AWS Encryption SDK für. NETenthält alle in den Versionen 2.0 eingeführten Sicherheitsfunktionen. x und höher von anderen Sprachimplementierungen von. AWS Encryption SDK Wenn Sie jedoch das AWS Encryption SDK für verwenden. NETum Daten zu entschlüsseln, die mit einer Version vor 2.0 verschlüsselt wurden. x-Version, eine andere Sprachimplementierung von AWS Encryption SDK, möglicherweise müssen Sie Ihre Verpflichtungspolitik anpassen. Details hierzu finden Sie unter Wie legen Sie Ihre Verpflichtungsrichtlinie fest.

Das AWS Encryption SDK für. NETist ein Produkt von AWS Encryption SDK In Dafny, einer formalen Bestätigungssprache, in der Sie Spezifikationen, den Code zu ihrer Implementierung und die Beweise, um sie zu testen, schreiben. Das Ergebnis ist eine Bibliothek, die die Funktionen von AWS Encryption SDK in einem Framework implementiert, das die funktionale Korrektheit gewährleistet.

Weitere Informationen

  • Beispiele für die Konfiguration von Optionen in der AWS Encryption SDK, z. B. die Angabe einer alternativen Algorithmussuite, die Beschränkung verschlüsselter Datenschlüssel und die Verwendung von Schlüsseln für AWS KMS mehrere Regionen, finden Sie unter. Konfiguration der AWS Encryption SDK

  • Einzelheiten zur Programmierung mit dem AWS Encryption SDK für. NET, siehe das aws-encryption-sdk-netVerzeichnis des aws-encryption-sdk-dafny Repositorys auf GitHub.

Installation des AWS Encryption SDK für. NET

Das AWS Encryption SDK für. NETist als AWS.Cryptography.EncryptionSDKPaket in erhältlich NuGet. Für Einzelheiten zur Installation und Erstellung von AWS Encryption SDK for. NET, siehe die README.md-Datei im aws-encryption-sdk-net Repository.

Version 3.x

Ausführung 3. x der AWS Encryption SDK Form. NETunterstützt. NETFramework 4.5.2 — 4.8 nur unter Windows. Es unterstützt. NETCore 3.0+ und. NET5.0 und höher auf allen unterstützten Betriebssystemen.

Version 4.x

Ausführung 4. x der AWS Encryption SDK Form. NETunterstützt. NET6.0 und. NETFramework net48 und höher.

Das AWS Encryption SDK für. NETerfordert die Tasten, AWS SDK for .NET auch wenn Sie die Tasten AWS Key Management Service (AWS KMS) nicht verwenden. Es ist mit dem NuGet Paket installiert. Sofern Sie jedoch keine AWS KMS Schlüssel verwenden, AWS Encryption SDK für. NETerfordert keine AWS Anmeldeinformationen oder Interaktion mit einem AWS Dienst. AWS-Konto Hilfe bei der Einrichtung eines AWS Kontos finden Sie bei Bedarf unterVerwenden der AWS Encryption SDK mit AWS KMS.

Debuggen des AWS Encryption SDK für. NET

Das AWS Encryption SDK für. NETgeneriert keine Protokolle. Ausnahmen in der AWS Encryption SDK Form. NETgeneriert eine Ausnahmemeldung, aber keine Stack-Traces.

Um Ihnen beim Debuggen zu helfen, stellen Sie sicher, dass Sie die AWS SDK for .NET Anmeldung bei aktivieren. Die Protokolle und Fehlermeldungen von AWS SDK for .NET können Ihnen dabei helfen, Fehler, die in der Datei auftreten, AWS SDK for .NET von denen im Formular AWS Encryption SDK zu unterscheiden. NET. Hilfe zur AWS SDK for .NET Protokollierung finden Sie AWSLoggingim AWS SDK for .NET Entwicklerhandbuch. (Um das Thema zu sehen, erweitern Sie das Feld Öffnen, um es anzuzeigen. NETAbschnitt zum Inhalt des Frameworks.)

AWS KMS Schlüsselanhänger in der Form AWS Encryption SDK . NET

Die grundlegenden AWS KMS Schlüsselanhänger in der AWS Encryption SDK Form. NETnimm nur einen KMS Schlüssel. 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. Das für. AWS Encryption SDK NEThat einen speziellen Mehrfachschlüsselbund für einen oder mehrere AWS KMS Schlüssel und einen Standard-Schlüsselbund für einen oder mehrere Schlüsselanhänger eines beliebigen unterstützten Typs. Manche Programmierer ziehen es vor, eine Methode mit mehreren Schlüsselbunden zu verwenden, um all ihre Schlüsselbunde zu erstellen, und die für. AWS Encryption SDK NETunterstützt diese Strategie.

Das AWS Encryption SDK für. NETbietet einfache Einzelschlüsselringe und Schlüsselanhänger mit mehreren Tasten für alle typischen Anwendungsfälle, einschließlich Tasten mit mehreren Regionen. AWS KMS

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

Version 3.x

Das folgende Beispiel verwendet Version 3. x der AWS Encryption SDK Form. NETum einen AWS KMS Standard-Client für die Region zu erstellen, der den angegebenen Schlüssel enthält.

// Instantiate the AWS Encryption SDK and material providers var encryptionSdk = AwsEncryptionSdkFactory.CreateDefaultAwsEncryptionSdk(); var materialProviders = AwsCryptographicMaterialProvidersFactory.CreateDefaultAwsCryptographicMaterialProviders(); string keyArn = "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab"; // Instantiate the keyring input object var kmsKeyringInput = new CreateAwsKmsKeyringInput { KmsClient = new AmazonKeyManagementServiceClient(), KmsKeyId = keyArn }; // Create the keyring var keyring = materialProviders.CreateAwsKmsKeyring(kmsKeyringInput);
Version 4.x

Das folgende Beispiel verwendet Version 4. x der AWS Encryption SDK Form. NETum einen AWS KMS Client für die Region zu erstellen, der den angegebenen Schlüssel enthält.

// Instantiate the AWS Encryption SDK and material providers var esdk = new ESDK(new AwsEncryptionSdkConfig()); var mpl = new MaterialProviders(new MaterialProvidersConfig()); string keyArn = "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab"; // Instantiate the keyring input object var createKeyringInput = new CreateAwsKmsKeyringInput { KmsClient = new AmazonKeyManagementServiceClient(), KmsKeyId = kmsArn }; // Create the keyring var kmsKeyring = mpl.CreateAwsKmsKeyring(createKeyringInput);

Verwenden Sie die CreateAwsKmsMultiKeyring() Methode, um einen Schlüsselbund mit einem oder mehreren AWS KMS Schlüsseln zu erstellen. In diesem Beispiel werden zwei AWS KMS Schlüssel verwendet. Um einen KMS Schlüssel anzugeben, verwenden Sie nur den Generator Parameter. Der KmsKeyIds 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.

Das folgende Beispiel verwendet Version 4. x der AWS Encryption SDK Form. NETund die CreateAwsKmsKeyring() Methode zur Anpassung des AWS KMS Clients.

// Instantiate the AWS Encryption SDK and material providers var esdk = new ESDK(new AwsEncryptionSdkConfig()); var mpl = new MaterialProviders(new MaterialProvidersConfig()); string generatorKey = "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab"; List<string> additionalKeys = new List<string> { "arn:aws:kms:us-west-2:111122223333:key/0987dcba-09fe-87dc-65ba-ab0987654321" }; // Instantiate the keyring input object var createEncryptKeyringInput = new CreateAwsKmsMultiKeyringInput { Generator = generatorKey, KmsKeyIds = additionalKeys }; var kmsEncryptKeyring = materialProviders.CreateAwsKmsMultiKeyring(createEncryptKeyringInput);

Version 4. x der AWS Encryption SDK Form. NETunterstü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 var esdk = new ESDK(new AwsEncryptionSdkConfig()); var mpl = new MaterialProviders(new MaterialProvidersConfig()); var publicKey = new MemoryStream(Encoding.UTF8.GetBytes(AWS KMS RSA public key)); // Instantiate the keyring input object var createKeyringInput = new CreateAwsKmsRsaKeyringInput { KmsClient = new AmazonKeyManagementServiceClient(), KmsKeyId = AWS KMS RSA private key ARN, PublicKey = publicKey, EncryptionAlgorithm = EncryptionAlgorithmSpec.RSAES_OAEP_SHA_256 }; // Create the keyring var kmsRsaKeyring = mpl.CreateAwsKmsRsaKeyring(createKeyringInput);

Erforderliche Verschlüsselungskontexte in Version 4.x

Mit Version 4. x der AWS Encryption SDK Form. NET, können Sie den erforderlichen Verschlüsselungskontext verwendenCMM, um Verschlüsselungskontexte für Ihre kryptografischen Operationen vorzuschreiben. Ein Verschlüsselungskontext ist ein Satz nicht geheimer Schlüssel-Wert-Paare. 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 wird nur von den folgenden 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 Abhängigkeit von Cryptographic Material Providers Library (MPL) verwendet wird.

Wenn Sie Daten mit dem erforderlichen Verschlüsselungskontext verschlüsselnCMM, können Sie sie nur mit einer dieser unterstützten Versionen entschlüsseln.

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

var encryptionContext = new Dictionary<string, string>() { {"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 AWS Encryption SDK and material providers var esdk = new ESDK(new AwsEncryptionSdkConfig()); var mpl = new MaterialProviders(new MaterialProvidersConfig()); // Instantiate the keyring input object var createKeyringInput = new CreateAwsKmsKeyringInput { KmsClient = new AmazonKeyManagementServiceClient(), KmsKeyId = kmsKey }; // Create the keyring var kmsKeyring = mpl.CreateAwsKmsKeyring(createKeyringInput); var createCMMInput = new CreateRequiredEncryptionContextCMMInput { UnderlyingCMM = mpl.CreateDefaultCryptographicMaterialsManager(new CreateDefaultCryptographicMaterialsManagerInput{Keyring = kmsKeyring}), // If you pass in a keyring but no underlying cmm, it will result in a failure because only cmm is supported. RequiredEncryptionContextKeys = new List<string>(encryptionContext.Keys) }; // Create the required encryption context CMM var requiredEcCMM = mpl.CreateRequiredEncryptionContextCMM(createCMMInput);

Wenn Sie einen AWS KMS Schlüsselbund verwenden, ist der für. AWS Encryption SDK NETverwendet außerdem den Verschlüsselungskontext, um zusätzliche authentifizierte Daten (AAD) in den Aufrufen des Schlüsselbunds bereitzustellen. AWS KMS