Twofish(ツーフィッシュ)とは — AESファイナリストの128ビットブロック・最大256ビット鍵対称暗号
Twofish(ツーフィッシュ)はAESファイナリストの128ビットブロック・最大256ビット鍵の高速で特許無償の対称暗号を解説。設計・性能・実装の要点をわかりやすく紹介。
暗号では、Twofishはブロックサイズが128ビット、鍵長が256ビットまでの対称鍵ブロック暗号です。標準的な鍵長としては128、192、256ビットが想定されています。
歴史と位置づけ
1997年、NISTはDESの後継をAESとして知られるようにするための競争を発表しました。Twofishはそのファイナリスト5人のの一つとして最終選考まで残りましたが、最終的にAESの標準アルゴリズムとしては選ばれませんでした。標準にはなりませんでしたが、設計の堅牢さと自由な利用条件により暗号コミュニティでは長く注目されています。
設計の概要
Twofish はそれ以前のブロック暗号である Blowfish に関連する設計思想を受け継ぎつつ、より現代的な要素を取り入れています。主な特徴は次のとおりです:
- 16ラウンドのFeistel構造:基本的にはFeistelネットワークを採用し、各ラウンドで非線形変換と線形拡散を行います。TwofishはDESと同じFeistel構造の流れを汲んでいます。
- 鍵依存のS-box:事前に計算された鍵依存のS-box(置換表)を使用します。これにより、同じアルゴリズムでも鍵ごとに異なる非線形性が導入されます。
- 複雑な鍵スケジュール:与えられた鍵はサブキー(ラウンドキーやホワイトニング鍵)とS-box生成の材料に分割され、これらを生成するために多段の線形・非線形操作(q-ボックス、RSコード、MDS行列など)が用いられます。
- PHT(擬似ハダマード変換)とMDS行列:ラウンド関数内部でPHTとMDS(最大距離分離)行列を組み合わせて、良好な拡散を達成します。
- 入力/出力ホワイトニング:暗号化開始前後に平文と復号後のデータに鍵とXORする「ホワイトニング」を導入し、攻撃のハードルを上げています。
鍵スケジュールの一部として、鍵の半分がラウンドやホワイトニングに用いるサブキーに、残りの半分はS-box(鍵依存Sボックス)の生成に使用されるという設計思想が取り入れられています。これにより、鍵材料が暗号内部の構造に深く反映されます。
安全性と暗号解析
Twofish は公開設計で、設計者自身や第三者による幅広い解析が行われています。現在までの研究では:
- 全ラウンド(16ラウンド)に対して「実用的な」鍵復元を可能にするような攻撃は報告されていません。現実的な条件下での実用的な破壊(フルラウンドを対象とした高速な総当たり以外の攻撃)は確認されていません。
- 理論的・学術的には、関連鍵攻撃や縮小ラウンドに対する差分・線形暗号解析など、いくつかの高度で非現実的な仮定下での攻撃が提案されています。しかし多くは現実の運用条件では成立しないか、膨大なリソースや非現実的な関連鍵条件を必要とします。
総じて、Twofishは学術的な解析の対象になってきましたが、フルラウンドTwofishを破る実用的な攻撃は存在せず、実運用においては安全性が高いと評価されています。
性能
実装環境によって性能は変わりますが、一般的な傾向としては次のように報告されています。多くのソフトウェアプラットフォームでは、Twofishは128ビット鍵の場合はRijndael(Advanced Encryption Standardで選択されたアルゴリズム)より若干遅いことが多い一方で、256ビット鍵を用いる場面では最適化次第で有利になる場合があります。ハードウェア実装では設計の複雑さが影響するため、AESがハードウェア向けに最適化されやすかったことがAES選定の一因でもあります。
実装・利用とライセンス
Twofishアルゴリズムは、何の制限もなく誰でも無料で利用できます。Twofish暗号は特許を取得しておらず、その仕様やソースの参考実装はパブリックドメインまたは自由利用可能な形で公開されています。設計者には Bruce Schneier、John Kelsey、Doug Whiting、David Wagner、Chris Hall、Niels Ferguson らが名を連ねています。また、Stefan Lucks、河野忠義、Mike Stay らはTwofishや他のAES候補の競合他社の暗号解析を行う「拡張Twofishチーム」のメンバーとして解析に関わりました。
ただし、実際の採用状況はAES(Rijndael)ほど広範ではなく、製品やライブラリでの標準採用例は限定的です。用途としてはファイル暗号化、ディスク暗号、暗号ライブラリの代替アルゴリズムなどで利用されています。利用する際は、暗号モード(CBC、CTR、GCM、XTS など)や鍵管理、パディング、認証(MAC/HMAC/AEAD)といった周辺設計にも注意が必要です。
まとめ
Twofishは128ビットブロック、最大256ビット鍵を持つ堅牢な対称ブロック暗号であり、鍵依存S-boxやPHT、MDS行列、ホワイトニングなど複数の工夫により高い安全性を目指しています。AESの標準には選ばれませんでしたが、公開実装と自由な利用条件により、特定の用途や研究目的で今なお有用な選択肢です。実運用で採用する場合は、周辺プロトコルや鍵管理を含めた全体設計を慎重に行ってください。
暗号解析
2008年の時点で、Twofishブロック暗号に関する最高の暗号解析が、16ラウンド版の完全版の切り捨て差分暗号解析です。この論文では、切り捨てられた差分攻撃の確率は1ブロックあたり2-57.3であり、切り捨てられた差分の良いペアを見つけるには約251個の選択された平文(32PiB相当のデータ)が必要であると主張しています。
Bruce Schneier氏は2005年のブログエントリーで、この論文は完全な暗号攻撃を提示しているのではなく、いくつかの仮説的な差分特性を提示しているに過ぎないと反論しています。"しかし、理論的な観点から見ても、Twofishは全く壊れていません。2000年に発表されて以来、これらの結果を拡張したものはありません」。
関連ページ
質問と回答
Q: Twofishとは何ですか?
A: Twofishは対称鍵ブロック暗号で、ブロックサイズは128ビット、鍵長は最大256ビットです。
Q: Twofishは、以前のブロック暗号Blowfishとどのように関係していますか?
A:Twofishの主な特徴は、事前に計算された鍵依存のS-boxを使用することと、比較的複雑な鍵スケジュールであることです。nビット鍵の半分が実際の暗号鍵として使われ、残りの半分が暗号化アルゴリズムの変更に使われます(鍵依存S-box)。
Q:TwofishはAdvanced Encryption Standardに選ばれたのですか?
A:いいえ、1997年にNISTがDESの後継となるAESを選定するコンペを発表しましたが、Twofishは規格として選定されませんでした。
Q: Twofishは他の設計のどのような要素を使用していますか。
A: Twofishは、SAFER暗号ファミリーの擬似ハダマード変換(PHT)など、他の設計からいくつかの要素を使用しています。
Q: DESのようなFeistel構造を使用していますか?
A: はい、DESのようなFeistel構造を使用しています。
Q: 128ビット鍵の場合、Rijndaelより速いですか?
A: ほとんどのソフトウェアプラットフォームで、Twofishは128ビット鍵のRijndaelより若干遅くなります。
Q: 256ビット鍵の場合、Rijndaelより速いですか?
A: 256ビットキーでは、Rijndaelより若干速いです。
百科事典を検索する