scryptプレイグラウンド

N、r、p、ソルト、鍵長を指定してscryptを計算し、必要なメモリ量を確認。生の16進数または$scrypt$文字列で取得でき、RFC 7914のベクターで検証済みです。

必要なメモリ:128 × N × r = 128 MiB

scrypt(RFC 7914)はメモリハードです。OWASP の最低値:N=2^17, r=8, p=1(128 MiB)。ブラウザー内で hash-wasm により計算します。N が大きいと多くのメモリが必要です。

パスワードをハッシュと照合

すべてブラウザ内で実行されます。データがアップロードされることはありません。

scryptプレイグラウンドとは?

メモリハードな鍵導出関数scrypt(RFC 7914)を、独自のコストパラメータとソルトで実行します。設定に必要なメモリ量、生の導出鍵、後で照合できるエンコード済みの $scrypt$ 文字列が表示されます。

scryptプレイグラウンドの使い方

  1. パスワードを入力します。
  2. CPU/メモリコスト (N)を2のべき乗で選び、ブロックサイズ (r)、並列度 (p)、鍵長を設定します。
  3. ソルトとそのエンコードを入力するか、空のままにしてランダムなソルトを使います。
  4. ハッシュ化をクリックして結果をコピーし、下のパネルで照合します。

例

入力
Password password, salt NaCl, N=1024, r=8, p=16, 64 bytes
出力
fdbabe1c9d3472007856e7190d01e9fe7c6ad7cbc8237830e77376634b3731622eaf30d92e22a3886ff109279d9830dac727afb94a83ee6d8360cbdfa2cc0640

RFC 7914 セクション12のテストベクター2です。

scryptプレイグラウンドを使うべき場面

scryptのパラメータ調整、RFC 7914のベクターの確認、Node.jsの crypto.scrypt、Pythonの hashlib.scrypt、passlibが生成したハッシュのデバッグに使います。Nが大きいと数百MiBが必要になり、モバイル端末では失敗することがあります。

scryptプレイグラウンドの仕組み

scryptはまずPBKDF2-HMAC-SHA-256を1回実行して入力を拡張し、次にROMix関数が、Salsa20/8ベースのBlockMixの出力で 128 × N × r バイトのメモリを埋め、データ依存の順序でそれを読み戻す処理をp回行い、最後にPBKDF2のステップを実行します。エンコード形式は、Base64の $scrypt$ln=<log2 N>,r=<r>,p=<p>$<salt>$<hash> です。計算にはhash-wasm(WebAssembly)を使います。

一般的な使用例

  • ハッシュ化が約100ミリ秒になるNの選定
  • RFC 7914のテストベクターの再現
  • Nodeのcrypto.scryptで作成したハッシュのデバッグ
  • NとrによるメモリコストA増加の説明

よくある質問

OWASPはどのパラメータを推奨していますか?

N=2^17、r=8、p=1以上(128 MiBを使用)、または N=2^16、r=8、p=2 のようなトレードオフです。

scryptはどのくらいのメモリを使いますか?

128 × N × r バイトで、パラメータの下に表示されます。N=2^17、r=8なら128 MiBが必要です。

scryptはbcryptより優れていますか?

メモリハードなので、GPUやASICによる攻撃のコストが高くなります。現在の第一候補はArgon2idで、scryptは良い次点です。

他のカテゴリを見る