著者:田中麻維
大手電機メーカー系のSierに入社後、インフラエンジニアとしてLinuxサーバーの構築や保守・運用、ソフトウェアの開発業務を経験。アイティベル入社後は、IT領域の執筆などを行う。
AESは、共通鍵を用いた暗号化方式のひとつです。従来のDESと比較して、より安全に利用できる暗号化アルゴリズムとして知られています。AES暗号化が安全とされる理由としては、ブロック暗号、暗号化モード、鍵長など、いくつかの要素が挙げられます。AES暗号化を用いて社内のセキュリティ環境の安全性を向上させたいならば、まずはその仕組みを確認し、「なぜ安全なのか」を理解しておきましょう。
1. AES暗号化とは
AES(Advanced Encryption Standard)暗号化は、共通鍵を用いた暗号化アルゴリズムです。共通鍵暗号方式では、一つの鍵を用いて暗号化を行うため、計算量が小さく済む点がメリットです。
これまでよく用いられてきたDES(Data Encryption Standard)暗号化は、ネットワークの高速化やハードウェアの高性能化に伴って脆弱性が発見され、DES暗号化で十分な安全性のセキュリティ環境を保つのは困難とされています。そのため、DESの後継であり、より強化された暗号化であるAES暗号化が採用されるようになりました。
AES暗号化は、鍵の長さと鍵の管理を適切に行うことで、データの機密性の保護、第三者によるデータの改ざんや不正な変更の防止などを実現します。また、無線LANのネットワーク保護(WPA2・WPA3)や、オンライン取引・メールなどのインターネットの安全な通信環境(SSL/TLS)を提供できるため、政府や企業でも情報保護を目的に採用されています。
AESについては別の記事で詳しく解説しているので、あわせてご覧ください。
2. AES暗号化を実現する要素技術
AES暗号化は、データや通信を暗号化して、通信の安全性を実現しています。AES暗号化には以下の要素技術が用いられています。
- ブロック暗号
- AESの鍵長とセキュリティ
- 暗号化モード
ブロック暗号
AES暗号化は、データをブロック暗号方式で暗号化します。ブロック暗号は、平文を一定(基本的に128ビット)のブロックサイズに分割して暗号化するアルゴリズムです。ブロックサイズに満たないブロックはパディングをすることで、一定のブロックサイズに統一します。
一方、RC4などで用いられるストリーム暗号は、データを分割せず、最小単位で暗号化を進めます。
ブロック暗号のメリットは、復号が難しく、高い安全性を実現できる点です。ストリーム暗号は、リアルタイム性の高さがメリットです。メリットがそれぞれ異なるため、環境に応じて両者を使い分けることが求められます。
AESの鍵長とセキュリティ
AES暗号化では、1回のラウンド処理ごとに鍵を生成し、鍵とブロック化したデータを掛け合わせて暗号化を進めます。128ビット、192ビット、256ビットの3種類の鍵長を利用することができ、鍵長が長いほど、鍵のパターンと暗号化アルゴリズムのラウンド処理の回数が増加します。つまり、鍵長が長いほど、より強力な暗号になるということです。
ただし、鍵長が長ければ、ラウンド処理の回数の増加によって計算量も多くなるため、通信パフォーマンスが低下するデメリットがあることも覚えておきましょう。
AESの中で最も強力なAES256については別記事で解説しているので、あわせてご覧ください。
暗号化モード
AES暗号化には、複数の暗号化モードが存在しています。暗号化モードとは、ブロック暗号の処理方法の規定する仕組みで、種類によって特徴が異なります。
下記の表に、主な暗号化モードの特徴をまとめました。
暗号化モード | 特徴 | セキュリティ | 処理速度 | 用途・注意点 |
ECB (Electronic Codebook) | 平文をビット毎に区切り(AESでは16ビット)暗号化 | 低い | 高速(並列処理可能) | セキュリティ要件が低い場合に適用。機密データには不向き。 |
CBC (Cipher Block Chaining) | 前のブロックの暗号文を次のブロックの暗号化に使用 | 高い(前後関係に依存) | 低速 | TLS1.2まで利用されていた。 |
CTR (Counter Mode) | カウンタを使用して暗号化、並列処理可能 | 高い | 高速(並列処理可能) | パフォーマンスが重要で、安全性も求められる場合。パディング不要。 |
GCM (Galois/Counter Mode) | CTRモードにガロア認証を追加 | 非常に高い | 高速(並列処理可能) | 高いセキュリティとデータ整合性が必要な場合。TLS 1.3以降で使用されている。 |
ECB (Electronic Codebook)
ECBは、平文をビット毎に区切り(AESでは16ビット)、各ブロックを個別に暗号化します。並列(同時進行)の処理が可能で、処理時間が短いという特長があります。一方で、平文が同じ場合には暗号化の結果が同じになるため、安全性が低いといえるでしょう。そのため、現在ではあまり用いられていません。
CBC (Cipher Block Chaining)
CBCは、平文をブロックに分けて、1つ前のブロックが暗号化された結果(暗号文)を用いて暗号化をするモードです。前後関係があり、同じ平文が登場しても結果が同じにならないことから、ECBよりも安全性が高いといえます。一方で、前後関係が必要なため、並列処理ができず、時間がかかる点はデメリットです。
CBCは、TLS1.2までは広く用いられていました。しかし、脆弱性が見つかったため、TLS 1.3からは用いられなくなりました。
CTR (Counter Mode)
CTRは、カウンタと呼ばれる値をブロックの数だけ用意し、暗号化したカウンタと平文を掛け合わせて暗号化を行います。暗号化をするのは平文ではなくカウンタであるため、パディングをしない平文にも利用できます。
AES暗号化で実施されるパディングに脆弱性が見つかったことをきっかけに、CTRは有効な暗号化モードとして広まりました。復号時にもカウンタを暗号化(≠復号化)をすれば、暗号化されたデータの平文化が可能という特徴もあります。
GCM (Galois/Counter Mode)
GCMは、CTRにガロア認証を組み合わせた暗号化モードです。CTRのカウンタによる暗号化にガロア認証が加わることで、改ざん検知の仕組みが加わりました。TLS1.3からは、CBCに変わる暗号化モードとしてGCMモードが用いられています。
3. AES暗号化の仕組み
AES暗号化は、以下の4ステップで進められます。
- SubBytes
- ShiftRows
- MixColumns
- AddRoundKey
SubBytes:ルールに沿った変換
SubBytesは、平文(暗号化前のデータ)をルールに沿った変換を行う処理です。平文を16バイトのブロックに区切り、そのブロックをさらに1バイトずつに分けます。
例として、1バイト分のデータが「0x11」だったとしましょう。データを変換表に合わせて変換すると「0xB4」になります。この処理を16バイト分行った結果が、1ブロック分のSubBytesが完了したデータです。
ShiftRows:SubBytesの結果を格納
ShiftRowsは、SubBytesの結果を4×4の配列に格納し、その結果を行ごとに決まったバイト分ずつシフトする処理です。
例として、「69,A2,D8,C0」と並んでいたデータをそれぞれ1バイト左にシフトすると「A2,D8,C0,69」となります。同様の処理を行ごとに決まったバイト分ずつシフトしたデータが、ShiftRowsの処理が完了したデータです。
MixColumns:ShiftRowsで作成した表を計算
MixColumnsは、ShiftRowsの計算結果を固定行列と掛け合わせる処理です。計算は4×4の行列の掛け算で行われます。掛け算の結果が、MixColumns処理の結果です。
AddRoundKey:MixColumnsの出力とラウンド鍵による演算
AddRoundKeyは、MixColumnsで出力された行列とラウンド鍵によるXOR演算を行います。ラウンド鍵は名前の通り、ラウンドごとに生成される鍵です。つまり、AES256の場合は14個のラウンド鍵が生成されます。
AddRoundKeyが完了すると、1ラウンドが完了です。この処理をAES暗号の鍵長分だけ繰り返すことで、AES暗号化が完了します。
4. AES暗号化されたデータの復号化の仕組み
AES暗号化されたデータを復号化して平文に戻す処理は、暗号化の逆の順序をたどります。暗号化とは逆に、以下の順序で処理を進めることで復元が可能です。
- AddRoundKey
- MixColumns
- ShiftRows
- SubBytes
したがって、復号化もAES暗号の鍵長ごとに処理時間が決まり、AES256が最も復号化に時間がかかります。
まとめ
AES暗号化は、共通鍵暗号で行う暗号化です。現在、AES暗号が広く用いられている理由としては、暗号化の要素技術とアルゴリズムが挙げられます。
要素技術とは、ブロック暗号、鍵長、暗号化モードです。またAESの暗号化アルゴリズムは鍵長ごとにラウンド数が増えるため、鍵長が長いほど強力な暗号化ができます。
SSL/TLSや無線LANなどでも使用されている強固な暗号化なので、ぜひ自社でも取り入れてセキュリティ強化に努めてください。