Blowfish暗号化/復号化ツール
Bruce Schneierが設計した高速対称ブロック暗号
⚠️ セキュリティ注意
Blowfishの64ビットブロックサイズは、大量のデータを暗号化する際にバースデー攻撃に脆弱な場合があります。最高のセキュリティが必要な新規プロジェクトにはAES-256をお勧めします。
Blowfish暗号について
BlowfishはBruce Schneierが1993年に設計した64ビット対称ブロック暗号で、特許なしのDES代替として公開されました。16ラウンドFeistel構造で32〜448ビットの可変長鍵を使用。鍵スケジュールはπの16進展開を暗号化して18エントリP配列と4つ×256エントリSボックス(計約4KB)を生成します。OpenVPN 2.4.0(2017年)まではBF-CBCがデフォルト暗号でした。
Blowfishの鍵設定は意図的に遅く設計されており(521回の自己反復が必要)、ブルートフォース攻撃を高コストにします。bcryptはこの特性を利用したEksblowfish変種を使用し、コストファクター4〜31を設定可能で増加毎に鍵設定時間が2倍になります。Sweet32攻撃(CVE-2016-2183、2016年)は同一CBCキーで32GBのデータ暗号化時に誕生日界ブロック衝突が起き、平文回復可能であることを示しました。
主な特徴
- 可変鍵長:32〜448ビット(8ビット刻み)、同一16ラウンドFeistelが全鍵長に適用。鍵設定のみが遅く、ブロック単位暗号化は高速
- π由来の鍵スケジュール:鍵材料混入前にπの16進数でサブキーを初期化。隠し弱鍵バックドアが存在しないことが保証される
- 32ビットハードウェアでの高速処理:AES-NI以前の設計で、32ビットプラットフォームでAES CPU加速なしでも競争力あり
- bcryptの起源:bcrypt(OpenBSD 1999)のEksblowfish鍵設定はBlowfishの低速サブキー生成から派生。基盤暗号と独立した作業係数調整を可能にする
暗号化モード
- CBC: BlowfishのCBC — 64ビットブロックが各Feistelシーケンス前に前の暗号文とXOR。Sweet32限界:同一CBCキーで約32GBのデータ後、誕生日界(2³²ブロック)に達して衝突が統計的に悪用可能に。32GB超える前にAES-256-GCMへ移行か再鍵化が必要。
- ECB: BlowfishのECB — 各8バイト(64ビット)ブロックが独立して16ラウンド処理。同一8バイトブロックは常に同一暗号文。テストや単一ブロック操作にのみ使用。
- CFB: BlowfishのCFB — ブロック関数が実行中の暗号文(IVから開始)を暗号化し、上位nビットがn平文ビットとXOR。ストリーミングに適するが、CBCと同じ32GB Sweet32制限あり。
- OFB: BlowfishのOFB — ブロック関数がフィードバックレジスタを反復暗号化して決定論的鍵ストリームを生成。エラー伝播なし。64ビット内部状態の2³²ブロック誕生日界制限に注意。
アルゴリズム比較
| アルゴリズム | キー長 | ブロックサイズ | セキュリティ | 速度 |
|---|---|---|---|---|
| Blowfish | 32-448ビット | 64 bits | 良好 | 高速 |
| AES | 128/192/256 bits | 128 bits | 優秀 | 高速 |
| DES | 56 bits | 64 bits | 弱い | 高速 |
| 3DES | 112/168 bits | 64 bits | 中程度 | 低速 |
セキュリティ上の注意
- Sweet32(CVE-2016-2183、Bhargavan・Leurent、2016年):64ビットブロックでCBCモードの同一鍵32GBデータ後に誕生日界衝突が発生。研究者はHTTPS対Blowfishへのライブ攻撃を実証。2³²ブロック(32GiB)前に必ず再鍵化を。
- OpenVPN 2.4.0(2017年)はSweet32開示後にBF-CBCをデフォルトから除外し、AES-256-GCMを推奨。BF-CBC使用のOpenVPN接続は現在非推奨警告を生成。
- 完全16ラウンドBlowfishを破る算法攻撃は存在しない。30年以上差分・線形解析に耐え続けている。実用上の唯一の懸念事項は64ビットブロックのSweet32問題のみ。
- 新規アプリケーションにはAES-128-GCMまたはAES-256-GCMを使用。BlowfishはBF-CBCレガシーデータ復号、bcrypt理解、暗号教育に適している。
使用例
- bcryptパスワードハッシュの理解:bcrypt(Provence・Mazieres、1999年)はEksblowfish鍵設定でコストファクターと128ビットソルトを使用。Blowfish鍵スケジュール理解がbcryptセキュリティモデル理解の基礎
- OpenVPNレガシーアーカイブ復号:2016年以前にBF-CBCをデフォルト使用していたOpenVPN設定データの復号にBlowfish実装が必要
- 低リソース組み込みシステム:AES-NI不要・小フットプリント設計で、RAM制限マイコンへの展開が可能。32GB Sweet32ポリシー遵守前提
- 暗号教育:π由来サブキー生成・Sボックス・Feistелの透明な構造と30年の攻撃履歴で対称暗号設計トレードオフを教えるのに最適