暗号学において、Twofishはブロックサイズ128ビット、鍵サイズ最大256ビットの対称鍵ブロック暗号です。Advanced Encryption Standard(AES)コンテストの最終候補5つのうちの1つでしたが、標準化には選ばれませんでした。Twofishは、以前のブロック暗号であるBlowfishと関連があります。
Twofish の特徴は、事前に計算された鍵依存S ボックスの使用と、比較的複雑な鍵スケジュールです。n ビット鍵の半分が実際の暗号化鍵として使用され、n ビット鍵の残りの半分が暗号化アルゴリズムの変更 (鍵依存 S ボックス) に使用されます。Twofish は、他の設計からいくつかの要素を取り入れています。たとえば、SAFERファミリーの暗号の擬似アダマール変換[ 3 ] (PHT)などです。Twofish はDESと同様のFeistel 構造を持っています。Twofish は最大距離分離行列も使用します。
1998年に導入された当初、Twofishは128ビット鍵ではRijndael ( Advanced Encryption Standardで採用されたアルゴリズム)よりわずかに遅かったが、256ビット鍵ではやや速かった。2008年以降、ほぼすべてのAMDおよびIntelプロセッサには、AES命令セットを介したRijndaelアルゴリズムのハードウェアアクセラレーションが搭載されている。この命令セットを使用するRijndaelの実装は、現在では(ソフトウェアによる)Twofishの実装よりも桁違いに高速である。[ 4 ]
Twofishは、 Bruce Schneier、John Kelsey、Doug Whiting、David Wagner、Chris Hall、および Niels Fergusonによって設計されました。「拡張Twofishチーム」は、Twofishのさらなる暗号解読を行うために集まりました。その他のAESコンテスト参加者には、Stefan Lucks、Tadayoshi Kohno、およびMike Stayがいました。
Twofish暗号は特許を取得しておらず、リファレンス実装はパブリックドメインに公開されています。そのため、Twofishアルゴリズムは誰でも何の制限もなく自由に利用できます。これはOpenPGP標準(RFC 9580)に含まれる数少ない暗号の一つです。しかし、Twofishは、より長く利用可能であったBlowfishほど広く普及していません。
Twofishの設計において、パフォーマンスは常に重要な要素でした。暗号化速度、メモリ使用量、ハードウェアゲート数、鍵設定、その他のパラメータの重要度に応じて、複数のパフォーマンストレードオフを可能にするように設計されています。これにより、さまざまなアプリケーションに実装可能な、非常に柔軟性の高いアルゴリズムが実現しました。
Twofishでは、ソフトウェアとハードウェアの両方において、複数の時間・空間トレードオフが存在します。その一例として、ラウンドサブキーやSボックスの事前計算が挙げられます。これにより、処理速度を2倍以上に向上させることができます。ただし、これには、それらを保存するために必要なRAM容量の増加という代償が伴います。
下記の表に示されている推定値はすべて、既存の0.35μm CMOS技術に基づいています。
1999年、ニールス・ファーガソンは、2256ステップを使用して256ビット鍵バージョンの16ラウンドのうち6ラウンドを破る不可能な差分攻撃を発表した。[ 2 ]
2000年現在これまで発表されたTwofishブロック暗号の最良の暗号解読は、16ラウンドの完全版の切り詰め差分暗号解読である。この論文では、切り詰め差分の確率はブロックあたり2 −57.3であり、良い切り詰め差分のペアを見つけるには、およそ2 51の選択平文(32ペタバイト相当のデータ)が必要になると主張している。[ 1 ]
ブルース・シュナイアーは2005年のブログ記事で、この論文は完全な暗号解読攻撃を提示したのではなく、いくつかの仮説的な差異特性を提示しただけだと答えた。「しかし、理論的な観点から見ても、Twofishは破られていない。2000年に発表されて以来、これらの結果に対する拡張は行われていない。」[ 6 ]
{{cite web}}: CS1メンテナンス: アーカイブサービスは非推奨になりました (リンク)