在龙卷风 .web模块中有一个叫做的函数_time_independent_equals:
def _time_independent_equals(a, b):
if len(a) != len(b):
return False
result = 0
for x, y in zip(a, b):
result |= ord(x) ^ ord(y)
return result == 0
Run Code Online (Sandbox Code Playgroud)
它用于比较安全cookie签名,从而比较名称.
但是关于这个功能的实现,它只是一个复杂的说法a==b吗?
Dan*_*wby 18
该函数不是简单地比较字符串,而是尝试总是花费相同的时间来执行.
这对于比较密码等安全任务非常有用.如果函数在第一个不匹配字节上返回,则攻击者可以尝试所有可能的第一个字节,并且知道花费最长的那个是匹配的.然后他们可以尝试所有可能的第二个字节,并知道花费最长的那个是匹配.这可以重复,直到推断出整个字符串.(实际上,您必须进行大量平均以克服网络中的随机延迟,但如果您有耐心则可以.)
| 归档时间: |
|
| 查看次数: |
1228 次 |
| 最近记录: |