hash - 防止重复使用信用卡的最佳方法

标签 hash cryptography credit-card

我们有一个系统,希望防止两个不同帐户注册相同的信用卡号。由于我们不在内部存储信用卡号-仅存储最后四位数字和有效期-我们不能简单地比较信用卡号和有效期。

我们当前的想法是在注册卡时在我们的信用卡信息系统中存储哈希(SHA-1),并比较哈希值以确定以前是否使用过卡。

通常,使用盐来避免字典攻击。我认为在这种情况下我们很脆弱,因此我们可能应该将盐与哈希值一起存储。

你们看到这种方法有什么缺陷吗?这是解决此问题的标准方法吗?

最佳答案

让我们做一些数学运算:信用卡号为16位数字。前七个数字是“主要行业”和发行人编号,最后一个数字是luhn校验和。剩下的8位数字是“免费”,总计1亿个帐号乘以潜在发行人号码的数量(不太可能很高)。有一些实现可以在日常硬件上每秒执行数百万个哈希的实现,因此,无论您进行什么繁琐的工作,这对于暴力破解都不会有太大的影响。
碰巧的是,当寻找一些给出哈希算法基准的东西时,我发现this article about storing credit card hashes,它说:

Storing credit cards using a simple single pass of a hash algorithm, even when salted, is fool-hardy. It is just too easy to brute force the credit card numbers if the hashes are compromised.

...

When hashing credit card number, the hashing must be carefully designed to protect against brute forcing by using strongest available cryptographic hash functions, large salt values, and multiple iterations.


全文值得一读。不幸的是,结果似乎是,任何使存储散列信用卡号“安全”的情况都会使搜索重复项的费用过高。

关于hash - 防止重复使用信用卡的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/103184/

相关文章:

jquery - jQuery 是否支持跨浏览器 hashchange 事件处理而无需额外的插件?

python - 椭圆曲线点乘有时会产生错误的结果

c - 在 OS X 上生成 MD5 密码

ruby - Braintree API 返回的交易顺序

android - 信用卡读卡器输出什么样的数据?

ruby - 使用 block 创建哈希 (Ruby)

ruby - SQLite 和 Ruby 救援

paypal - 是否可以通过其他人的网关自动付款?

mysql - 以md5格式保存md5密码django?

hash - 这种哈希技术有多强?