web-dev-qa-db-ja.com

平易な英語での文字列比較タイミング攻撃

誰かが文字列比較タイミング攻撃が簡単な言葉で何であるか教えてくれませんか?私はこれをグーグル化しましたが、すべての説明は非常に技術的です。また、この攻撃はブルートフォース攻撃よりも優れていますか?私が間違っている場合は訂正してください。しかし、この攻撃はパスワードを解読するために使用されていると思います。

3
APCoding

文字列が等しいかどうかを確認するときは、すべての文字が一致することを確認する必要があります。ほとんどのプログラミング言語は、一致しない単一の文字を見つけるとすぐに、ショートカットを使用してFalse-またはNot Equal-を返します。例えば、

str1 = "1111111111111111"
str2 = "1101111111111111"

あなたはそれを0にヒットするとすぐにそれらが等しくないことを知っています、なぜあなたはチェックし続けるのですか?

これは非常に悪用可能です。サーバーが内部のどこかで遅延文字列比較を行うことを知って、パスワード(またはハッシュ、MACタグ、または同等かどうか比較する必要があるもの)を解読しようとしていると想像してください。次のようなタイミングになる可能性があります。結果(完全に構成):

Tried "aaaaaaaa", it took 0.2 ms
Tried "bbbbbbbb", it took 0.2 ms
Tried "cccccccc", it took 0.4 ms

かっこいい、最初の文字が長くかかったので、最初の文字が「c」であることがわかりました。これで、「caaaaaaa」、「cbbbbbbb」などで同じトリックを実行できます。一度に1文字ずつクラックすることは、一度にパスワード全体をクラックするよりも非常に高速です。

この「遅延」文字列比較は、高速に実行できるため、一般にプログラマーにとっては良いことですが、セキュリティには良くありません。安全な文字列比較では、タイミングの違いがないように違いが見つかった場合でも、最後までチェックします。

9
Mike Ounsworth