Raw RSA キーリング - AWS Encryption SDK

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

Raw RSA キーリング

Raw RSA キーリングは、ユーザーが指定したパブリックキーとプライベートキーを使用して、ローカルメモリ内のデータキーの非対称暗号化と復号を実行します。プライベートキーの生成、保存、保護は、ハードウェアセキュリティモジュール (HSM) またはキー管理システムで行う必要があります。暗号化関数を使用して、RSA パブリックキーのデータキーを暗号化します。復号関数でプライベートキーを使用して、データキーを復号します。複数の RSA パディングモードから選択できます。

暗号化と復号を行う Raw RSA キーリングには、非対称のパブリックキーとプライベートキーのペアを含める必要があります。ただし、データの暗号化は、パブリックキーのみを持つ Raw RSA キーリングを使用して行うことができます。また、データの復号は、プライベートキーのみを持つ Raw RSA キーリングを使用して行うことができます。には、Raw RSA キーリングを含めることができます。マルチキーリング。Raw RSA キーリングにパブリックキーとプライベートキーを設定する場合は、それらが同じkey pair に含まれていることを確認してください。のいくつかの言語実装AWS Encryption SDKは、異なるペアのキーを持つ Raw RSA キーリングを構築しません。他のユーザーは、あなたの鍵が同じkey pair ものであることを確認するためにあなたに依存しています。

Raw RSA キーリングはと同等で、JceMasterKeyのAWS Encryption SDK for JavaとRawMasterKeyのAWS Encryption SDK for PythonRSA 非対称暗号化キーと一緒に使用する場合。ある実装でデータを暗号化し、それを他の実装で、同じラッピングキーを使用して復号することができます。詳細については、「キーリングの互換性」を参照してください。

注記

[] を使用しません。非対称 KMS キーRaw RSA キーリングに入っています。Raw RSA キーリングでは KMS キーはサポートされていません。

RSA KMS キーのパブリックキーを含む Raw RSA キーリングを使用して行う場合は、AWS Encryption SDKまたAWS KMS解読できる の秘密鍵はエクスポートできませんAWS KMS非対称 KMS キーを Raw RSA キーリングに組み込む。-AWS KMS復号操作では、暗号化されたメッセージということはAWS Encryption SDKはを返します。

AWS Encryption SDK for C で Raw RSA キーリングを作成する場合は、各キーを含む PEM ファイルの内容は、パスやファイル名ではなく、null で終わる C の文字列を指定するようにしてください。JavaScript で Raw RSA キーリングを作成する場合は、他の言語の実装との互換性が失われる可能性があることに注意してください。

名前空間と名前

キーリング内の RSA キーマテリアルを識別するために、Raw RSA キーリングはキー名前空間そしてキー名あなたが提供すること。これらの値はシークレットではありません。これらは、のヘッダーにプレーンテキストで表示されます。暗号化されたメッセージ暗号化操作が返すこと。HSM またはキー管理システムで RSA key pair(またはその秘密キー)を識別するキー名前空間とキー名を使用することをお勧めします。

注記

キーの名前空間とキー名は、プロバイダー ID(またはプロバイダー) とキー ID内のフィールドJceMasterKeyそしてRawMasterKey

-AWS Encryption SDK for Cを留保しますaws-kmsKMS キーのキー名前空間値。Raw AES キーリングや Raw RSA キーリングで使用しないでください。AWS Encryption SDK for C。

特定のメッセージを暗号化および復号するために異なるキーリングを作成する場合、名前空間と名前の値が重要です。復号化キーリングの鍵の名前空間と鍵名が、暗号化キーリングの鍵の名前空間と鍵名と大文字と小文字を区別して完全に一致しない場合、鍵が同じ鍵key pair ものであっても、復号化キーリングは使用されません。

暗号化および復号化キーリングのキーマテリアルのキーネームスペースとキー名は、キーリングに RSA 公開キー、RSA 秘密キー、またはその両方のキーが含まれるかどうかに関係なく、同じである必要があります。たとえば、キー名前空間を持つ RSA 公開キーに対して Raw RSA キーリングを使用してデータを暗号化するとします。HSM_01キー名RSA_2048_06。そのデータを復号化するには、プライベートキー(またはkey pair)と同じキーの名前空間と名前を使用して Raw RSA キーリングを作成します。

パディングモード

暗号化と復号化に使用される Raw RSA キーリングのパディングモードを指定するか、言語実装の機能を使用して指定する必要があります。

-AWS Encryption SDKは、次のパディングモードをサポートし、各言語の制約に従います。推奨設定OAEPパディングモード。特に SHA-256 と SHA-256 パディングと MGF1 を持つ OAEP。-PKCS1パディングモードは、下位互換性のためにのみサポートされています。

  • OAEP と SHA-1 および MGF1 と SHA-1 パディング

  • SHA-256 と MGF1 と SHA-256 パディングで OAEP

  • OAEP と SHA-384 および MGF1 と SHA-384 パディング

  • OAEP と SHA-512 および MGF1 と SHA-512 パディング

  • PKCS1 v1.5 パディング

次に、RSA キーkey pair パブリックキーとプライベートキーを使用して Raw RSA キーリングを作成し、SHA-256 パディングモードの SHA-256 および MGF1 を持つ OAEP を作成する例を示します。-RSAPublicKeyそしてRSAPrivateKey変数は、提供する重要なマテリアルを表します。

C

で Raw RSA キーリングを作成するにはAWS Encryption SDK for C「」を使用するを使用するaws_cryptosdk_raw_rsa_keyring_new

AWS Encryption SDK for C で Raw RSA キーリングを作成する場合は、各キーを含む PEM ファイルの内容は、パスやファイル名ではなく、null で終わる C の文字列を指定するようにしてください。詳しい例については、を参照してください。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

で Raw RSA キーリングをインスタンス化するにはAWS Encryption SDK.NET については、materialProviders.CreateRawRsaKeyring()方法。詳しい例については、を参照してください。RawRSAKeyringExample.cs

// Instantiate the AWS Encryption SDK and material providers var encryptionSdk = AwsEncryptionSdkFactory.CreateDefaultAwsEncryptionSdk(); var materialProviders = AwsCryptographicMaterialProvidersFactory.CreateDefaultAwsCryptographicMaterialProviders(); 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

-AWS Encryption SDK for JavaScriptブラウザでは、その暗号化プリミティブをWebCryptoライブラリ. キーリングを作成する前に、importPublicKey()および/またはimportPrivateKey()に生のキー素材をインポートするには WebCrypto バックエンドの。これにより、すべてのコールがあっても、キーリングが確実に完了します。 WebCrypto 非同期です。インポートメソッドが取るオブジェクトには、ラッピングアルゴリズムとそのパディングモードが含まれます。

キーマテリアルをインポートしたら、RawRsaKeyringWebCrypto()キーリングをインスタンス化するメソッドです。JavaScript で Raw RSA キーリングを作成する場合は、他の言語の実装との互換性が失われる可能性があることに注意してください。

詳しい例については、を参照してください。sa_simple.ts(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

で Raw RSA キーリングをインスタンス化するにはAWS Encryption SDK for JavaScriptNode.js の場合は、新しいインスタンスを作成します。RawRsaKeyringNodeクラス。-wrapKeyパラメータはパブリックキーを保持します。-unwrapKeyパラメータはプライベートキーを保持します。-RawRsaKeyringNodeconstructor はデフォルトのパディングモードを計算しますが、優先するパディングモードを指定することもできます。

JavaScript で Raw RSA キーリングを作成する場合は、次の点に注意してください。潜在的な非互換性他の言語実装と併用する。

詳しい例については、を参照してください。sa_simple.ts(JavaScript Node.js).

const keyNamespace = 'HSM_01' const keyName = 'RSA_2048_06' const keyring = new RawRsaKeyringNode({ keyName, keyNamespace, rsaPublicKey, rsaPrivateKey})