【发布时间】:2010-12-07 16:48:48
【问题描述】:
对于实施符合PCI DSS 安全标准的密钥管理方案的方案,是否有人获得过实践经验或参考?
考虑到符合 PCI DSS 的公司的数量,显然有很多实施方案,但试图找到它们的详细信息是困难的。当涉及到存储私有数据时,讨论通常会停留在使用哪种加密算法上。之后通常会有关于适当存储私钥的声明,但没有讨论实际的方法或定期更改密钥或向应用程序提供密钥等事情。
具体来说,我对 PCI DSS 标准第 3.5 和 3.6 节中的要求感兴趣。
3.5.2 将加密密钥安全地存储在尽可能少的位置和表格中。
3.6.a 验证是否存在用于加密持卡人数据的密钥的密钥管理程序。注意:许多用于密钥管理的行业标准可从包括 NIST 在内的各种资源中获得,可在 http://csrc.nist.gov 找到。
3.6.4 验证密钥管理程序是否已实施,要求至少每年定期更换密钥。
我看过NIST Cryptographic publications,正如 PCI DSS 要求文档所建议的那样,但除了最近的 Cryptographic Key Management Workshop 注释之外,似乎没有太多真正可实施的方案或标准。
至于我想要做的不是:
- 将密码和盐存储为身份验证的一种方式,
- 为数据加密选择一个强大的对称算法,
- 首先避免需要存储私有数据。
- 避免使用其他机制进行密钥管理:物理安全、数据库安全、龙和巫师等。
所有这些都是有效的问题,但在这种情况下不是答案。我的要求的具体细节在另一个 SO 问题 .Net Design pattern for storing and retrieving sensitive per user data 中,但这一切都归结为密钥管理,因此这个问题更精致。
【问题讨论】:
-
很想知道你最终做了什么?我一直在搜索,但找不到 NIST SP 800-22 的有效密钥或示例代码。我的 webapp 在 php 中,即使是商业实现也会有所帮助。
-
我最终不需要存储持卡人数据,但仍然需要一定程度的应用程序加密。对于 Windows,我使用存储在 Windows 证书存储中的证书和 RSA 密钥作为存储在配置文件中的加密应用程序密钥的主密钥。对于某些 Linux MySQL 数据库,我使用了 LUKS,其中文件系统只能在手动输入密码后才能挂载。
标签: security cryptography pci-dss key-management