2010-03-24 163 views
4

我开发设计用于存储会员的详细信息,以及信用卡详细信息的解决方案。我尽可能地遵守PCI DSS。这里是我的设计到目前为止:信用卡存储解决方案

PAN =主账户==信用卡上的长号码

  • 服务器A是一个远程服务器。它存储所有成员的详细信息(姓名,地址等),并提供indivudal重点A的存储
  • 服务器B每个PAN是一个本地服务器,并实际持有加密盘,以及关键B,并执行解密。

要获得PAN,客户端与这两个服务器进行身份验证,要求服务器A对各个键A,然后给予重点A到服务器B,这将PAN返回给客户端(提供认证是SUCESSFUL )。 服务器A将只使用服务器B的公钥对密钥A进行加密,因为它将事先提供。 虽然服务器B可能必须先发送一个salt,但是我不认为必须加密

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

为什么我想要服务器B做解密,而不是客户端,原因是我害怕解密密钥进入客户端的RAM,即使它可能同样在服务器上一样糟糕......

任何人都可以看到上述设计有什么问题吗?如果需要更改上述内容并不重要。

感谢

jtnire

+0

我应该补充说,服务器B将需要2因素身份验证(密钥文件/密码)来装载驱动器(它将具有完整磁盘加密),并且还需要2因素身份验证才能登录到控制台。密钥文件和密码将由2个不同的人员持有。 – jtnire 2010-03-24 11:03:10

+0

有人建议我将存储服务器与执行加密/解密的服务器分开。这似乎是一个非常好的主意。我唯一担心的是,存储服务器如何知道只与加密/解密服务器通信?钥匙对? – jtnire 2010-03-24 11:51:38

回答

1

如果服务器A被砍死 - 这meansI baically仍然可以得到清晰的文本中的所有信用卡,或者?然后我可以访问所有个人密钥我需要访问每个信用卡的信息。

+0

对不起,我忘记提及,解密密钥是密钥A +密钥B的组合。 – jtnire 2010-03-24 11:21:32

0

你可能有兴趣在阅读他们如何存储信用卡信息的Bytemark Blog条目。

要点是,服务器持有该卡的信息不会泄露的数字;允许的操作是“添加新卡”,“更新或删除现有卡”和“为卡充值” - 服务器连接到付款处理器本身。

+0

没有付款处理或涉及的交易 – jtnire 2010-03-24 11:26:28

+0

我确定必须有某处(即使不在此系统中),否则你为什么要存储信用卡信息? – 2010-03-24 11:46:59

+0

你是对的,不是在这个系统中。这些号码被手动输入拨号信用卡机器 – jtnire 2010-03-24 11:49:48

6

作为前言,你将有时间开发这种并通过PCI合规性会是一场噩梦。它肯定会值得考虑的替代方案,如使用支付服务提供商,可以存储这些卡细节给你,并使用Token ID执行临时授权/结算(而不是通过'拨号信用卡机'键入他们,你所描述的)

如果你选择忽略这个建议并进入PCI路线,那么至少要确保尽早参与PCI认可的合格安全鉴定人(QSA),以批准你出现的任何设计用。 PCI不是你应该尽可能多地遵守的东西,不幸的是它是一个全部或者没有任何东西!

,虽然说,要解决这个一个方法是对箱A.运行的关键服务应用此应用程序需要输入两个“密钥管理”密钥,当它们一起形成主密钥时。主密钥只存储在RAM中,永远不会保存到磁盘。

该应用程序生成密钥加密密钥,密钥加密密钥存储在方框A上,由主密钥加密。 KEK是自动生成的(它不是用户键入的内容)。 KEK可以持久化到A盒上的磁盘上,并由主密钥加密。

卡片详细信息存储在方框B中。此方框还存储数据加密密钥,该密钥用于执行卡片详细信息的对称加密。 DEK本身是以加密格式存储的,并且使用来自框A的密钥加密密钥加密。

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

+0

感谢您的建议。不幸的是,在这种情况下获得第三方支付提供商不是一种选择。这是一个好方法。有没有办法避免方框B直接与方框A通信?就像这个“认证”可以通过客户端?原因是我有额外的控制措施,阻止B机访问不在网络上的任何机器。 – jtnire 2010-03-24 13:14:29

+0

哦,并且一旦两个管理员都将他们的钥匙输入到方框A中,该机器可以在没有任何干预的情况下运行,对吧? (直到下一次重新启动) – jtnire 2010-03-24 13:17:11

+0

我猜猜DEK是由B盒自动生成的,用于存储每条记录? 另外,上面的计划有什么问题吗?我不是说我的是正确的(我不知道),但是错误在哪里?谢谢 – jtnire 2010-03-24 13:20:21