我正在研究密钥管理解决方案以符合 PCI 标准。我已经与该领域的许多供应商进行了交谈,虽然我喜欢他们的产品,但成本超出了我的预算。有人知道密钥管理的任何开源或低成本解决方案吗?我使用 Windows/.NET 环境,因此我更喜欢针对该环境的解决方案,但是我有兴趣了解那里的任何内容。
谢谢
我正在研究密钥管理解决方案以符合 PCI 标准。我已经与该领域的许多供应商进行了交谈,虽然我喜欢他们的产品,但成本超出了我的预算。有人知道密钥管理的任何开源或低成本解决方案吗?我使用 Windows/.NET 环境,因此我更喜欢针对该环境的解决方案,但是我有兴趣了解那里的任何内容。
谢谢
看看KeyManager,它是 OpenStack 套件的关键管理组件。该应用程序可以用作 OpenStack 之外的独立密钥管理解决方案。
作为 OpenStack 的一个组件,KeyManager 正在积极开发中,新功能计划以六个月为周期。
我们和你有过类似的经历。我们需要一个用于 PCI 合规性的密钥管理解决方案,而我们看到的所有商业产品都太贵了。对于小客户来说,一些关键经理的成本比我们的产品还高!
我们最终制作了一个基于软件的密钥管理器。我们提出要求,离岸开发人员对其进行编码。有一次,他们正在寻找其他客户来使用它。我不知道他们是否还在。
让我解释一下我们探索的选项。首先要记住的是,PCI 合规性和安全性是不同的东西,你可以是 PCI 合规的,但不是很安全。
选项 0 - 为每个 DB 列分配一个键,并将键存储在 DLL 文件中。您的应用程序链接在 DLL 文件中以访问用于加密和解密数据的密钥。没有人知道钥匙。对于定期密钥替换,您使用新密钥创建一个新的 DLL,使用旧密钥解密所有数据并使用新密钥重新加密数据。然后使用带有新密钥的新 DLL 重新启动您的应用程序。(请注意,如果您考虑恢复数据库备份,则需要保留旧密钥。)
我第一次听说选项 0 时,我很惊讶它符合 PCI 标准。我们不使用选项 0。
改进选项 0 的方法。
如果您的环境中有 HSM,请使用 HSM 加密 DLL 文件中的密钥。当您的应用程序启动时,它将使用 HSM 解密密钥。如果您想要更高的安全性,请在每次需要时解密密钥。
加密密钥后,将它们存储在数据库表中是安全的。如果您为每个密钥(旧的和新的)分配一个小的整数密钥 ID,则可以将密钥 ID 与加密数据一起存储。这使您可以进行增量密钥替换并避免停机。
在许多进程中将您的密钥清晰地保存在内存中,会增加您遭受内存扫描攻击以查找密钥的风险。您可以创建一个新进程,该进程是唯一解密密钥的进程。您的应用程序与这个新流程对话以加密和解密数据。这种新工艺应该在一个“表面积”很小的盒子上进行保护。由于敏感数据现在正在通过网络传输,因此应该对这种通信进行加密。SSL 是一个不错的选择。
我意识到这是一个旧线程,但有几个选项:
但是,选项 #2 有很多优点,因为它允许您在完全符合 PCI 的同时利用公共云(搜索“Regulatory Compliant Cloud Computing (RC3)”并单击 IBM 上的链接 - 我只能发布两个链接在我的回答中)在旧金山举行的 RSA 2013 上发布了更多关于如何利用此设备的公告。
我希望这会有所帮助。
KLMS over KMIP 是很好且易于使用的密钥管理解决方案。这是一个用 Java 编写的开源解决方案。请参阅以下链接以供参考。http://www.ibm.com/developerworks/library/se-kmip4j/
名为 stubInterface 的包将包含使用 KLMS over KMIP 所需的所有 api。
KLMS : 关键生命周期管理系统
KMIP : 密钥管理互操作性协议
我将添加到此列表中,因为我在搜索中找到了它,其他人可能会从扩展列表中受益。
我最近发现了似乎是 alpha 的KeyWhiz 。