71

パスワードの保存にJavascryptライブラリを使用しています。それは、私が物事を暗号化するときにNrおよびp値を要求します。そのドキュメントでは、「CPUコスト」、「メモリコスト」、および「並列化コスト」パラメータと呼ばれています。唯一の問題は、それらが具体的に何を意味するのか、またはそれらにとってどのような良い値が得られるのかを実際には知らないということです。おそらく、 Colin Percivalの元のアプリの-t、-m、-Mスイッチに何らかの形で対応していますか?

誰かがこれについて何か提案がありますか?ライブラリ自体にはN=16384、r = 8、p = 1がリストされていますが、これが強いのか弱いのか、それとも何なのかわかりません。

4

3 に答える 3

72

はじめに:

cpercivalは 2009 年のスライドで言及しました。

  • (N = 2^14、r = 8、p = 1) < 100ms (インタラクティブ使用)、および
  • (N = 2^20、r = 8、p = 1) 5 秒未満 (機密ストレージ)。

これらの値は、現在 (2012 年 9 月) でも、一般的な使用 (一部の WebApp では password-db) には十分です。もちろん、詳細はアプリケーションによって異なります。

また、これらの値は(ほとんど)次のことを意味します。

  • N: 一般的な作業係数、反復回数。
  • r: 基礎となるハッシュに使用中のブロックサイズ。相対的なメモリ コストを微調整します。
  • p: 並列化係数; 相対的な CPU コストを微調整します。

rまたp、CPU 速度、メモリ サイズ、および帯域幅が予想どおりに増加しないという潜在的な問題に対応することを目的としています。CPU のパフォーマンスがより速く向上する場合は、 を増やします。p代わりに、メモリ テクノロジのブレークスルーが桁違いの改善を提供する場合は、を増やしrます。そして、一定の期間Nごとのパフォーマンスの一般的な倍増に追いつくためにそこにあります.

重要:すべての値によって結果が変わります。(更新:) これが、すべての scrypt パラメータが結果文字列に格納される理由です。

于 2012-09-25T10:41:14.013 に答える
66

簡潔な答え

そのため、パスワードの確認に 250 ミリ秒かかります

長い答え

scrypt が動作するために必要なメモリは、次のように計算されます。

128バイト × cost (N)×blockSizeFactor (r)

引用するパラメーター ( N=16384r=8p=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

理想的な要因は何ですか?

  • 余裕のあるRAM
  • 時間の許す限り!

ボーナスチャート

上記のグラフィカル バージョン。〜250ミリ秒をターゲットにしています:

ここに画像の説明を入力

ノート:

  • 縦軸はログスケール
  • コスト係数 (水平) 自体は対数です (反復 = 2 CostFactor )
  • r=8曲線でハイライト

上記のバージョンを適切な領域にズームインし、再び ~250 ミリ秒の大きさを確認します。

ここに画像の説明を入力

ボーナスおしゃべり

  • scrypt が 4 MB 未満を使用するように構成されている場合、scrypt は bcrypt よりもパスワードの保存に弱い 1
  • Argon2 (i/d/id) は、認証のためのパスワードハッシュに関しては bcrypt よりも弱い (つまり、検証時間は 1,000 ミリ秒未満)  2
于 2015-05-18T16:44:54.980 に答える