在我的代码中,我计算已知代码的散列数和SHA-1的一个秘密:
SHA-1(code + secret) = hash
攻击者可以对数据库进行统计分析,例如猜测代码03220
生成特定的输出。
SHA-1(03220 + secret) = f24647f6573032838969db0934c63f6aa99c6173
这个秘密有120位长,例如Wqj5ASoan1iCjnjLeO6fL
。
我的问题是,当一个攻击者知道使用的代码和哈希的输出时,他需要多长时间才能强行执行这个秘密?安全吗?
发布于 2016-10-18 07:22:27
在一个好的系统上,每秒有7千兆SHA1的暴力是有可能的.当我们假设您的“秘密”确实是随机生成的(就像它看起来的那样)并且有120位长时,我们可以猜测找到匹配的必要时间:
possibleCombinations = 2 ^ bitsOfPassword
expectedTimeInSeconds = (possibleCombinations / triesPerSecond) / 2
这使得大约3E18年,所以蛮力显然是没有问题的。如前所述,这只适用于真正随机的“秘密”。如果只将SHA1散列存储在数据库中,就不应该猜测“密钥”。
我想知道您的意图是什么,虽然,有更好的方法将密钥与令牌(HMAC)结合起来,或者它是否用于密码存储的上下文中?
发布于 2016-10-18 06:43:14
快速回答:
不安全。沙-1不仅因为现代计算机很容易使用暴力(更多的是ASIC为计算SHA操作而开发的),还因为一些数学上的弱点,使得它更容易被打破,而遭到了反对。
读:https://en.wikipedia.org/wiki/SHA-1#Attacks
你也可以阅读这篇在2012年写的文章:http://arstechnica.com/security/2012/10/sha1-crypto-algorithm-could-fall-by-2018/
在这里你看到它已经被认为是弱的,不是被蛮力强迫的,而是被削弱的,这使得这个算法更容易被打破(找到凸凹比试图蛮力容易得多)。
到了今年,已经开发了许多专用集成电路(ASIC),以更快地计算SHA散列(主要用于以比特币的加密货币进行挖掘)。
https://security.stackexchange.com/questions/140045
复制相似问题