Twofish 暗号化/復号化
AESファイナリスト - 最大256ビット鍵の128ビットブロック暗号
セキュリティ注意
このツールはすべてのデータをブラウザ内でローカルに処理します。暗号化キーを共有しないでください。本番環境では強力なランダム生成キーを使用してください。
Twofishについて
TwofishはBruce Schneier・John Kelsey・Doug Whiting・David Wagner・Chris Hall・Niels FergusonのCounterpane 6人チームが設計した128ビット対称ブロック暗号。1998年NIST AES競技に提出し最終選考入り。設計の革新は鍵依存Sボックス:鍵設定時にq0/q1置換とGF(2⁸)上の4×4 MDS行列乗算で4つの8→8ビットSボックスを鍵から生成し、代替層が各鍵で異なる構造にする。
各16ラウンドFeistelのg()関数は2つの32ビットワードを鍵依存Sボックスとモジュロで処理し、PHT(擬似Hadamard変換、32ビット加算)で2出力を拡散。ラウンド前後にサブキーXOR白化でスライド攻撃を防止。1998年以来完全16ラウンdrへの攻撃は発表なし。
主な特徴
- 鍵依存Sボックス:q0/q1置換・MDS行列で鍵から4つのSボックスを生成。事前計算差分攻撃を防止
- MDS(最大距離分離)行列:任意非ゼロ入力差分が最大重みの出力差分を生成し最適線形層拡散を実現
- PHT(擬似Hadamard変換):32ビット加算による高速ハードウェア効率的なFeistel拡散
- 入力・出力白化:ラウンド1前と16後にサブキーXORで既知平文スライド攻撃を防止
暗号モード
- CBC: Twofish CBC — 128ビットブロックを16ラウンド前に前密文XOR。Sweet32閾値2⁶⁴ブロックは現実的に到達不可能。
- ECB: Twofish ECB — 各16バイトブロック独立して16ラウンドFeistelを通過。単一ブロック操作専用。
- CFB: Twofish CFB — 128ビットブロックでSweet32なし。ストリーミングに適用可能。
- OFB: Twofish OFB — 決定論的鍵ストリーム、周期2¹²⁸ブロック、エラー伝播なし。
アルゴリズム比較
| アルゴリズム | 鍵長 | ブロックサイズ | セキュリティ | 速度 |
|---|---|---|---|---|
| Twofish | 128/192/256 bits | 128 bits | 優秀 | 高速 |
| AES | 128/192/256 bits | 128 bits | 優秀 | 高速 |
| Blowfish | 32-448 bits | 64 bits | 良好 | 高速 |
| 3DES | 112/168 bits | 64 bits | 中程度 | 低速 |
セキュリティ上の注意
- 1998年以来完全16ラウンドTwofishへの攻撃なし。最良の縮小ラウンド結果は最大6ラウンド。MDS行列・鍵依存Sボックスに構造的弱点なし。
- 鍵依存Sボックスがオプションの攻撃抵抗層を追加:代替層構造の決定に鍵材料の侵害が必要。固定Sボックス暗号への事前差分攻撃を防止。
- Sweet32 BF-CBCからTwofishへの移行:128ビットブロックで同設計思想のBlowfish問題を解決。
- 新規アプリ:AES-256-GCM+AES-NI推奨。TwofishはVeraCryptカスケード・AES-NI不要環境・高安全マージンに最適。
ユースケース
- VeraCryptカスケード:Twofish+AES+Serpentで異設計由来の多層暗号化
- Blowfish BF-CBC移行:128ビットブロックでSweet32を排除しつつSchneier設計思想継承
- AES-NI非搭載環境:マイコン・旧CPU・組み込みターゲットへのソフトウェア専用高機能128ビット暗号
- 長期高セキュリティ暗号ストレージ:VeraCryptに見られるAES認証とは独立したTwofishの安全保証