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

共通鍵暗号方式には、ブロック暗号とストリーム暗号があります。

暗号規格

ブロック暗号:平文を一定のサイズのブロックに分割

ストリーム暗号:1ビットや1バイトずつ暗号化/復号の変換処理に投入し、順次すすめる


どちらの方が優れているということはないので、注意しましょう。

ブロック暗号

ブロックの長さをブロック長といいます。

1ブロック単位でまとめて暗号化する。



代表的な規格はAESです。


AESとは、米国政府の標準暗号規格です。

ブロック長は128ビットで、鍵長は128/192/256ビットで利用可能です。

暗号化の方法

暗号化モードによって、ブロックの暗号化の方法が異なります。

ECBモード

平文を共通鍵で暗号文にする。

分割したデータを共通鍵で暗号化する方式です。

統計的な解析に弱いため、現在はほとんど使われていません。

同じデータを暗号化すると、暗号文も同じになってしまうから、危険なんだ



CBCモード

平文の各ブロックを、前の暗号文とのXORを取ってから暗号化する方法です。

XORとは、どちらかが1の時のみ1になる論理演算だったね。
どちらも1の場合は、0になるよ。

XORを取るとと、情報をごちゃ混ぜにできると考えてください。

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(ケーサイファーツー)です。

携帯電話の通信暗号化などで利用されています。