本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
原始 AES keyring
我們的用戶端加密程式庫已重新命名為 AWS 資料庫加密 SDK。本開發人員指南仍提供 DynamoDB 加密用戶端的相關資訊。 |
資料 AWS 庫加密 SDK 可讓您使用您提供的 AES 對稱金鑰做為保護資料金鑰的包裝金鑰。您必須產生、儲存及保護金鑰資料,最好是在硬體安全模組 (HSM) 或金鑰管理系統中。當您需要提供包裝金鑰並在本機或離線加密資料金鑰時,請使用 Raw AES 金鑰圈。
Raw AES 金鑰環會使用 AES-GCM 演算法和您指定為位元組陣列的包裝金鑰來加密資料。您只能在每個 Raw AES 金鑰圈中指定一個環繞金鑰,但您可以在多重金鑰圈中包含多個 Raw AES 鑰匙圈,單獨或與其他鑰匙圈一起包含多個 Raw AES 鑰匙圈。
關鍵命名空間和名稱
若要識別金鑰圈中的 AES 金鑰,Raw AES 金鑰圈會使用您提供的金鑰命名空間和金鑰名稱。這些值並非機密。它們以純文本顯示在 AWS 數據庫加密 SDK 添加到記錄的材料描述中。我們建議您使用 HSM 或金鑰管理系統的金鑰命名空間,以及識別該系統中 AES 金鑰的金鑰名稱。
金鑰命名空間和金鑰名稱等同於中的「提供者 ID」(或「提供者」) 和「金鑰 ID」欄位JceMasterKey
。
如果您構建不同的密鑰環來加密和解密給定字段,則命名空間和名稱值非常重要。如果解密金鑰圈中的金鑰命名空間和金鑰名稱與加密金鑰圈中的金鑰命名空間和金鑰名稱不完全相符且區分大小寫,即使金鑰材料位元組相同,也不會使用解密金鑰圈。
例如,您可以使用金鑰命名空間HSM_01
和金鑰名稱AES_256_012
來定義 Raw AES 金鑰環。然後,您可以使用該密鑰環來加密某些數據。若要解密該資料,請使用相同的金鑰命名空間、金鑰名稱和金鑰材料建構 Raw AES 金鑰環。
下列範例說明如何建立 Raw AES 金鑰圈。AESWrappingKey
變數代表您提供的關鍵材料。
- Java
-
final CreateRawAesKeyringInput keyringInput = CreateRawAesKeyringInput.builder()
.keyName("AES_256_012
")
.keyNamespace("HSM_01
")
.wrappingKey(AESWrappingKey
)
.wrappingAlg(AesWrappingAlg.ALG_AES256_GCM_IV12_TAG16)
.build();
final MaterialProviders matProv = MaterialProviders.builder()
.MaterialProvidersConfig(MaterialProvidersConfig.builder().build())
.build();
IKeyring rawAesKeyring = matProv.CreateRawAesKeyring(keyringInput);
- C# / .NET
-
var keyNamespace = "HSM_01
";
var keyName = "AES_256_012
";
// This example uses the key generator in Bouncy Castle to generate the key material.
// In production, use key material from a secure source.
var aesWrappingKey = new MemoryStream(GeneratorUtilities.GetKeyGenerator("AES256").GenerateKey());
// Create the keyring
var keyringInput = new CreateRawAesKeyringInput
{
KeyNamespace = keyNamespace,
KeyName = keyName,
WrappingKey = AESWrappingKey
,
WrappingAlg = AesWrappingAlg.ALG_AES256_GCM_IV12_TAG16
};
var matProv = new MaterialProviders(new MaterialProvidersConfig());
IKeyring rawAesKeyring = matProv.CreateRawAesKeyring(keyringInput);