未加工のRSAキーリング - AWS Encryption SDK

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

未加工のRSAキーリング

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

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

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

注記

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

RSA KMS キーのパブリックRSAキーを含む Raw キーリングでデータを暗号化する場合、 も 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プライベートキー、またはキーペアの両方のキーが含まれているかどうかにかかわらず、同じである必要があります。例えば、キー名前空間HSM_01とキー名 を持つRSAパブリックキーの Raw RSAキーリングを使用してデータを暗号化するとします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 MGF1および SHA-384 パディング

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

  • PKCS1 v1.5 パディング

次の例は、RSAキーペアのパブリックキーとプライベートキー、および -256 および SHA-SHA256 パディングモード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() を使用して、 WebCrypto バックエンドに未加工のキーマテリアルをインポートする必要があります。これにより、 へのすべての呼び出しが非同期であっても、キーリング WebCrypto は完了します。インポートメソッドが受け取るオブジェクトには、ラッピングアルゴリズムとそのパディングモードが含まれます。

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

次の例では、 buildClient関数を使用してデフォルトのコミットメントポリシー 、 を指定しますREQUIRE_ENCRYPT_REQUIRE_DECRYPT。を使用してbuildClient、暗号化されたメッセージ内の暗号化されたデータキーの数を制限することもできます。詳細については、「暗号化されたデータキーの制限」を参照してください。

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

import { RsaImportableKey, RawRsaKeyringWebCrypto, buildClient, CommitmentPolicy, } from '@aws-crypto/client-browser' const { encrypt, decrypt } = buildClient( CommitmentPolicy.REQUIRE_ENCRYPT_REQUIRE_DECRYPT ) 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、他の言語実装との互換性がない可能性があることに注意してください。

次の例では、 buildClient関数を使用してデフォルトのコミットメントポリシー 、 を指定しますREQUIRE_ENCRYPT_REQUIRE_DECRYPT。を使用してbuildClient、暗号化されたメッセージ内の暗号化されたデータキーの数を制限することもできます。詳細については、「暗号化されたデータキーの制限」を参照してください。

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

import { RawRsaKeyringNode, buildClient, CommitmentPolicy, } from '@aws-crypto/client-node' const { encrypt, decrypt } = buildClient( CommitmentPolicy.REQUIRE_ENCRYPT_REQUIRE_DECRYPT ) 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);
Python

次の例では、 AWS Encryption SDK クライアントにデフォルトのコミットメントポリシー 、 をインスタンス化しますREQUIRE_ENCRYPT_REQUIRE_DECRYPT。完全な例については、 の AWS Encryption SDK for Python リポジトリの raw_rsa_keyring_example.py を参照してください GitHub。

# Define the key namespace and key name key_name_space = "HSM_01" key_name = "RSA_2048_06" # Instantiate the material providers mat_prov: AwsCryptographicMaterialProviders = AwsCryptographicMaterialProviders( config=MaterialProvidersConfig() ) # Create Raw RSA keyring keyring_input: CreateRawRsaKeyringInput = CreateRawRsaKeyringInput( key_namespace=key_name_space, key_name=key_name, padding_scheme=PaddingScheme.OAEP_SHA256_MGF1, public_key=RSAPublicKey, private_key=RSAPrivateKey ) raw_rsa_keyring: IKeyring = mat_prov.create_raw_rsa_keyring( input=keyring_input )