|
1
1
测试字符串相等性的明显算法如下:
然而,使用此算法比较密码散列有一个微妙的问题。这个
这使得比较容易受到 timing attack ;通过尝试使用已知散列的密码并测量拒绝密码所需的平均时间,攻击者可以从统计上确定两个散列开始时有多少相同的字符。通过尝试一系列不同的散列,一次连续发现一个或两个字节的真实密码散列,攻击者可以推断出其中很大一部分,然后尝试在本地破解它。 安全字符串比较算法可能如下所示:
由于使用相同散列算法的所有密码散列应该具有相同的长度,因此理想情况下,比较两个散列所需的时间应该始终相同,从而防止计时攻击。 更一般地说,在将用户输入与任何机密字符串进行比较时,都应该使用安全字符串比较函数。 |