Scrypt ハッシュの生成と検証
エンコード処理はすべてブラウザ内で完結します。データは送信されません
scrypt のパスワードハッシュを生成・検証します。bcrypt との決定的な違いはメモリ硬であることです:bcrypt は CPU を忙しくするだけですが、scrypt はさらに大きなメモリ領域(既定のパラメータで 32MB)を要求するため、攻撃者が GPU で並列に解読しようとすると VRAM がすぐに尽きます —— これが設計された理由です。出力は標準的な PHC 形式 `$scrypt$ln=15,r=8,p=1$<ソルト>$<ハッシュ>` で、パラメータはハッシュ文字列自体に書かれているため、検証時に生成時のパラメータを知っている必要はありません(bcrypt より一歩進んでいます —— bcrypt はコスト係数が文字列内にあっても形式が固定ですが、scrypt は ln / r / p の3つが調整可能です)。画面上には現在のパラメータが必要とするメモリ量が表示され、万一本ツールの上限を超える場合は N を予算内に下げ、実際に使った N を結果にはっきり書きます —— 黙ってパラメータを変えると、要求したものと異なるハッシュを渡すことになり、最悪の「成功」になります。出力は派生鍵の16進数や Base64 も選べます(それは生のバイトでソルトもパラメータも含まず、PHC 文字列とは別物です)。
機能
- 双方向:ハッシュの生成、パスワードとハッシュの照合
- パラメータ調整可:N の指数(ln)、ブロックサイズ r、並列度 p
- 出力は PHC ハッシュ文字列、派生鍵の16進数 / Base64、あるいは3種類すべてから選択
- 検証時はハッシュからパラメータを読むため、事前に把握しておく必要がありません
- 現在のパラメータのメモリ消費を表示し、予算を超えたときは実際に使った N を明示します(黙って変更しません)
- 定数時間比較 —— 「先頭の数バイトが合った」ことで早期リターンしません
使い方
- モードを選びます:生成または検証
- 生成時はパラメータを調整(既定は ln=15 / r=8 / p=1、32MB)し、出力形式を選びます。検証時はハッシュを該当欄に貼り付けます
- パスワードを入力欄に貼り付けます
- Ctrl/⌘ + Enter か「実行」を押し、結果をコピーします
よくある質問
- scrypt と bcrypt のどちらを選ぶべきですか?
- どちらも現在は許容される選択で、違いは何を消費するかです。bcrypt は CPU だけを消費するため、GPU で何千ものインスタンスを同時に走らせられます。scrypt はメモリも消費し、1インスタンスあたり 128 × r × N バイトを占めるので VRAM がすぐ尽きます —— これが利点です。暗号学的な推奨順は Argon2id > scrypt > bcrypt で、いずれも「速い」ハッシュより遥かに優れています(SHA-256 でパスワードを直接保存するのは誤りです)。本ツールが両方を提供するのは、既存システムには bcrypt の資産が多いからです。
- ln・r・p はどう調整しますか?
- ln が主要なつまみです:N = 2^ln で、メモリも所要時間もこれに比例して増えるため、1つ上げるごとにコストが倍になります。既定の 15(N=32768、32MB)が通例で、passlib などの既定値でもあります。r はメモリと計算の配分を決めます(大きいほどメモリ寄り)。通常は 8 のままにします。p は入力を並列に分割し、総メモリを p 倍しますが、ブラウザでは単一スレッドで動くため、p を 1 より大きくしても速くならず総コストが増えるだけです。通常は 1 のままにします。
- 検証時にパラメータを入力しなくてよいのはなぜですか?
- パラメータがハッシュ文字列自体に書かれているからです —— `$scrypt$ln=15,r=8,p=1$…` の部分です。これが PHC 形式の狙いで、検証側はハッシュさえあれば再計算でき、別途パラメータ表を保存する必要がありません(そんな表はいずれハッシュと同期しなくなります)。本ツールはハッシュ内の ln / r / p を読み、画面上の3つの入力欄は無視するので、書き換えても結果は変わりません。
- 生成したハッシュは他のプログラムで使えますか?
- 使えます。PHC 形式は passlib(Python)や node-scrypt などで共通の書き方で、ソルトとハッシュはパディングなしの標準 Base64 です。文字列全体を保存し、検証時にそのまま本ツールやそれらのライブラリに渡してください。逆に、他のシステムから渡された scrypt ハッシュが `$scrypt$…` の形をしていない場合(JSON や、古い `$7$` 形式など)、本ツールは認識できず、形式が違うと明示します。
- PHC・16進数・Base64 のどれを選ぶべきですか?
- パスワードを保存するなら PHC です —— ソルトとパラメータを含む唯一の形式で、1つの文字列だけで検証できます。16進数と Base64 は派生鍵の生バイト(既定で32バイト)で、ソルトも ln / r / p も含まないため、それだけではどのパスワードも検証できません。用途は「その鍵を別のものに使う」こと、たとえば HMAC 鍵や別の KDF の入力です。そのため同じパスワードでも PHC 文字列は毎回異なり(ソルトがランダム)、同じソルトとパラメータの下では16進数と Base64 は同じ鍵の2つの書き方で、デコードすると1バイトずつ一致します。
関連ツール
Bcrypt
エンコードbcrypt のパスワードハッシュ($2y$)を生成、または既存のハッシュと照合します。コスト係数は変更でき、すべてブラウザ内で完結します。
ハッシュ計算
エンコードMD5・SHA-1・SHA-256・SHA-512 のダイジェストを計算します(旧システム向けの MD4・MD2 も可)。日本語も UTF-8 バイトで計算します。
データベースパスワード
エンコードPostgreSQL の md5、MySQL・MariaDB の mysql_native_password ハッシュを生成し、そのまま使える SQL も表示します。
Base64 変換
エンコードテキストを Base64 に変換し、Base64 からテキストへ戻します。日本語や中国語、emoji も UTF-8 として正しく処理。すべてブラウザ内で完結し、内容は送信しません。
URL エンコード
エンコード日本語や中国語、空白・記号を %XX にエスケープし、復元します。URL 全体とパラメータ値では方式が異なり、間違えるとリンクが開けません。ブラウザ内で処理します。
HTML 実体参照
エンコード< > & と引用符を HTML 実体参照に変換し、文字へ戻します。デコードは1回だけで、&lt; は山括弧ではなく < になります。すべてブラウザ内で処理します。