暗号利用モード
ブロック暗号 EK(・)を、任意の長さのメッセージ
を暗復号できるように変換する方法のことを暗号利用モードと呼ぶ。
XOR 演算
|
0 |
1 |
0 |
0 |
1 |
1 |
1 |
0 |
常に、
- (a b) b = a.
ECB(electronic code book)モード
- 暗号化 c = (EK(m1), EK(m2), ..., EK(mb))
- 復号 m = (DK(c1), DK(c2), ..., DK(cb))
同じ内容のメッセージブロックは常に同じ暗号文ブロックに変換されるので、メッセージの部分情報を漏らしてしまっているといえる。
CBC(cipher block chaining)モード
- 暗号化
- IV ←$ {0,1}n
- c1 = EK(IV m1)
- c2 = EK(c1 m2)
- ・・・
- cb = EK(cb-1 mb)
- c = (IV, c1, c2, ・・・, cb)
- 復号
- IV を c より取り出す。
- m1 = DK(c1) IV
- m2 = DK(c2) c1
- ・・・
- mb = DK(cb) cb-1
初期化ベクトルIVの効果で、同じ内容のメッセージブロックでも異なる暗号文ブロックに変換される。ただし、同じ初期化ベクトルが重複して使用されないよう注意が必要。
カウンターモード
カウンター ctr
- 暗号化
- ctr = ctr + 1, c1 = m1 EK(ctr)
- ctr = ctr + 1, c2 = m2 EK(ctr)
- ・・・
- ctr = ctr + 1, cb = mb EK(ctr)
- c = (ctr, c1, c2, ・・・, cb)
- 復号
- ctr を c より取り出す。
- ctr = ctr + 1, m1 = c1 EK(ctr)
- ctr = ctr + 1, m2 = c2 EK(ctr)
- ・・・
- ctr = ctr + 1, mb = cb EK(ctr)
送信者は、カウンター ctr を状態として維持し、同じctrを2度以上使わないようにする必要がある。
OFB(output feedback)モード
- 暗号化
- IV ←$ {0,1}n
- w1 = EK(IV), w2 = EK(w1), ・・・, wb = EK(wb-1)
- c1 = m1 w1, c2 = m2 w2, ・・・, cb = mb wb
- c = (IV, c1, c2, ・・・, cb)
- 復号
- IV を c より取り出す。
- w1 = EK(IV), w2 = EK(w1), ・・・, wb = EK(wb-1)
- m1 = c1 w1, m2 = c2 w2, ・・・, mb = cb wb
ブロック暗号EK(・)を用いて疑似乱数列(w1, w2, ・・・)を生成した一種のストリーム暗号と見なせる。初期化ベクトルIVの乱数性は重要。
CFB(cipher feedback)モード
- 暗号化
- IV ←$ {0,1}n
- c1 = m1 EK(IV), c2 = m2 EK(c1), ・・・, cb = mb EK(cb-1)
- c = (IV, c1, c2, ・・・, cb)
- 復号
- IV を c より取り出す。
- m1 = c1 EK(IV), m2 = c2 EK(c1), ・・・, mb = cb EK(cb-1)
暗号利用モードの安全性
暗号利用モードが
安全であるとは、もとになるブロック暗号が疑似ランダム置換であるとの仮定のもとで、それを暗号利用モードで変換してできる共通鍵暗号が、メッセージに関する情報を1ビットも漏らさないことをいう。
XORモード、CBCモード、カウンターモードは安全な暗号利用モードであることが証明されている。
最終更新:2010年04月21日 17:07