security - 如何正确做好私钥管理

标签 security cryptography pci-dss key-management

是否有人对实现符合 PCI DSS 的 key 管理方案的方案有实践经验或引用?安全标准?

鉴于遵守 PCI DSS 的公司数量众多,显然有相当多的实现方案,但试图找到它们的详细信息很困难。当谈到存储私有(private)数据时,讨论通常会停止在使用哪种加密算法上。之后,通常会有关于适当存储私钥的声明,但没有讨论实际的方法,或者定期更改 key 或向应用程序提供 key 等事情。

具体来说,我对 PCI DSS 标准第 3.5 节和 3.6 节的要求感兴趣。

3.5.2 Store cryptographic keys securely in the fewest possible locations and forms.

3.6.a Verify the existence of key-management procedures for keys used for encryption of cardholder data. Note: Numerous industry standards for key management are available from various resources including NIST, which can be found at http://csrc.nist.gov.

3.6.4 Verify that key-management procedures are implemented to require periodic key changes at least annually.

我查看了 NIST Cryptographic publications正如 PCI DSS 要求文件所示,但除了最近的 Cryptographic Key Management Workshop 注释之外似乎没有太多真正可实现的方案或标准。

至于我想做的事情不是:

  1. 将密码 + 盐存储为一种用于身份验证的哈希值,
  2. 选择强大的对称算法进行数据加密,
  3. 首先避免需要存储私有(private)数据。
  4. 避免使用其他机制进行 key 管理:物理安全、数据库安全、龙和巫师等。

所有这些都是合理的担忧,但在这种情况下都不是答案。我的要求的具体细节在另一个SO问题.Net Design pattern for storing and retrieving sensitive per user data中但这一切都归结为 key 管理,因此这是一个更精致的问题。

最佳答案

我很了解你所经历的痛苦。我们努力更新旧的 EFT 系统以使其符合 PCI 要求。 key 管理无疑是(从我的软件角度来看)最具挑战性的部分。

我想我也偶然发现了NIST Recommendations for Key Management马丁发布了这一内容,并因缺乏具体示例而感到非常沮丧。

ANSI X9.17 - Financial Institution Key Management PCI-DSS 可能最符合您的需求。不过,祝你阅读顺利,该文档是 TLA 的大量集合,我知道我读起来确实很困难。 (X9.17每年更新一次,目前最新版本为:NIST SP 800-57 Pt. 1 Rev. 4)

当沮丧变成绝望时,我偶然发现了The Electronic Money Mill这是一个虚构的故事,有大量相关技术引用。 Chapter 17讨论X9.17,可能有助于理解。

根据所有这些引用 Material ,我设计了一个令我们的审计员感到满意的 key 管理系统。设计文档相当冗长,但总而言之,其想法是让数据加密 key 受到 key 加密 key 的保护,并且 key 加密 key 存储在物理上独立的盒子上,该盒子本身受到主 key 的保护。

我的实现是在 Windows 机器上运行一个 key 服务器应用程序。该应用程序需要输入两个单独的“ key 服务器主 key ”才能使用。这些 key 只有 key 服务器管理员知道。这些 key 被异或在一起生成主 key ,该主 key 仅在应用程序运行时存储在 protected 内存中。然后,应用程序可以自动生成加密强度高的 key 加密 key ,这些 key 使用主 key 以加密形式存储。

需要加密的应用程序将从 key 服务器请求 key 加密 key 。应用程序使用 KEK 来加密/解密数据加密 key ,数据加密 key 可以与应用程序数据一起安全存储。

祝你好运。我希望您也觉得这是一个有趣的挑战!

关于security - 如何正确做好私钥管理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1583553/

相关文章:

c - 通过传递数组作为输入数据来实现 AES-128 CBC

api - 用于存储信用卡信息的 PCI 合规服务 - [非美国公司]

security - 通过防火墙获取 BlueMix 应用程序

Java PBE 加密字符串长度与输入相同

javascript - 为什么我的 JavaScript 不被认为是安全的?

encryption - KMIP 和 PKCS#11 有什么关系?

security - 用于存储 PCI 敏感数据的服务

ssl - 账户密码传输和 PCI DSS 合规性

javascript - 使用 React/ReduxReducer 进行正确的密码管理

html - 如果 HTTP 请求是从 iframe 发送的,那么 iframed 站点从哪里看到请求?