ブロック暗号とは

/暗号理論

ブロック暗号

ブロック暗号とは、固定された長さの平文のブロックを、同じ長さのブロックに変換する暗号化方式です。ブロック暗号の暗号化関数は、任意の平文に対する1対1の変換(全単射)となります。

ブロック暗号には次の4つの暗号化モードがあります。

  • ECBモード(Electric Codebook Mode)
  • CBCモード(Chiperblock Chaining Mode)
  • CFBモード(Cipher Feedback Mode)
  • OFBモード(Output Feedback Mode)

ECBモード

ECBモードでは、同一の平文ブロックは同一の暗号ブロックに変換されるため、平文の規則性は暗号文の規則性となって現れます。

ECBモードは、計算は単純ですが、規則性があるため解読が比較的容易、ブロックの順序を入れ替えられても分からないなどの問題点があります。

暗号化手順

暗号化は、平文を $m_j$ 、暗号文を $c_j$ とすると暗号化鍵 $K$ により、以下の手順で行われます。

  1. $c_j=K(m_j)$
複合化手順

また、複合化は複合化鍵 $K^{-1}$ により以下の手順で行われます

  1. $m_j=K^{-1}(c_j)$

ここで $K$ と $K^{-1}$ は置換と逆置換の関係にあり、$K^{-1}K=1$ となります。

例1

文字集合を $S=\{0,1\}$ 、ブロック長を $n=4$ 、平文を $m$ とすると、

$$m=1010 0001 1011 0100$$$$m_1=1010 , m_2=0001 , m_3=1011 , m_4=0100$$

暗号化鍵 $K$(置換)と複合化鍵 $K^{-1}$(逆置換)を以下とします。$K$ は左に1ビット分のシフト、$K^{-1}$ は右に1ビット分のシフトを行います。

$$K=\left(\begin{array}{cc} 1 & 2 & 3 & 4 \\
2 & 3 & 4 & 1 \end{array}\right)$$$$K^{-1}=\left(\begin{array}{cc} 1 & 2 & 3 & 4 \\
4 & 1 & 2 & 3 \end{array}\right)$$

これにより以下のように暗号化されます。

$$c_1=K(m_1)=0101 , c_2=K(m_2)=0010$$$$c_3=K(m_3)=0111 , c_4=K(m_4)=1000$$$$c=0101 0010 0111 1000$$

CBCモード

CBCモードは、ECBモードの問題点を解決するために考案されました。CBCモードでは、対象となる平文ブロックと暗号化ブロックが1対1に対応しているのではなく、先行するブロックにも依存して暗号化されます。

CBCモードは、受信者がブロックの複合化を始められるのは、送信者が暗号化ブロックを送信し終わるまで待つ必要があります。そのため、効率化の面で問題があります。

暗号化手順

暗号化は以下の手順で行われます。尚、$\mathrm{IV}$ は初期ベクトル、$\oplus$ は論理和(XOR)を表します。

  1. $c_0=\mathrm{IV}$
  2. $c_j=K(c_{j-1}\oplus m_j)$
複合化手順

複合化は以下の手順で行われます。

  1. $c_0=\mathrm{IV}$
  2. $m_j=c_{j-1}\oplus K^{-1}(c_j)$

複合化のステップ2に暗号化のステップ2を代入すると、元に複合化されることが分かります。

$$c_{j-1}\oplus K^{-1}(K(c_{j-1}\oplus m_j))=c_{j-1}\oplus c_{j-1}\oplus m_j=m_j$$

例2

$\mathrm{IV}=0110$ と置いて、例1と同じ平文と暗号化鍵を使うと以下のように暗号化されます。

$j$ $m_j$ $c_{j-1}\oplus m_j$ $c_j$
0 0110
1 1010 1100 1001
2 0001 1000 0001
3 1011 1010 0101
4 0100 0001 0010

$$c=1001 0001 0101 0010$$

CFBモード

CFBモードでは、CBCモードの効率化の問題点を解決するために考案されました。CBCモードでは、暗号文の受信が完了するまで複合化の計算ができませんが、CFBモードでは、送信者側と受信者側はほとんど同時に計算することができます。

暗号化手順

暗号化は以下の手順で行われます。

  1. $p_1=\mathrm{IV}$
  2. $q_j=K(p_j)$
  3. $t_j$ を $q_j$ の上位 $r$ として定義
  4. $c_j=t_j\oplus m_j$
  5. $p_{j+1}=2^rp_j+c_j$

ステップ5は、$p_j$ を左へ $r$ ビット分シフトし、その $r$ ビットに $c_j$ が置かれることで $p_{j+1}$ が生成されます。

複合化手順

複合化は以下の手順で行われます。

  1. $p_1=\mathrm{IV}$
  2. $q_j=K(p_j)$
  3. $t_j$ を $q_j$ の上位 $r$ として定義
  4. $m_j=t_j\oplus c_j$
  5. $p_{j+1}=2^rp_j+c_j$

暗号化と複合化で、ステップ4が異なるのみで、その他は同じ手順となります。

例3

例1、例2と同じ前提で $r=3$ とすると、以下のように暗号化されます。

$$m=101 000 011 011 010$$

$j$ $m_j$ $p_j$ $q_j$ $t_j$ $c_j$
1 101 0110 1100 110 011
2 000 0011 0110 011 011
3 011 1011 0111 011 000
4 011 1000 0001 000 011
010 0011 0110 011 001

$$c=011 011 000 011 001$$

OFBモード

OFBモードでは、暗号文の伝送でビットが変化すれば、複合では同じ位置にエラーが現れ、それ以外には現れません。

暗号化手順

暗号化は以下の手順で行われます。

  1. $p_1=\mathrm{IV}$
  2. $q_j=K(p_j)$
  3. $t_j$ を $q_j$ の上位 $r$ として定義
  4. $c_j=t_j\oplus m_j$
  5. $p_{j+1}=q_j$

CFBモードとはステップ5が異なります。

複合化手順

複合化は以下の手順で行われます。

  1. $p_1=\mathrm{IV}$
  2. $q_j=K(p_j)$
  3. $t_j$ を $q_j$ の上位 $r$ として定義
  4. $m_j=t_j\oplus c_j$
  5. $p_{j+1}=q_j$

暗号化と複合化で、ステップ4が異なるのみで、その他は同じ手順となります。

例4

例1、例2、例3と同じ前提とすると、以下のように暗号化されます。

$$m=101 000 011 011 010$$

$j$ $m_j$ $p_j$ $q_j$ $t_j$ $c_j$
1 101 0110 1100 110 011
2 000 1100 1001 100 100
3 011 1001 0011 001 010
4 011 0011 0110 011 000
010 0110 1100 110 100

$$c=011 100 010 000 100$$

 

応用数学
情報理論、暗号理論、機械学習、金融工学、ゲーム理論
散策路TOP
力学、電磁気・相対論、熱・統計力学、量子力学、物性物理、機械学習、情報処理、金融、物理数学

 

タイトルとURLをコピーしました