Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Topik ini menjelaskan cara menggunakan ekstensi berpemilik untuk pustaka Java versi 3.1 untuk menetapkan atribut kunci untuk AWS CloudHSM Klien SDK 3. Gunakan ekstensi ini untuk mengatur atribut kunci yang didukung dan nilai-nilainya selama operasi ini:
Pembuatan kunci
Impor kunci
Buka kunci
catatan
Ekstensi untuk menetapkan atribut kunci kustom adalah fitur opsional. Jika Anda sudah memiliki kode yang berfungsi di pustaka Java versi 3.0, Anda tidak perlu memodifikasi kode itu. Kunci yang Anda buat akan terus berisi atribut yang sama seperti sebelumnya.
Memahami atribut
Anda menggunakan atribut kunci untuk menentukan tindakan apa yang diizinkan pada objek kunci, termasuk kunci publik, pribadi atau rahasia. Anda menentukan atribut kunci dan nilai-nilai selama operasi pembuatan objek kunci.
Namun, Ekstensi Kriptografi Java (JCE) tidak menentukan bagaimana Anda harus menetapkan nilai pada atribut kunci, sehingga sebagian besar tindakan diizinkan secara default. Sebaliknya, standar PKCS # 11 mendefinisikan satu set atribut yang komprehensif dengan default yang lebih ketat. Dimulai dengan pustaka Java versi 3.1, Cloud HSM menyediakan ekstensi eksklusif yang memungkinkan Anda menetapkan nilai yang lebih ketat untuk atribut yang umum digunakan.
Atribut yang didukung
Anda dapat mengatur nilai untuk atribut yang tercantum dalam tabel di bawah ini. Sebagai praktik terbaik, tetapkan hanya nilai untuk atribut yang ingin Anda buat ketat. Jika Anda tidak menentukan nilai, Cloud HSM menggunakan nilai default yang ditentukan dalam tabel di bawah ini. Sel kosong di kolom Nilai Default menunjukkan bahwa tidak ada nilai default tertentu yang ditetapkan untuk atribut.
Atribut | Nilai Default | Catatan | ||
---|---|---|---|---|
Kunci Simetris | Kunci Publik dalam Pasangan Kunci | Kunci Pribadi dalam Pasangan Kunci | ||
CKA_TOKEN |
FALSE |
FALSE |
FALSE |
Kunci permanen yang direplikasi HSMs di semua klaster dan disertakan dalam cadangan. CKA_ TOKEN = FALSE menyiratkan kunci sesi, yang hanya dimuat ke satu HSM dan secara otomatis dihapus ketika koneksi ke HSM rusak. |
CKA_LABEL |
String yang ditentukan pengguna. Ini memungkinkan Anda untuk dengan mudah mengidentifikasi kunci pada AndaHSM. | |||
CKA_EXTRACTABLE |
TRUE |
TRUE |
Benar menunjukkan Anda dapat mengekspor kunci ini dari fileHSM. | |
CKA_ENCRYPT |
TRUE |
TRUE |
Benar menunjukkan Anda dapat menggunakan kunci untuk mengenkripsi penyangga apa pun. | |
CKA_DECRYPT |
TRUE |
TRUE |
Benar menunjukkan Anda dapat menggunakan kunci untuk mendekripsi penyangga apa pun. Anda biasanya menyetel ini FALSE untuk kunci yang CKA _ WRAP disetel ke true. | |
CKA_WRAP |
TRUE |
TRUE |
Benar menunjukkan Anda dapat menggunakan kunci untuk membungkus kunci lain. Anda biasanya akan mengatur ini FALSE untuk kunci pribadi. | |
CKA_UNWRAP |
TRUE |
TRUE |
Benar menunjukkan Anda dapat menggunakan kunci untuk membungkus kunci lain. | |
CKA_SIGN |
TRUE |
TRUE |
Benar menunjukkan Anda dapat menggunakan kunci untuk menandatangani digest pesan. Ini umumnya diatur untuk kunci publik dan FALSE untuk kunci pribadi yang telah Anda arsipkan. | |
CKA_VERIFY |
TRUE |
TRUE |
Benar menunjukkan Anda dapat menggunakan kunci untuk menandatangani digest pesan. Ini umumnya diatur FALSE untuk kunci pribadi. | |
CKA_PRIVATE |
TRUE |
TRUE |
TRUE |
Benar menunjukkan bahwa pengguna tidak dapat mengakses kunci sampai pengguna diautentikasi. Untuk kejelasan, pengguna tidak dapat mengakses kunci apa pun di Cloud HSM hingga mereka diautentikasi, meskipun atribut ini disetel keFALSE. |
catatan
Anda mendapatkan dukungan yang lebih luas untuk atribut di pustaka PKCS #11. Untuk informasi selengkapnya, lihat Atribut PKCS #11 yang Didukung.
Menyetel atribut untuk kunci
CloudHsmKeyAttributesMap
adalah objek seperti Peta JavaCloudHsmKeyAttributesMap
yang mirip dengan metode yang digunakan untuk manipulasi peta Java.
Untuk mengatur nilai kustom pada atribut, Anda memiliki dua opsi:
Gunakan metode yang tercantum dalam tabel berikut
Gunakan pola pembangun yang ditunjukkan kemudian dalam dokumen ini
Atribut peta objek mendukung metode berikut untuk mengatur atribut:
Operasi | Nilai Pengembalian | Metode CloudHSMKeyAttributesMap |
---|---|---|
Dapatkan nilai atribut kunci untuk kunci yang ada | Obyek (berisi nilai) atau nol |
dapatkan (keyAttribute) |
Isi nilai satu atribut kunci | Nilai sebelumnya terkait dengan atribut kunci, atau nol jika tidak ada pemetaan untuk atribut kunci |
put (keyAttribute, nilai) |
Isi nilai untuk beberapa atribut kunci | N/A |
putAll(keyAttributesMap) |
Hapus pasangan nilai kunci dari peta atribut |
Nilai sebelumnya terkait dengan atribut kunci, atau nol jika tidak ada pemetaan untuk atribut kunci |
menghapus (keyAttribute) |
catatan
Setiap atribut yang tidak secara eksplisit Anda tentukan diatur ke default yang tercantum dalam tabel sebelumnya di Atribut yang didukung.
Contoh pola pembangun
Developer umumnya akan merasa lebih nyaman untuk memanfaatkan kelas melalui pola Builder. Sebagai contoh:
import com.amazonaws.cloudhsm.CloudHsmKeyAttributes;
import com.amazonaws.cloudhsm.CloudHsmKeyAttributesMap;
import com.amazonaws.cloudhsm.CloudHsmKeyPairAttributesMap;
CloudHsmKeyAttributesMap keyAttributesSessionDecryptionKey =
new CloudHsmKeyAttributesMap.Builder()
.put(CloudHsmKeyAttributes.CKA_LABEL, "ExtractableSessionKeyEncryptDecrypt")
.put(CloudHsmKeyAttributes.CKA_WRAP, false)
.put(CloudHsmKeyAttributes.CKA_UNWRAP, false)
.put(CloudHsmKeyAttributes.CKA_SIGN, false)
.put(CloudHsmKeyAttributes.CKA_VERIFY, false)
.build();
CloudHsmKeyAttributesMap keyAttributesTokenWrappingKey =
new CloudHsmKeyAttributesMap.Builder()
.put(CloudHsmKeyAttributes.CKA_LABEL, "TokenWrappingKey")
.put(CloudHsmKeyAttributes.CKA_TOKEN, true)
.put(CloudHsmKeyAttributes.CKA_ENCRYPT, false)
.put(CloudHsmKeyAttributes.CKA_DECRYPT, false)
.put(CloudHsmKeyAttributes.CKA_SIGN, false)
.put(CloudHsmKeyAttributes.CKA_VERIFY, false)
.build();
Developer juga dapat memanfaatkan set atribut yang telah ditetapkan sebagai cara yang mudah untuk menegakkan praktik terbaik dalam templat kunci. Sebagai contoh:
//best practice template for wrapping keys
CloudHsmKeyAttributesMap commonKeyAttrs = new CloudHsmKeyAttributesMap.Builder()
.put(CloudHsmKeyAttributes.CKA_EXTRACTABLE, false)
.put(CloudHsmKeyAttributes.CKA_DECRYPT, false)
.build();
// initialize a new instance of CloudHsmKeyAttributesMap by copying commonKeyAttrs
// but with an appropriate label
CloudHsmKeyAttributesMap firstKeyAttrs = new CloudHsmKeyAttributesMap(commonKeyAttrs);
firstKeyAttrs.put(CloudHsmKeyAttributes.CKA_LABEL, "key label");
// alternatively, putAll() will overwrite existing values to enforce conformance
CloudHsmKeyAttributesMap secondKeyAttrs = new CloudHsmKeyAttributesMap();
secondKeyAttrs.put(CloudHsmKeyAttributes.CKA_DECRYPT, true);
secondKeyAttrs.put(CloudHsmKeyAttributes.CKA_ENCRYPT, true);
secondKeyAttrs.put(CloudHsmKeyAttributes.CKA_LABEL, “safe wrapping key”);
secondKeyAttrs.putAll(commonKeyAttrs); // will overwrite CKA_DECRYPT to be FALSE
Menetapkan atribut untuk key pair
Gunakan kelas Java CloudHsmKeyPairAttributesMap
untuk menangani atribut kunci untuk pasangan kunci. CloudHsmKeyPairAttributesMap
merangkum dua objek CloudHsmKeyAttributesMap
; satu untuk kunci publik dan satu untuk kunci privat.
Untuk mengatur atribut individu untuk kunci publik dan kunci privat secara terpisah, Anda dapat menggunakan metode put()
pada objek peta CloudHsmKeyAttributes
yang terkait untuk kunci itu. Gunakan metode getPublic()
untuk mengambil peta atribut untuk kunci publik, dan gunakan getPrivate()
untuk mengambil peta atribut untuk kunci privat. Isi nilai dari beberapa atribut kunci bersama-sama untuk kedua pasangan kunci publik dan privat menggunakan putAll()
dengan peta atribut pasangan kunci sebagai argumen.
Contoh pola pembangun
Developer umumnya akan merasa lebih nyaman untuk mengatur atribut kunci melalui pola Builder. Sebagai contoh:
import com.amazonaws.cloudhsm.CloudHsmKeyAttributes;
import com.amazonaws.cloudhsm.CloudHsmKeyAttributesMap;
import com.amazonaws.cloudhsm.CloudHsmKeyPairAttributesMap;
//specify attributes up-front
CloudHsmKeyAttributesMap keyAttributes =
new CloudHsmKeyAttributesMap.Builder()
.put(CloudHsmKeyAttributes.CKA_SIGN, false)
.put(CloudHsmKeyAttributes.CKA_LABEL, "PublicCertSerial12345")
.build();
CloudHsmKeyPairAttributesMap keyPairAttributes =
new CloudHsmKeyPairAttributesMap.Builder()
.withPublic(keyAttributes)
.withPrivate(
new CloudHsmKeyAttributesMap.Builder() //or specify them inline
.put(CloudHsmKeyAttributes.CKA_LABEL, "PrivateCertSerial12345")
.put (CloudHSMKeyAttributes.CKA_WRAP, FALSE)
.build()
)
.build();
catatan
Untuk informasi selengkapnya tentang ekstensi kepemilikan ini, lihat arsip Javadoc
Menyatukan semuanya
Untuk menentukan atribut kunci dengan operasi kunci Anda, ikuti langkah berikut:
Instantiate
CloudHsmKeyAttributesMap
untuk kunci simetris atauCloudHsmKeyPairAttributesMap
untuk pasangan kunci.Tentukan objek atribut dari langkah 1 dengan atribut kunci dan nilai-nilai yang diperlukan.
Instantiate kelas
Cavium*ParameterSpec
, sesuai dengan jenis kunci tertentu Anda, dan masuk ke konstruktor objek atribut yang dikonfigurasi ini.Masukkan objek
Cavium*ParameterSpec
ke kelas atau metode kripto yang sesuai.
Untuk referensi, tabel berikut berisi kelas dan metode Cavium*ParameterSpec
yang mendukung atribut kunci kustom.
Tipe Kunci | Kelas Spesifikasi Parameter | Contoh Konstruktor |
---|---|---|
Kelas Dasar | CaviumKeyGenAlgorithmParameterSpec |
CaviumKeyGenAlgorithmParameterSpec(CloudHsmKeyAttributesMap
keyAttributesMap) |
DES | CaviumDESKeyGenParameterSpec |
CaviumDESKeyGenParameterSpec(int keySize, byte[] iv, CloudHsmKeyAttributesMap
keyAttributesMap) |
RSA | CaviumRSAKeyGenParameterSpec |
CaviumRSAKeyGenParameterSpec(int keysize, BigInteger publicExponent,
CloudHsmKeyPairAttributesMap keyPairAttributesMap) |
Rahasia | CaviumGenericSecretKeyGenParameterSpec |
CaviumGenericSecretKeyGenParameterSpec(int size, CloudHsmKeyAttributesMap
keyAttributesMap) |
AES | CaviumAESKeyGenParameterSpec |
CaviumAESKeyGenParameterSpec(int keySize, byte[] iv, CloudHsmKeyAttributesMap
keyAttributesMap) |
EC | CaviumECGenParameterSpec |
CaviumECGenParameterSpec(String stdName, CloudHsmKeyPairAttributesMap
keyPairAttributesMap) |
Contoh kode: Hasilkan dan bungkus kunci
Contoh kode singkat ini menunjukkan langkah-langkah untuk dua operasi yang berbeda: Pembuatan Kunci dan Pembungkusan Kunci:
// Set up the desired key attributes
KeyGenerator keyGen = KeyGenerator.getInstance("AES", "Cavium");
CaviumAESKeyGenParameterSpec keyAttributes = new CaviumAESKeyGenParameterSpec(
256,
new CloudHsmKeyAttributesMap.Builder()
.put(CloudHsmKeyAttributes.CKA_LABEL, "MyPersistentAESKey")
.put(CloudHsmKeyAttributes.CKA_EXTRACTABLE, true)
.put(CloudHsmKeyAttributes.CKA_TOKEN, true)
.build()
);
// Assume we already have a handle to the myWrappingKey
// Assume we already have the wrappedBytes to unwrap
// Unwrap a key using Custom Key Attributes
CaviumUnwrapParameterSpec unwrapSpec = new CaviumUnwrapParameterSpec(myInitializationVector, keyAttributes);
Cipher unwrapCipher = Cipher.getInstance("AESWrap", "Cavium");
unwrapCipher.init(Cipher.UNWRAP_MODE, myWrappingKey, unwrapSpec);
Key unwrappedKey = unwrapCipher.unwrap(wrappedBytes, "AES", Cipher.SECRET_KEY);