簡潔な答え
そのため、パスワードの確認に 250 ミリ秒かかります
長い答え
scrypt が動作するために必要なメモリは、次のように計算されます。
128バイト × cost (N)×blockSizeFactor (r)
引用するパラメーター ( N=16384
、r=8
、p=1
)
128×16384×8 = 16,777,216 バイト = 16 MB
パラメータを選択するときは、これを考慮する必要があります。
Bcrypt は4 KB のメモリしか必要としないため、Scrypt よりも「弱い」 (それでも PBKDF2よりも3 桁強い)。ハードウェアでのクラッキングの並列化を困難にしたい。たとえば、ビデオ カードに 1.5 GB のオンボード メモリがあり、1 GB のメモリを消費するように scrypt を調整した場合:
128×16384×512 = 1,073,741,824 バイト = 1 GB
攻撃者はビデオ カードでそれを並列化できませんでした。ただし、アプリケーション/電話/サーバーは、パスワードを計算するたびに 1 GB の RAM を使用する必要があります。
scrypt パラメーターを四角形として考えるのに役立ちます。どこ:
- 幅は必要なメモリ量です (128*N*r)
- 高さは実行された反復回数です
- 結果の面積は全体の硬度です
cost
( N )は、メモリ使用量と反復の両方を増加させます。
blockSizeFactor
( r ) はメモリ使用量を増やします。
残りのパラメーターparallelization
( p ) は、全体を 2 回、3 回、またはそれ以上実行する必要があることを意味します。
CPU よりもメモリが多い場合は、3 つの別々のパスを並行して計算できます。これには、3 倍のメモリが必要です。
しかし、現実世界のすべての実装では、連続して計算され、必要な計算が 3 倍になります。
実際には、p
以外の要因を選択した人はいませんp=1
。
理想的な要因は何ですか?
ボーナスチャート
上記のグラフィカル バージョン。〜250ミリ秒をターゲットにしています:
ノート:
- 縦軸はログスケール
- コスト係数 (水平) 自体は対数です (反復 = 2 CostFactor )
r=8
曲線でハイライト
上記のバージョンを適切な領域にズームインし、再び ~250 ミリ秒の大きさを確認します。
ボーナスおしゃべり
- scrypt が 4 MB 未満を使用するように構成されている場合、scrypt は bcrypt よりもパスワードの保存に弱い 1
- Argon2 (i/d/id) は、認証のためのパスワードハッシュに関しては bcrypt よりも弱い (つまり、検証時間は 1,000 ミリ秒未満) 2