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

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

原始 AES keyring

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

AWS Database Encryption SDK 可讓您使用您提供的 AES 對稱金鑰,做為保護資料金鑰的包裝金鑰。您需要產生、存放和保護金鑰材料,最好是在硬體安全模組 (HSM) 或金鑰管理系統中。當您需要提供包裝金鑰並在本機或離線加密資料金鑰時,請使用原始 AES 金鑰環。

Raw AES keyring 會使用 AES-GCM 演算法和您指定為位元組陣列的包裝金鑰來加密資料。每個原始 AES keyring 中只能指定一個包裝金鑰,但您可以將多個原始 AES keyring 單獨或與其他 keyring 一起包含在多 keyring 中。

金鑰命名空間和名稱

若要識別 keyring 中的 AES 金鑰,原始 AES keyring 會使用您提供的金鑰命名空間金鑰名稱。這些值並非機密。它們會以純文字顯示在 AWS Database Encryption SDK 新增至記錄的資料描述中。我們建議您使用 HSM 或金鑰管理系統的金鑰命名空間,以及識別該系統中 AES 金鑰的金鑰名稱。

注意

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

如果您建構不同的 keyring 來加密和解密指定欄位,命名空間和名稱值至關重要。如果解密 keyring 中的金鑰命名空間和金鑰名稱與加密 keyring 中的金鑰命名空間和金鑰名稱不完全且區分大小寫,即使金鑰材料位元組相同,也不會使用解密 keyring。

例如,您可以定義具有金鑰命名空間HSM_01和金鑰名稱 的原始 AES 金鑰環AES_256_012。然後,您可以使用該 keyring 來加密一些資料。若要解密該資料,請使用相同的金鑰命名空間、金鑰名稱和金鑰材料來建構原始 AES 金鑰環。

下列範例示範如何建立原始 AES Keyring。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);
Rust
let mpl_config = MaterialProvidersConfig::builder().build()?; let mpl = mpl_client::Client::from_conf(mpl_config)?; let raw_aes_keyring = mpl .create_raw_aes_keyring() .key_name("AES_256_012") .key_namespace("HSM_01") .wrapping_key(aes_key_bytes) .wrapping_alg(AesWrappingAlg::AlgAes256GcmIv12Tag16) .send() .await?;