Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Gantungan kunci AES mentah
Ini AWS Encryption SDK memungkinkan Anda menggunakan kunci simetris AES yang Anda berikan sebagai kunci pembungkus yang melindungi kunci data Anda. Anda perlu membuat, menyimpan, dan melindungi materi utama, sebaiknya dalam modul keamanan perangkat keras (HSM) atau sistem manajemen kunci. Gunakan keyring Raw AES saat Anda perlu memberikan kunci pembungkus dan mengenkripsi kunci data secara lokal atau offline.
Raw AES keyring mengenkripsi data dengan menggunakan algoritma AES-GCM dan kunci pembungkus yang Anda tentukan sebagai array byte. Anda hanya dapat menentukan satu kunci pembungkus di setiap keyring Raw AES, tetapi Anda dapat menyertakan beberapa gantungan kunci Raw AES, sendiri atau dengan gantungan kunci lainnya, dalam multi-keyring.
Raw AES keyring setara dengan dan berinteraksi dengan JceMasterKeykelas di AWS Encryption SDK for Java dan RawMasterKeykelas AWS Encryption SDK for Python ketika mereka digunakan dengan kunci enkripsi AES. Anda dapat mengenkripsi data dengan satu implementasi dan mendekripsi data dengan implementasi lain menggunakan kunci pembungkus yang sama. Untuk detailnya, lihat Kompatibilitas keyring.
Ruang nama dan nama kunci
Untuk mengidentifikasi kunci AES dalam keyring, keyring Raw AES menggunakan namespace kunci dan nama kunci yang Anda berikan. Nilai-nilai ini bukan rahasia. Mereka muncul dalam teks biasa di header pesan terenkripsi yang dikembalikan oleh operasi enkripsi. Sebaiknya gunakan namespace kunci HSM atau sistem manajemen kunci Anda dan nama kunci yang mengidentifikasi kunci AES dalam sistem itu.
Namespace kunci dan nama kunci setara dengan kolom ID Penyedia (atau Penyedia) dan ID Kunci di JceMasterKey
dan. RawMasterKey
The AWS Encryption SDK for C and AWS Encryption SDK for .NET menyimpan nilai namespace aws-kms
kunci untuk kunci KMS. Jangan gunakan nilai namespace ini dalam keyring Raw AES atau Raw RSA keyring dengan pustaka ini.
Jika Anda membuat keyring yang berbeda untuk mengenkripsi dan mendekripsi pesan yang diberikan, namespace dan nilai nama sangat penting. Jika namespace kunci dan nama kunci dalam keyring dekripsi bukan kecocokan yang tepat dan peka huruf besar/kecil untuk namespace kunci dan nama kunci dalam keyring enkripsi, keyring dekripsi tidak digunakan, meskipun byte materi kunci identik.
Misalnya, Anda mungkin mendefinisikan keyring Raw AES dengan namespace HSM_01
kunci dan nama kunci. AES_256_012
Kemudian, Anda menggunakan keyring itu untuk mengenkripsi beberapa data. Untuk mendekripsi data tersebut, buat keyring Raw AES dengan namespace kunci, nama kunci, dan material kunci yang sama.
Contoh berikut menunjukkan cara membuat keyring Raw AES. AESWrappingKey
Variabel mewakili materi utama yang Anda berikan.
- C
-
Untuk membuat instance keyring Raw AES di, gunakan. AWS Encryption SDK for Caws_cryptosdk_raw_aes_keyring_new()
Untuk contoh lengkap, lihat raw_aes_keyring.c.
struct aws_allocator *alloc = aws_default_allocator();
AWS_STATIC_STRING_FROM_LITERAL(wrapping_key_namespace, "HSM_01");
AWS_STATIC_STRING_FROM_LITERAL(wrapping_key_name, "AES_256_012");
struct aws_cryptosdk_keyring *raw_aes_keyring = aws_cryptosdk_raw_aes_keyring_new(
alloc, wrapping_key_namespace, wrapping_key_name, aes_wrapping_key
, wrapping_key_len);
- C# / .NET
-
Untuk membuat keyring Raw AES AWS Encryption SDK untuk .NET, gunakan metode inimaterialProviders.CreateRawAesKeyring()
. Untuk contoh lengkapnya, lihat Raw AESKeyring Example.cs.
Contoh berikut menggunakan versi 4. x dari AWS Encryption SDK untuk .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 = "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 that determines how your data keys are protected.
var createKeyringInput = new CreateRawAesKeyringInput
{
KeyNamespace = keyNamespace,
KeyName = keyName,
WrappingKey = aesWrappingKey
,
WrappingAlg = AesWrappingAlg.ALG_AES256_GCM_IV12_TAG16
};
var keyring = materialProviders.CreateRawAesKeyring(createKeyringInput);
- JavaScript Browser
-
AWS Encryption SDK for JavaScript Di browser mendapatkan primitif kriptografinya dari API. WebCrypto Sebelum Anda membuat keyring, Anda harus menggunakan RawAesKeyringWebCrypto.importCryptoKey()
untuk mengimpor bahan kunci mentah ke backend. WebCrypto Ini memastikan bahwa keyring selesai meskipun semua panggilan ke WebCrypto asinkron.
Kemudian, untuk membuat instance keyring Raw AES, gunakan metode ini. RawAesKeyringWebCrypto()
Anda harus menentukan algoritma pembungkus AES (“wrapping suite) berdasarkan panjang materi kunci Anda. Untuk contoh lengkap, lihat aes_simple.ts (Browser). JavaScript
Contoh berikut menggunakan buildClient
fungsi untuk menentukan kebijakan komitmen default,REQUIRE_ENCRYPT_REQUIRE_DECRYPT
. Anda juga dapat menggunakan buildClient
untuk membatasi jumlah kunci data terenkripsi dalam pesan terenkripsi. Untuk informasi selengkapnya, lihat Membatasi kunci data terenkripsi.
import {
RawAesWrappingSuiteIdentifier,
RawAesKeyringWebCrypto,
synchronousRandomValues,
buildClient,
CommitmentPolicy,
} from '@aws-crypto/client-browser'
const { encrypt, decrypt } = buildClient(
CommitmentPolicy.REQUIRE_ENCRYPT_REQUIRE_DECRYPT
)
const keyNamespace = 'HSM_01
'
const keyName = 'AES_256_012
'
const wrappingSuite =
RawAesWrappingSuiteIdentifier.AES256_GCM_IV12_TAG16_NO_PADDING
/* Import the plaintext AES key into the WebCrypto backend. */
const aesWrappingKey = await RawAesKeyringWebCrypto.importCryptoKey(
rawAesKey,
wrappingSuite
)
const rawAesKeyring = new RawAesKeyringWebCrypto({
keyName,
keyNamespace,
wrappingSuite,
aesWrappingKey
})
- JavaScript Node.js
-
Untuk membuat instance keyring Raw AES di AWS Encryption SDK for JavaScript untuk Node.js, buat instance kelas. RawAesKeyringNode
Anda harus menentukan algoritma pembungkus AES (“wrapping suite”) berdasarkan panjang materi kunci Anda. Untuk contoh lengkap, lihat aes_simple.ts (Node.js). JavaScript
Contoh berikut menggunakan buildClient
fungsi untuk menentukan kebijakan komitmen default,REQUIRE_ENCRYPT_REQUIRE_DECRYPT
. Anda juga dapat menggunakan buildClient
untuk membatasi jumlah kunci data terenkripsi dalam pesan terenkripsi. Untuk informasi selengkapnya, lihat Membatasi kunci data terenkripsi.
import {
RawAesKeyringNode,
buildClient,
CommitmentPolicy,
RawAesWrappingSuiteIdentifier,
} from '@aws-crypto/client-node'
const { encrypt, decrypt } = buildClient(
CommitmentPolicy.REQUIRE_ENCRYPT_REQUIRE_DECRYPT
)
const keyName = 'AES_256_012
'
const keyNamespace = 'HSM_01
'
const wrappingSuite =
RawAesWrappingSuiteIdentifier.AES256_GCM_IV12_TAG16_NO_PADDING
const rawAesKeyring = new RawAesKeyringNode({
keyName,
keyNamespace,
aesWrappingKey
,
wrappingSuite,
})
- Java
-
Untuk membuat instance keyring Raw AES di, gunakan. AWS Encryption SDK for JavamatProv.CreateRawAesKeyring()
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);
- Python
-
Contoh berikut membuat instance AWS Encryption SDK klien dengan kebijakan komitmen default,. REQUIRE_ENCRYPT_REQUIRE_DECRYPT
Untuk contoh lengkap, lihat raw_aes_keyring_example.py di AWS Encryption SDK for Python repositori di. GitHub
# Instantiate the AWS Encryption SDK client
client = aws_encryption_sdk.EncryptionSDKClient(
commitment_policy=CommitmentPolicy.REQUIRE_ENCRYPT_REQUIRE_DECRYPT
)
# Define the key namespace and key name
key_name_space = "HSM_01
"
key_name = "AES_256_012
"
# Optional: Create an encryption context
encryption_context: Dict[str, str] = {
"encryption": "context",
"is not": "secret",
"but adds": "useful metadata",
"that can help you": "be confident that",
"the data you are handling": "is what you think it is",
}
# Instantiate the material providers
mat_prov: AwsCryptographicMaterialProviders = AwsCryptographicMaterialProviders(
config=MaterialProvidersConfig()
)
# Create Raw AES keyring
keyring_input: CreateRawAesKeyringInput = CreateRawAesKeyringInput(
key_namespace=key_name_space,
key_name=key_name,
wrapping_key=AESWrappingKey
,
wrapping_alg=AesWrappingAlg.ALG_AES256_GCM_IV12_TAG16
)
raw_aes_keyring: IKeyring = mat_prov.create_raw_aes_keyring(
input=keyring_input
)
- Rust
-
// Instantiate the AWS Encryption SDK client
let esdk_config = AwsEncryptionSdkConfig::builder().build()?;
let esdk_client = esdk_client::Client::from_conf(esdk_config)?;
// Define the key namespace and key name
let key_namespace: &str = "HSM_01
";
let key_name: &str = "AES_256_012
";
// Optional: Create an encryption context
let encryption_context = HashMap::from([
("encryption".to_string(), "context".to_string()),
("is not".to_string(), "secret".to_string()),
("but adds".to_string(), "useful metadata".to_string()),
("that can help you".to_string(), "be confident that".to_string()),
("the data you are handling".to_string(), "is what you think it is".to_string()),
]);
// Instantiate the material providers library
let mpl_config = MaterialProvidersConfig::builder().build()?;
let mpl = mpl_client::Client::from_conf(mpl_config)?;
// Create Raw AES keyring
let raw_aes_keyring = mpl
.create_raw_aes_keyring()
.key_name(key_name)
.key_namespace(key_namespace)
.wrapping_key(aws_smithy_types::Blob::new(AESWrappingKey
))
.wrapping_alg(AesWrappingAlg::AlgAes256GcmIv12Tag16)
.send()
.await?;
- Go
-
import (
mpl "aws/aws-cryptographic-material-providers-library/releases/go/mpl/awscryptographymaterialproviderssmithygenerated"
mpltypes "aws/aws-cryptographic-material-providers-library/releases/go/mpl/awscryptographymaterialproviderssmithygeneratedtypes"
client "github.com/aws/aws-encryption-sdk/awscryptographyencryptionsdksmithygenerated"
esdktypes "github.com/aws/aws-encryption-sdk/awscryptographyencryptionsdksmithygeneratedtypes"
)
//Instantiate the AWS Encryption SDK client.
encryptionClient, err := client.NewClient(esdktypes.AwsEncryptionSdkConfig{})
if err != nil {
panic(err)
}
// Define the key namespace and key name
var keyNamespace = "A managed aes keys"
var keyName = "My 256-bit AES wrapping key"
// Optional: Create an encryption context
encryptionContext := map[string]string{
"encryption": "context",
"is not": "secret",
"but adds": "useful metadata",
"that can help you": "be confident that",
"the data you are handling": "is what you think it is",
}
// Instantiate the material providers library
matProv, err := mpl.NewClient(mpltypes.MaterialProvidersConfig{})
if err != nil {
panic(err)
}
// Create Raw AES keyring
aesKeyRingInput := mpltypes.CreateRawAesKeyringInput{
KeyName: keyName,
KeyNamespace: keyNamespace,
WrappingKey: aesWrappingKey
,
WrappingAlg: mpltypes.AesWrappingAlgAlgAes256GcmIv12Tag16,
}
aesKeyring, err := matProv.CreateRawAesKeyring(context.Background(), aesKeyRingInput)
if err != nil {
panic(err)
}