00. ブロック暗号の主なモード(ECB, CBC, CFB, OFB, CTR) - hpscript/crypt GitHub Wiki

ECBモード: Electronic CodeBook mode(電子符号表モード) CBCモード: Cipher Block Chaining mode(暗号ブロック連鎖モード) CFBモード: Cipher-FeedBack mode(暗号フィードバックモード) OFBモード: Output-FeedBack mode(出力フィードバックモード) CTRモード: CounTeR mode (カウンタモード)

ECBモード

平文ブロックを暗号化したものが、そのまま暗号文ブロックになる 最後の平文ブロックがブロック長に満たない場合にはパディングと呼ばれるデータを埋める => たくさんあるモードの中で最もシンプルだが最も機密性の低いモード 平文の中に同じ値を持つ平文ブロックが複数存在した場合、全て同じ値の暗号文ブロックに変換されてしまう。暗号文を見るだけで平文の繰り返しがわかってしまう

CBCモード

CBCモードは1つ前の暗号文ブロックと平文ブロックのXORをとり、そのXORの値を暗号化を行う。CBCモードも最後の平文ブロックがブロック長に満たない場合にはパディングを行う SSL/TLSではCBCモードが使われている 最初の平文ブロックを暗号化する際に、「1つ前の暗号文ブロック」は存在しないので、「1つ前の暗号ブロック」の代わりのビット列を1ブロック分用意する必要がある。このビット列をIV(initial vector)

CFBモード

CFBモードは1つ前の暗号文ブロックを暗号アルゴリズムの入力に戻す フィードバックとは、入力へ戻すということを意味する CFBモードで暗号化して得られる値を鍵ストリームという ECBやCBCモードでは暗号化アルゴリズムによって直接暗号化されるが、CFBは直接暗号化されるわけではない

OFBモード

暗号アルゴリズムの出力を暗号アルゴリズムの入力へフィードバック "1つ前の暗号ブロックを暗号アルゴリズムで暗号化した値"と"平文ブロック"のXOR=暗号文ブロックとなる OFBでもCBC, CFBと同様にIVを使用する 平文ブロックと暗号アルゴリズムの出力とXORして暗号文ブロックを作っている CFBモードに似ている OFBモードでは、平文ブロックとは無関係に暗号アルゴリズムを前もってぐるぐる回し、XORするためのビット列をしておく

CTRモード

1ずつ増加していくカウンタを暗号化して鍵ストレーむを作り出すストリーム暗号 "カウンタを暗号化した値"と"平文ブロック"のXOR=暗号文ブロックとなる カウンタの初期値は暗号化のたびに異なる値(ノンス)を元にして作る