Security 有人在存储信用卡数据——他们是怎么做到的?

Security 有人在存储信用卡数据——他们是怎么做到的?,security,encryption,credit-card,Security,Encryption,Credit Card,安全合法地存储信用卡信息是非常困难和困难的。我无意存储信用卡数据,但我非常想弄清楚以下几点: 我的信用卡信息存储在世界上某个地方的服务器上。该数据(希望)不会存储在商户的服务器上,但在某些情况下需要存储该数据,以验证并向商户提交的数据标识的帐户收费 我的问题是:如果你负责存储信用卡数据,你会使用什么加密策略来保护磁盘上的数据?据我所知,提交的信用卡信息正在或多或少地进行实时检查。我怀疑用于保护数据安全的任何加密密钥都是手动输入的,因此解密正在进行中,这意味着密钥本身存储在磁盘上。您如何在这样的自

安全合法地存储信用卡信息是非常困难和困难的。我无意存储信用卡数据,但我非常想弄清楚以下几点:

我的信用卡信息存储在世界上某个地方的服务器上。该数据(希望)不会存储在商户的服务器上,但在某些情况下需要存储该数据,以验证并向商户提交的数据标识的帐户收费


我的问题是:如果你负责存储信用卡数据,你会使用什么加密策略来保护磁盘上的数据?据我所知,提交的信用卡信息正在或多或少地进行实时检查。我怀疑用于保护数据安全的任何加密密钥都是手动输入的,因此解密正在进行中,这意味着密钥本身存储在磁盘上。您如何在这样的自动化系统中保护您的数据和密钥?

对于供应商处理和存储您的信用卡信息,他们通常必须获得PCI认证。应概述这些要求。有些要求非常简单,而另一些要求则模糊不清,易于解释。完成这一过程并不有趣,拥有认证的公司并不意味着你的数据是安全的


但我认为这总比什么都没有好。

存储信用卡号码的盐腌散列非常容易,而不是为了安全查找号码本身。对于99%的情况,这将是足够的信用卡存储-快速和非常安全

如果您确实需要在某些情况下对信用卡进行可逆加密(例如,继续计费),我将使用存储在数据库以外的安全位置的对称密钥。我已经有一段时间没有看过PCI规范了,但我相当肯定这是符合PCI的

如果需要快速查找和可逆加密,请同时使用两种选项:哈希和加密

编辑: 对我的回答似乎有一些争议。我想指出以下来自Integrity.com的非常有趣的文章(PDF):

它详细说明了存储信用卡数据散列所涉及的许多问题,但其结论证实了我的建议

是的,卡的原始散列是不安全的;这就是为什么我们要给大麻加盐!但是静态盐也不安全,它们允许为已知的静态盐创建彩虹表。所以最好让我们的盐分以某种不可预测的方式变化。对于密码,对每个被检查的密码使用单独的随机散列就足够了;它甚至可以与哈希密码驻留在同一个表/行中。对于信用卡的情况,这应该是相同的——每个被散列的信用卡实例都有一个随机的salt。如果每笔交易都存储了信用卡号,则每笔交易都会有一个单独的salt

这种方法有优点也有缺点,但它足够安全。优点是缺乏关键管理;salt和hash就在那里,并且不需要更改,同时仍然允许对hash进行审计检查;e、 g.该信用卡哈希是否与该已知信用卡号匹配

犯人正在寻找;无法在许多交易中有效地搜索特定的信用卡号码


当然,不管怎样,外部加密都会有这个问题;除非数据库本身是加密的(只有一些数据库支持),否则您将无法很好地搜索。即使如此,在数据库甚至表级别进行加密也会显著降低搜索效率

任何用于解密加密信息的自动化系统都将是完全不安全的。通过使过程自动化,您正在破坏加密。任何加密数据都只能由用户输入的密钥解密。

如果我存储数字,我将是一家拥有庞大数据库的大型服务提供商。该数据库分布在一个高度冗余的存储阵列中,该阵列由多个机柜组成,位于单独的房间中,或者理想情况下位于单独的地理位置,由SAN连接。我最大的内部威胁是分布式物理工厂,不断出现的破旧驱动器,以及技术人员、管理员和工程师每天轮班工作。这是一个巨大的威胁

因此,我将在物理隔离的计算机上加密数据,该计算机通过网络连接到大容量存储器。软件将尽可能简单:加密和数字验证。公共接口和业务逻辑都在别处。访问将记录到单独的SAN


用类似AES的东西加密。原始AES密钥仅存储在RAM中。密钥被包装在一个PGP文件中,每个管理员都有自己的密码短语来启用服务器。不太受信任的人员可以获得用于灾难恢复的部分密码短语,或者密码短语可以存储在某个vault中。对于加密,为每个卡号选择一个唯一的初始化向量(IV),AES使用该IV对卡号进行加密,并将IV和加密的卡号存储到SAN。仅使用特权客户端接口进行解密;用于购买的普通客户端连接永远无法获得解密。

要回答您的特定问题,可以将加密的信用卡加密密钥存储在磁盘上。密钥加密密钥可以从启动服务器时必须输入的密码短语派生。可以使用Shamir的秘密分割方案,因此需要N个共享中的k个来构造将用作密钥加密密钥的密钥。然后将解密的加密密钥/密码存储在内存中。如果必须重新启动服务器,则需要k个共享。这当然是一个很大的开销,我认识的大多数商家都没有实现这一点。但是,它们通常将密钥与encryp分开存储