公開鍵暗号

公開鍵暗号の概要 公開鍵暗号の実現機能による分類 推奨暗号アルゴリズム

公開鍵暗号の概要

公開鍵暗号とは

公開鍵暗号は,公開鍵と秘密鍵という異なる2つの鍵を用意しておき,暗号化の際には公開されている通信相手(復号者)の公開鍵を用い,復号には自分の秘密鍵を用いる. このため,事前に鍵を共有する必要がなく,自分の秘密鍵のみを秘密にしておくだけでよい.ここで,公開鍵と秘密鍵はある数学的な関係を持った数値であり,暗号アルゴリズムに基づき生成されるものである.

このとき,どのような送信メッセージ(平文)に対しても,暗号化鍵(公開鍵)によって暗号化されたメッセージ(暗号文)が復号鍵(秘密鍵)によって復号され,元の平文を得られることが前提になる. 暗号化鍵は公開されているので,ネットワーク内のどの相手に対しても平文を暗号化して送信することができる.ただし,暗号化鍵と復号鍵は逆写像の関係にあるので,安全性を保持するためには,暗号化鍵から復号鍵を求めることが困難でなければならない.

公開鍵暗号方式の概念は,W. DiffieとM. Hellmanにより以下のように説明されている.

平文のメッセージ空間 $\{M\}$ における2種類の可換な変換方式

$E_K : \{M\} \rightarrow \{M\}$

$D_K : \{M\} \rightarrow \{M\}$

で,以下のような性質を満たす $E_K$ と $D_K$ があれば,$E_K$ を暗号化アルゴリズム,$D_K$ を復号アルゴリズムとする公開鍵暗号が実現できる. ここで ,$K$ は鍵 (暗号化鍵と復号鍵)である.
  • すべての $K$ に対して,$E_K$ と $D_K$ は逆変換である.
  • すべての $K$ および $M$ に対して,$E_K$ と $D_K$ の計算は容易である.
  • ほとんどすべての $K$ に対して,$E_K$ から $D_K$ を求めるのは困難である.
  • すべての $K$ に対して,$K$ から $E_K$ と $D_K$ の組を求めるのは容易である.

上述の性質を満たすために,公開鍵暗号方式では一方向性関数と呼ばれる関数を利用する.これは,この関数を $f$ とした時,平文 $M$ から暗号文 $C = f(M)$ を求めるのは簡単であるが,暗号文 $C$ から平文 $M = f^{-1}(C)$ を求めるのは極めて困難であるという性質をもつ関数である.

上記の一方向性を満足する関数を実現する代表的な数学上の問題として,以下の問題が公開鍵暗号の基盤として用いられている.

パディング

共通鍵暗号におけるパディングの主な目的は,平文メッセージの長さを一定長(ブロック長)にすることである. これに対し,公開鍵暗号におけるパディングの目的は以下の2点にある.

復号されたデータや署名データから,パディングしたデータを取り除く処理が必要になるが,この処理を曖昧性がなく一意に行なえることが必要である. このようなパディング処理の方法として,幾つかパディングのフォーマットが規定されている.

暗号ライブラリを利用する場合,一般的にはこのパディング方式をパラメータとして指定することになる(あるいは,パディング方式を含んだアルゴリズムを指定する).

以下に,主なパディング方法を示す.

公開鍵暗号の実現機能による分類

公開鍵暗号は,その利用目的からは次の3つに分類される.

これらの機能を定式化して示す (具体的なアルゴリズムは,公開鍵暗号アルゴリズムを参照).

署名

暗号(守秘)

鍵共有

公開関数 $ψ_P$ と秘密関数 $ψ_S$ の組および一方向性関数 $φ$ に対し,
   $ψ_P(r) = ψ_S(φ(r))$
が成立つことに基づく方式である.

鍵共有の手順は次のようになる.

  1. 公開鍵処理
    • 乱数 $r$ を生成
    • 中間鍵 $c = φ(r)$ を生成
    • 中間鍵 $c$ を鍵共有相手に送信
    • 共有鍵 $k = ψ_P(r)$ を生成
  2. 秘密鍵処理
    • 中間鍵 $c$ を取得
    • 共有鍵 $k = ψ_S(c)$ を生成

上記の公開鍵処理と秘密鍵処理をそれぞれ鍵共有を行う者同士で実行することにより,同一の鍵 $k$ が得られる.

推奨暗号アルゴリズム

inserted by FC2 system