假设您没有彩虹表(或其他预先计算的哈希列表),并且实际上需要执行蛮力或字典攻击。
这个程序IGHASHGPU v0.90断言能够在一个ATI HD5870 GPU上每秒钟执行大约1300百万次SHA-1散列(即超过2^30)。
假设密码为40位熵,这需要2^10秒,大约17分钟。
在多个GPU上并行运行,按比例加快了速度。
所以,用快速哈希来强迫人是真正的危险,而不是理论上的危险。而且许多密码的熵都要低得多,这使得暴力迫使的速度更快。
如果我对每个用户使用一个真正的随机盐,这将对破解我的密码的时间长度产生多大的影响?
攻击者认为salt本身是已知的,并且它本身不会增加单个密码的破解时间(它可能会稍微增加一些,因为散列数据会变长一个街区,但最多是工作的两倍)。
(独立随机)盐的真正好处是攻击者不能使用相同的工作同时攻击多个用户的密码。当攻击者只需要任何用户的密码(或“尽可能多的”),而您有数百万用户时,如果没有盐,就会相应地缩短攻击时间,即使所有用户都有强密码。当然,并不是所有的人都会。
作为奖励,哪种哈希算法最安全?
目前的标准是使用慢散列算法。PBKDF2、bcrypt或scrypt都采用密码和salt作为输入,并采用可配置的工作因子--将此工作因子设置为用户在使用服务器硬件登录时所接受的高度。
PBKDF2只是一个迭代的快速散列(即仍然有效地并行化)。(这是一种可用于不同的基本算法的方案。无论你在系统中使用什么算法,都要使用。)Bcrypt需要一些( 4KB )工作内存,因此在每个处理器缓存不足4KB的GPU上实现效率较低。除了处理时间外,Scrypt还使用(可配置的)大量内存,这使得在GPU或自定义硬件上并行非常昂贵,而“普通”计算机通常有足够的RAM可用。所有这些函数都有一个salt输入,您应该使用它。