Gantungan kunci AES mentah - AWS Encryption SDK

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.

catatan

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. AESWrappingKeyVariabel 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) }