RSAGantungan kunci mentah - AWS Encryption SDK

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

RSAGantungan kunci mentah

Raw RSA keyring melakukan enkripsi asimetris dan dekripsi kunci data dalam memori lokal dengan kunci RSA publik dan pribadi yang Anda berikan. Anda perlu membuat, menyimpan, dan melindungi kunci pribadi, sebaiknya dalam modul keamanan perangkat keras (HSM) atau sistem manajemen kunci. Fungsi enkripsi mengenkripsi kunci data di bawah kunci RSA publik. Fungsi dekripsi mendekripsi kunci data menggunakan kunci pribadi. Anda dapat memilih dari antara beberapa mode RSA padding.

Raw RSA keyring yang mengenkripsi dan mendekripsi harus menyertakan kunci publik asimetris dan private key pair. Namun, Anda dapat mengenkripsi data dengan RSA keyring Raw yang hanya memiliki kunci publik, dan Anda dapat mendekripsi data dengan RSA keyring Raw yang hanya memiliki kunci pribadi. Anda dapat menyertakan keyring Raw apa pun dalam RSA multi-keyring. Jika Anda mengkonfigurasi RSA keyring Raw dengan kunci publik dan pribadi, pastikan bahwa mereka adalah bagian dari key pair yang sama. Beberapa implementasi bahasa tidak AWS Encryption SDK akan membangun RSA keyring Raw dengan kunci dari pasangan yang berbeda. Orang lain mengandalkan Anda untuk memverifikasi bahwa kunci Anda berasal dari key pair yang sama.

Raw RSA keyring setara dengan dan berinteraksi dengan in AWS Encryption SDK for Java dan JceMasterKeyin AWS Encryption SDK for Python ketika mereka digunakan dengan kunci enkripsi RSA asimetris. RawMasterKey Anda dapat mengenkripsi data dengan satu implementasi dan mendekripsi data dengan implementasi lain menggunakan kunci pembungkus yang sama. Lihat perinciannya di Kompatibilitas keyring.

catatan

Raw RSA keyring tidak mendukung kunci asimetrisKMS. Jika Anda ingin menggunakan RSA KMS tombol asimetris, versi 4. x dari AWS Encryption SDK untuk. NETdan versi 3. x dari AWS KMS gantungan kunci AWS Encryption SDK for Java dukungan yang menggunakan enkripsi simetris (SYMMETRIC_DEFAULT) atau asimetris. RSA AWS KMS keys

Jika Anda mengenkripsi data dengan RSA keyring Raw yang menyertakan kunci publik dari sebuah RSA KMS kunci, baik maupun tidak AWS KMS dapat mendekripsinya. AWS Encryption SDK Anda tidak dapat mengekspor kunci pribadi dari KMS kunci AWS KMS asimetris ke dalam RSA keyring Raw. Operasi AWS KMS Dekripsi tidak dapat mendekripsi pesan terenkripsi yang dikembalikan. AWS Encryption SDK

Saat membuat RSA keyring Raw di dalam AWS Encryption SDK for C, pastikan untuk memberikan konten PEM file yang menyertakan setiap kunci sebagai C-string yang dihentikan nol, bukan sebagai jalur atau nama file. Saat membuat RSA keyring Raw di JavaScript, waspadai potensi ketidakcocokan dengan implementasi bahasa lain.

Ruang nama dan nama

Untuk mengidentifikasi materi RSA kunci dalam keyring, keyring Raw RSA 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 dan nama kunci yang mengidentifikasi key pair (atau RSA kunci privatnya) di sistem manajemen kunci HSM atau Anda.

catatan

Namespace kunci dan nama kunci setara dengan kolom ID Penyedia (atau Penyedia) dan ID Kunci di JceMasterKey dan. RawMasterKey

AWS Encryption SDK for C Cadangan nilai namespace aws-kms kunci untuk KMS kunci. Jangan menggunakannya dalam AES keyring Raw atau Raw RSA keyring dengan. AWS Encryption SDK for C

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, bahkan jika kunci tersebut berasal dari key pair yang sama.

Namespace kunci dan nama kunci dari materi kunci dalam enkripsi dan dekripsi keyrings harus sama apakah keyring berisi kunci RSA publik, kunci RSA pribadi, atau kedua kunci dalam key pair. Misalnya, Anda mengenkripsi data dengan RSA keyring Raw untuk kunci RSA publik dengan namespace HSM_01 kunci dan nama kunci. RSA_2048_06 Untuk mendekripsi data tersebut, buat RSA keyring Raw dengan kunci pribadi (atau key pair), dan namespace dan nama kunci yang sama.

Modus padding

Anda harus menentukan mode padding untuk RSA keyrings Raw yang digunakan untuk enkripsi dan dekripsi, atau menggunakan fitur implementasi bahasa Anda yang menentukannya untuk Anda.

AWS Encryption SDK Mendukung mode padding berikut, tunduk pada kendala masing-masing bahasa. Kami merekomendasikan mode OAEPpadding, terutama OAEP dengan SHA -256 dan MGF1 dengan SHA -256 Padding. Mode PKCS1padding hanya didukung untuk kompatibilitas mundur.

  • OAEPdengan SHA -1 dan MGF1 dengan SHA -1 Padding

  • OAEPdengan SHA -256 dan MGF1 dengan SHA -256 Padding

  • OAEPdengan SHA -384 dan MGF1 dengan SHA -384 Padding

  • OAEPdengan SHA -512 dan MGF1 dengan SHA -512 Padding

  • PKCS1v1.5 Bantalan

Contoh berikut menunjukkan cara membuat RSA keyring Raw dengan kunci publik dan pribadi dari RSA key pair dan with -256 dan dengan -256 dan OAEP dengan SHA -256 mode MGF1 SHA padding. RSAPrivateKeyVariabel RSAPublicKey dan mewakili materi utama yang Anda berikan.

C

Untuk membuat RSA keyring Raw di AWS Encryption SDK for C, gunakanaws_cryptosdk_raw_rsa_keyring_new.

Saat membuat RSA keyring Raw di dalam AWS Encryption SDK for C, pastikan untuk memberikan konten PEM file yang menyertakan setiap kunci sebagai C-string yang dihentikan nol, bukan sebagai jalur atau nama file. Untuk contoh lengkap, lihat raw_rsa_keyring.c.

struct aws_allocator *alloc = aws_default_allocator(); AWS_STATIC_STRING_FROM_LITERAL(key_namespace, "HSM_01"); AWS_STATIC_STRING_FROM_LITERAL(key_name, "RSA_2048_06"); struct aws_cryptosdk_keyring *rawRsaKeyring = aws_cryptosdk_raw_rsa_keyring_new( alloc, key_namespace, key_name, private_key_from_pem, public_key_from_pem, AWS_CRYPTOSDK_RSA_OAEP_SHA256_MGF1);
C# / .NET

Untuk membuat instance RSA keyring Raw di for. AWS Encryption SDK NET, gunakan materialProviders.CreateRawRsaKeyring() metode ini. Untuk contoh lengkap, lihat R awRSAKeyring 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 = "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 createRawRsaKeyringInput = new CreateRawRsaKeyringInput { KeyNamespace = keyNamespace, KeyName = keyName, PaddingScheme = PaddingScheme.OAEP_SHA512_MGF1, PublicKey = publicKey, PrivateKey = privateKey }; // Create the keyring var rawRsaKeyring = materialProviders.CreateRawRsaKeyring(createRawRsaKeyringInput);
JavaScript Browser

AWS Encryption SDK for JavaScript Di browser mendapatkan primitif kriptografinya dari perpustakaan. WebCrypto Sebelum Anda membuat keyring, Anda harus menggunakan importPublicKey() dan/atau importPrivateKey() mengimpor bahan kunci mentah ke backend. WebCrypto Ini memastikan bahwa keyring selesai meskipun semua panggilan ke WebCrypto asinkron. Objek yang diambil metode impor mencakup algoritma pembungkus dan mode padding-nya.

Setelah mengimpor materi kunci, gunakan RawRsaKeyringWebCrypto() metode untuk membuat instance keyring. Saat membuat RSA keyring Raw di JavaScript, waspadai potensi ketidakcocokan dengan implementasi bahasa lain.

Untuk contoh lengkap, lihat rsa_simple.ts (Browser). JavaScript

const privateKey = await RawRsaKeyringWebCrypto.importPrivateKey( privateRsaJwKKey ) const publicKey = await RawRsaKeyringWebCrypto.importPublicKey( publicRsaJwKKey ) const keyNamespace = 'HSM_01' const keyName = 'RSA_2048_06' const keyring = new RawRsaKeyringWebCrypto({ keyName, keyNamespace, publicKey, privateKey, })
JavaScript Node.js

Untuk membuat instance RSA keyring Raw AWS Encryption SDK for JavaScript untuk Node.js, buat instance baru kelas. RawRsaKeyringNode wrapKeyParameter memegang kunci publik. unwrapKeyParameter memegang kunci pribadi. RawRsaKeyringNodeKonstruktor menghitung mode padding default untuk Anda, meskipun Anda dapat menentukan mode padding yang disukai.

Saat membuat RSA keyring mentah JavaScript, waspadai potensi ketidakcocokan dengan implementasi bahasa lain.

Untuk contoh lengkap, lihat rsa_simple.ts (Node.js). JavaScript

const keyNamespace = 'HSM_01' const keyName = 'RSA_2048_06' const keyring = new RawRsaKeyringNode({ keyName, keyNamespace, rsaPublicKey, rsaPrivateKey})
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);