因此,就像任何有合理能力的网络开发商店一样,当我们接触信用卡时,我们戴着棉质手套,我们使用Braintree SecureVault来存储它们,这样我们就可以清楚地了解PCI Compliance问题。
然而,现在我们想为我们的服务提供免费试用,这在很大程度上取决于能否保证一张给定的信用卡只使用一次免费试用。理想情况下,我们能够对信用卡号本身进行散列,以保证唯一性。问题是,有效的信用卡号码集很小,因此很容易暴力破解信用卡号码。据我所知,加盐策略是无用的,因为如果有人可以访问哈希数据库,他们很可能也会有代码,因此加盐算法也是如此。
到目前为止,最好的两个想法是:
A)将散列隔离在一个集合中,而与它们的计费信息无关。因此,如果散列是暴力强制的,那么它们所拥有的只是在某个时间点使用的信用卡号的列表,而没有任何个人信息或者甚至不知道它是否仍然有效。这里的主要缺点是,我们确实有最后-4的记录,这可能在某种程度上用于匹配它们。
B)不带全数的散列,并处理假阳性和假阴性。对name、last-4和fairly进行散列应该是相当独特的。误报就像中彩票一样,我们可以在客户支持处处理。修改名称可能会导致漏报,但我们不清楚我们对名称匹配的准确性有何保证(据我所知,可能会受到网关和商家账户的影响),因此这可能会打开一个漏洞。
有什么想法?有什么建议吗?久经沙场的智慧?
发布于 2011-02-10 08:37:58
如果我错过了什么,请原谅,但是为什么不能有一个只有一列的"UsedCreditCards“表,该列是信用卡号码的SHA512散列,也许还有到期日期。这是不能反转的,通过将其保存在另一个表中,并且不存储有关代码的任何其他数据,您可以轻松地检查以前是否使用过某个信用卡号。
我不确定这是否会违反PCI或任何东西(我不这么认为,但我可能是错的)
https://stackoverflow.com/questions/4951993
复制相似问题