这个`_time_independent_equals`是什么意思?

时间:2010-06-12 02:52:45

标签: python tornado

tornado。网络模块中,有一个名为_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吗?

1 个答案:

答案 0 :(得分:18)

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

这对于比较密码等安全任务非常有用。如果函数在第一个不匹配字节上返回,则攻击者可以尝试所有可能的第一个字节,并且知道花费最长的那个是匹配的。然后他们可以尝试所有可能的第二个字节,并知道花费最长的那个是匹配。这可以重复,直到推断出整个字符串。 (实际上,您必须进行大量平均以克服网络中的随机延迟,但如果您有耐心,它就会起作用。)