ブロック暗号の主なモード(ECB, CBC, CFB, OFB, CTR)

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=暗号文ブロックとなる
カウンタの初期値は暗号化のたびに異なる値(ノンス)を元にして作る