我正在开发一个解决方案,旨在存储成员的详细信息,以及信用卡细节。我正在尽我所能遵守PCI DSS。到目前为止,这是我的设计:
PAN =信用卡上的主帐号==长号
要获得PAN,客户端必须使用两个服务器进行身份验证,向Server A请求相应的密钥A,然后将密钥A交给服务器B,后者将PAN返回给客户端(前提是验证是成功的)。服务器A只会用服务器B的公钥对密钥A进行加密,因为它会预先得到密钥A。服务器B可能需要先发送一个salt,但是我认为这不需要加密
关于上面的内容,我还没有真正考虑过任何实现(即编码)的细节,但是解决方案是使用Java的Cajo框架(RMI的包装器),因此服务器将如何相互通信(目前,成员身份细节以这种方式传递)。
我之所以希望服务器B进行解密,而不是客户端,是因为我害怕将密钥解密到客户端的RAM中,尽管服务器上的密钥可能同样糟糕……
有人能看出上面的设计有什么问题吗?如果必须改变上面的内容,这并不重要。
谢谢
伊特内尔
发布于 2010-03-24 13:04:53
作为序言,您将经历一段时间的噩梦--开发它并完成PCI遵从性。肯定值得考虑其他选择,例如使用支付服务提供商为您存储这些卡的详细信息,并使用令牌Ids执行临时授权/解决(而不是通过您描述的“拨号信用卡机”输入它们)。
如果您选择忽略该建议并选择PCI路由,那么至少要确保尽早获得一个经过PCI批准的合格安全评估(QSA),以批准您想出的任何设计。PCI不是你应该“尽你所能去遵守”的东西,不幸的是,它是一件全部或根本没有的事情!
尽管如此,解决这个问题的一种方法是在框A上运行一个密钥服务应用程序。这个应用程序需要输入两个“密钥管理”密钥,当xor一起形成一个主密钥时。主密钥只存储在RAM中,从未持久化到磁盘。
应用程序生成密钥加密密钥,这些密钥存储在框A中,由主密钥加密。KEK是自动生成的(它不是用户输入的内容)。KEK可以持久化到方框A上的磁盘,并由主密钥加密。
卡详细信息存储在框B上。此框还存储数据加密密钥,用于对卡详细信息执行对称加密。DEK本身是以加密格式存储的,加密的密钥来自方框A。
执行加密/解密的应用程序应该在方框B上,并在请求KEK之前对方框A进行身份验证。然后使用KEK对DEK进行解密,然后可以进行加密/解密。
发布于 2010-03-24 11:04:29
如果服务器A被黑客入侵-这个meansI仍然可以获得所有信用卡的明文,或?我可以访问所有的个人钥匙,一个信息,我需要访问每一张信用卡。
发布于 2010-03-24 11:23:42
您可能会对如何存储信用卡信息的Bytemark博客条目感兴趣。
要点是持有卡信息的服务器不会泄露号码;允许的操作是“添加新卡”、“更新或删除现有卡”和“收费卡”--服务器连接到支付处理器本身。
https://stackoverflow.com/questions/2507034
复制相似问题