この「_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
?
解決
この関数は、単に文字列を比較しない、それが常に実行に同じ時間を取るしようとします。
このパスワードを比較するようなセキュリティタスクのために有用です。関数は、最初の不一致バイトで返された場合、攻撃者は、すべての可能な最初のバイトをしようとすると、最長かかる1が一致していることを知っている可能性があります。その後、彼らはすべての可能な第二のバイトをしようとすると、最長かかる1が一致していることを知っている可能性があります。文字列全体が推定されるまでこれを繰り返すことができます。 (実際には、ネットワーク内のランダムな遅延を克服するために、平均の多くをしなければならない、しかし、あなたは患者であれば、それは動作します。)
所属していません StackOverflow