gpt4 book ai didi

java - 使用 Safenet HSM 和 Java 解包 RSA 加密的 AES key 会泄漏解包的 key

转载 作者:搜寻专家 更新时间:2023-11-01 03:46:20 27 4
gpt4 key购买 nike

我正在使用 Safenet HSM(硬件安全模块)来存储我的加密 key ,并且我正在尝试使用 Java API 和 SunPKCS11 解开使用 RSA 加密的 key (AES/DES)。我想安全地执行此操作,以便无法从 HSM 中提取未包装的 AES/DES key (就像 RSA 私钥值是不可见的)。但是,在解包后,解包 key 的值在 HSM 外部的 key 对象中可见。

这是我的代码:

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!

我如何告诉代码不要泄露解包的 key ?我是否必须在 PKCS11 配置文件中添加一些内容?我已经尝试将以下选项添加到配置文件中,但它似乎没有帮助:

attributes(*,CKO_SECRET_KEY,*) = {
CKA_SENSITIVE=true
}

我不确定 API 是否期望在解包过程中显示 key 。如果是这样,我如何才能将此类 key 安全地导入 HSM,从而无法从中提取它们?

我试过询问 Safenet 支持团队,但他们无法回答为什么会这样。因此,经过大量尝试和互联网搜索后,我在这里提出了这个问题。

最佳答案

如果你解开 key ……你会拿回 key 。即,打开 key 会暴露 key 。如果您要求 HSM 解开 key ,它会按照您的指示执行。

如果 HSM 支持此操作,您可能想要导入 key 。 key 导入的假设是 HSM 理解为安全/保护/传输而包装 key 的格式。

然后它将为您解包,并将解包的 key 保存在其数据库中。也许它然后将 key 作为句柄或作为不同包装的 key (即,使用其内部主 key 包装)交还给您。

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

在不同供应商的 HSM 或不同密码系统之间移动 key ,不会暴露 secret 是一项有趣的练习。

关于java - 使用 Safenet HSM 和 Java 解包 RSA 加密的 AES key 会泄漏解包的 key ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52220368/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com