首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用Safenet HSM和Java解包RSA加密的AES密钥会泄漏解包后的密钥

使用Safenet HSM和Java解包RSA加密的AES密钥会泄漏解包后的密钥
EN

Stack Overflow用户
提问于 2018-09-07 18:15:13
回答 1查看 1.6K关注 0票数 4

我正在使用Safenet HSM (硬件安全模块)来存储我的加密密钥,并且我正在尝试解开一个使用Java和SunPKCS11使用RSA加密的秘密密钥(AES/DES)。我想安全地这样做,这样解开的AES/DES密钥就不能从HSM中提取出来(就像RSA私钥值是不可见的一样)。但是,在展开后,在HSM外部的键对象中可以看到解开的键的值。

下面是我的代码:

代码语言:javascript
复制
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配置文件中添加某些内容?我尝试将以下选项添加到配置文件中,但似乎没有帮助:

代码语言:javascript
复制
attributes(*,CKO_SECRET_KEY,*) = {
  CKA_SENSITIVE=true
}

我不确定API是否期望在解包过程中显示密钥。如果是,如何将这些密钥安全地导入到HSM中,使其无法从HSM中提取?

我曾尝试询问Safenet支持团队,但他们无法回答为什么会发生这种情况。所以,经过大量的尝试和互联网搜索,我在这里提出了这个问题。

EN

回答 1

Stack Overflow用户

发布于 2018-10-21 04:35:45

如果你打开钥匙..。你拿回钥匙。也就是说,解开密钥会暴露密钥。如果您请求HSM解开密钥,它将按照您的指示进行操作。

如果HSM支持此操作,则可能需要导入密钥。关于密钥导入的假设是HSM理解为安全/保护/传输而包装的密钥的格式。

然后,它将为您执行解包,并将解包后的键保存在其数据库中。也许然后它会将密钥作为句柄,或者作为不同包装的密钥(即,使用其内部主密钥包装)返回给你。

在可比较的HSM之间移动密钥是导出/导入或备份/恢复,这取决于设备和设备对这些动词的理解。

在不同供应商的HSM或不同的密码系统之间移动密钥,而不暴露秘密是一个有趣的练习。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52220368

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档