プログラミング

プログラミング

PR

AES暗号とは? 仕組み、性能、セキュリティについて解説します

RankRED

RankRed is a place where you can find a lot of interesting and inspiring stuff about science and technology, internet, programming tools and plugins, robots, machines and high tech gadgets, and much more.

本記事は、What Is AES Encryption? Working | Performance | Security
翻訳・再構成したものです。
配信元または著者の許可を得て配信しています。

8,083 views

読了時間 : 約6分13秒

・AES (Advanced Encryption Standard 高度暗号化標準)は現在最も人気があり、広く採用されている対称暗号アルゴリズムです。

・ベルギーの暗号学者、フィンセント・ライメン(Vincent Rijmen)とホァン・ダーメン(Vincent Rijmen)によって開発されました。

・適切に実装されたAES アルゴリズムは、現時点では破ることができません。

 

暗号化は、機密データ保護のための最も一般的な方法です。データの元の意味をマスキングし、許可されたユーザーのみが解読できる形式に変換することで機能します。

 

鍵と呼ばれる数値に基づいて数学関数でデータをスクランブルして暗号化を行います。スクランブルしたデータを解除 (復号) するために、同じ鍵または異なる鍵を用いてプロセスが予約されます。

 

暗号化と復号の両方に同じ鍵が使用されている場合、プロセスは対称です。異なる鍵が使用されている場合、プロセスは非対称です。

 

AES (Advanced Encryption Standard 高度暗号化標準)  は、2001年に米国国立標準技術研究所 (NIST) によって確立された、現在最も人気があり、広く採用されている対称暗号アルゴリズムです。

 

AESは2002年に連邦政府標準の暗号方式として採用されました。現時点では、NSA (国家安全保障局) が極秘プロジェクトのために承認した公的にアクセス可能な唯一の暗号です。

 

AES開発者とその開発理由

 

1990年代半ば、米国政府はさまざまな種類の暗号化技術を分析するプロジェクトを計画しました。実際には、安全かつ効率的に実装できる規格を探していたのです。

 

NISTは、さまざまな研究チームや組織が提出した数百ものアルゴリズムの分析を実施しました。最終的に、2001年後半に2人のベルギーの暗号学者、フィンセント・ライメン (Vincent Rijmen) とホァン・ダーメン (Vincent Rijmen)が提出したRijndaelが新しい共通鍵暗号方式アルゴリズムとして選定されました。

 

Rijndael は暗号化・復号プロセスの効率と信頼性の観点から、ANSI、Java、およびC言語において、厳密な検証が行われました。新しいアルゴリズムはソフトウェア、ハードウェア中心の両システムにおいて主要な攻撃への耐性をもつことが保証されました。

 

新しい暗号化技術が求められた理由

 

1976年、旧米国立標準局(NBS)は、政府の機密データを暗号化するためにデータ暗号化標準(DES: Data Encryption Standard )を採用しました。これはIBMが構築した対称鍵アルゴリズムです。

 

DESは20年間その目的を十分果たしましたが、より強力なプロセッサの登場により、セキュリティ上の懸念が浮上し始めました。

 

実際、ブルートフォース方式を使用して、DESを48時間以内にクラック可能な技術を開発した研究者もいました。そのような攻撃は非常に費用がかかり実装が困難でしたが、DESがすぐに信頼性を失うことを証明するには十分でした。

 

その結果、NISTはDESの後継アルゴリズムの必要性を発表し、1997年にAESの開発に着手しました。これは、世界中で無償使用できることを想定したものでした。

 

AES暗号の機能

 

比較的短い56ビットの鍵を使用するDESとは異なり、AESは128ビット、192ビット、256ビットのいずれかの鍵長を使用してデータを暗号化/復号します。

 

AESは、SPN構造を持つ繰り返し暗号です。入力を特定の出力に置き換える置換や、ビットをシャッフルする転置など、一連の関連付けられた演算が含まれます。

 

アルゴリズムが最初に行うことは、平文(入力データ)を128ビットのブロックに分割することです。すべての計算はバイト(128ビット= 16バイト)で実行されるため、各ブロックサイズを4行4列の行列に変換してさらに処理します。

 

AESアルゴリズムは、次の5つの主要なステップで構成されています。

 

1.ラウンド鍵の追加: 初期キー(暗号化が実際に適用されるときに構造化されたプロセスから派生)が平文のブロックに追加されます。これは、XOR (排他的論理和) と呼ばれる加法暗号化アルゴリズムを適用することによって行われます。

 

2.SubBytes バイト置換: 入力バイトは、事前定義された換字表の検索により置換されます。

 

 

3.ShiftRows 行シフト: 行列の2行目は1バイト左にシフトし、3行目は2バイト左にシフトし、4行目は3バイト左にシフトします。結果の行列には同じ16バイトが含まれますが、相互にシフトされています。

 

 

4.MixColumns 列の混合: アルゴリズムは、特別な数学関数を使用して、行列の各列を変換します。この関数は、元の列を完全に新しいバイトに置き換えます。

 

 

5. AddRoundKey ラウンド鍵の追加: 行列は128ビットと見なされ、128ビットのラウンド鍵とのXORが取られます。

 

 

これで終わりではありません。データはステップ 2、ステップ 3、ステップ 4、ステップ 5 に戻ります。つまり、ステップ 2から5 がループして実行されます。

 

ループ実行回数は、AESの暗号鍵長によって異なります。128ビット鍵を使用するとループは9回実行されます。 192ビット鍵を使用するとループは11回実行されます。 256ビット鍵を使用すると13回実行されます。

 

追加されたラウンド毎に、アルゴリズムが強化されます。ループ終了後、バイト置換、行シフト、ラウンド鍵追加を含む追加ラウンドが1回実行されます。

 

列の混合(MixColumns)はデータを変更せず、計算リソースを不必要に消費し、暗号化の効率が低下するため、この時は除外されています。

 

AESの暗号化と復号に関連するステップ

 

復号

 

復号プロセスは比較的単純です。すべての演算を逆順で実行します。このプロセスは、ラウンド鍵追加、行シフト、バイト置換の逆変換で始まります。

 

そして、各ラウンドで、4つのプロセスが逆順で実行されます。例:

 

・ラウンド鍵逆変換

・列混合逆変換

・行シフト逆変換

・バイト置換逆変換

 

最後に、ラウンド鍵追加の逆変換(暗号化のステップ1)が実行されます。このプロセスが完了すると、元のメッセージが復元されます。

 

パフォーマンス

 

AESは以前のDESよりも大幅に高速かつ指数関数的に強力であるため、高スループットまたは低遅延を必要とするさまざまなアプリケーション、ハードウェア、ファームウェアに最適です。

 

AESアルゴリズムは、高性能コンピュータから8ビットスマートカードまで、幅広いハードウェアで非常に優れたパフォーマンスを発揮します。

 

AMDやIntelを含むほとんどのCPUメーカーは、AES命令セットをプロセッサに組み込んでいます。これにより、多くのデバイスでAESのパフォーマンスが向上し、サイドチャネル攻撃に対する耐性が向上しています。

 

AMD Ryzenおよび Intel Core i7/i5/i3  CPU では、AES暗号化により10GB/秒を超えるスループットが得られます。 Pentium Mなどの旧式プロセッサでは、スループットは約60 Mbit/秒です。

 

AESアルゴリズムのセキュリティ強度

 

暗号学者たちは、2000年に標準規格が最終化して以来、AESの弱点を分析してきました。これまでに、128ビットAESに対する理論的攻撃とサイドチャネル攻撃を公開しています。

 

2009年、研究者グループは暗号の内部構造を理解するための既知鍵攻撃で128ビットAES暗号の第8ラウンドを解読しました。しかし、通常の128ビットAES暗号の第10ラウンドを対象にしたものではなく、第8ラウンドのみであったため、比較的に低い脅威であると見なされています。

 

同年に一連の関連鍵攻撃において、研究者は複数の異なる鍵を用い暗号がどのように機能するかを分析して暗号を解読しようとしました。ただし、これらの攻撃は、正しく実装されていないプロトコルに対してのみの脅威であることが判明しました。

 

主な脅威: サイドチャネル攻撃

 

サイドチャネル攻撃は、実装されるアルゴリズム自体の弱点ではなく、システムの実装により得られるデータに基づくものです。たとえば、消費電力、タイミング情報、さらには漏洩電磁波でさえ、悪用につながるデータを提供することになる可能性があります。

 

あるケースでは、研究者はプロセッサのメモリキャッシュの状態を注意深く監視することで128ビットAES鍵を推定することができました。ただし、このような事例は、データ漏洩につながるような手段を防止するか、漏洩情報がアルゴリズムプロセスに関連付けられないことを確保することで減らすことができます。

 

潜在的なサイドチャネル攻撃と現在の理論的攻撃にもかかわらず、AESのすべてのバージョンは高いセキュリティ強度を保っています。適切に実装されたAESアルゴリズムは、現時点では破ることはできません。

 

実際、世界で最も強力なコンピュータが、128ビットAES鍵をブルートフォース攻撃するのには800兆年以上かかるでしょう。 256ビット暗号をブルートフォース攻撃するために必要な計算回数は3.31 x 1056回であり、これは宇宙に存在する原子の数とほぼ同じです。

 

アプリケーション

 

AESは、私たちが常に使用しているプログラムに含まれています。たとえば、WinZip、RAR、およびUltraISOは、Rijndaelアルゴリズムを使用してデータを暗号化しています。

 

BitLocker、CipherShed、DiskCyptor、VeraCrypt、およびFileVaultは、AESで暗号化されたドライブイメージを作成しています。IEEE802.11iは、無線ネットワークのセキュリティ標準を定めるIEEE標準ですが、CCMモードで128ビットAESを使用しています。

 

最も人気のあるメッセージングアプリである Facebook Messenger、Signal、WhatsApp、Google Allo は送受信メッセージの暗号化にAESを使用しています。

おすすめタグ