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プレイグラウンドの使い方
- パスワードを入力します。
- CPU/メモリコスト (N)を2のべき乗で選び、ブロックサイズ (r)、並列度 (p)、鍵長を設定します。
- ソルトとそのエンコードを入力するか、空のままにしてランダムなソルトを使います。
- ハッシュ化をクリックして結果をコピーし、下のパネルで照合します。
例
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は良い次点です。