Hash 有没有一种安全的方法来保证信用卡的唯一性?

Hash 有没有一种安全的方法来保证信用卡的唯一性?,hash,credit-card,pci-dss,Hash,Credit Card,Pci Dss,因此,像任何有能力的网站开发商店一样,我们在触摸信用卡时戴上棉手套,并使用Braintree SecureVault存储它们,这样我们就可以避免PCI合规性问题 然而,现在我们想为我们的服务提供一次免费试用,这在很大程度上取决于能否保证一张给定的信用卡只用于一次免费试用。理想情况下,我们将能够散列信用卡号码本身,以保证唯一性。问题是,有效的信用卡号集很小,所以很容易强行使用信用卡号。就我所见,salt策略是无用的,因为如果有人能够访问hash数据库,他们很可能也会有代码,因此salt算法也是如此

因此,像任何有能力的网站开发商店一样,我们在触摸信用卡时戴上棉手套,并使用Braintree SecureVault存储它们,这样我们就可以避免PCI合规性问题

然而,现在我们想为我们的服务提供一次免费试用,这在很大程度上取决于能否保证一张给定的信用卡只用于一次免费试用。理想情况下,我们将能够散列信用卡号码本身,以保证唯一性。问题是,有效的信用卡号集很小,所以很容易强行使用信用卡号。就我所见,salt策略是无用的,因为如果有人能够访问hash数据库,他们很可能也会有代码,因此salt算法也是如此

到目前为止,最好的两个想法是:

A) 保持散列在一个集合中隔离,与它们的计费信息无关。因此,如果哈希是强制的,那么它们所拥有的只是一个在某个时间点使用过的信用卡号码列表,没有个人信息,也不知道它是否仍然有效。这里的主要缺点是,我们确实有过去4年的记录,这可能被用来在某种程度上匹配它们

B) 散列没有完整的数字,并处理误报和否定。对name、last-4和expiration的哈希应该是相当唯一的。假阳性就像中了彩票,我们可以在客户支持部门处理。修改名称可能会导致误报,我们不清楚我们对名称匹配的准确性有何保证(据我所知,网关和商户账户都可能会对我们造成影响),因此这可能会造成漏洞


想法?建议?经过战斗考验的智慧?

如果我遗漏了什么,请原谅,但为什么你不能只拥有一个“UsedCreditCards”表,其中只有一列,这是信用卡号的SHA512散列,可能还有到期日期。这是无法逆转的,通过将其保存在另一个表中,并且不存储有关代码的任何其他数据,您可以轻松地检查信用卡号以前是否使用过

我不确定这是否会违反PCI或其他任何规定(我不这么认为,但我可能错了)

高级别:使用现有的支付系统
我认为这种方法——使用信用卡号码来确定用户是否已经利用了免费试用,并且应该没有资格参加后续的免费试用——是错误的。首先,你将通过要求提前使用信用卡(许多用户在他们真正准备好购买之前不会发放信用卡)来赶走潜在客户,而不是在试用期结束后才要求使用信用卡

第二,你正在重新发明轮子。有过多的“应用商店”(Chrome webstore、Android marketplace、iTunes应用商店等),为支付和试用期提供内置机制。使用这些系统将提高您的产品对消费者的可视性,将为您的潜在客户提供多种不同的付款方式(使他们更倾向于购买),并且还将为您节省自己实施此机制的麻烦。此外,用户通常更愿意将信用卡发放给尽可能少的公司;您不仅需要自己实现这个复杂的机制,还需要让用户足够信任您来使用它

下层:实施细节

任何哈希机制都可能有冲突,因此您仍然需要处理这个问题。显然,您应该在服务器上使用全磁盘加密和其他最佳安全做法。通过将后端数据库服务托管在与托管此代码的计算机不同的计算机上,可以降低同时危害数据库和salting算法的风险。哈希的主要漏洞是暴力攻击。对付它们的最好办法就是让暴力强迫变得足够昂贵,以至于不值得攻击者这么做。对每个条目使用单独的salt(例如,作为salt的一部分,客户的姓名、邮政编码等)将使使用rainbow表无效。当然,降低数据本身对攻击者的价值(例如,不包括完整的信用卡号)也是阻止此类攻击的一个好方法。在任何情况下,我再次建议您利用众多的应用商店,而不是自己实施。

为什么您不能在您的试用中也使用无脑安全保险库?这并不保证唯一性,即多个帐户可以使用同一张信用卡,从商业的角度来看,这基本上让整个想法落空了,因为我们有真正的负债。虽然这对他们的API来说绝对是一个有趣的服务。它不能被逆转,但很容易被粗暴地强迫(尝试所有信用卡组合和未来两三年的到期日,对它们进行散列,看看它们有什么冲突)。如果他们保存了一份记录,将信用卡号的某些数字与其他信息关联起来,那么仍然有可能获得完整的信用卡号以及相关的个人信息。@Michael-因此,他们必须找到正确的16位信用卡号,然后是正确的到期日期,这样他们就可以知道“这张信用卡以前已经注册过追踪”。我不明白这是个什么问题。。。或者一个人会如何处理这些信息。@webdestroya,不,然后他们会根据信用卡号查找个人信息,现在他们有了一个可以收费的信用卡号。@webdestroya,我想有彩虹表可以很快发现普通信用卡号上的冲突。@webdestroya-你应该好好复习一下