bcryptジェネレーター
bcryptは、今でもパスワード保存の安全な選択肢の1つです。意図的に低速で、saltを自分で導出し、調整可能なcost parameterによってハードウェアの進歩に合わせて強度を上げられます。このジェネレーターは、平文パスワードから規格準拠のbcrypt hashを生成します。テストユーザーをseedしたり、アカウントを別システムへ移行したり、users.passwordカラムに保存された既存hashと値を比較したりするときに使えます。
bcryptでパスワードをhash化する方法
-
1
平文パスワードを入力
最大72 bytesです。bcryptはそれ以降を黙って切り捨てます。
-
2
cost factorを選ぶ
ここでは12が既定値です。10はより速いレガシー向けの選択、13はこのツールの最強設定です。+1ごとにhash時間はおおよそ2倍になります。
-
3
random saltを生成
16 bytesのsaltを暗号学的RNGから取得し、結果のhash文字列へ埋め込みます。
-
4
hashをコピー
出力は `$2b$12$...` のような自己記述的な文字列で、version、cost、salt、digestを含みます。
bcrypt hashの構造
$2b$12$mE2n5YqWjKqT9tXg.OQPoeeHZJ9hdSvOt5wFdRRQwl6yE1vWWY3z6
| | | |
| | salt (22 Base64 chars) digest (31 Base64 chars)
| cost (2 digits, 4-31)
version (2a, 2b, 2y、all bcrypt)
文字列全体は60文字です。VARCHAR(60) または CHAR(60) 型のカラムが標準的なschemaです。
cost factorの推奨
| Cost | hash 1回の目安時間(2024 CPU) | 用途 |
|---|---|---|
| 10 | ~80 ms | legacy default、まだ許容範囲 |
| 12 | ~300 ms | 現在の推奨baseline |
| 13 | ~600 ms | より高securityなapps |
| 14 | ~1.2 s | このツールの範囲外(最大13) |
1増えるごとにwork factorは2倍になります。ログイン待ち時間を500 ms未満に抑えることが重要なら、10-12にとどめます。
version byte: 2a vs 2b vs 2y
$2a$、1999年の元の仕様。多くのlibraryが2ahashを出力します。$2b$、crypt_blowfishのtruncation bugを修正した2014年改訂。新しいhashでは推奨されます。$2y$、PHP固有のtagで、機能的には$2b$と同等です。
3つはいずれも相互にverifyできます。違うのはhash文字列内のtagだけです。
bcryptが防ぐもの
- rainbow tables、hashごとに固有のsaltがあるため、事前計算lookupを無効化します。
- GPU/ASIC cracking、Blowfish key scheduleはmemory-boundでGPUに不向きです。Argon2ほどGPUに厳しくはありませんが、brute forceはまだ遅くできます。
- database leaks、brute forceなしに、hashから平文を復元することはできません。
bcryptが防げないもの: 弱いパスワード(最小長を設定し、breach listsと照合する)、credential stuffing(second factorを使う)、phishing。
72-byte制限
bcryptはパスワードの最初の72 bytesだけを使います。長い入力は黙って切り捨てられます。このため、多くのlibraryでは、bcryptへ渡す前にSHA-256でパスワードをpre-hashすることを勧めるようになっています。現代的な代替(Argon2、scrypt)にはこの制限がありません。
よくある質問
パスワード保存用途では、cost ≥ 12なら安全です。OWASPも今なお受け入れ可能なalgorithmとして挙げています。新規システムではArgon2idが推奨されますが、既存のbcrypt hash移行は優先度の低い懸念です。
hashごとにsaltがrandom生成されるためです。verify時は保存済みhashからsaltを取り出し、送信されたパスワードを同じsaltで再hashして比較します。
ほとんどのlibraryはそれを公開していません。理由も明確です。予測可能なsaltは目的を台無しにします。libraryが生成するsaltを使うのが安全な道です。
+1ごとにhash時間は約2倍になるため、cost 13はcost 10の約8倍の時間がかかります。アプリケーションに本当に追加の強度が必要でない限り、10-12の範囲に留めてください。
関連ツール
Atbash暗号エンコーダー
A-ZをZ-Aに対応させるヘブライ系の換字式暗号、Atbashでテキストをエンコードまたはデコードできます。同じ操作で暗号化と復号ができます。
Base64ファイルエンコーダー
あらゆるファイル(PDF、ZIP、画像、実行ファイル)をBase64テキストにエンコードし、JSON、メール、YAML、data URIへ埋め込めます。ブラウザ内でローカルに動作し、アップロードはありません。
Base58エンコーダー・デコーダー
UTF-8テキストや16進バイト列をエンコードし、Bitcoin、Ripple、Flickrの各アルファベットでBase58を安全にデコードします。
AES暗号化 / 復号
OpenSSLのAES暗号方式で低リスクのテキストを暗号化・復号します。パスフレーズはSHA-256でハッシュされ、Base64出力はIVと暗号文です。
チェックサム検証
任意のテキストの MD5、SHA-1、SHA-256、SHA-384、SHA-512、CRC32 チェックサムを計算し、期待値と比較して一致・不一致を明確に判定します。
SSL証明書ジェネレーター
自己署名のSSL/TLS証明書とRSA秘密鍵をすべてブラウザ内で生成します。Common Name、SAN、有効期間をカスタマイズし、PEM形式で書き出します。
このツールは他の言語でも利用できます
- bcrypt Oluşturucu [TR]
- Generador bcrypt [ES]
- مولد bcrypt [AR]
- Générateur bcrypt [FR]
- bcrypt-generator [NL]
- bcrypt 생성기 [KO]
- Generator bcrypt [ID]
- bcrypt Generator [EN]
- Trình tạo bcrypt [VI]
- bcrypt 生成器 [ZH]
- ตัวสร้าง bcrypt [TH]
- Gerador de bcrypt [PT]
- bcrypt-Generator [DE]
- bcrypt-generator [SV]
- Generator bcrypt [PL]
- Generatore bcrypt [IT]
- Генератор bcrypt [RU]