重构 PKCS11 插件¶
https://blueprints.launchpad.net/barbican/+spec/restructure-pkcs11-plugin
当前的 PKCS11 插件假定它有足够的存储空间来为每个项目/租户创建一个 KEK(密钥加密密钥)。对于许多 HSM(硬件安全模块)来说,这个假设是不成立的,因此我们建议引入一个存储在 HSM 中的主 KEK,用于封装每个项目的 KEK,以解决这个问题。
问题描述¶
PKCS11 插件为每个项目/租户创建一个密钥加密密钥 (KEK)。当连接到存储空间有限的 HSM 时,此系统可能会耗尽 HSM 上的可用空间,并无法为新的项目/租户创建 KEK。
提议的变更¶
使用主 KEK 封装项目 KEK 将通过在实际 HSM 中保留最少数量的密钥,同时仍然为每个项目/租户使用不同的加密密钥来解决存储问题。层次结构如下所示
+--------------+
| Master KEK |
+-----+--------+
|
|
|
+-----+-----+ +-----------+
|Wrapped KEK+-------+Encrypted |
+-----------+ |Secret |
+-----------
解密过程的序列图如下所示
- ::
barbican DB HSM + 获取主 KEK 句柄 + + | <—————————————————–> | | 获取封装的项目 KEK | | | <—————————-> | | | 在 HSM 中解包项目 KEK(保持|在 HSM 中) | +——————————————————-> | | 项目 KEK 句柄 | | | <——————————————————-+ | 获取加密的密钥 | | | <—————————-> | | | 使用项目 KEK 句柄解密密钥 | | <—————————————————–> |
备选方案¶
无。
数据模型影响¶
数据模型可能需要扩展以支持存储每个项目的 KEK。我们建议通过创建一个新表来完成此操作,该表存储封装的 KEK 字节,并具有指向项目/租户的外键。
REST API 影响¶
无
安全影响¶
PKCS11 插件的风险大致相同。虽然 KEK 不再完全存储在 HSM 中,但 KEK 在 HSM 外部时始终是加密的。
通知与审计影响¶
无
其他最终用户影响¶
无
性能影响¶
往返 HSM 的解密轮次增加了一个。以前解密密钥需要找到项目 KEK,然后将加密字节发送到 HSM 进行解密。使用新系统,我们必须找到主 KEK,解密封装的项目 KEK,然后使用解包的 KEK 解密用户密钥。
其他部署者影响¶
无
开发人员影响¶
无
实现¶
负责人¶
Paul Kehrer (reaperhulk)
工作项¶
为 barbican 添加新模型
更新 PKCS11 插件以执行封装/解包并使用新模型。
依赖项¶
无
测试¶
PKCS11 插件的单元测试将更改以反映对 HSM 所做的新的调用以及存储在模型中的数据。
文档影响¶
更新文档以描述插件的操作方式。