共通鍵暗号方式には、ブロック暗号とストリーム暗号があります。
ブロック暗号:平文を一定のサイズのブロックに分割
ストリーム暗号:1ビットや1バイトずつ暗号化/復号の変換処理に投入し、順次すすめる
どちらの方が優れているということはないので、注意しましょう。
ブロック暗号
ブロックの長さをブロック長といいます。
1ブロック単位でまとめて暗号化する。
代表的な規格はAESです。
AESとは、米国政府の標準暗号規格です。
ブロック長は128ビットで、鍵長は128/192/256ビットで利用可能です。
暗号化の方法
暗号化モードによって、ブロックの暗号化の方法が異なります。
ECBモード
平文を共通鍵で暗号文にする。
分割したデータを共通鍵で暗号化する方式です。
統計的な解析に弱いため、現在はほとんど使われていません。
同じデータを暗号化すると、暗号文も同じになってしまうから、危険なんだ
CBCモード
平文の各ブロックを、前の暗号文とのXORを取ってから暗号化する方法です。
XORとは、どちらかが1の時のみ1になる論理演算だったね。
どちらも1の場合は、0になるよ。
XORを取るとと、情報をごちゃ混ぜにできると考えてください。
XORは、次の特性があるため、元に戻すことが可能です。
A XOR B = C
C XOR A = B
C XOR B = A
最初のブロックは、用意した乱数とXORをとります。
次のブロック以降は、前の暗号文とXORを取ってから暗号化します。
CBC-MACというメッセージ認証子として、現在は利用されています。
データの改ざん有無を確認できる情報のこと。MACとも呼ばれる。
完全性を維持するための技術として使われている。
CTRモード(カウンター)
カウンタを1ずつ増加させ、暗号化したカウンタと平文でXORを取る方法です。
カウンタという値を用意します。(初期値は乱数)
カウンタを共通鍵で暗号化したものを、暗号カウンタといいます。
暗号カウンタと、平文①のXORを取って暗号化します。(暗号文①の完成)
続いて、カウンタを1増加させてから、カウンタと平文②のXORを取ります。(暗号文②の完成)
HTTPS通信は、CTRモードから派生した「GCMモード」という暗号方式で、暗号化されています。
ストリーム暗号
1ビットや1バイトずつ暗号化/復号の変換処理に投入し、順次すすめる方式です。
代表的な規格はKCipher-2(ケーサイファーツー)です。
携帯電話の通信暗号化などで利用されています。