原始 RSA keyring - AWS 資料庫加密 SDK

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

原始 RSA keyring

我們的用戶端加密程式庫已重新命名為 AWS 資料庫加密 SDK。本開發人員指南仍提供 DynamoDB 加密用戶端的相關資訊。

Raw RSA 金鑰圈會使用您提供的 RSA 公開金鑰和私密金鑰,對本機記憶體中的資料金鑰執行非對稱加密和解密。您必須產生、儲存及保護私密金鑰,最好是在硬體安全模組 (HSM) 或金鑰管理系統中。加密函數會根據 RSA 公開金鑰加密資料金鑰。解密函數會使用私有金鑰解密資料金鑰。您可以從數個 RSA 填補模式中選擇。

加密和解密的原始 RSA keyring,必須包含非對稱公開金鑰和私有金鑰對。不過,您可以使用只有公開金鑰的 RSA 金鑰圈來加密資料,也可以使用只有私密金鑰的 RSA 金鑰圈來解密資料。您可以在多鑰匙圈中包含任何 Raw RSA 鑰匙圈。如果您使用公開金鑰和私密金鑰來設定 Raw RSA 金鑰圈,請確定它們是相同 key pair 的一部分。

原始 RSA 金鑰圈等同於中與 RSA 非對稱加密金鑰搭配使用 適用於 JAVA 的 AWS Encryption SDK 時,與JceMasterKey中相互操作。

注意

原始 RSA 金鑰圈不支援非對稱 KMS 金鑰。若要使用非對稱 RSA KMS 金鑰,請建構金鑰AWS KMS 圈

命名空間和名稱

若要識別金鑰圈中的 RSA 金鑰材料,Raw RSA 金鑰圈會使用您提供的金鑰命名空間金鑰名稱。這些值並非機密。它們以純文本顯示在 AWS 數據庫加密 SDK 添加到記錄的材料描述中。我們建議您在 HSM 或金鑰管理系統中使用識別 RSA key pair (或其私密金鑰) 的金鑰命名空間和金鑰名稱。

注意

金鑰命名空間和金鑰名稱等同於中的「提供者 ID」(或「提供者」) 和「金鑰 ID」欄位JceMasterKey

如果您構建不同的密鑰環來加密和解密給定的記錄,則命名空間和名稱值非常重要。如果解密金鑰圈中的金鑰命名空間和金鑰名稱與加密金鑰圈中的金鑰命名空間和金鑰名稱不完全相符且區分大小寫,即使金鑰來自相同的金鑰組,也不會使用解密金鑰圈。

無論金鑰圈包含 RSA 公開金鑰、RSA 私密金鑰或 key pair 中的兩個金鑰,加密和解密金鑰環中的金鑰資料的金鑰名稱空間和金鑰資料都必須相同。例如,假設您使用具有金鑰命名空間HSM_01和金鑰名稱之 RSA 公開金鑰的 RSA 金鑰圈來加密資料。RSA_2048_06若要解密該資料,請使用私密金鑰 (或金鑰組) 以及相同的金鑰命名空間和名稱來建構 Raw RSA 金鑰環。

填充模式

您必須為用於加密和解密的 RSA 金鑰環指定填補模式,或使用語言實作的功能來為您指定該密鑰環。

AWS Encryption SDK 支持以下填充模式,受到每種語言的約束。我們建議使用 OAEP 填充模式,特別是使用 SHA-256 和 MGF1 搭配 SHA-256 填充模式。只有向下相容性才支援 PKCS1 填補模式。

  • 使用 SHA-1 和 MGF1 配備 SHA-1 填充的「老有增值計劃」

  • 使用 SHA-256 和 MGF1 配備 SHA-256 填充的「老有增值計劃」

  • 使用 SHA-384 和 MGF1 配備 SHA-384 填充的「老有增值計劃」

  • 使用 SHA-512 和 MGF1 配備 SHA-512 填充的「老有增值計劃」

  • PKCS1 填充

下列 Java 範例會示範如何使用 RSA 金鑰組的公開和私密金鑰,以及使用 SHA-256 和 MGF1 (含 SHA-256 填補模式) 建立原始 RSA 金鑰圈。RSAPublicKeyRSAPrivateKey變數代表您提供的關鍵材料。

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);
C# / .NET
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 keyringInput = new CreateRawRsaKeyringInput { KeyNamespace = keyNamespace, KeyName = keyName, PaddingScheme = PaddingScheme.OAEP_SHA512_MGF1, PublicKey = publicKey, PrivateKey = privateKey }; // Create the keyring var matProv = new MaterialProviders(new MaterialProvidersConfig()); var rawRsaKeyring = matProv.CreateRawRsaKeyring(keyringInput);