AES 共通键暗号方式の仕組み

皆さん、こんにちは。技术开発グループの苍-辞锄补飞补苍です。
気が付けば8月も半ばになりました。あともう少しで夏が终わりますね。

昨今のIT基盤を支える暗号技術、皆さんどれだけ理解されていますか?システム利用者は暗号化を意識する必要はなく、また、システム開発者も既に用意されたAPIを利用することで、ロジックを知らなくてもデータを簡単に暗号化してくれるので、あまり強く意識したことはないかと思います。今日は暗号化技術の1つ、共通键暗号方式のお話です。

共通键暗号方式

共通键暗号方式とは、平文から暗号文への暗号化と、暗号文から平文への復号化を同じ鍵で行う方式です。平文とは、暗号化する前の生のデータのことを言います。暗号文とは暗号化されたデータです。

共通键暗号方式の目的は平文を攻撃者に知られないようにすることです。攻撃者に平文を知られるということは、それは情報漏洩を意味します。共通键暗号方式で平文を暗号化すれば、攻撃者は共通鍵がないと暗号文から平文へ復号化することが出来ず、平文の内容を見ることが出来ません。

ブロック暗号とストリーム暗号

共通键暗号方式の暗号は大きく2つに分類されます。1つは、平文を固定長のブロックに分割して暗号化してく「ブロック暗号」と、平文を1bitないしは1byte単位で暗号化していく「ストリーム暗号」です。

SSL/TLS通信で利用されている、共通键暗号方式であるAESはブロック暗号に分類されます。

AES (Advanced Encryption Standard)

2023年現在、共通键暗号方式と言えばAESではないでしょうか。SSL/TLSでも採用されている共通键暗号方式で、多くの場面で利用されています。

AES以前は、DESと呼ばれる共通键暗号方式が多く利用されていました。しかし、コンピュータの演算能力向上による強度低下などにより、NIST(アメリカ国立標準技術研究所)が新しい共通键暗号方式を公募し、2000年ごろにAESが採用されました。採用されてから20年以上も利用されているってすごいですね。

AESはブロック暗号方式であり、そのブロック長は128bit (16byte) になります。鍵の長さは128bit、198bit、256bitから選ぶことが出来ます。

鍵長 (bit)ブロック長 (bit)ラウンド数 (回)
AES-12812812810
AES-19819212812
AES-25625612814

処理の流れ

AESは128bit (16byte) を暗号化します。その暗号化処理では、SubBytes、ShiftRows、MixColumns、AddRoundKeyの4つを行います。下図の背景色が黄色で囲っている処理は、ラウンド数-1回分、繰り返し処理することになります。

SubBytes

厂耻产叠测迟别蝉では、产测迟别単位に决められた値に変换します。例えば、その产测迟别が0虫3诲の场合、0虫27に変换します。

ShiftRows

ShiftRowsでは、SubBytesの出力結果をbyte単位で混ぜます。4 x 4の2次元配列に格納し、2行目以降を決められたbyte数分、左にシフトします。

MixColumns

惭颈虫颁辞濒耻尘苍蝉では、厂丑颈蹿迟搁辞飞蝉の出力结果から、列ごとに计算を行います。

AddRoundKey

础诲诲搁辞耻苍诲碍别测では、惭颈虫颁辞濒耻尘苍蝉の出力结果に対してラウンド键を齿翱搁演算します。ラウンド键とは、共通键に対して拡张ルーチンにより导出されたラウンド毎の键です。ラウンド键はラウンド毎に异なります。

おわりに

今回は「暗号処理って何やってんの?」という疑問から、共通键暗号方式であるAESの暗号化について紹介しました。なお、AESの復号化については基本的に同じ流れではありますが、計算する値などが異なりますのでご注意ください。AESの仕様についてはで详しく公开されていますので、兴味ある方はご确认ください。今のところ、础贰厂はどんな攻撃にも耐えており、昨今の暗号技术を支えるアルゴリズムの1つとなっています。

ではまた。


Recommendおすすめブログ