CoderTools

Blowfish暗号化/復号化ツール

Bruce Schneierが設計した高速対称ブロック暗号

⚠️ セキュリティ注意

Blowfishの64ビットブロックサイズは、大量のデータを暗号化する際にバースデー攻撃に脆弱な場合があります。最高のセキュリティが必要な新規プロジェクトにはAES-256をお勧めします。

Blowfishキー長: 4-56バイト(32-448ビット)。推奨: 16バイト(128ビット)以上
フォーマットオプション

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年の攻撃履歴で対称暗号設計トレードオフを教えるのに最適

参考資料

クイックメニュー

最近のツールはありません