web-dev-qa-db-ja.com

内部状態が大きいパスワードハッシュ

scryptは大量のメモリを使用するように設計されており、そのすべてのメモリが使用されなかった場合、計算が数桁遅くなります。いずれにせよ、使用可能なメモリがそれほど多くない傾向があるカスタムハードウェア攻撃に対抗します。

私は考えていました、なぜ時間と空間のトレードオフを許可することさえわざわざするのですか?非常に大きな(もちろん調整可能な)内部状態を持つハッシュ関数を使用する方が良いのではないでしょうか?内部状態のサイズによってメモリ要件が決まり、ラウンド数が作業要因になります。

1
EPICI

あなたが説明したと思います SHA- 、ここでcapacity c(そして、程度は少ないが、rate r)はまさにあなたが話している「非常に大きな(もちろん調整可能な)内部状態」です。

256/512ビットのセキュリティレベルを取得するために、非常に高く(512ビット/ 1024ビット)クランクアップする必要はありません。

暗号化の目的は攻撃者に多くの作業を行わせることではありませんが、攻撃者に多くの作業を行わせることであることに注意してください正当なユーザーよりもはるかに多くの作業。ハッシュは内部状態に対して高額な操作を行うことを伴うため、内部状態のサイズを盲目的にクランクアップするだけで、攻撃者を傷つけるのと同じくらい正当なユーザーを傷つけます。

Scryptの大容量メモリ要件は、正当なユーザー(一度に少数のログイン要求を処理するサーバー)には豊富なリソースを悪用することを目的としていますが、大規模に並列化されたハードウェアリグで実行されている攻撃者にはほとんどありません。

3
Mike Ounsworth

これは、理由から「トレードオフ」と呼ばれます。 :)

Mike Ounsworthが示唆しているように、攻撃者と正当なユーザーの間には非対称性があります。しかし、正当なユースケース全体にも非対称性があります。

たとえば、scryptの実装は、通常の状態で少数のユーザーを並行して認証するように調整されている場合があります。しかし、すべてのユーザーが切断されるような停止または中断があり、その後(おそらく自動的に)同時に再接続を試みますか?その障害モードがアプリケーションの潜在的なユースケースである場合は、それに応じてscryptチューナブルを調整する必要があります。

ただし、個人システムで機密性の高い暗号化された単一のボリュームを保護するためにscryptのみを使用している場合は、数秒の遅延が許容される可能性があり、攻撃のコストを増やすことが望ましい場合があります。

それがトレードオフです。

0
Royce Williams

ある程度、時間とメモリのトレードオフは、大きな内部状態を持つことの必然的な結果です。 CS.SE にいる人々はおそらくもっと正式な説明を思い付くかもしれませんが、基本的に、パスワードハッシュが計算、保存、そして後で多数の中間値を使用することを要求する場合、メモリ-制約のある攻撃者は、代わりにいつでもオンデマンドでこれらの値を単純に計算できます。

0
Mark