【问题标题】:Credit Card storage solution信用卡存储解决方案
【发布时间】:2011-01-31 05:04:41
【问题描述】:

我正在开发一种解决方案,旨在存储会员详细信息以及信用卡详细信息。我正在尽我所能遵守 PCI DSS。到目前为止,这是我的设计:

PAN = 主帐号 == 信用卡上的长号

  • 服务器 A 是远程服务器。它存储所有成员详细信息(姓名、地址等),并为每个存储的 PAN 提供单独的密钥 A
  • 服务器 B 是本地服务器,实际上保存加密的 PAN 以及密钥 B,并进行解密。

要获得 PAN,客户端必须向两个服务器进行身份验证,向服务器 A 询问相应的密钥 A,然后将密钥 A 提供给服务器 B,服务器 B 会将 PAN 返回给客户端(前提是身份验证成功)。 服务器 A 只会使用服务器 B 的公钥加密密钥 A,因为它会事先拥有它。 不过,服务器 B 可能必须先发送盐,但我认为不必加密

我还没有真正考虑过关于上述内容的任何实现(即编码)细节,但是解决方案是使用 Java 的 Cajo 框架(RMI 的包装器),这样服务器将如何相互通信(目前,会员详细信息以这种方式传输)。

我希望服务器 B 而不是客户端进行解密的原因是,我害怕解密密钥进入客户端的 RAM,即使它在服务器上可能同样糟糕......

有人能看出上述设计有什么问题吗?上面的要不要改也没关系。

谢谢

jtnire

【问题讨论】:

  • 我可能应该补充一点,服务器 B 将需要 2 因素身份验证(密钥文件/密码)来安装驱动器(它将具有全盘加密),并且还需要 2 因素身份验证才能登录安慰。密钥文件和密码将由 2 个不同的人持有。
  • 有人建议我将存储服务器与进行加密/解密的服务器分开。这似乎是一个非常好的主意。我唯一关心的是存储服务器如何知道只与加密/解密服务器通信?密钥对?

标签: java encryption pci-dss


【解决方案1】:

作为前言,您将有一段噩梦般的时间来开发这个并通过 PCI 合规性。绝对值得考虑替代方案,例如使用可以为您存储这些卡详细信息的支付服务提供商,并使用令牌 ID 执行临时授权/结算(而不是通过“拨号信用卡机器”键入它们)你描述的)

如果您选择忽略该建议并选择 PCI 路线,那么至少要确保尽早让 PCI 批准的合格安全评估员 (QSA) 参与其中,以批准您提出的任何设计。 PCI 不是您应该“尽可能多地遵守”的东西,不幸的是,它是全有或全无!

尽管如此,解决此问题的一种方法是在框 A 上运行一个密钥服务应用程序。该应用程序需要输入两个“密钥管理”密钥,当它们异或时一起形成一个主密钥。 Master Key 只存储在 RAM 中,从不持久化到磁盘。

应用程序生成密钥加密密钥,存储在盒子 A 中,由主密钥加密。 KEK 是自动生成的(不是用户键入的内容)。 KEK 可以被保存到盒子 A 上的磁盘上,并由主密钥加密。

卡详细信息存储在框 B 中。此框还存储数据加密密钥,用于对卡详细信息执行对称加密。 DEK 本身以加密格式存储,使用框 A 中的 Key Encrypting Key 加密。

执行加密/解密的应用程序应该在盒子 B 上,并在请求 KEK 之前向盒子 A 验证自己。然后使用 KEK 解密 DEK,然后可以进行加密/解密。

【讨论】:

  • 感谢您的建议。不幸的是,在这种情况下,不能选择第三个支付提供商。这是一个很好的方法。有什么办法可以避免盒子 B 直接与盒子 A 通信?像这种“身份验证”可以通过客户端吗?原因是我有额外的控制可以防止盒子 B 访问任何不在网络上的机器。
  • 哦,一旦两个管理员都将他们的密钥输入到盒子 A 中,那台机器可以在没有任何干预的情况下运行,对吗? (当然直到下次重新启动)
  • 我猜 DEK 是由框 B 自动生成的,对于存储的每条记录?另外,我上面的计划有什么问题吗?我不是说我的正确(我不知道),但错误在哪里?谢谢
  • 顺便说一句,我认为 Box A,正如您上面所描述的,正是 StrongKey 所做的,所以也许我可以使用它??
  • 密钥管理(正如您从大量问题中看到的那样!)是一个非常复杂的主题。 stackoverflow.com/questions/1583553/… 有一些参考资料,但我已经给出了最好的建议 - 尽快让 QSA 参与其中。他们会提供帮助,最终您需要遵循他们的建议
【解决方案2】:

如果服务器 A 被黑 - 这意味着我基本上仍然可以获取所有明文信用卡,或者?然后我可以访问所有个人 KEY 访问每张信用卡所需的信息。

【讨论】:

  • 对不起,我忘了说,解密密钥是 Key A + Key B 的组合。
【解决方案3】:

您可能有兴趣阅读 Bytemark Blog 条目,了解他们如何存储信用卡信息。

要点是持有卡信息的服务器不会泄露号码;允许的操作是“添加新卡”、“更新或删除现有卡”和“充值卡”——服务器连接到支付处理器本身。

【讨论】:

  • 不涉及付款处理或交易
  • 我确定一定有某个地方(即使不在这个系统中),否则你为什么要存储信用卡详细信息?
  • 你是对的,不在这个系统中。数字被手动输入拨号信用卡机器
  • FWIW,Bytemark文章的链接是blog.bytemark.co.uk/2008/10/04/…
  • 感谢 pforhan,我已经修复了答案中的链接 :)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-05-22
  • 1970-01-01
  • 1970-01-01
  • 2019-10-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多