AESラウンド関数の可視化 | |
| 一般的な | |
|---|---|
| デザイナー | ジョアン・デイメン、ヴィンセント・ライメン |
| 初版 | 1998 |
| 由来 | 四角 |
| 後継者 | アヌビス、グラン・クリュ、カリーナ |
| 認証 | AES優勝者、CRYPTREC、NESSIE、NSA |
| 暗号の詳細 | |
| キーサイズ | 128、192、または256ビット[注1 ] |
| ブロックサイズ | 128ビット[注2 ] |
| 構造 | 置換順列ネットワーク |
| ラウンド | 10、12、または14(キーのサイズによって異なります) |
| 最高の公開暗号解読 | |
| 完全なブルートフォース攻撃よりも計算速度が速い攻撃が公開されているが、2023年時点では計算的に実現可能なものはない。[ 1 ] AES-128の場合、バイクリーク攻撃を用いることで、鍵は2 126.1の計算複雑度で復元できます。AES-192とAES-256に対するバイクリーク攻撃の場合、計算複雑度はそれぞれ2 189.7と2 254.4です。関連鍵攻撃は、 AES-192とAES-256をそれぞれ2 99.5と2 176の計算複雑度で解読できます。 [ 2 ] 2009年には 別の攻撃がブログ[ 3 ]に掲載され、プレプリント[ 4 ]として公開されました。この攻撃はAES-256に対するもので、2つの関連キーのみを使用し、 9ラウンドバージョンの256ビットキー全体を復元するのに2の39乗、より強力なタイプの関連サブキー攻撃を使用した10ラウンドバージョンでは2の45乗、 11ラウンドバージョンでは2の70乗で済みます。 | |
高度暗号化規格(AES )は、元の名前であるラインダール(オランダ語の発音:[ˈrɛindaːl])[ 5 ]としても知られ、 2001年に米国国立標準技術研究所(NIST)によって制定された電子データの暗号化の仕様です。 [ 6 ]
AESは、ベルギーの暗号学者Joan DaemenとVincent Rijmenによって開発されたRijndaelブロック暗号[ 5 ]の派生型であり、 AES選定プロセス中にNISTに提案[ 7 ]を提出しました[ 8 ]。Rijndaelは、異なる鍵とブロックサイズを持つ暗号ファミリーです。AESでは、NISTはRijndaelファミリーから3つのメンバーを選択しました。それぞれブロックサイズは128ビットですが、鍵長は128ビット、192ビット、256ビットの3つの異なる鍵長を持ちます。
AESは米国政府によって採用されています。これは、 1977年に発表されたデータ暗号化規格(DES)[ 9 ]に取って代わるものです。AESで記述されているアルゴリズムは対称鍵アルゴリズムであり、データの暗号化と復号化に同じ鍵が使用されます。
アメリカでは、AESは2001年11月26日にNISTによってUS FIPS PUB 197(FIPS 197)として発表されました。 [ 6 ]この発表は、15の競合する設計が提示され評価された5年間の標準化プロセスを経て、Rijndael暗号が最も適したものとして選ばれたことを受けて行われました。
AESはISO / IEC 18033-3規格に含まれています。AESは、米国商務長官ドナルド・エバンスの承認を受け、2002年5月26日に米国連邦政府規格として発効しました。AESは様々な暗号化パッケージで利用可能であり、米国国家安全保障局(NSA)が承認した暗号モジュールで使用される場合、NSAが極秘情報に使用することを承認した、初めて(そして唯一)公開されている暗号です。
Advanced Encryption Standard (AES) は、次のそれぞれで定義されています。
AESは置換-順列ネットワークとして知られる設計原理に基づいており、ソフトウェアとハードウェアの両方で効率的である。[ 11 ]前身のDESとは異なり、AESはFeistelネットワークを使用しません。AESはRijndaelの変種であり、ブロックサイズは128ビットに固定され、キーサイズは128、192、または256ビットです。対照的に、Rijndael自体は、ブロックサイズとキーサイズが32ビットの任意の倍数で指定され、最小128ビット、最大256ビットです。ほとんどのAES計算は特定の有限体で行われます。
AESは、4×4の列優先順序の16バイト配列b 0、b 1、…、b 15を状態と呼ぶ。[注3 ]
AES暗号で使用される鍵サイズは、入力(平文)を最終出力(暗号文)に変換する変換ラウンド数を指定します。ラウンド数は以下のとおりです。
各ラウンドは複数の処理ステップで構成されており、その中には暗号化鍵自体に依存するステップも含まれます。一連の逆ラウンドを適用することで、同じ暗号化鍵を使用して暗号文を元の平文に戻します。

SubBytesステップでは、状態配列の各バイトa i,jが、8 ビットの置換ボックスを使用してSubByte S ( a i,j )に置き換えられます。ラウンド 0 より前では、状態配列は単なるプレーンテキスト/入力です。この操作により、暗号に非線形性がもたらされます。使用される S ボックスは、優れた非線形特性を持つことが知られているGF (2 8 )上の逆関数から導出されます。単純な代数特性に基づく攻撃を回避するために、S ボックスは逆関数と可逆アフィン変換を組み合わせて構築されます。また、S ボックスは固定点 (つまり乱れ) を回避するように選択されます (つまりS ( a i,j ) ≠ a i,j )。また、反対の固定点 (つまりS ( a i,j ) ⊕ a i,j ≠ FF 16 )も回避されます。復号化の実行中は、InvSubBytesステップ ( SubBytesの逆) が使用されます。このステップでは、最初にアフィン変換の逆変換を取り、次に乗法逆変換を見つける必要があります。

ShiftRowsステップは状態の行に対して作用し、各行のバイトを特定のオフセットだけ巡回的にシフトします。AESの場合、最初の行は変更されません。2行目の各バイトは1つ左にシフトされます。同様に、3行目と4行目はそれぞれ2と3のオフセットだけシフトされます。[注4 ]このように、 ShiftRowsステップの出力状態の各列は、入力状態の各列のバイトで構成されます。このステップの重要性は、列が独立して暗号化されるのを防ぐことです。そうしないと、AESは4つの独立したブロック暗号に退化します。

MixColumnsステップでは、状態の各列の4バイトが可逆線形変換を用いて結合されます。MixColumns関数は4バイトを入力として受け取り、4バイトを出力します。各入力バイトは4つの出力バイトすべてに影響を与えます。ShiftRowsと組み合わせることで、 MixColumnsは暗号の 拡散を実現します。
この操作中、各列は固定行列を使用して変換されます (行列の左乗算により、状態の列の新しい値が得られます)。
行列の乗算は、各要素の乗算と加算から構成されます。各要素は、x 7 次多項式の係数として扱われるバイトです。加算は単純にXOR演算です。乗算は、既約多項式x 8 + x 4 + x 3 + x + 1を法として行われます。ビットごとに処理する場合、シフト後の値が FF 16より大きい場合は、シフト後に1B 16との条件付きXOR演算を実行する必要があります(オーバーフローは生成多項式の減算によって補正する必要があります)。これらは、GF(2 8 )における通常の乗算の特殊なケースです。
より一般的な意味では、各列はGF(2 8 )上の多項式として扱われ、固定多項式を法として乗算されます。係数は、GF(2 8 )[ x ]のビット多項式の2進表現の16進数で表示されます。MixColumnsステップは、有限体GF( 2 8 )上の特定のMDS行列による乗算と見なすこともできます。このプロセスの詳細については、記事Rijndael MixColumnsを参照してください。

AddRoundKeyステップでは、サブキーが状態と結合されます。各ラウンドにおいて、ラインダールの鍵スケジュールを用いて主鍵からサブキーが導出されます。各サブキーは状態と同じサイズです。サブキーは、状態とサブキーの対応するバイトをビット単位のXORで結合することで追加されます。
32ビット以上のワードを持つシステムでは、SubBytesステップとShiftRowsステップをMixColumnsステップと組み合わせて、一連のテーブル検索に変換することで、この暗号の実行を高速化できます。これには、256エントリの32ビットテーブルが4つ(合計4096バイト)必要です。その後、16回のテーブル検索操作と12回の32ビット排他的論理和演算でラウンドを実行し、その後AddRoundKeyステップで4回の32ビット排他的論理和演算を実行します。[ 12 ] あるいは、テーブル検索操作を1つの256エントリの32ビットテーブル(1024バイト)で実行し、その後に循環回転操作を実行することもできます。
バイト指向のアプローチを使用すると、SubBytes、ShiftRows、MixColumnsの各ステップを1つのラウンド操作に組み合わせることができます。[ 13 ]
国家安全保障局(NSA)は、ラインダールを含むすべてのAES最終候補を審査し、いずれも米国政府の非機密データに対して十分なセキュリティを備えていると述べました。2003年6月、米国政府はAESが機密情報の保護に使用できると発表しました。
AESアルゴリズムのすべての鍵長(128、192、256)の設計と強度は、SECRETレベルまでの機密情報を保護するのに十分です。TOP SECRET情報には、192または256の鍵長を使用する必要があります。国家安全保障システムおよび/または情報の保護を目的とした製品へのAESの実装は、その取得および使用前にNSAによる審査と認証を受ける必要があります。[ 14 ]
AES には、128 ビット キーの場合は 10 ラウンド、192 ビット キーの場合は 12 ラウンド、256 ビット キーの場合は 14 ラウンドがあります。
暗号学者にとって、暗号の「解読」とは、ブルートフォース攻撃 (つまり、考えられる鍵ごとに1回ずつ試行的に解読する攻撃)よりも高速な攻撃を指します。したがって、解読には、現在の技術では実現不可能な結果が含まれる可能性があります。非現実的ではあるものの、理論的な解読は脆弱性のパターンに関する洞察を提供する場合があります。広く実装されているブロック暗号アルゴリズムに対する、これまでに成功した最大のブルートフォース攻撃は、2006年にdistributed.netが64ビットRC5鍵に対して行ったものです。 [ 15 ]
鍵空間は鍵長が1ビット増えるごとに2倍に増加します。また、鍵のあらゆる値が等確率で出現する場合、鍵長が1ビット増えるごとに、平均総当たり鍵探索時間が2倍になります。これは、総当たり鍵探索の労力が鍵長に比例して指数関数的に増加することを意味します。鍵長自体は攻撃に対する安全性を意味するものではありません。非常に長い鍵を持つ暗号の中には、脆弱性があることが判明しているものもあります。
AESはかなり単純な代数フレームワークを持っています。[ 16 ] 2002年に、ニコラス・クルトワとヨゼフ・ピエプジクによって「 XSL攻撃」と呼ばれる理論的な攻撃が発表されました。これは、非線形コンポーネントの複雑さの低さなどにより、AESアルゴリズムの弱点を指摘するものでした。[ 17 ]その後、他の論文で、当初提示された攻撃は実行不可能であることが示されました。ブロック暗号に対するXSL攻撃を参照してください。
AES選定プロセスにおいて、競合アルゴリズムの開発者たちは、ラインダールのアルゴリズムについて「セキュリティが極めて重要なアプリケーションでの使用を懸念している」と記していた。[ 18 ]しかし、2000年10月、AES選定プロセスの終了時に、競合アルゴリズムTwofishの開発者であるブルース・シュナイアーは、ラインダールに対する学術的な攻撃がいつか成功するだろうとは思うものの、「ラインダールのトラフィックを解読できるような攻撃が発見されるとは思えない」と記していた。[ 19 ]
2006年までに最もよく知られた攻撃は、128ビットキーの場合は7ラウンド、192ビットキーの場合は8ラウンド、256ビットキーの場合は9ラウンドでした。[ 20 ]
2009 年 5 月まで、完全な AES に対して成功した公開済みの攻撃は、特定の実装に対するサイドチャネル攻撃のみでした。2009 年には、 AES のキー スケジュールの単純さを悪用し、複雑度が 2 119の新しい関連キー攻撃が発見されました。2009 年 12 月には、複雑度は 2 99.5に改善されました。[ 2 ]これは、2009 年初めにAlex Biryukov、Dmitry Khovratovich 、 Ivica Nikolićによって発見された攻撃の続編であり、2 35 個のキーのうち 1 つに対して複雑度が 2 96でした。 [ 21 ]ただし、関連キー攻撃は、適切に設計された暗号化プロトコルでは問題になりません。適切に設計されたプロトコル (つまり、実装ソフトウェア) は、基本的に攻撃者が関連性に基づいてキーを選択する手段を制限することによって、関連キーを許可しないように配慮するからです。
別の攻撃は、2009 年 7 月 30 日に Bruce Schneier [ 3 ]によってブログに投稿され 、 2009 年 8 月 3 日にプレプリント[ 22 ]としてリリースされました。Alex Biryukov、 Orr Dunkelman、Nathan Keller、Dmitry Khovratovich、およびAdi Shamirによるこの新しい攻撃は、 2 つの関連キーのみを使用し、9 ラウンド バージョンの完全な 256 ビット キーを復元するのに2 の39 倍の時間、より強力なタイプの関連サブキー攻撃を使用した 10 ラウンド バージョンでは2 の45倍の時間、11 ラウンド バージョンでは 2 の70倍の時間しかかからない AES-256 に対するものです。256 ビット AES は 14 ラウンドを使用するため、これらの攻撃は完全な AES に対しては効果がありません。
より強力な関連鍵を用いたこれらの攻撃の実用性は批判されており、[ 23 ]例えば、2010年にVincent Rijmenが執筆したAES-128に対する選択鍵関係中間攻撃に関する論文[ 24 ]などによって批判されている。
2009年11月、 AES-128の8ラウンド短縮版に対する最初の既知鍵識別攻撃がプレプリントとして公開されました。 [ 25 ] この既知鍵識別攻撃は、AESのような順列に対するリバウンド攻撃、または中間開始攻撃の改良版であり、連続する2ラウンドの順列をいわゆるスーパーSボックスの適用と見なします。この攻撃は、時間計算量が2 48、メモリ計算量が2 32のAES-128の8ラウンド版で有効です。128ビットAESは10ラウンドを使用するため、この攻撃は完全なAES-128には効果がありません。
完全なAESに対する最初の鍵回復攻撃は、 Andrey Bogdanov、Dmitry Khovratovich、Christian Rechbergerによって2011年に発表されました。[ 26 ]この攻撃はバイクリーク攻撃であり、ブルートフォース攻撃よりも約4倍高速です。AES -128の鍵を回復するには、 2 126.2 回の操作が必要です。AES-192とAES-256では、それぞれ2 190.2 回と2 254.6 回の操作が必要です。この結果は、 Biaoshuai TaoとHongjun Wuが2015年に発表した論文で、AES-128では2 126.0回、AES-192では2 189.9回、AES-256では2 254.3回にさらに改善され、 [ 27 ]これらはAESに対する鍵回復攻撃における現在の最高の結果です。
これは非常に小さな利点です。なぜなら、128ビットではなく126ビットの鍵でも、現在のハードウェアでブルートフォース攻撃を行うには数十億年かかるからです。また、著者らは、128ビット鍵を用いたAESに対する彼らの手法を用いた最良の攻撃には、2の88乗ビットのデータを格納する必要があると計算しています。これは約38兆テラバイトのデータに相当し、これは2016年に地球上のすべてのコンピューターに格納されたデータの総量よりも大きいです。[ 28 ]その後、2015年の論文で空間計算量は2の56乗ビットに改善され、[ 27 ]これは9007テラバイトに相当します(ただし、時間計算量は約2の126乗のままです)。
スノーデン文書によると、NSAはタウ統計に基づく暗号攻撃がAESを解読するのに役立つかどうかを研究している。[ 29 ]
現時点では、正しく実装されていれば、キーを知らない人が AES で暗号化されたデータを読み取ることができる実用的な攻撃は知られていません。
サイドチャネル攻撃は暗号をブラックボックスとして攻撃するものではないため、古典的な文脈で定義される暗号のセキュリティとは関係ありませんが、実用上は重要です。これらの攻撃は、ハードウェアまたはソフトウェアシステム上の暗号実装を攻撃し、意図せずデータを漏洩させます。AESの様々な実装に対して、このような攻撃がいくつか知られています。
2005年4月、D. J. バーンスタインは、 OpenSSLのAES暗号化を使用したカスタムサーバーを破るために使用したキャッシュタイミング攻撃を発表しました。 [ 30 ]この攻撃には2億以上の選択された平文が必要でした。[ 31 ]このカスタムサーバーは、可能な限り多くのタイミング情報を提供するように設計されていました(サーバーは暗号化操作に要したマシンサイクル数を報告します)。しかし、バーンスタインが指摘したように、「サーバーのタイムスタンプの精度を下げたり、サーバーの応答からタイムスタンプを削除したりしても、攻撃を阻止することはできません。クライアントは単にローカルクロックに基づく往復タイミングを使用し、より多くのサンプルを平均化することでノイズの増加を補うだけです。」[ 30 ]
2005年10月、Dag Arne Osvik、Adi Shamir、Eran Tromerは、dm-crypt OpenSSLとLinuxのパーティション暗号化機能に見られるAESの実装に対する複数のキャッシュタイミング攻撃を実証する論文を発表しました。 [ 32 ]ある攻撃では、わずか800回の暗号化操作(合計65ミリ秒)でAES鍵全体を取得することができました。この攻撃では、攻撃者がAESを実行しているシステムまたはプラットフォーム上でプログラムを実行できることが条件となります。
2009年12月には、差分障害解析を用いて2^ 32の複雑さで鍵の回復を可能にする、いくつかのハードウェア実装に対する攻撃が公開された。[ 33 ]
2010年11月、エンドレ・バンガーター、デイヴィッド・グラシュ、ステファン・クレンは、暗号文や平文を必要とせずにAES-128から秘密鍵を「ほぼリアルタイム」で復元する実用的なアプローチを論文で発表しました。このアプローチは、OpenSSLなどの圧縮テーブルを使用するAES-128実装でも機能します。[ 34 ]以前の攻撃と同様に、この攻撃では、AES暗号化を実行するシステム上で権限のないコードを実行する能力が必要ですが、これはルートアカウントを乗っ取るよりもはるかに簡単にマルウェア感染によって達成される可能性があります。[ 35 ]
2016年3月、C.アショククマール、ラヴィ・プラカッシュ・ギリ、バーナード・メネゼスは、わずか6〜7ブロックの平文/暗号文で128ビットのAESキー全体を復元できるAES実装に対するサイドチャネル攻撃を発表しました。これは、100〜100万回の暗号化を必要とした以前の研究に比べて大幅な改善です。[ 36 ]提案された攻撃には標準的なユーザー権限と1分未満で実行されるキー取得アルゴリズムが必要です。
現代のCPUの多くはAES用のハードウェア命令を内蔵しており、タイミング関連のサイドチャネル攻撃から保護します。[ 37 ] [ 38 ]
AES-256は、128ビットのセキュリティで従来の非量子攻撃に対する耐性を持つAES-128と同等の量子耐性を持つため、量子耐性があると考えられています。AES-192とAES-128はキーサイズが小さいため、量子耐性があるとは考えられていません。AES-192は量子攻撃に対して96ビットの強度を持ち、AES-128は量子攻撃に対して64ビットの強度しか持たないため、どちらも安全ではありません。[ 39 ] [ 40 ]
暗号モジュール検証プログラム(CMVP)は、米国政府国立標準技術研究所(NIST)コンピュータセキュリティ部門とカナダ政府通信保安局(CSE)が共同で運営しています。米国政府は、機密情報(SBU)以上の機密扱いと分類されたすべてのデータの暗号化に、 NIST FIPS 140-2に準拠した暗号モジュールの使用を義務付けています。NSTISSP #11「情報取得保証に関する国家政策」には、「機密情報の保護を目的とした暗号化製品はNSAの認証を受け、機密情報の保護を目的とした暗号化製品はNIST FIPS 140-2に準拠した認証を受ける。」と記載されています。[ 41 ]
カナダ政府はまた、省庁の非機密アプリケーションにおいて FIPS 140認定の暗号モジュールの使用を推奨しています。
NIST 197(「FIPS 197」)はAESアルゴリズムを網羅した唯一の文書ですが、ベンダーは通常、FIPS 140に基づいてCMVPに連絡し、複数のアルゴリズム(トリプルDESやSHA1など)の同時検証を依頼します。そのため、FIPS 197で唯一検証された暗号モジュールを見つけることは稀であり、NIST自身も通常、公開WebサイトでFIPS 197検証済みモジュールを個別に掲載することはありません。その代わりに、FIPS 197検証は通常、FIPS 140検証済み暗号モジュールのリストに「FIPS承認済み:AES」という表記(具体的なFIPS 197証明書番号付き)で記載されます。
暗号アルゴリズム検証プログラム(CAVP)[ 42 ]は、AESアルゴリズムの正しい実装を独立して検証することを可能にします。検証に合格すると、NISTの検証ページに掲載されます。[ 43 ]このテストは、FIPS 140-2モジュール検証の前提条件です。しかし、CAVP検証に合格したからといって、そのアルゴリズムを実装した暗号モジュールが安全であることを意味するものではありません。FIPS 140-2の検証またはNSAによる特定の承認を受けていない暗号モジュールは、米国政府によって安全であるとはみなされず、政府データの保護に使用することはできません。[ 41 ]
FIPS 140-2の検証は、技術的にも財政的にも困難を伴います。[ 44 ]標準化された一連のテストに加え、数週間かけて合格しなければならないソースコードレビューの要素があります。認定された研究所でこれらのテストを実施するには、かなりの費用がかかる可能性があり(例えば、 3万ドルをはるかに超える)[ 44 ]、これには検証用のモジュールの作成、テスト、文書化、準備にかかる時間は含まれていません。検証後、モジュールが何らかの変更を受けた場合は、再提出して再評価を受ける必要があります。これは、セキュリティ機能に変更がない場合の単純な書類の更新から、変更によってセキュリティ機能が影響を受ける場合のより大規模な再テストまでさまざまです。
テストベクトルとは、与えられた入力と鍵に対する既知の暗号の集合です。NISTは、AESテストベクトルのリファレンスをAES既知解テスト(KAT)ベクトルとして配布しています。[注 5 ]
AES の選択基準の一つは、高速性と RAM 要件の低さでした。選択されたアルゴリズムである AES は、8 ビットスマートカードから高性能コンピュータまで、幅広いハードウェアで優れたパフォーマンスを発揮しました。
Pentium Proでは、AES暗号化には1バイトあたり18クロックサイクル(cpb)が必要であり、[ 45 ]これは約11 MiB/秒200MHzプロセッサ。
AES-NI命令セット拡張をサポートするIntel CoreおよびAMD Ryzen CPUでは、スループットは数GiB/秒になる可能性がある。[ 46 ] Intel Westmere CPUでは、AES-NIを使用したAES暗号化には約AES-128の場合は1.3 cpb、AES-256の場合は1.8cpb 。 [ 47 ]