TEA/XTEA/XXTEA暗号化・復号化
Tiny Encryption Algorithmファミリー - 軽量対称ブロック暗号
セキュリティに関する注意
TEA/XTEA/XXTEAは主に組み込みシステムやゲームで使用される軽量暗号です。高セキュリティアプリケーションには代わりにAESを使用してください。
TEAファミリーについて
TEA(Tiny Encryption Algorithm)は、1994年にケンブリッジ大学コンピュータ研究所のDavid WheelerとRoger Needhamによって設計されました。最大の特徴は極限的な簡潔さです。暗号化ループはCコードわずか10行以内で記述でき、32回のフィステル式二重ラウンドを通じて64ビットブロック暗号セキュリティを実現します。マジック定数δ = 0x9E3779B9(黄金比φ × 2³²に近い値)を各ラウンドの累積和に加算することで、弱鍵の不動点を防いでいます。
TEAファミリーは発見された弱点を修正しながら進化しました。XTEA(1997)はTEAの関連鍵攻撃を修正するため鍵スケジュールを再設計し、4つの32ビット鍵語を各ラウンドで異なる順序で使用するようになりました。XXTEA(1998)は全メッセージ・フィステル混合技術により可変長ブロックに対応しました。3つの変種はすべて128ビット鍵とδベースのラウンド定数構造を共有しますが、セキュリティ特性とブロックサイズの柔軟性は大きく異なります。
アルゴリズム比較
| アルゴリズム | ブロックサイズ | 鍵長 | ラウンド数 | セキュリティ |
|---|---|---|---|---|
| TEA | 64 bits | 128 bits | 64 | レガシー |
| XTEA | 64 bits | 128 bits | 64 | 良好 |
| XXTEA | 可変(≥64ビット) | 128 bits | 可変(6+52/n) | 良好 |
主な特徴
- TEAコアループ: わずか7行のC実装 — 量産用途に適した最コンパクトなブロック暗号
- 128ビット鍵を4つの32ビット語に分割; XTEA/XXTEAでは各ラウンドで異なる副鍵の順序を使用
- 32二重ラウンド(計64単一ラウンド演算)、δ = 0x9E3779B9をラウンド定数として使用
- XXTEAは可変長ブロックをサポート — パディングなしで任意サイズのデータを暗号化可能
暗号化モード(TEA/XTEAのみ)
- CBC: 暗号ブロック連鎖 — 各64ビットTEA/XTEAブロックは32二重ラウンドの前に前の暗号文ブロックとXORされます。異なる位置の同一ペイロードが異なる暗号文を生成し、データ構造を保護します。
- ECB: 電子符号表 — 各64ビットブロックが同じ鍵で独立に32二重ラウンド処理されます。同一の64ビット平文ブロックは常に同一の暗号文を生成し、データパターンが漏洩します。単一ブロックの暗号化以外には推奨しません。
- CFB: 暗号フィードバック — TEA/XTEAが鍵ストリームジェネレータとして機能し、前の暗号文を暗号化してXORします。64ビットブロック暗号をバイト単位のストリーム暗号に変換し、任意長のゲームデータストリームに適しています。
- OFB: 出力フィードバック — IVを繰り返しTEA/XTEA暗号化することで平文と独立に鍵ストリームを生成します。エラー非伝播特性により、1バイトの破損は1バイトの平文のみに影響します。エラー拡散を防ぐ必要がある組み込みテレメトリに適しています。
- RAW: 生ブロック - チェーンモードなしの直接単一ブロック暗号化。IVは不要です。
セキュリティに関する考慮事項
- 元のTEA: David Wagner(1997)が関連鍵攻撃を実証。攻撃者が関連鍵を選択できる状況ではTEAを使用しないこと — 新規実装ではXTEAまたはXXTEAを使用してください
- XTEAはTEAの関連鍵脆弱性を修正しましたが、64ビットのブロックサイズにより安全限界は依然として2³²ブロック(約32GB)に制限されます
- XXTEAの全メッセージ混合は正確性のために少なくとも2パスが必要です。非常に小さなブロック(≤2ワード)では混合ステップが減少してセキュリティが低下します — 短いデータは少なくとも3ワードにパディングしてください
- 3つのTEA変種はいずれも新しい汎用アプリケーションには不向きです。現代の組み込みシステムにはChaCha20またはAES-128-CTRを推奨。コードサイズが最優先の超制約環境またはレガシー形式互換用途のみTEAファミリーを使用してください
一般的な使用例
- XboxおよびXbox 360ゲームセーブデータ保護: MicrosoftオリジナルXboxがXTEAを内部使用してコンソールセーブデータへの署名と検証を実施、メモリーカード経由の改ざんを防止
- QQインスタントメッセンジャー: テンセントの初期QQプロトコルがXTEA改良版を使用してクライアントとサーバー間のセッションデータを暗号化(QQプロトコルのオープンソース逆向分析で文書化済み)
- Cocos2d-xとUnityゲームアセット暗号化: 極小なコードフットプリントから、モバイル精簡ビルドのリソースファイル(テクスチャ、音声、スクリプト)の難読化にゲームエンジンで広く採用
- ROMがキロバイト単位のマイコンとFPGA実装: TEAの7行コアループはARM Thumb-2機械語で100バイト未満にコンパイルされ、Flashが極めて限られたMCUでも実行可能