Bcryptジェネレーター

2件中5件の評価
Bcryptジェネレーター

Bcryptジェネレーターは、入力した任意の文字列から、安全なパスワード保存に使えるbcryptパスワードハッシュを生成する無料ツールです。

bcryptとは何ですか?今でも安全ですか?

Bcryptはパスワードハッシュアルゴリズムです。適切なコストを設定すれば、現在でもパスワード保存に使用できますが、新しいシステムではArgon2idが選ばれることも少なくありません。Niels ProvosとDavid Mazièresが1999年に設計したもので、Blowfish暗号の鍵スケジュール処理を利用し、パスワードの推測に意図的に大きな計算負荷をかけます。

ハッシュ化は一方向の処理です。そのため、アプリケーションは元のパスワードを復元するのではなく、保存されたパラメーターを使って入力候補をハッシュ化し、一致するか確認します。SHA-3のような汎用アルゴリズムとは異なり、bcryptはバージョン、コスト、ソルト、チェックサムを含む、固定長で自己完結したエンコード済みレコードを生成します。

標準的なbcryptレコードの長さはASCIIで60文字です。チェックサムは184ビットを表し、bcrypt独自のBase64形式のエンコードでは31文字になります。Bcryptの暗号学的な安全性が破られたとは考えられていませんが、設計の古さに起因する制限があります。従来の実装が処理できる入力は最大72バイトです。また、Argon2idにはbcryptにはない、メモリ負荷を利用した耐性があります。

図解:入力テキストがBcrypt関数を通り、元に戻せない固定長のダイジェストが生成される

Bcryptジェネレーターの使い方は?

ハッシュ化する文字列を入力して生成を実行し、Bcryptハッシュの結果欄に表示された値をコピーしてください。末尾のチェックサムだけを抜き出さず、結果全体を保存します。

  1. 大文字と小文字、空白、句読点を含め、実際のパスワードまたはテスト文字列をそのまま入力します。
  2. bcryptの結果を生成します。
  3. 先頭のバージョンマーカーとコストを含む、60文字すべてをコピーします。
  4. データベースのパスワードハッシュ用カラムに結果を保存します。
  5. サインイン時には、ハッシュを新たに生成して文字列を直接比較するのではなく、利用中のプラットフォームが提供するbcrypt検証関数を使用します。
digily.link のBcryptジェネレーターツールと入力フォーム

Bcryptでは通常、ハッシュごとに新しいランダムなソルトが使われます。そのため、同じ入力を2回ハッシュ化しても異なるレコードが生成されることがありますが、どちらも同じ入力を正しく検証できます。これは正常な動作であり、同一のパスワードが同一の保存値になるのを防ぎます。

処理はサーバー上で行われます。入力内容はHTTPS経由でサーバーに送信され、保存されません。実際に運用中のパスワードを扱う場合は、第三者が提供するオンラインサービスへの入力が組織のセキュリティポリシーに適合するか確認してください。

bcryptハッシュは復号したり元に戻したりできますか?

いいえ、bcryptハッシュは復号できません。暗号化されたデータではなく、復号鍵も含まれていないためです。現実的な攻撃方法は、パスワードの候補を推測し、保存されたハッシュに対して一つずつ検証することです。

Bcryptは、設定可能なコストによって推測処理を遅くします。ただし、短いパスワード、よく使われるパスワード、過去に漏えいしたパスワードを安全にできるわけではなく、攻撃者が弱い入力を突き止める可能性は残ります。ソルトを使うことで、事前計算した一つのテーブルを多数のアカウントに使い回す攻撃を防げますが、ソルト自体は秘密情報ではなく、保存されるレコードに含まれます。

Bcryptジェネレーターツールが生成した結果の例

bcryptの結果の読み方

Bcryptの結果は通常、modular crypt形式に従います。代表的な構造は$2y$12$[22-character salt][31-character checksum]です。これは形式を説明するための例であり、特定のパスワードから生成したハッシュではありません。

部分 一般的な長さ 役割
バージョンマーカー 4文字 $2y$や$2b$など、bcryptの種類を識別します。
コスト 3文字 2桁のコストと、それに続く区切り文字を記録します。
ソルト 22文字 128ビットのランダムなソルトをエンコードします。
チェックサム 31文字 184ビットのbcryptチェックサムをエンコードします。

これらの部分は必ずまとめて保持してください。1文字でも変更したり、値を切り詰めたり、長さが足りないカラムに保存したりすると、通常は検証に失敗します。互換性のあるライブラリ間でもバージョンマーカーが異なる場合があります。アプリケーション側でレコードを解析して再構築するのではなく、実績のあるパスワードAPIを利用してください。

bcryptはどんな場合に使いますか?

Bcryptは、すでに対応しているシステムでパスワードをハッシュ化する場合、特に既存のデータベースやフレームワークとの互換性が重要なときに使用します。意図的に処理が遅く、ソルトも使用するため、一般的なファイルチェックサムや重複排除用の識別子には適していません。

  • 適している用途には、アプリケーションのパスワード、移行テスト、データベースフィールドのサイズ確認、bcrypt互換の開発環境の再現があります。
  • Argon2idを使う場合は、プラットフォームが対応しており、メモリ設定を適切に管理できる環境で、新しいパスワードシステムを構築するときです。
  • SHA-3を使う場合は、ファイルの完全性確認、コンテンツのフィンガープリント、重複排除を行うときです。SHA-3/384 ジェネレーターとSHA-3/512 ジェネレーターが生成するのは汎用ダイジェストであり、パスワードレコードではありません。
  • bcryptを使わない用途は、デジタル署名、メッセージ認証、暗号化、後から復元する必要があるデータの保存です。

空白、句読点、数字も無視されず、入力データとして処理されます。アクセント付き文字や非ラテン文字は、bcryptで処理される前にバイトへエンコードされます。そのため、文字エンコーディングとUnicode正規化を統一し、両方のシステムで同じバイト列を生成する必要があります。Unicode文字は複数バイトになることがあるため、ここでは72バイトの上限が特に重要です。空の入力も技術的にはハッシュ化できますが、空のパスワードには推測攻撃に対する実質的な耐性がありません。

よくある質問

bcryptハッシュの保存にはデータベース容量がどれくらい必要ですか?

一般的なbcryptレコードには、少なくともASCIIで60文字分を確保してください。将来、別のパスワードアルゴリズムへ移行する可能性を考えると、少し広めのフィールドが役立ちます。標準のエンコード形式にバイナリカラムは必要ありません。

既存のSHAパスワードハッシュをbcryptに移行できますか?

元のパスワードが分からない限り、既存のSHAダイジェストを、そのパスワードに対応するbcryptハッシュへ変換することはできません。一般的な移行方法では、ユーザーが次回サインインした際に古いハッシュを検証し、入力されたパスワードをbcryptまたはArgon2idでハッシュ化して、古いレコードを置き換えます。

結果を保存する前に、60文字の値全体がコピーされていること、データベースフィールドで切り詰められないこと、受け取るアプリケーションがレコード内のバージョンマーカーに対応していることを確認してください。

人気のツール