本記事はAIを利用して作成した技術解説・実装例です。掲載するコードや手順は一次情報を基に構成していますが、筆者による実機での動作確認は行っていません。環境やバージョンによって動作が異なる場合があります。 、RFC 10032で規定されている高速な認証付き暗号(AEAD)アルゴリズム「AEGIS」ファミリーについて、公式の仕様書に基づき、その構成要素や処理の仕組みを安全かつ実用的に整理します。AEGIS-128LやAEGIS-256などの各バリアントが持つ特徴、内部状態の更新方法、そしてメッセージの暗号化・復号プロセスを詳しく確認します。
1. AEGISファミリーの概要と位置づけ
AEGISは、CAESARコンペティションにおいて高パフォーマンス用途向けに選出されたAEADアルゴリズムのファミリーです。Crypto Forum Research Group(CFRG)の成果物として、RFC 10032に情報提供目的(Informational)としてまとめられています。
AES-GCMなどの既存の構成と比較して、AES命令を搭載したCPU上で優れたパフォーマンスを発揮するほか、AES命令を使用しないソフトウェア実装でも高速に動作する特性を持っています。また、AEGIS-256やAEGIS-256Xなどでは、ランダムなnonceを実用的な制限なしに安全に選択できる点も特徴です。
一次情報では、以下の主要なバリアントが規定されています。
AEGIS-128L: 128ビット鍵、128ビットnonce、1024ビット状態(8個の128ビットブロック)、128または256ビットの認証タグを持ち、256ビットの入力ブロックを処理する。
AEGIS-256: 256ビット鍵、256ビットnonce、768ビット状態(6個の128ビットブロック)、128または256ビットの認証タグを持ち、128ビットの入力ブロックを処理する。
AEGIS-128X: AEGIS-128Lをベースにし、大規模なベクトルレジスタとベクトルAES命令を持つCPUに特化したモード。
AEGIS-256X: AEGIS-256をベースにし、大規模なベクトルレジスタとベクトルAES命令を持つCPUに特化したモード。
すべてのバリアントは逆関数を持たない(inverse-free)構造であり、AESの暗号化ラウンド関数(AESRound)を組み合わせて構築されています。
2. プリミティブと共通定義
RFC 10032では、アルゴリズムの仕様を記述するために、いくつかの基本的な演算子や関数が定義されています。
{}: 空のビット配列|x|: $x$ のビット長a ^ b: ビット単位の排他的論理和(XOR)a & b: ビット単位の論理積(AND)a || b: 連結LE64(x): 符号なし64ビット整数 $x$ のリトルエンディアンエンコーディングZeros(n): すべて0の $n$ ビット配列ZeroPad(x, n): 長さが $n$ ビットの倍数になるようにゼロパディングを追加する関数AESRound(in, rk):SubBytes、ShiftRows、MixColumns、AddRoundKeyを組み合わせた単一のAESラウンド関数
また、定数ブロックとして、16バイトのヘキサデシマル値から構成される C0 および C1 が定義されています。
3. AEGIS-128Lの構造と内部関数
AEGIS-128Lは、1024ビットの状態を保持し、8つの128ビットブロック ${S_0, \dots, S_7}$ によって構成されます。ここでは主要な内部関数の役割を整理します。
flowchart TD
Init["Init(key, nonce)"] --> Absorb["Absorb(ai) <br/> 関連データの吸収"]
Absorb --> EncDec["Enc(xi) / Dec(ci) <br/> ブロックの暗号化・復号"]
EncDec --> Finalize["Finalize(ad_len, msg_len) <br/> 認証タグ生成"]
初期化関数(Init)
Init(key, nonce) は、与えられた key と nonce を用いて初期状態 ${S_0, \dots, S_7}$ を構築します。鍵とnonceのXORや定数ブロック C0、C1 を初期状態に配置した後、Update 関数を10回繰り返して攪拌を行います。
状態更新関数(Update)
Update(M0, M1) は、AEGIS-128Lのコアとなる状態更新関数です。2つの128ビット値(またはブロック)を受け取り、AESラウンド関数を適用しながら8つの状態ブロック ${S_0, \dots, S_7}$ を順次更新します。
暗号化と復号(Enc / Dec)
Encrypt および Decrypt プロセスでは、パディングされた関連データ(associated data)を Absorb 関数で順次吸収した後、メッセージブロック単位で暗号化(Enc)または復号(Dec)を行います。最後尾の不完全なブロックに対しては DecPartial が適用されます。
タグ生成関数(Finalize)
Finalize(ad_len_bits, msg_len_bits) は、関連データとメッセージの長さを組み込んでタグを計算します。タグ長が128ビットの場合と256ビットの場合で出力形式が変わり、データの改ざん検知に使用されます。
4. セキュリティ上の特性と設計上の注意点
RFC 10032では、従来のAEADスキーム(AES-GCMなど)で指摘されていた問題点に対する耐性や、AEGIS特有のセキュリティ上の利点が説明されています。
パーティションオラクル攻撃への耐性: AES-GCMなどの一部の方式では、複数の異なる鍵で正常に復号できる暗号文を攻撃者が生成できる場合があり、パスワード探索などの効率化に利用されることがあります。一方、AEGISにおいて異なる鍵やnonceのペアを見つけ出す困難さはタグサイズに依存し、128ビットタグや256ビットタグによって十分なセキュリティが確保されます。
状態漏洩の影響軽減: AESベースの多くの構築とは異なり、内部状態の一部が漏洩した場合でも、鍵や過去の状態が直接漏洩しない構造になっています。
エフェメラル鍵の保護: AEGISの鍵は初期化関数の実行後には保持する必要がなく、鍵スケジュールも存在しません。これにより、データ暗号化・復号の前にメモリからエフェメラル鍵を消去することができ、コールドブート攻撃のリスクを軽減します。
Nonce再利用の禁止: セキュリティ上の必須事項として、同一の鍵に対してnonceを再利用してはなりません。nonceの再利用は内部状態の回復を許してしまうため、厳格な管理が求められます。
5. AEGIS-256の仕様差分
AEGIS-256は、より大きなセキュリティマージンを求める用途向けに設計されたバリアントです。AEGIS-128Lとの主な違いは以下の通りです。
状態サイズ: 768ビット(6個の128ビットブロック ${S_0, \dots, S_5}$)
鍵長およびNonce長: 32バイト(256ビット)
入力ブロックサイズ: 128ビット
パラメータや利用上の制約(RFC 5116に準拠したP_MAXやA_MAXなど)の枠組みは共通しつつも、内部のブロック長や状態の配列サイズが異なるため、実装時は対象とするアルゴリズムの仕様に厳密に従う必要があります。
6. まとめ
本記事では、RFC 10032で規定されているAEGIS認証付き暗号アルゴリズムの仕様と構造について、一次情報に基づき整理しました。
主なポイント:
AEGISファミリーは高パフォーマンス用途向けに設計された逆関数を持たないAESベースのAEADアルゴリズムである。
AEGIS-128L(1024ビット状態)とAEGIS-256(768ビット状態)をはじめとする複数のバリアントが存在する。
鍵スケジュールが存在せず、初期化後に鍵を即座に消去可能なため、コールドブート攻撃対策に寄与する。
同一鍵におけるnonceの再利用は厳禁であり、安全な乱数生成または管理が必要不可欠である。
本記事の内容はすべて公式の規格文書に基づく調査・解説であり、実機での動作確認は行っていない。
