暗号利用モード

ブロック暗号 EK(・)を、任意の長さのメッセージ
  • m = (m1, m2, ..., mb)
を暗復号できるように変換する方法のことを暗号利用モードと呼ぶ。



XOR 演算


\oplus 0 1
0 0 1
1 1 0

常に、
  • (a \oplus b) \oplus 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 \oplus m1)
    • c2 = EK(c1 \oplus m2)
    • ・・・
    • cb = EK(cb-1 \oplus mb)
    • c = (IV, c1, c2, ・・・, cb)
  • 復号 
    • IV を c より取り出す。
    • m1 = DK(c1) \oplus IV
    • m2 = DK(c2) \oplus c1
    • ・・・
    • mb = DK(cb) \oplus cb-1

初期化ベクトルIVの効果で、同じ内容のメッセージブロックでも異なる暗号文ブロックに変換される。ただし、同じ初期化ベクトルが重複して使用されないよう注意が必要。




カウンターモード

カウンター ctr
  • 暗号化 
    • ctr = ctr + 1, c1 = m1 \oplus EK(ctr)
    • ctr = ctr + 1, c2 = m2 \oplus EK(ctr)
    • ・・・
    • ctr = ctr + 1, cb = mb \oplus EK(ctr)
    • c = (ctr, c1, c2, ・・・, cb)
  • 復号 
    • ctr を c より取り出す。
    • ctr = ctr + 1, m1 = c1 \oplus EK(ctr)
    • ctr = ctr + 1, m2 = c2 \oplus EK(ctr)
    • ・・・
    • ctr = ctr + 1, mb = cb \oplus EK(ctr)

送信者は、カウンター ctr を状態として維持し、同じctrを2度以上使わないようにする必要がある。



OFB(output feedback)モード

  • 暗号化 
    • IV ←$ {0,1}n
    • w1 = EK(IV), w2 = EK(w1), ・・・, wb = EK(wb-1)
    • c1 = m1 \oplus w1, c2 = m2 \oplus w2, ・・・, cb = mb \oplus wb
    • c = (IV, c1, c2, ・・・, cb)
  • 復号 
    • IV を c より取り出す。
    • w1 = EK(IV), w2 = EK(w1), ・・・, wb = EK(wb-1)
    • m1 = c1 \oplus w1, m2 = c2 \oplus w2, ・・・, mb = cb \oplus wb

ブロック暗号EK(・)を用いて疑似乱数列(w1, w2, ・・・)を生成した一種のストリーム暗号と見なせる。初期化ベクトルIVの乱数性は重要。



CFB(cipher feedback)モード

  • 暗号化 
    • IV ←$ {0,1}n
    • c1 = m1 \oplus EK(IV), c2 = m2 \oplus EK(c1), ・・・, cb = mb \oplus EK(cb-1)
    • c = (IV, c1, c2, ・・・, cb)
  • 復号 
    • IV を c より取り出す。
    • m1 = c1 \oplus EK(IV), m2 = c2 \oplus EK(c1), ・・・, mb = cb \oplus EK(cb-1)




暗号利用モードの安全性

暗号利用モードが安全であるとは、もとになるブロック暗号が疑似ランダム置換であるとの仮定のもとで、それを暗号利用モードで変換してできる共通鍵暗号が、メッセージに関する情報を1ビットも漏らさないことをいう。

XORモード、CBCモード、カウンターモードは安全な暗号利用モードであることが証明されている。




















最終更新:2010年04月21日 17:07