这个“_time_independent_equals”是什么意思?
题
在里面 龙卷风.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
它用于比较安全 cookie 签名,从而比较名称。
但是关于这个功能的实现,是不是只是复杂的说法 a==b
?
解决方案
该函数并不简单地比较字符串,它尝试始终花费相同的时间来执行。
这对于比较密码等安全任务很有用。如果函数在第一个不匹配的字节上返回,则攻击者可以尝试所有可能的第一个字节,并知道花费最长的字节是匹配的。然后他们可以尝试所有可能的第二个字节,并知道花费最长的一个是匹配的。可以重复此操作,直到推导出整个字符串。(实际上,您必须进行大量平均才能克服网络中的随机延迟,但如果您有耐心,它会起作用。)
不隶属于 StackOverflow