暗号化のパターンには大きく分けて二つある。「ストリーム暗号」と「ブロック暗号」である。ビットやバイト単位で順番に次々と暗号化するストリーム暗号に対して、決まった長さのデータごとに暗号化していくブロック暗号の方が一般的であり、その代表格がAESである。
米国では1970年代以降、正式な標準化暗号方式を「DES」(Data Encryption Standard)と定めていたが、2002年にその改訂版として「AES」(Advanced Encryption Standard)を新たな規格として策定した。
AESは、鍵長やブロック長が可変の共通鍵方式のブロック暗号である。パラメーターとしては、鍵長は3種類あり、128ビット、192ビット、256ビットのいずれかで、ブロック長は1種類、128ビットのみである。そのため、鍵長によって「AES-128」「AES-192」「AES-256」という3種類の表記がある。ただし、鍵長が多いほど安全性が高いもののそれだけ処理速度などが低下するため、十分にセキュリティがしっかりしているとされる「AES-128」が最もよく利用されている。
暗号化処理の流れを大ざっぱにまとめると、以下のような工程をたどる。
1)入力データの分割
2)分割されたデータの置き換え(サブバイト)
3)データ位置のバイト単位での入れ替え(シフト・ロウズ処理)
4)演算処理(ミックス・コラムス)によるデータ変換
5)演算処理(ラウンドキー)
6)鍵長に応じた1)~5)の繰り返し処理
7)後処理(2)3)5)の実行)
これはDESとそれほど大きく変わることがなく、アルゴリズムとしてはとてもシンプルである。にもかかわらずAESはセキュリティが強化され、かつ、高速に処理できる仕組みになっている。
AESが提唱されて以来、これまで多くの人の手によって解読の可能性やアルゴリズムに脆弱性がないかなどが検証されてきた。また、総当たり攻撃を行った場合に解読までどのくらいの時間がかかるかなども調査された。
今のところたやすく見破られるようなことは起こっていないが、総当たり攻撃の労力が軽減されるような解読の方法が見つけ出されてはいる。今後もある程度は解明される可能性はあるが、当面は十分に実用に耐え得ると考えられている。その中で慎重を期すのであれば、現在普及している「AES-128」ではなく「AES-256」を利用するのが最善の手段と思われる。
例えば「AES-256」をサポートしている「SecureZIP」の場合、圧縮したデータそのものを暗号化しているため、このファイルが外部に流出したとしても、簡単にはその内容を解読されないようになっている。とりわけメールの添付ファイルは誤送信してしまうと無関係な送り手に中身を容易に読まれてしまうが、「AES-256」で暗号化してあれば、うっかりミスを犯したとしても最悪の事態は回避できる可能性がある。
もちろん、セキュリティに「絶対」はなく暗号解読の技術は日進月歩であるため、過信は禁物であるのは言うまでもない。