49

Has anyone got practical experience or a reference for a scheme that implements a key management scheme that would comply with the PCI DSS security standard?

There are obviously quite a few implementations around given the number of companies compliant with PCI DSS but trying to find details of them is tough. When it gets down to storing private data the discussion normally stops at which encryption algorithm to use. After that there's normally a statement about appropriately storing the private key but no discussion about practical ways to do it or things like periodically changing the key or providing the key to applications etc.

Specificlly I'm interested in thee requirements from sections 3.5 and 3.6 of the PCI DSS standard.

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.

I've had a look at the NIST Cryptographic publications as the PCI DSS requirements document suggests but apart from recent notes of a Cryptographic Key Management Workshop there doesn't appear to be much there in the way of real implementable schemes or standards.

As to what I'm trying to do it's not:

  1. Store passwords + salts as one way hashes for authentication,
  2. Choose a strong symmteric algorithm for data encryption,
  3. Avoid needing to store private data in the first place.
  4. Avoid the need for key management with other mechanisms: physical security, database security, dragons and wizards etc.

All of which are valid concerns but in this case are not the answer. The nuts and bolts of my requirements are in a different SO question .Net Design pattern for storing and retrieving sensitive per user data but it all boils down to key management hence this more refined question.

4

2 回答 2

36

我熟悉你正在经历的痛苦。我们努力更新旧的 EFT 系统以实现 PCI 合规性。密钥管理当然是(从我的软件的角度来看)最具挑战性的部分。

我想我还偶然发现了 Martin 发布的NIST 密钥管理建议,并且对缺乏具体示例感到非常沮丧。

ANSI X9.17 - 金融机构密钥管理可能与您的需求最相关,使用 PCI-DSS。不过祝你好运,该文档是大量 TLA 的集合,我知道我确实很难阅读。(X9.17 每年更新一次,现在最新版本是:NIST SP 800-57 Pt. 1 Rev. 4

当挫折变成绝望时,我偶然发现了《电子货币磨坊》,这是一个虚构的故事,有大量相关的技术参考资料。第 17 章讨论 X9.17,可能有助于理解。

从所有这些参考资料中,我设计了一个我们的审计员很满意的关键管理系统。设计文档相当冗长,但总而言之,您的数据加密密钥由密钥加密密钥保护,密钥加密密钥存储在物理上独立的盒子上,它本身由主密钥保护。

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

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

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

于 2009-10-18T10:54:00.443 回答
7

Have you seen NIST SP 800-57, Recommendation for Key Management?

于 2009-10-18T00:26:28.087 回答