Raw RSAキーリング - AWS Encryption SDK

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

Raw RSAキーリング

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

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

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

注記

Raw RSAキーリングは非対称KMSキーをサポートしていません。非対称RSAKMSキーを使用する場合は、 AWS Encryption SDK 用の のバージョン 4.x NETと のバージョン 3.x AWS Encryption SDK for Java で、対称暗号化 (SYMMETRIC_DEFAULT) または非対称 を使用する AWS KMS キーリングがサポートされますRSA AWS KMS keys。

キーのパブリックRSAキーを含む Raw キーリングを使用してデータを暗号化する場合RSAKMS、 AWS Encryption SDK も もデータを復号 AWS KMS できません。 AWS KMS 非対称キーのプライベートKMSキーを Raw RSAキーリングにエクスポートすることはできません。 AWS KMS Decrypt オペレーションは、 が AWS Encryption SDK 返す暗号化されたメッセージを復号できません。

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

名前空間と名前

RSA キーリング内のキーマテリアルを識別するために、Raw RSAキーリングは指定したキー名前空間キー名を使用します。これらの値はシークレットではありません。これらは、暗号化オペレーションが返す 暗号化されたメッセージ のヘッダーにプレーンテキストで表示されます。HSM または キー管理システムのキーペア (またはそのプライベートキー) を識別するRSAキー名前空間とキー名を使用することをお勧めします。

注記

キーの名前空間とキー名は、JceMasterKeyRawMasterKey のプロバイダー ID (またはプロバイダー) とキー ID フィールドに相当します。

は、aws-kmsキーのKMSキー名前空間値 AWS Encryption SDK for C を予約します。で Raw AESキーリングまたは Raw RSAキーリングでは使用しないでください AWS Encryption SDK for C。

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

暗号化キーリングと復号キーリングのキーマテリアルのキー名前空間とキー名は、キーリングにRSAパブリックキー、RSAプライベートキー、またはキーペアの両方のキーが含まれているかどうかにかかわらず、同じである必要があります。例えば、キー名前空間 とRSAキー名 を持つRSAパブリックキーの Raw キーリングを使用してデータを暗号化するとHSM_01しますRSA_2048_06。そのデータを復号するには、プライベートRSAキー (またはキーペア) と同じキー名前空間と名前を使用して Raw キーリングを作成します。

パディングモード

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

は、各言語の制約に従って、次のパディングモード AWS Encryption SDK をサポートします。パOAEPディングモード、特に SHA-256 OAEP および SHA-256 パディングMGF1を使用することをお勧めします。PKCS1 パディングモードは、下位互換性のためにのみサポートされています。

  • OAEP が SHA-1 で、 MGF1が SHA-1 パディング

  • OAEP SHA-256 および SHA-256 パディングMGF1付き

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

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

  • PKCS1 v1.5 パディング

次の例は、 RSAキーペアのパブリックキーとプライベートキー、および -256 と SHA-25SHA6 パディングモードOAEPの MGF1を使用して Raw RSAキーリングを作成する方法を示しています。RSAPublicKey および RSAPrivateKey 変数は、指定するキーマテリアルを表します。

C

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

で Raw RSAキーリングを構築するときは AWS Encryption SDK for C、パスやファイル名ではなく、各キーを含む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

AWS Encryption SDK の で Raw RSAキーリングをインスタンス化するにはNET、 materialProviders.CreateRawRsaKeyring()メソッドを使用します。完全な例については、「RawRSAKeyringExample.cs」を参照してください。

次の例では、 のバージョン 4.x を AWS Encryption SDK に使用します。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

ブラウザ AWS Encryption SDK for JavaScript の はWebCrypto、ライブラリから暗号化プリミティブを取得します。キーリングを構築する前に、 importPublicKey()および/または importPrivateKey() を使用して raw キーマテリアルを WebCrypto バックエンドにインポートする必要があります。これにより、 へのすべての呼び出しが非同期であっても、キーリング WebCrypto は完了します。インポートメソッドが受け取るオブジェクトには、ラッピングアルゴリズムとそのパディングモードが含まれます。

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

完全な例については、「rsa_simple.ts (JavaScript Browser)」を参照してください。

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

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

で raw RSAキーリングを構築するときは JavaScript、他の言語実装との互換性がない可能性があることに注意してください。

完全な例については、「rsa_simple.ts (JavaScript Node.js)」を参照してください。

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