暗号方式
ハイブリッド暗号
公開鍵暗号方式は,相手へ容易に鍵を渡すことができる安全で強力な暗号であるが,処理速度が遅いため大量のデータ処理や速度を要求される処理には向いていない. 一方,共通鍵暗号方式は,速度も比較的速く扱いやすい暗号であるが,鍵の交換があらかじめ必要になるという大きな問題がある.
この2つの欠点を補い合う形で組み合わせて使われることがある.共通鍵暗号方式を使って平文を暗号化し,その暗号化に使用した「共通鍵自体」を公開鍵暗号方式を使用して暗号化し,相手に送るという方法である.このような方法は,ハイブリッド暗号,ハイブリッド方式などと呼ばれている.メールの暗号化を行う PGP や,Webサイトとの暗号化通信に使われる SSL/TLS などでもこのハイブリッド方式が使われている.
ISO における公開鍵暗号の標準化の中で,公開鍵暗号の鍵共有の機能を鍵カプセル化メカニズム(KEM)として,共通鍵暗号によるデータ暗号化の機能をデータカプセル化メカニズム(DEM)として定式化された.安全な KEM と安全な DEM を組み合わせることにより安全なハイブリッド暗号を構成できることが示されている.
- 鍵カプセル化メカニズム
鍵カプセル化メカニズム (Key Encapsulation Mechanism : KEM) は,公開鍵暗号を使って,秘密鍵暗号用の鍵をカプセル化する技術である.
KEM は,以下の3つのアルゴリズムから構成される.
- 鍵生成アルゴリズム $\mathrm{Keygen} ()$
鍵サイズなどのパラメータを入力し,公開鍵,秘密鍵のペア $(P_k, S_k)$ を生成する.
- 暗号化アルゴリズム: $\mathrm{Encrypt} (P_k, Option)$
公開鍵 $P_k$ (必要に応じてオプション情報)を入力し,データ暗号化鍵 $K$ と暗号文 $C$ の組 $(K, C)$ を生成する.
- 復号アルゴリズム: $\mathrm{Decrypt} (S_k, C)$
秘密鍵 $S_k$ と暗号文 $C$ を入力し,データ暗号化鍵 $K$ を生成する.
KEM を用いて,利用者 $A$ と $B$ は以下の手順で鍵共有を行うことができる.
- 利用者 $A$ は,暗号化アルゴリズムを用いて,暗号化鍵 $K$ と暗号文 $C$ を生成する.このとき,鍵の共有相手 $B$ の公開鍵を用いる.
- 暗号文 $C$ を鍵を共有すべき相手 $B$ に送る.
- 暗号文 $C$ を受け取った $B$ は,自身の秘密鍵を用いて復号アルゴリズムにより $C$ を復号し,暗号化鍵 $K$ を求める.
- $A$ と $B$ は,暗号化鍵 $K$ を共有する.
KEM の具体的なアルゴリズムとしては,RSA暗号を利用した RSA-KEM や楕円曲線暗号を用いた PSEC-KEMなどがある.
- データカプセル化メカニズム
データカプセル化メカニズム (Data Encapsulation Mechanism : DEM) は,共通鍵暗号によりデータを暗号化・復号するメカニズムである.
DEM は,以下の2つのアルゴリズムから構成される.
- 暗号化アルゴリズム: $\mathrm{Encrypt} (K, L, M)$
データ暗号化鍵 $K$,ラベル $L$,平文 $M$ を入力し,暗号文 $C$ を出力する.
- 復号アルゴリズム: $\mathrm{Decrypt} (K, L, C)$
データ暗号化鍵 $K$,ラベル $L$,暗号文 $C$ を入力し,平文 $M$ を出力する.
- ハイブリッド暗号メカニズム
ハイブリッド暗号メカニズムは,KEM と DEM すなわち公開鍵暗号と共通鍵暗号を組合せた暗号であり,公開鍵暗号で共通鍵暗号用の鍵を暗号文に埋め込むものである. 復号時には,秘密鍵で共通鍵暗号用の鍵を復元した後,共通鍵暗号で平文を復元する.
- 暗号化アルゴリズム:$\mathrm{Encrypt} (P_k, L, M, Option)$
公開鍵 $P_k$,ラベル $L$,平文 $M$,オプション $Option$ を入力し,暗号文 $C$ を出力する.
- 復号アルゴリズム:$\mathrm{Decrypt} (S_k, L, C)$
秘密鍵 $S_k$,ラベル $L$,暗号文 $C$ を入力し,平文 $M$ を出力する.