我正在使用Safenet HSM(硬件安全模块)来存储我的加密密钥,并尝试使用Java API和SunPKCS11解密使用RSA加密的秘密密钥(AES / DES)。我希望能够安全地进行此操作,以使被解密的AES / DES密钥无法从HSM中提取(就像RSA私钥的值是不可见的一样)。但是,在解密后,被解密密钥的值在HSM外的密钥对象中是可见的。以下是我的代码:
我不确定在解包期间公开密钥是否是API所预期的。如果是,则我如何将这些密钥安全地导入到HSM中,以便它们无法从中提取?我已经尝试向Safenet支持团队询问,但他们无法回答为什么会发生这种情况。因此,在尝试和搜索互联网很多之后,我在这里提出了这个问题。
Key privateKey = keyStore.getKey("MyKeyId", keyStorePassword);
Cipher cipher = Cipher.getInstance("RSA", "SunPKCS11-Safenet");
cipher.init(Cipher.UNWRAP_MODE, privateKey);
Key unwrappedKey = cipher.unwrap(wrappedKey, "AES", Cipher.SECRET_KEY);
// At this point the unwrapped key is visible in the unwrappedKey object!
我该如何告诉代码不要显示未包装的密钥?我需要在PKCS11配置文件中添加什么吗?我尝试将以下选项添加到配置文件中,但似乎没有帮助:
attributes(*,CKO_SECRET_KEY,*) = {
CKA_SENSITIVE=true
}
我不确定在解包期间公开密钥是否是API所预期的。如果是,则我如何将这些密钥安全地导入到HSM中,以便它们无法从中提取?我已经尝试向Safenet支持团队询问,但他们无法回答为什么会发生这种情况。因此,在尝试和搜索互联网很多之后,我在这里提出了这个问题。