Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
AWS Encryption SDK for Java
Topik ini menjelaskan cara menginstal dan menggunakan AWS Encryption SDK for Java. Untuk detail tentang pemrograman dengan AWS Encryption SDK for Java, lihat aws-encryption-sdk-java
Prasyarat
Sebelum Anda menginstal AWS Encryption SDK for Java, pastikan Anda memiliki prasyarat berikut.
- Lingkungan pengembangan Java
-
Anda akan membutuhkan Java 8 atau yang lebih baru. Di situs web Oracle, buka Java SE Downloads
, lalu unduh dan instal Java SE Development Kit (JDK). Jika Anda menggunakan OracleJDK, Anda juga harus mengunduh dan menginstal Ekstensi Kriptografi Java (JCE) File Kebijakan Yurisdiksi Kekuatan Tanpa
Batas. - Kastil Bouncy
-
AWS Encryption SDK for Java Membutuhkan Kastil Bouncy.
-
AWS Encryption SDK for Java versi 1.6.1 dan yang lebih baru menggunakan Bouncy Castle untuk membuat serial dan deserialisasi objek kriptografi. Anda dapat menggunakan Bouncy Castle atau Bouncy Castle FIPS
untuk memenuhi persyaratan ini. Untuk bantuan menginstal dan mengonfigurasi Bouncy CastleFIPS, lihat FIPSDokumentasi BC , terutama Panduan Pengguna dan Kebijakan Keamanan. PDFs -
Versi sebelumnya AWS Encryption SDK for Java menggunakan kriptografi Bouncy Castle untuk JavaAPI. Persyaratan ini hanya dipenuhi oleh Kastil FIPS non-Bouncy.
Jika Anda tidak memiliki Bouncy Castle, buka rilis terbaru Bouncy Castle
untuk mengunduh file penyedia yang sesuai dengan Anda. JDK Anda juga dapat menggunakan Apache Maven untuk mendapatkan artefak untuk penyedia Bouncy Castle standar (bcprov-ext-jdk15on ) atau artefak untuk Bouncy Castle (bc-fips). FIPS -
- AWS SDK for Java
-
Versi 3. x dari AWS Encryption SDK for Java membutuhkan AWS SDK for Java 2.x, bahkan jika Anda tidak menggunakan AWS KMS gantungan kunci.
Versi 2. x atau sebelumnya AWS Encryption SDK for Java tidak memerlukan AWS SDK for Java. Namun, AWS SDK for Java diperlukan untuk menggunakan AWS Key Management Service
(AWS KMS) sebagai penyedia kunci utama. Dimulai pada AWS Encryption SDK for Java versi 2.4.0, AWS Encryption SDK for Java mendukung versi 1.x dan 2.x dari versi. AWS SDK for Java AWS Encryption SDK kode untuk AWS SDK for Java 1.x dan 2.x dapat dioperasikan. Misalnya, Anda dapat mengenkripsi data dengan AWS Encryption SDK kode yang mendukung AWS SDK for Java 1.x dan mendekripsi menggunakan kode yang mendukung AWS SDK for Java 2.x (atau sebaliknya). Versi yang AWS Encryption SDK for Java lebih awal dari 2.4.0 hanya mendukung AWS SDK for Java 1.x. Untuk informasi tentang memperbarui versi Anda AWS Encryption SDK, lihatMigrasiAWS Encryption SDK. Saat memperbarui AWS Encryption SDK for Java kode Anda dari AWS SDK for Java 1.x ke AWS SDK for Java 2.x, ganti referensi ke
AWSKMS
antarmuka di AWS SDK for Java 1.x dengan referensi keKmsClient
antarmukadi. AWS SDK for Java 2.x AWS Encryption SDK for Java Tidak mendukung KmsAsyncClient
antarmuka. Juga, perbarui kode Anda untuk menggunakan objek AWS KMS-related di kmssdkv2
namespace, bukan namespace.kms
Untuk menginstal AWS SDK for Java, gunakan Apache Maven.
-
Untuk mengimpor keseluruhan AWS SDK for Java sebagai dependensi, deklarasikan dalam file Anda.
pom.xml
-
Untuk membuat dependensi hanya untuk AWS KMS modul di AWS SDK for Java 1.x, ikuti instruksi untuk menentukan modul tertentu, dan atur ke.
artifactId
aws-java-sdk-kms
-
Untuk membuat dependensi hanya untuk AWS KMS modul di AWS SDK for Java 2.x, ikuti instruksi untuk menentukan modul tertentu. Atur
groupId
kesoftware.amazon.awssdk
danartifactId
kekms
.
Untuk perubahan lainnya, lihat Apa yang berbeda antara AWS SDK for Java 1.x dan 2.x di Panduan AWS SDK for Java 2.x Pengembang.
Contoh Java dalam Panduan AWS Encryption SDK Pengembang menggunakan file AWS SDK for Java 2.x.
-
Penginstalan
Instal versi terbaru dari file AWS Encryption SDK for Java.
catatan
Semua versi yang AWS Encryption SDK for Java lebih awal dari 2.0.0 sedang dalam fase. end-of-support
Anda dapat memperbarui dengan aman dari versi 2.0. x dan yang lebih baru ke versi terbaru AWS Encryption SDK for Java tanpa kode atau perubahan data. Namun, fitur keamanan baru diperkenalkan di versi 2.0. x tidak kompatibel ke belakang. Untuk memperbarui dari versi lebih awal dari 1.7. x ke versi 2.0. x dan yang lebih baru, Anda harus terlebih dahulu memperbarui ke yang terbaru 1. x versi AWS Encryption SDK. Untuk detailnya, lihat MigrasiAWS Encryption SDK.
Anda dapat menginstal dengan cara berikut. AWS Encryption SDK for Java
- Secara manual
-
Untuk menginstal AWS Encryption SDK for Java, kloning atau unduh aws-encryption-sdk-java
GitHubrepositori. - Menggunakan Apache Maven
-
AWS Encryption SDK for Java Ini tersedia melalui Apache Maven dengan definisi ketergantungan
berikut. <dependency> <groupId>com.amazonaws</groupId> <artifactId>aws-encryption-sdk-java</artifactId> <version>3.0.0</version> </dependency>
Setelah Anda menginstalSDK, mulailah dengan melihat contoh kode Java dalam panduan ini dan Javadoc aktif
AWS KMS gantungan kunci di AWS Encryption SDK for Java
Versi 3. x dari AWS Encryption SDK for Java menggunakan keyrings untuk melakukan enkripsi amplop. AWS KMS Gantungan kunci dasar dalam AWS Encryption SDK for Java mengambil 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. Ini AWS Encryption SDK for Java memiliki 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 mendukung strategi itu AWS Encryption SDK for Java .
AWS Encryption SDK for Java Ini menyediakan keyring kunci tunggal dasar dan multi-keyrings untuk semua kasus penggunaan umum, termasuk kunci Multi-wilayah. AWS KMS
Misalnya, untuk membuat AWS KMS keyring dengan satu AWS KMS tombol, Anda dapat menggunakan metodeCreateAwsKmsKeyring()
].
// Instantiate the AWS Encryption SDK and material providers final AwsCrypto crypto = AwsCrypto.builder().build(); final MaterialProviders materialProviders = MaterialProviders.builder() .MaterialProvidersConfig(MaterialProvidersConfig.builder().build()) .build(); // Create the keyring CreateAwsKmsKeyringInput kmsKeyringInput = CreateAwsKmsKeyringInput.builder() .kmsKeyId(
keyArn
) .kmsClient(KmsClient.create()) .build(); IKeyring kmsKeyring = materialProviders.CreateAwsKmsKeyring(kmsKeyringInput);
Untuk membuat keyring dengan satu atau lebih AWS KMS tombol, gunakan CreateAwsKmsMultiKeyring()
metode ini. Contoh ini menggunakan dua KMS kunci. Untuk menentukan satu KMS kunci, gunakan hanya generator
parameter. msKeyIds
Parameter 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.
// Instantiate the AWS Encryption SDK and material providers final AwsCrypto crypto = AwsCrypto.builder().build(); final MaterialProviders materialProviders = MaterialProviders.builder() .MaterialProvidersConfig(MaterialProvidersConfig.builder().build()) .build(); String generatorKey = "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab"; List<String> additionalKey = Collections.singletonList("arn:aws:kms:us-west-2:111122223333:key/0987dcba-09fe-87dc-65ba-ab0987654321"); // Create the keyring final CreateAwsKmsMultiKeyringInput keyringInput = CreateAwsKmsMultiKeyringInput.builder() .generator(generatorKey) .kmsKeyIds(additionalKey) .build(); final IKeyring kmsKeyring = materialProviders.CreateAwsKmsMultiKeyring(keyringInput);
AWS Encryption SDK for Java mendukung 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 final AwsCrypto crypto = AwsCrypto.builder() // Specify algorithmSuite without asymmetric signing here // // ALG_AES_128_GCM_IV12_TAG16_NO_KDF("0x0014"), // ALG_AES_192_GCM_IV12_TAG16_NO_KDF("0x0046"), // ALG_AES_256_GCM_IV12_TAG16_NO_KDF("0x0078"), // ALG_AES_128_GCM_IV12_TAG16_HKDF_SHA256("0x0114"), // ALG_AES_192_GCM_IV12_TAG16_HKDF_SHA256("0x0146"), // ALG_AES_256_GCM_IV12_TAG16_HKDF_SHA256("0x0178") .withEncryptionAlgorithm(CryptoAlgorithm.
ALG_AES_256_GCM_IV12_TAG16_HKDF_SHA256
) .build(); final MaterialProviders matProv = MaterialProviders.builder() .MaterialProvidersConfig(MaterialProvidersConfig.builder().build()) .build(); // Create a KMS RSA keyring. // This keyring takes in: // - kmsClient // - kmsKeyId: Must be an ARN representing an asymmetric RSA KMS key // - publicKey: A ByteBuffer of a UTF-8 encoded PEM file representing the public // key for the key passed into kmsKeyId // - encryptionAlgorithm: Must be either RSAES_OAEP_SHA_256 or RSAES_OAEP_SHA_1 final CreateAwsKmsRsaKeyringInput createAwsKmsRsaKeyringInput = CreateAwsKmsRsaKeyringInput.builder() .kmsClient(KmsClient.create()) .kmsKeyId(rsaKeyArn
) .publicKey(publicKey
) .encryptionAlgorithm(EncryptionAlgorithmSpec.RSAES_OAEP_SHA_256
) .build(); IKeyring awsKmsRsaKeyring = matProv.CreateAwsKmsRsaKeyring(createAwsKmsRsaKeyringInput);
Konteks enkripsi yang diperlukan dalam versi 3.x
Dengan versi 3. x dari AWS Encryption SDK for Java, 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 nilai kunci 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
// Instantiate the AWS Encryption SDK final AwsCrypto crypto = AwsCrypto.builder() .withCommitmentPolicy(CommitmentPolicy.RequireEncryptRequireDecrypt) .build(); // Create your encryption context final Map<String, String> encryptionContext = new HashMap<>(); encryptionContext.put("encryption", "context"); encryptionContext.put("is not", "secret"); encryptionContext.put("but adds", "useful metadata"); encryptionContext.put("that can help you", "be confident that"); encryptionContext.put("the data you are handling", "is what you think it is"); // Create a list of required encryption contexts final List<String> requiredEncryptionContextKeys = Arrays.asList("encryption", "context"); // Create the keyring final MaterialProviders materialProviders = MaterialProviders.builder() .MaterialProvidersConfig(MaterialProvidersConfig.builder().build()) .build(); final CreateAwsKmsKeyringInput keyringInput = CreateAwsKmsKeyringInput.builder() .kmsKeyId(keyArn) .kmsClient(KmsClient.create()) .build(); IKeyring kmsKeyring = materialProviders.CreateAwsKmsKeyring(keyringInput); // Create the required encryption context CMM ICryptographicMaterialsManager cmm = materialProviders.CreateDefaultCryptographicMaterialsManager( CreateDefaultCryptographicMaterialsManagerInput.builder() .keyring(kmsKeyring) .build() ); ICryptographicMaterialsManager requiredCMM = materialProviders.CreateRequiredEncryptionContextCMM( CreateRequiredEncryptionContextCMMInput.builder() .requiredEncryptionContextKeys(requiredEncryptionContextKeys) .underlyingCMM(cmm) .build() );