共通鍵暗号
共通鍵暗号の種類
暗号利用モード
AES,DES
などのブロック暗号を用いる暗号化では,ブロック長より長いメッセージを暗号化する際に入力文
(平文) は固定長のブロックに分割して処理される.
このとき,各入力ブロックを順次暗号化する際に用いるアルゴリズムを暗号利用モードと呼ぶ.同じブロック暗号を用いても,暗号利用モードが異なればその処理性能や情報の秘匿性には違いが生じる。
暗号利用モードには,情報の秘匿性を向上させることを目的とする秘匿用の利用モードと情報の完全性確認を目的とする認証用の利用モードがある.
秘匿用の利用モード
以下の説明で,$E_k$ を暗号化関数,$D_k$ を復号関数,平文を $M = {M_1,
\cdots, M_n}$,暗号文を $C = {C_1, \cdots, C_n}$ ,初期ベクトルを
$IV(=C_0)$ とする($n$ は平文のブロック数).
また,以下の関数を定義する.
・ $\psi_L(X,j)$:$X$の左 $j$ ビット長ブロック
・ $\psi_R(X,j)$:$X$の右 $j$ ビット長ブロック
・ $\xi(X,k-j)$:$X$の左側に $k-j$ ビットの "1" を設定した $k$
ビット長ブロック
-
ECB (Electronic CodeBook) モード
-
処理方式
暗号化: $C_i = E_k(M_i)\qquad i = 1 \ldots n$
復号 : $M_i = D_k(C_i)\qquad i = 1 \ldots n$
-
特徴
-
フィードバックを行なわず,入力ブロックをそのまま暗号化するモードで,入力文と鍵が同じならば常に同じ暗号文が生成される.そのため,単一ブロックの短いランダムなデータの暗号化にのみ利用される
(一般的なデータの暗号化には推奨されない).
-
暗号文ブロックの入れ替えや削除,再生攻撃
(過去の暗号文にすり替え) が可能である.
-
ビット損失などによりブロック境界が失われると,復号は失敗する
(再同期が必要).
-
CBC (Cipher Block Chaining) モード
-
処理方式
暗号化: $C_i = E_k(M_i \oplus C_{i-1})\qquad i
= 1\ldots n$
復号 : $M_i = D_k(C_i) \oplus
C_{i-1}\qquad i = 1\ldots n$
-
特徴
-
各ブロックの暗号化処理に,直前の入力ブロックの暗号化によって得られた暗号ブロックを利用する(入力ブロックと暗号ブロックの排他的論理和を取る).
すなわち,フィードバックデータとして,直前の暗号ブロックを用いる.
最初のブロックに対しては,初期ベクトル(IV)を暗号ブロックとして与える.
-
初期ベクトルが異なれば同じ鍵でも異なる暗号文が得られる.
-
単一暗号ブロック内の伝送ビット誤りは,2つの復号ブロックに影響を与える.
-
ビット損失などによりブロック境界が失われると,復号は失敗する(再同期が必要).
- メッセージ認証が可能である.
- 暗号通信(ISO8732),暗号FAXなどに利用される.
-
CFB (Cipher FeedBack) モード
-
処理方式
暗号化:
\begin{eqnarray} Y_i &=& E_k(X_i),\ X_1=IV\\ C_i &=& M_i \oplus
\psi_L(Y_i, j)\\ X_{i+1} &=& \psi_R(X_i, 64-k)\ ||\ \xi(C_i,
k-j)\quad i = 1\ldots n \end{eqnarray}
復号:
\begin{eqnarray} Y_i &=& E_k(X_i)\\ M_i &=& C_i \oplus
\psi_L(Y_i, j)\\ X_{i+1} &=& \psi_R(X_i, 64-k)\ ||\ \xi(C_i,
k-j)\quad i = 1\ldots n \end{eqnarray}
-
特徴
-
直前の暗号ブロックを暗号化したものと入力ブロックの排他的論理和を取り暗号ブロックとする.この暗号ブロックをさらに暗号化して次の入力ブロックと結合する処理を繰り返す.
フィードバックデータは,直前の暗号ブロックを暗号化したものになる.
- 同期の必要がない(自己同期).
- メッセージ認証が可能である.
- パディングが不要である.
- 回線暗号装置(ISO9160)などに利用される.
-
OFB (Output FeedBack) モード
-
処理方式
暗号化:
\begin{eqnarray} Y_i &=& E_k(Y_{i-1}),\ Y_0=IV\\ C_i &=& M_i
\oplus \psi_L(Y_i, j)\quad i = 1\ldots n \end{eqnarray}
復号:
\begin{eqnarray} Y_i &=& E_k(Y_{i-1})\\ M_i &=& C_i \oplus
\psi_L(Y_i, j)\quad i = 1\ldots n \end{eqnarray}
-
特徴
-
初期ベクタを暗号化することによって得られるデータ(フィードバックデータ)を最初の入力ブロックと排他的論理和を取り暗号とする.
さらに,このフィードバックデータを暗号化して次の入力ブロックと結合し次の暗号ブロックとする処理を繰り返す.
フィードバックデータは,初期ベクタを繰り返し暗号化したものになる.
- メッセージに関係なく事前計算ができる.
- パディングが不要である.
- ビット損失に対して再同期が必要である.
-
ビット誤りに対して影響が伝播しない(画像通信,AV暗号システムなどに利用される).
-
CTR (Counter) モード
-
処理方式
暗号化:
\begin{eqnarray} O_i &=& E_K(T_i)\quad i = 1\ldots n;\\ C_i &=&
M_i \oplus O_i \quad i = 1\ldots n-1;\\ C^*_n &=& M^*_n \oplus
MSB_u(O_n) \end{eqnarray}
復号:
\begin{eqnarray} O_i &=& E_K(T_i)\quad i = 1\ldots n;\\ M_i &=&
C_i \oplus O_i \quad i = 1\ldots n-1;\\ M^*_n &=& C^*_n \oplus
MSB_u(O_n) \end{eqnarray} ここで,$u$
は最終ブロックのビット数であり,$C^*_n$,$M^*_n$ はそれぞれ $u$
ビットの最終ブロックである.
CTRモードにおけるカウンタ $T_i$
の値は,同一の鍵を用いるすべての平文ブロックに対して異なっている必要がある.通常,このカウンタ値は初期値
$T_1$ を基にインクリメンタル関数(標準では,$m$ ビットの $x$
を与え,$x+1\ \bmod\ 2^m$ を返す関数)により生成する.
-
特徴
-
カウンタと呼ばれる一連の入力ブロックを暗号化することによって得られるデータと平文とを排他的論理和を取り暗号とする.
-
カウンタの暗号化は,平文または暗号文に関係なく事前に計算ができる.
-
カウンタの暗号化は,カウンタ値が決定されているならば,各ブロック独立かつ並列に実行できる.
- パディングが不要である.
- ビット誤りに対して影響が伝播しない.
このように,ECB と CTR
モード以外は最初のブロックの暗号化に初期ベクタと呼ばれるブロック長と同サイズの初期値を指定する(最初のブロックの暗号化時にフィードバックデータを生成するために用いる).
入力文と鍵が同じでも,この初期ベクタ値を変えることにより異なった暗号文が得られる.このため,暗号文解析が難しくなる.
なお,初期ベクタ値は暗号化と復号で同一の値を用いるが,鍵と異なり秘密にしなくても安全性は損なわれない.
CFB,OFB,CTR は,ブロック暗号をストリーム暗号として扱うことができる.
主な暗号利用モードを図に示す.
認証用の利用モード
-
GCM (Galois/Counter) モード
GCM は暗号化としてCTRモードを,認証として Galois mode
を組み合わせたものである.鍵となるのは認証に用いられるガロア体
(Galois field) における乗法であり,利用されるガロア体 GF(2128)
は以下の多項式で定義される.
x128 + x7 + x2 + x + 1
-
並列計算が可能であり,CBCモードのように連鎖モードを用いる認証アルゴリズムよりも高速化が可能である.
- GCM はブロック長128ビットのブロック暗号に適用可能である.
-
CCM (Counter with CBC-MAC) モード
CCM
は認証子生成・暗号化アルゴリズムと,復号・検証アルゴリズムからなる.CCM
は,メッセージ及び認証データに対して CBC-MAC による MAC
を生成し,MAC 処理で生成されたタグとメッセージを CTR
モードで暗号化する.
- CCM はブロック長128ビットのブロック暗号に適用可能である.
-
ブロック暗号の暗号化関数のみが用いられ,復号関数は用いられない.
-
CTR と CBC-MAC の両方に同じ秘密鍵を用いるので鍵のセットアップは
1 回である.ECB モードの 2
倍のブロック暗号呼び出しを行うため,処理量も ECB に比べ 約 2
倍になる.
-
CCM 処理中の CTR 処理と CBC-MAC 処理は並列処理が可能である.
-
EAX (Conventional Autheticated-Encryption) モード
CTR モードと
OMAC
を組み合わせた利用モードである.メッセージ,nonce,ヘッダ情報を入力とし,メッセージは
nonce から生成された撹拌 nonce N を開始値として CTR
モードで暗号化される.さらに,N,暗号文の MAC,ヘッダ情報の MAC
を排他的論理和し,その結果をタグとする.
-
ヘッダ部分の処理とメッセージ部分の暗号化処理の効率が異なる.メッセージ部分の処理はヘッダ部分の処理の2倍必要である.
-
ブロック暗号の暗号化関数のみが用いられ,復号関数は用いられない.
パディング
ブロック暗号を用いてメッセージを暗号化する場合,メッセージはブロック単位に暗号化される.
このとき,メッセージがブロック長に満たない場合,ブロック長に足りない部分へ特定のデータを埋め込んでブロック長にする処理が必要になる.これをパディングと言う.
復号されたデータや署名データから,パディングしたデータを取り除く処理が必要となるが,この処理を曖昧性がなく一意に行なえることが必要である.
このようなパディング処理の方法として,幾つかパディングのフォーマットが規定されている.
暗号ライブラリを利用する場合,一般的にはこのパディング方式をパラメータとして指定することになる(あるいは,パディング方式を含んだアルゴリズムを指定する).
以下に,主なパディング方法を示す.