著者:田中麻維
大手電機メーカー系のSierに入社後、インフラエンジニアとしてLinuxサーバーの構築や保守・運用、ソフトウェアの開発業務を経験。アイティベル入社後は、IT領域の執筆などを行う。
さまざまな暗号化プロトコルがありますが、中でもAESはDESの脆弱性を改良するために生み出されたプロトコルです。現在、無線LANやSSL/TLS、ファイルの暗号化など幅広い用途で使用されています。
AESはブロック暗号化プロトコルで、さらに細かく分けるとAES128、AES192、AES256の3種類です。本記事ではAESの概要、AESの仕組み、AES以前に使用されていたDESとの比較、AESへの攻撃手法と対応策、実装例と運用のポイントを解説します。
1. AESとは
AES(Advanced Encryption Standard)は有線LANや無線LAN、SSL/TLS、ファイル暗号化など、あらゆる場面で使用される共通鍵暗号化アルゴリズムです。アメリカ国立標準技術研究所(NIST)によって標準アルゴリズムとして認証されており、DES(Data Encryption Standard)の後継として開発されました。
DESのほうが共通鍵暗号化アルゴリズムとして早く登場したので、さまざまな場面で使用されています。しかし、使用される中で、さまざまな脆弱性が判明しました。そこで、DESの脆弱性を克服するために開発されたのがAESです。
AESの定義
AESはブロック暗号と呼ばれる方式を採用しています。ブロック暗号とは、暗号化する対象をブロックごとに区切り、個別に暗号化する方式です。AESは鍵長によってそれぞれAES128、AES192、AES256の3種類あり、それぞれ128bit、192bit、256bitの鍵長があります。
なお、令和6年5月(2024年5月)現在、AESは共通鍵暗号アルゴリズムの中でCRYPTRECの評価基準を満たしている数少ないアルゴリズムのひとつとされています。RC4、DESは暗号化リストに含まれていないため、注意が必要です。
CRYPTRECは、日本政府が「電子政府における調達のために参照する暗号のリスト」を提供しています。(※)
※参考:CRYPTREC 電子政府における調達のために参照すべき暗号のリスト(CRYPTREC暗号リスト) 共通鍵暗号
なお、AES256の詳細は以下の記事で解説しています。
AESとDESとの違い
AESとDESの最大の違いは鍵長です。DESの鍵長は56bitでAESと比べて極めて短く、これはDESの脆弱性でもあります。鍵長が短いことは、暗号データの解析が容易にできることを意味します。さらにブロック長も短く、DESのブロック長はAESに比べて半分の64bitです。
一方、AESとDESは両者とも共通鍵暗号アルゴリズムで、共通鍵を使用して暗号化を行います。
AES以外の暗号化アルゴリズムにはRC4やDES・DES2・DES3といったさまざまなものがあります。主な特徴は以下のとおりです。
暗号化アルゴリズム | 鍵長 | ブロック長 | 使用用途 | セキュリティ強度 |
RC4 | 40~2,048bit | - | 無線LAN | 弱 |
DES/DES2/DES3 | 104bit | 64bit | 無線LAN | 弱 |
AES128 | 128bit | 128bit | 無線LANSSL/TLS | 強 |
AES192 | 192bit | 128bit | 無線LANSSL/TLS | 極強 |
AES256 | 256bit | 128bit | 無線LANSSL/TLS | 極強 |
※RC4はストリーム暗号のためブロック長はありません
RC4
RC4はWEP(Wired Equivalent Privacy)やSSL/TLSといった通信で使用されている暗号化アルゴリズムです。RC4は鍵長を自由に設定できる特徴があります。
1987年に登場し、無線LANのほかSSL/TLSなど数多くの暗号化通信で使用されてきました。しかし、DES同様に簡単に解析されてしまうので、AESの登場により使用されなくなっています。
DES・DES2・DES3
DES・DES2・DES3は古くから使用されてきた暗号化アルゴリズムです。1977年にアメリカ連邦政府標準として採用されました。DESは56bitの鍵長で当初は標準的に使用されてきましたが、徐々に暗号化強度に関する脆弱性が見つかりました。
そこでDESの暗号長を伸ばすために2DES・3DESが開発されました。2DESはDESを2回、3DESはDESを3回繰り返して、鍵長を長くしたものです。しかし、DESには脆弱性が多く、現在では使用されていません。
2. AESの仕組み
AESの仕組みを知るうえで重要な点は、暗号化プロセス、ブロック暗号、鍵長の3点です。本章ではそれぞれの仕組みを解説します。
AESの暗号化プロセス
AESは以下の4ステップによって暗号化します。
- SubBytes
- ShiftRow
- MixColumn
- AddRoundkey
上記の4ステップを1サイクルとして繰り返し、最終的に128bit、192bit、256bitに暗号化するものが、それぞれAES128、AES192、AES256に該当します。
ブロック暗号の仕組み
ブロック暗号はデータをブロック単位に分割して暗号化する方式です。AESはブロック暗号を採用しているため、データを16バイトごとに分割します。分割したデータは暗号化プロセスの手順で暗号化します。
16バイトごとに分割した結果、末尾データが16バイト未満になった場合は任意のデータを付与して16バイトにしなければなりません。この際に実施する任意データの付与をパディングといいます。
ブロック化のメリットは暗号化強度を高められる点です。16バイトごとに区切り、ブロックごとに分割し入れ替えを行ったデータを、さらに暗号化処理するためです。
AESの鍵長
AESの鍵長(キーレングス)は128bit、192bit、256bitで異なります。鍵長とは暗号鍵の長さです。数字が大きければ大きいほど暗号化強度が上がります。
それぞれの鍵長は以下のとおりです。
キーレングス | ビット数 | 2進数 | 10進数 |
AES128 | 128bit | 2の128乗 | 0.3402×1兆の3乗 |
AES192 | 192bit | 2の192乗 | 0.6277×10万×1兆の4乗 |
AES256 | 256bit | 2の256乗 | 0.1157×1兆の6乗 |
※64bitの場合、1.844×10万×1兆 (2の64乗
このようにAES128でも暗号強度は十分高いのですが、鍵長のビット数がセキュリティ強度につながるため、セキュリティ強度を高めたければAES256を選択するとよいでしょう。しかし、AES256を実装する際には考慮すべき点があります。それは、鍵長が長ければ長いほど、処理に時間がかかる点です。
AES256の暗号化と復号化は処理数が多くなるため、処理する機器に負荷がかかります。特にネットワーク機器や認証サーバーで暗号化や復号化を行う場合、ボトルネックになりかねません。そのため、AES192、AES256を使用するかどうかはトラフィック量やデータの処理件数など十分考慮する必要があります。
なお、AESの暗号化は以下の記事で解説しています。
3. AESに対する攻撃手法とその対応策
AESはセキュリティ強度が高いものの、脆弱性が存在します。AESの脆弱性を突いた攻撃でもっともよく知られるのがBiclique攻撃と関連鍵攻撃です。ほかにも、AIを使用した攻撃手法も注目されています。本章ではAESに対する攻撃手法とその対応策を解説します。
Biclique攻撃
鍵の全件数検索(ブルートフォースアタック)を用いて効率的に解析を行う攻撃手法です。しかし、解読に要する計算量が非常に大きいため、CRYPTRECによると安全性に問題がないとの見解が得られています。(※)
※参考:CRYPTREC 安全性評価結果
特段防御する手段はないものの、解読しやすい同じ文字列の繰り返しや辞書にある単語の使用は避けるべきです。
関連鍵攻撃
関連鍵攻撃は異なる鍵の関連性に着目して解析を行う攻撃です。そのため、暗号鍵に関連性を持たせないよう同じフレーズを使用しないといった注意が必要です。鍵の使いまわしはもちろんのこと、鍵同士に関連性を持たせる設定は避けなければなりません。
なお、CRYPTRECでは、AESの関連鍵攻撃において通常使用している方法で問題はないとの見解が得られています。(※)
※参考:CRYPTREC 安全性評価結果
AIを悪用した攻撃
AESは計算量が多く解析に時間がかかりますが、こうした計算をAIに実行させることで解析できるとの実験結果が公表されました。これは岡山大学の研究によるもので、従来のグリッドコンピューティングで分散処理させる方法から、学習データをもとに解析を効率よく行う方法です。(※)
今後はGPUを使用してAIの処理速度を高め、学習データをもとにした予測から短時間での解析を可能とするものと結論づけられています。
対応策としては、暗号鍵を定期的に変更する、AES256のような暗号化処理の回数が多いアルゴリズムを使用する、暗号鍵を厳重に管理するといった方法が有効です。
※参考:岡山大学AIを用いたAES暗号に対する新たな攻撃手法
Padding Oracle攻撃
Padding Oracle攻撃はAESのCBCモードでパディングした際の脆弱性を悪用して平文を求める方法です。暗号化でデータを付与するパディングはある特定の条件でエラーになります。エラーを解析すると暗号化前の平文を求められるため、これは重大な脆弱性です。
CBCモードはほかにも脆弱性があり、TLS1.3で廃止されました。AES-CBCモードを使用しないよう注意が必要です。代わりに、GCM(Galois/Counter Mode)などの使用が推奨されます。
なお、ここでいうOracleは英語で神託を意味し、ソフトウェア企業のOracle社とは関係がありません。
4. AESの実装例
AESの実装例を理解すれば、AESの仕組みや脆弱性をより深く理解し、最適な導入と運用を実現できます。本章ではAESの実装例をいくつか紹介します。
実装例1.プログラムへの実装
暗号化・復号化プログラム、ならびにAPIはAESを使用したものが一般的です。Python、Ruby、Javaといった主要言語にはライブラリも用意されているため、プログラムを初めから開発せずに済むメリットがあります。さらに、サンプルコードも数多く公開されています。
ただし、サンプルコードは信頼性があるのか、脆弱性はないのかといった点を十分に確認し、問題がないことを検証したうえで使用しなければなりません。
実装例2.ハードウェアレベルでの実装
ソフトウェア暗号化の場合、CPUに負荷がかかり、処理が遅くなる欠点があります。さらに暗号化キーがメモリーに記憶されるため漏えいしやすい点もデメリットです。
そこで、暗号化処理専用のハードウェアを実装する方法がとられるようになりました。これをハードウェア暗号化といい、ストレージの場合、自己暗号化ドライブ(SED)としてオンボードチップが実装されています。ストレージ以外ではFPGAやIDカードに導入されているケースもあります。
実装例3.通信暗号化の実装
AESはWPA2、WPA3といった無線LANやSSL/TLSで標準的に使用される暗号化アルゴリズムです。
無線LANでは、セキュリティ規格のWPA2やWPA3で使用する暗号化アルゴリズムとしてAESが採用されています。特に最新のWPA3ではAES256が使用されているため、セキュリティ強度が極めて高いのです。
暗号化通信全般でいえば、AESはSSL/TLSを使用する際の暗号化アルゴリズムとして、さまざまな場面で使用されています。現在TLSは標準的な通信プロトコルとして幅広く利用されているため、AESは標準的な共通鍵暗号化アルゴリズムであるといえます。
5. AESの運用ポイント
AESを導入する際の主なポイントは以下の4つです。
- AES使用時の機器への負荷
- AESで生成した鍵の管理
- AESに関する脆弱性の理解
- AESのバージョンアップ
それぞれの運用ポイントを解説します。
AES使用時の機器への負荷
AESで暗号化、復号化する際には少なからず機器に負荷がかかります。そのため、機器のリソースが処理に耐えうるものか、事前に機器のスペックの確認が重要です。
AESで生成した鍵の管理
AESで生成した鍵は厳重に保管する必要があります。AESはセキュリティ強度が高いものの、第三者が取得できるような状態にすべきではありません。
AESに関する脆弱性の理解
AESの脆弱性は一般企業で対応できないものがほとんどです。しかし、脆弱性について理解し、新たな脆弱性が発見された際にはどのような脆弱性なのか理解することは非常に重要です。
AESのバージョンアップ
AESをバージョンアップする際の考慮ポイントには以下のものがあります。
- 自社のセキュリティポリシー
- AESの該当バージョンで使用できる機器
- アプリケーションの対応状況
- AES使用時の機器にかかる負荷
- AESの技術動向
AES192、AES256を採用する場合は、これらの点を必ず踏まえてバージョンアップを行いましょう。
まとめ
AESは暗号化アルゴリズムで、DESの後継として開発されました。現在、無線LANやSSL/TLSなど幅広く使用されています。AESにはAES128、AES192、AES256の3種類あり、もっとも使用されているのはAES128です。
AESはセキュリティ強度が高いものの脆弱性があり、必ずしも完全ではありません。そのため、脆弱性と対応策の理解が重要です。AES128からAES192、AES256に切り替える場合は、使用機器やアプリケーションの対応状況を鑑みたうえで適切なバージョンを選択する必要があります。AES利用の際には、本記事を参考にして導入を進めてみてください。