AWS Encryption SDK の 。NET - AWS Encryption SDK

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

AWS Encryption SDK の 。NET

AWS Encryption SDK for .NET は、C# やその他の .NET プログラミング言語でアプリケーションを記述しているデベロッパー向けのクライアント側の暗号化ライブラリです。Windows、macOS、Linux でサポートされています。

注記

for のバージョン 4.0.0 AWS Encryption SDK NETがメッセージ仕様から逸脱しています AWS Encryption SDK 。そのため、バージョン 4.0.0 で暗号化されたメッセージは、 AWS Encryption SDK 用の のバージョン 4.0.0 以降でのみ復号化できますNET。その他のプログラミング言語実装では復号化できません。

AWS Encryption SDK for のバージョン 4.0.1 NETは AWS Encryption SDK 、メッセージ仕様に従ってメッセージを書き込み、他のプログラミング言語の実装と相互運用可能です。デフォルトでは、バージョン 4.0.1 はバージョン 4.0.0 で暗号化されたメッセージを読み取ることができます。ただし、バージョン 4.0.0 で暗号化されたメッセージを復号化したくない場合は、NetV4_0_0_RetryPolicy プロパティを指定してクライアントがこれらのメッセージを読み取らないようにすることができます。詳細については、 の aws-encryption-sdk-dafnyリポジトリの v4.0.1 リリースノートを参照してください GitHub。

AWS Encryption SDK for 。NET は、 AWS Encryption SDK 以下の方法で の他のプログラミング言語実装とは異なります。

AWS Encryption SDK for 。NET には、 の他の言語実装のバージョン 2.0.x 以降で導入されたすべてのセキュリティ機能が含まれています AWS Encryption SDK。ただし、 AWS Encryption SDK で を使用している場合は、 の 2.NET0.x より前のバージョンの別の言語実装によって暗号化されたデータを復号化するために AWS Encryption SDK、コミットメントポリシー を調整する必要がある場合があります。詳細については、「コミットメントポリシーの設定方法」を参照してください。

AWS Encryption SDK for .NET は、仕様を記述する正式な検証言語である AWS Encryption SDK Dafny の の製品であり、実装するコード、およびテストする証拠です。その結果、機能の正確性を保証するフレームワークに、 AWS Encryption SDK の機能を実装するライブラリができあがりました。

詳細はこちら

  • 代替アルゴリズムスイートの指定 AWS Encryption SDK、暗号化されたデータキーの制限、 AWS KMS マルチリージョンキーの使用など、 でオプションを設定する方法の例については、「」を参照してくださいの設定 AWS Encryption SDK

  • for でのプログラミングの詳細については AWS Encryption SDK NET、 のリポジトリのaws-encryption-sdk-net aws-encryption-sdk-dafnyディレクトリを参照してください GitHub。

AWS Encryption SDK の をインストールします。NET

for AWS Encryption SDK 。NET は、 のAWS.Cryptography.EncryptionSDKパッケージとして使用できます NuGet。for のインストールと構築の詳細については AWS Encryption SDK NET、 aws-encryption-sdk-netリポジトリの README.md ファイルを参照してください。

バージョン 3.x

AWS Encryption SDK 用 のバージョン 3.x。NET は をサポートします。NET Windows でのみ Framework 4.5.2 ~ 4.8。は をサポートしています。NET Core 3.0+ と 。NET サポートされているすべてのオペレーティングシステムで 5.0 以降。

バージョン 4.x

AWS Encryption SDK for のバージョン 4.x。NET は をサポートします。NET 6.0 と 。NET フレームワーク net48 以降。

AWS Encryption SDK for 。NET AWS Key Management Service (AWS KMS) キーを使用していない場合 AWS SDK for .NET でも、 は を必要とします。 NuGet パッケージとともにインストールされます。ただし、 AWS Encryption SDK の AWS KMS キーを使用している場合を除き、 NETでは AWS アカウント、、 AWS 認証情報、または AWS サービスとのやり取りは必要ありません。必要に応じて AWS アカウントを設定する方法については、「」を参照してくださいAWS KMS での AWS Encryption SDK の使用

AWS Encryption SDK の をデバッグする。NET

AWS Encryption SDK の 。NET はログを生成しません。 AWS Encryption SDK の の例外。NET は例外メッセージを生成しますが、スタックトレースは生成されません。

デバッグしやすいように、 AWS SDK for .NETへのログ記録を必ず有効にしてください。からのログとエラーメッセージ AWS SDK for .NET は、 で発生したエラーを AWS Encryption SDK のエラー AWS SDK for .NET と区別するのに役立ちます。NET AWS SDK for .NET ログ記録については、 デベロッパーガイドAWSLoggingの「」を参照してください。 AWS SDK for .NET (トピックを表示するには、開く を展開して を表示します。NET フレームワークコンテンツセクション)

AWS KMSAWS Encryption SDK の のキーリング。NET

AWS Encryption SDK の の基本的な AWS KMS キーリング。NETKMSキーは 1 つだけです。また、 AWS KMS クライアントも必要です。これにより、 KMSキー AWS リージョン の 用に クライアントを設定する機会が得られます。

1 つ以上のラッピング AWS KMS キーでキーリングを作成するには、マルチキーリングを使用します。 AWS Encryption SDK for .NET には、1 つ以上のキーを使用する特殊なマルチキーリングと AWS KMS 、サポートされている任意のタイプの 1 つ以上のキーリングを使用する標準のマルチキーリングがあります。一部のプログラマーは、マルチキーリングメソッドを使用してすべてのキーリングを作成し、 AWS Encryption SDK for .NET はその戦略をサポートします。

AWS Encryption SDK for 。NET には、マルチ AWS KMS リージョンキー を含む一般的なユースケースすべてに基本的な単一キーキーキーリングとマルチキーリングが用意されています

例えば、1 つの AWS KMS キーで AWS KMS キーリングを作成するには、 CreateAwsKmsKeyring()メソッドを使用できます。

Version 3.x

次の例では、 AWS Encryption SDK 用の のバージョン 3.x NETを使用して、指定されたキーを含むリージョンのデフォルト AWS KMS クライアントを作成します。

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

次の例では、 AWS Encryption SDK 用の のバージョン 4.x NETを使用して、指定されたキーを含むリージョンの AWS KMS クライアントを作成します。

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

1 つ以上のキーを使用して AWS KMS キーリングを作成するには、 CreateAwsKmsMultiKeyring()メソッドを使用します。この例では、2 つの AWS KMS キーを使用します。1 つのKMSキーを指定するには、 Generatorパラメータのみを使用します。追加KMSキーを指定する KmsKeyIdsパラメータはオプションです。

このキーリングの入力は AWS KMS クライアントを取りません。代わりに、 はキーリングのKMSキーで表される各リージョンのデフォルト AWS KMS クライアント AWS Encryption SDK を使用します。例えば、 Generatorパラメータの値で識別されるKMSキーが米国西部 (オレゴン) リージョン (us-west-2) にある場合、 はus-west-2リージョンのデフォルト AWS KMS クライアント AWS Encryption SDK を作成します。 AWS KMS クライアントをカスタマイズする必要がある場合は、CreateAwsKmsKeyring() メソッドを使用します。

次の例では、 AWS Encryption SDK 用の のバージョン 4.x NETと CreateAwsKmsKeyring()メソッドを使用して AWS KMS クライアントをカスタマイズします。

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

AWS Encryption SDK 用 のバージョン 4.x。NET は、対称暗号化 (SYMMETRIC_DEFAULT) または非対称 AWS KMS キーを使用するRSAKMSキーリングをサポートします。非対称RSAKMSキーで作成された AWS KMS キーリングには、1 つのキーペアのみを含めることができます。

非対称RSA AWS KMS キーリングで暗号化するには、キーリングの作成時に暗号化に使用するパブリックキーマテリアルを指定する必要があるため、kms:GenerateDataKey または kms:Encrypt は必要ありません。このキーリングで暗号化する場合、 AWS KMS 呼び出しは行われません。非対称RSA AWS KMS キーリングで復号するには、kms:Decrypt アクセス許可が必要です。

非対称RSA AWS KMS キーリングを作成するには、非対称キーARNからパブリックキーとプライベートRSAKMSキーを指定する必要があります。パブリックキーはPEMエンコードする必要があります。次の例では、非対称 AWS KMS キーペアを使用してRSAキーリングを作成します。

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

バージョン 4.x で必要な暗号化コンテキスト

for AWS Encryption SDK . のバージョン 4.x ではNET、必要な暗号化コンテキストを使用してCMM、暗号化オペレーションで暗号化コンテキストを要求できます。暗号化コンテキストは、一連の非シークレットのキーと値のペアです。暗号化コンテキストは、暗号化されたデータに暗号化されてバインドされます。これにより、フィールドを復号するために同じ暗号化コンテキストが必要になります。必要な暗号化コンテキスト を使用する場合CMM、すべての暗号化および復号呼び出しに含める必要がある 1 つ以上の必要な暗号化コンテキストキー (必須キー) を指定できます。

注記

必要な暗号化コンテキストCMMは、次のバージョンでのみサポートされています。

  • のバージョン 3.x AWS Encryption SDK for Java

  • AWS Encryption SDK 用 のバージョン 4.x。NET

  • オプションの暗号化マテリアルプロバイダーライブラリ (MPL) の依存関係で使用する場合は AWS Encryption SDK for Python、 のバージョン 4.x

必要な暗号化コンテキスト を使用してデータを暗号化する場合はCMM、サポートされているこれらのバージョンのいずれかでのみデータを復号化できます。

暗号化すると、 は、必要なすべての暗号化コンテキストキーが、指定した暗号化コンテキストに含まれている AWS Encryption SDK ことを確認します。は、指定した暗号化コンテキスト AWS Encryption SDK に署名します。必須キーではないキーと値のペアのみがシリアル化され、暗号化操作によって返される暗号化メッセージのヘッダーにプレーンテキストで保存されます。

復号化時には、必要なキーを表すすべてのキーと値のペアを含む暗号化コンテキストを提供する必要があります。 AWS Encryption SDK は、この暗号化コンテキストと、暗号化されたメッセージのヘッダーに保存されているキーと値のペアを使用して、暗号化オペレーションで指定した元の暗号化コンテキストを再構築します。が元の暗号化コンテキストを再構築 AWS Encryption SDK できない場合、復号オペレーションは失敗します。誤った値を持つ必要なキーを含むキーと値のペアを供給すると、暗号化されたメッセージは復号化できません。暗号化時に指定したのと同じキーと値のペアを供給する必要があります。

重要

暗号化のコンテキストで必要なキーにどの値を選択するかを慎重に検討してください。復号化時には、同じキーとそれに対応する値を再度提供できる必要があります。必要なキーを再現できない場合、暗号化されたメッセージは復号化できません。

次の例では、必要な暗号化コンテキスト を使用して AWS KMS キーリングを初期化します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);

AWS KMS キーリングを使用する場合、 AWS Encryption SDK NETの も暗号化コンテキストを使用して、キーリングが に対して行う呼び出しで追加の認証データ (AAD) を提供します AWS KMS。