这是什么`_time_independent_equals`是什么意思?

这是什么`_time_independent_equals`是什么意思?

问题描述:

tornado名.web模块有一个名为_time_independent_equals功能:这是什么`_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

该函数不会简单比较字符串,它会尝试总是花费相同的时间量来执行。

这对比较密码等安全任务很有用。如果该函数在第一个不匹配字节上返回,则攻击者可以尝试所有可能的第一个字节,并知道最长的字符是匹配项。然后他们可以尝试所有可能的第二个字节,并知道最长的那个是匹配。这可以重复,直到整个字符串被推断。 (在现实中,你必须做很多平均来克服网络中的随机延迟,但如果你耐心的话,它可以工作。)