AWS Encryption SDK untuk. NET - AWS Encryption SDK

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

AWS Encryption SDK untuk. NET

AWS Encryption SDK Untuk. NETadalah pustaka enkripsi sisi klien untuk pengembang yang menulis aplikasi dalam C # dan lainnya. NETbahasa pemrograman. Hal ini didukung di Windows, macOS, dan Linux.

catatan

Versi 4.0.0 dari for. AWS Encryption SDK NETmenyimpang dari Spesifikasi AWS Encryption SDK Pesan. Akibatnya, pesan yang dienkripsi oleh versi 4.0.0 hanya dapat didekripsi oleh versi 4.0.0 atau yang lebih baru dari for. AWS Encryption SDK NET. Mereka tidak dapat didekripsi oleh implementasi bahasa pemrograman lainnya.

Versi 4.0.1 dari AWS Encryption SDK untuk. NETmenulis pesan sesuai dengan Spesifikasi AWS Encryption SDK Pesan, dan dapat dioperasikan dengan implementasi bahasa pemrograman lainnya. Secara default, versi 4.0.1 dapat membaca pesan yang dienkripsi oleh versi 4.0.0. Namun, jika Anda tidak ingin mendekripsi pesan yang dienkripsi oleh versi 4.0.0, Anda dapat menentukan NetV4_0_0_RetryPolicyproperti untuk mencegah klien membaca pesan-pesan ini. Untuk informasi lebih lanjut, lihat catatan rilis v4.0.1 di aws-encryption-sdk-dafny repositori di. GitHub

AWS Encryption SDK Untuk. NETberbeda dari beberapa implementasi bahasa pemrograman lainnya dengan AWS Encryption SDK cara berikut:

AWS Encryption SDK Untuk. NETmencakup semua fitur keamanan yang diperkenalkan di versi 2.0. x dan yang lebih baru dari implementasi bahasa lain dari. AWS Encryption SDK Namun, jika Anda menggunakan AWS Encryption SDK for. NETuntuk mendekripsi data yang dienkripsi oleh pra-2.0. x versi implementasi bahasa lain dari AWS Encryption SDK, Anda mungkin perlu menyesuaikan kebijakan komitmen Anda. Untuk detailnya, lihat Cara menetapkan kebijakan komitmen Anda.

AWS Encryption SDK Untuk. NETadalah produk dari AWS Encryption SDK dalam Dafny, bahasa verifikasi formal di mana Anda menulis spesifikasi, kode untuk mengimplementasikannya, dan bukti untuk mengujinya. Hasilnya adalah perpustakaan yang mengimplementasikan fitur-fitur AWS Encryption SDK dalam kerangka kerja yang menjamin kebenaran fungsional.

Pelajari Lebih Lanjut

  • Untuk contoh yang menunjukkan cara mengonfigurasi opsi di AWS Encryption SDK, seperti menentukan rangkaian algoritme alternatif, membatasi kunci data terenkripsi, dan menggunakan kunci AWS KMS Multi-region, lihat. Mengkonfigurasi AWS Encryption SDK

  • Untuk detail tentang pemrograman dengan AWS Encryption SDK for. NET, lihat aws-encryption-sdk-netdirektori aws-encryption-sdk-dafny repositori pada. GitHub

Memasang AWS Encryption SDK untuk. NET

AWS Encryption SDK Untuk. NETtersedia sebagai AWS.Cryptography.EncryptionSDKpaket di NuGet. Untuk detail tentang menginstal dan membangun AWS Encryption SDK untuk. NET, lihat READMEfile.md di aws-encryption-sdk-net repositori.

Versi 3.x

Versi 3. x dari AWS Encryption SDK untuk. NETmendukung. NETFramework 4.5.2 - 4.8 hanya pada Windows. Ini mendukung. NETCore 3.0+ dan. NET5.0 dan yang lebih baru pada semua sistem operasi yang didukung.

Versi 4.x

Versi 4. x dari AWS Encryption SDK untuk. NETmendukung. NET6.0 dan. NETFramework net48 dan yang lebih baru.

AWS Encryption SDK Untuk. NETmembutuhkan AWS SDK for .NET bahkan jika Anda tidak menggunakan kunci AWS Key Management Service (AWS KMS). Itu diinstal dengan NuGet paket. Namun, kecuali Anda menggunakan AWS KMS kunci, AWS Encryption SDK untuk. NETtidak memerlukan Akun AWS, AWS kredensi, atau interaksi dengan layanan apa pun AWS . Untuk bantuan menyiapkan AWS akun jika Anda membutuhkannya, lihatMenggunakan AWS Encryption SDK dengan AWS KMS.

Debugging AWS Encryption SDK untuk. NET

AWS Encryption SDK Untuk. NETtidak menghasilkan log apa pun. Pengecualian dalam AWS Encryption SDK untuk. NETmenghasilkan pesan pengecualian, tetapi tidak ada jejak tumpukan.

Untuk membantu Anda men-debug, pastikan untuk mengaktifkan login. AWS SDK for .NET Log dan pesan kesalahan dari AWS SDK for .NET dapat membantu Anda membedakan kesalahan yang timbul AWS SDK for .NET dari yang ada di AWS Encryption SDK for. NET. Untuk bantuan terkait AWS SDK for .NET logging, lihat AWSLoggingdi Panduan AWS SDK for .NET Pengembang. (Untuk melihat topik, perluas Buka untuk melihat. NETBagian konten kerangka kerja.)

AWS KMS gantungan kunci di AWS Encryption SDK for. NET

AWS KMS Gantungan kunci dasar di AWS Encryption SDK for. NETambil hanya satu KMS kunci. Mereka juga membutuhkan AWS KMS klien, yang memberi Anda kesempatan untuk mengkonfigurasi klien untuk KMS kunci. Wilayah AWS

Untuk membuat AWS KMS keyring dengan satu atau lebih tombol pembungkus, gunakan multi-keyring. AWS Encryption SDK Untuk. NETmemiliki multi-keyring khusus yang mengambil satu atau lebih AWS KMS tombol, dan multi-keyring standar yang mengambil satu atau lebih gantungan kunci dari jenis apa pun yang didukung. Beberapa programmer lebih suka menggunakan metode multi-keyring untuk membuat semua keyrings mereka, dan untuk. AWS Encryption SDK NETmendukung strategi tersebut.

AWS Encryption SDK Untuk. NETmenyediakan keyring kunci tunggal dasar dan multi-keyrings untuk semua kasus penggunaan umum, termasuk kunci Multi-region. AWS KMS

Misalnya, untuk membuat AWS KMS keyring dengan satu AWS KMS tombol, Anda dapat menggunakan CreateAwsKmsKeyring() metode ini.

Version 3.x

Contoh berikut menggunakan versi 3. x dari AWS Encryption SDK untuk. NETuntuk membuat AWS KMS klien default untuk Wilayah yang berisi kunci yang ditentukan.

// Instantiate the AWS Encryption SDK and material providers var encryptionSdk = AwsEncryptionSdkFactory.CreateDefaultAwsEncryptionSdk(); var materialProviders = AwsCryptographicMaterialProvidersFactory.CreateDefaultAwsCryptographicMaterialProviders(); string keyArn = "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab"; // Instantiate the keyring input object var kmsKeyringInput = new CreateAwsKmsKeyringInput { KmsClient = new AmazonKeyManagementServiceClient(), KmsKeyId = keyArn }; // Create the keyring var keyring = materialProviders.CreateAwsKmsKeyring(kmsKeyringInput);
Version 4.x

Contoh berikut menggunakan versi 4. x dari AWS Encryption SDK untuk. NETuntuk membuat AWS KMS klien untuk Wilayah yang berisi kunci yang ditentukan.

// Instantiate the AWS Encryption SDK and material providers var esdk = new ESDK(new AwsEncryptionSdkConfig()); var mpl = new MaterialProviders(new MaterialProvidersConfig()); string keyArn = "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab"; // Instantiate the keyring input object var createKeyringInput = new CreateAwsKmsKeyringInput { KmsClient = new AmazonKeyManagementServiceClient(), KmsKeyId = kmsArn }; // Create the keyring var kmsKeyring = mpl.CreateAwsKmsKeyring(createKeyringInput);

Untuk membuat keyring dengan satu atau lebih AWS KMS tombol, gunakan CreateAwsKmsMultiKeyring() metode ini. Contoh ini menggunakan dua AWS KMS kunci. Untuk menentukan satu KMS kunci, gunakan hanya Generator parameter. KmsKeyIdsParameter yang menentukan KMS kunci tambahan adalah opsional.

Input untuk keyring ini tidak membutuhkan AWS KMS klien. Sebagai gantinya, AWS Encryption SDK menggunakan AWS KMS klien default untuk setiap Wilayah yang diwakili oleh KMS kunci di keyring. Misalnya, jika KMS kunci yang diidentifikasi oleh nilai Generator parameter berada di Wilayah AS Barat (Oregon) (us-west-2), akan AWS Encryption SDK membuat AWS KMS klien default untuk us-west-2 Wilayah tersebut. Jika Anda perlu menyesuaikan AWS KMS klien, gunakan CreateAwsKmsKeyring() metode ini.

Contoh berikut menggunakan versi 4. x dari AWS Encryption SDK untuk. NETdan CreateAwsKmsKeyring() metode untuk menyesuaikan AWS KMS klien.

// Instantiate the AWS Encryption SDK and material providers var esdk = new ESDK(new AwsEncryptionSdkConfig()); var mpl = new MaterialProviders(new MaterialProvidersConfig()); string generatorKey = "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab"; List<string> additionalKeys = new List<string> { "arn:aws:kms:us-west-2:111122223333:key/0987dcba-09fe-87dc-65ba-ab0987654321" }; // Instantiate the keyring input object var createEncryptKeyringInput = new CreateAwsKmsMultiKeyringInput { Generator = generatorKey, KmsKeyIds = additionalKeys }; var kmsEncryptKeyring = materialProviders.CreateAwsKmsMultiKeyring(createEncryptKeyringInput);

Versi 4. x dari AWS Encryption SDK untuk. NETmendukung AWS KMS keyrings yang menggunakan enkripsi simetris (SYMMETRIC_DEFAULT) atau kunci asimetris RSAKMS. AWS KMS keyrings yang dibuat dengan RSA KMS kunci asimetris hanya dapat berisi satu key pair.

Untuk mengenkripsi dengan RSA AWS KMS keyring asimetris, Anda tidak perlu kms: GenerateDataKey atau KMS:Encrypt karena Anda harus menentukan materi kunci publik yang ingin Anda gunakan untuk enkripsi saat Anda membuat keyring. Tidak ada AWS KMS panggilan yang dilakukan saat mengenkripsi dengan keyring ini. Untuk mendekripsi dengan RSA AWS KMS keyring asimetris, Anda memerlukan izin KMS: Dekripsi.

Untuk membuat RSA AWS KMS keyring asimetris, Anda harus memberikan kunci publik dan kunci pribadi ARN dari kunci asimetris RSA KMS Anda. Kunci publik harus PEM dikodekan. Contoh berikut membuat AWS KMS keyring dengan asymmetric RSA key pair.

// Instantiate the AWS Encryption SDK and material providers var esdk = new ESDK(new AwsEncryptionSdkConfig()); var mpl = new MaterialProviders(new MaterialProvidersConfig()); var publicKey = new MemoryStream(Encoding.UTF8.GetBytes(AWS KMS RSA public key)); // Instantiate the keyring input object var createKeyringInput = new CreateAwsKmsRsaKeyringInput { KmsClient = new AmazonKeyManagementServiceClient(), KmsKeyId = AWS KMS RSA private key ARN, PublicKey = publicKey, EncryptionAlgorithm = EncryptionAlgorithmSpec.RSAES_OAEP_SHA_256 }; // Create the keyring var kmsRsaKeyring = mpl.CreateAwsKmsRsaKeyring(createKeyringInput);

Konteks enkripsi yang diperlukan dalam versi 4.x

Dengan versi 4. x dari AWS Encryption SDK untuk. NET, Anda dapat menggunakan konteks enkripsi yang diperlukan CMM untuk memerlukan konteks enkripsi dalam operasi kriptografi Anda. Konteks enkripsi adalah sekumpulan pasangan kunci-nilai non-rahasia. Konteks enkripsi terikat secara kriptografis ke data terenkripsi sehingga konteks enkripsi yang sama diperlukan untuk mendekripsi bidang. Saat Anda menggunakan konteks enkripsi yang diperlukanCMM, Anda dapat menentukan satu atau beberapa kunci konteks enkripsi yang diperlukan (kunci wajib) yang harus disertakan dalam semua panggilan enkripsi dan dekripsi.

catatan

Konteks enkripsi CMM yang diperlukan hanya didukung oleh versi berikut:

  • Versi 3. x dari AWS Encryption SDK for Java

  • Versi 4. x dari AWS Encryption SDK untuk. NET

  • Versi 4. x dari AWS Encryption SDK for Python, bila digunakan dengan dependensi Library (MPL) Penyedia Materi Kriptografi opsional.

Jika Anda mengenkripsi data menggunakan konteks enkripsi yang diperlukanCMM, Anda hanya dapat mendekripsi dengan salah satu versi yang didukung ini.

Pada enkripsi, AWS Encryption SDK memverifikasi bahwa semua kunci konteks enkripsi yang diperlukan disertakan dalam konteks enkripsi yang Anda tentukan. AWS Encryption SDK Tanda konteks enkripsi yang Anda tentukan. Hanya pasangan kunci-nilai yang bukan kunci wajib yang diserialisasi dan disimpan dalam teks biasa di header pesan terenkripsi yang dikembalikan oleh operasi enkripsi.

Saat mendekripsi, Anda harus menyediakan konteks enkripsi yang berisi semua pasangan kunci-nilai yang mewakili kunci yang diperlukan. AWS Encryption SDK Menggunakan konteks enkripsi ini dan pasangan nilai kunci yang disimpan di header pesan terenkripsi untuk merekonstruksi konteks enkripsi asli yang Anda tentukan dalam operasi enkripsi. Jika AWS Encryption SDK tidak dapat merekonstruksi konteks enkripsi asli, maka operasi dekripsi gagal. Jika Anda memberikan pasangan kunci-nilai yang berisi kunci yang diperlukan dengan nilai yang salah, pesan terenkripsi tidak dapat didekripsi. Anda harus memberikan pasangan nilai kunci yang sama yang ditentukan pada enkripsi.

penting

Pertimbangkan dengan cermat nilai mana yang Anda pilih untuk kunci yang diperlukan dalam konteks enkripsi Anda. Anda harus dapat memberikan kunci yang sama dan nilai yang sesuai lagi pada dekripsi. Jika Anda tidak dapat mereproduksi kunci yang diperlukan, pesan terenkripsi tidak dapat didekripsi.

Contoh berikut menginisialisasi AWS KMS keyring dengan konteks enkripsi yang diperlukan. CMM

var encryptionContext = new Dictionary<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 AWS Encryption SDK and material providers var esdk = new ESDK(new AwsEncryptionSdkConfig()); var mpl = new MaterialProviders(new MaterialProvidersConfig()); // Instantiate the keyring input object var createKeyringInput = new CreateAwsKmsKeyringInput { KmsClient = new AmazonKeyManagementServiceClient(), KmsKeyId = kmsKey }; // Create the keyring var kmsKeyring = mpl.CreateAwsKmsKeyring(createKeyringInput); var createCMMInput = new CreateRequiredEncryptionContextCMMInput { UnderlyingCMM = mpl.CreateDefaultCryptographicMaterialsManager(new CreateDefaultCryptographicMaterialsManagerInput{Keyring = kmsKeyring}), // If you pass in a keyring but no underlying cmm, it will result in a failure because only cmm is supported. RequiredEncryptionContextKeys = new List<string>(encryptionContext.Keys) }; // Create the required encryption context CMM var requiredEcCMM = mpl.CreateRequiredEncryptionContextCMM(createCMMInput);

Jika Anda menggunakan AWS KMS keyring, AWS Encryption SDK untuk. NETjuga menggunakan konteks enkripsi untuk menyediakan data terautentikasi tambahan (AAD) dalam panggilan yang dilakukan keyring. AWS KMS