共通鍵暗号
暗号化と復号で同じ(共通の)秘密鍵を使う暗号化方式。
公開鍵暗号に比べて高速に暗号化・復号ができるように設計れているため大きなサイズの平文の暗号化に向いている。
秘密鍵暗号、対照鍵暗号とも呼ばれる。
共通鍵暗号のやりとり
-
共通鍵を生成。事前に受信者と共有。
-
平文と共通鍵で暗号文を作成して送信。
-
受信した暗号文と共通鍵で復号。
暗号化と復号で同じ鍵を使うという性質上、安全な方法で鍵を共有して管理する必要がある。
ブロック暗号
ブロックと呼ばれる一定の大きさの平文を同じ長さのブロックに変換する暗号化方式。
ストリーム暗号
平文を小さい単位(ビット、バイト)でデータの流れを順次処理する暗号化方式。
ブロック暗号のモード
ECB
ECB(Electronic CodeBook)mode:電子符号表モード
平文ブロックを単純に暗号化したもの。
同じ平文から同じ暗号文が得られるため機密性が低く推奨されていない。
CBC
CBC(Cipher Block Chaining)mode :暗号ブロック連鎖モード
一つ前の暗号文ブロックと平文ブロックの XOR(排他的論理和)を取って暗号化する。
最初の平文ブロックは前の暗号文ブロックを持たないので iv(initialization vector、初期化ベクトル)と XOR をとる。
同じ内容の平文ブロックからでも異なる暗号文ブロックを生成できる。
平文ブロックのサイズ(AESは16バイト)が足りない場合パディングという値埋めを行う。
CFB
CFB(Cipher-FeedBack)mode:暗号フィードバックモード
一つ前の暗号文ブロックを暗号化した値と平文の XOR を取って暗号化する。
OFB
OFB(Output-FeedBack)mode:出力フィードバックモード
暗号アルゴリズムの出力と平文の XOR を取って暗号化する。
一つ前の暗号アルゴリズムの出力を使って次の暗号アルゴリズムを作る。
CTR
CTR(CounTeR)mode:カウンタモード
一つずつ増加するカウンタを暗号化した値と平文ブロックとの XOR を取って暗号化する。
ランダムな使い捨ての値(ノンス)を元にカウンタを作成する。
暗号化と復号の構造が同じになるのでプログラムの実装が容易になる。