暗号化とは

通信の内容が、当事者以外には理解できないように、普通の文字・記号を一定の約束で他の記号に置き換えたもの。
鍵 K 鍵 K
文書(平文) 暗号器 復号器 文書(平文)

なお、公開鍵暗号では、暗号化鍵と復号鍵が別になる。

暗号化

暗号化には、1文字単位で暗号化するものと、 文書を一定の長さのブロックに区切り、ブロックごとに暗号化するもの(ブロック暗号)がある。

1文字単位で暗号化するもの



ブロック暗号



暗号攻撃法

暗号の攻撃法には以下のものがある。
  1. 同じ鍵で暗号化された、いくつかの平文とその平文に対する暗号文が分かっているとき、鍵を解読する。
  2. 暗号文だけから平文を解読する。できれば鍵も解読する。
  3. 任意の平文に対してそれに対応する暗号文が入手できるとき、鍵を解読する。
  4. 任意の暗号文に対してそれに対応する平文が入手できるとき、鍵を解読する。


公開鍵暗号

公開鍵暗号は、暗号化鍵と復号鍵が異なるものである。したがって、相手に暗号化鍵を教える際に他人に漏れても、
直ちに暗号を解読されるという事態にはならない。
その意味で、対称鍵暗号より優れているが、スピードが遅いのが難点。
今日では、対称鍵暗号の鍵を相手に送るのに主に使われている。

基本的なアルゴリズムは以下の通り。(以下、私の勝手な解釈。)
AがBに平文を暗号化して送るとする。
  1. まず、平文を W とする。
  2. Bは、一方向関数 f を用意する。
    一方向関数とは、 全単射だが逆関数を f からだけでは事実上計算できない(計算に非常に時間がかかる)もの。
  3. Bは、f に対応する「鍵」 k を使って f と f の逆関数 g を前もって計算しておく。
    ここで言う「鍵」とは、いわゆる暗号理論における鍵とは違った意味。
  4. f を公開鍵とし、Aは f(W) を送信する。
  5. Bは、自分だけが知る秘密鍵 g を使って gf(W) = W を計算し、平文を得る。
ここで問題となるのは、送り手が誰かを受け取り側が確認できないこと。
だが、これは、以下のように電子署名をすることで解決できる。
  1. まず、平文を W とする。
  2. Aは、一方向関数 F を用意し、Bは、一方向関数 f を用意する。
  3. Aは、F に対応する「鍵」 K を使って F と F の逆関数 G を前もって計算しておく。 Bは、f に対応する「鍵」 k を使って f と f の逆関数 g を前もって計算しておく。
    G は Aだけが知っている秘密鍵、g は Bだけが知っている秘密鍵である。
    なお、K と k は違うものなので、f から G を計算したり、F から g を計算したりはできない。
  4. F と f を公開する。
  5. Aは、Bの公開鍵 f と、自分の秘密鍵 G を使って f(G(W)) を送信する。
  6. Bは、自分の秘密鍵 g とAの公開鍵 F を使って Fg(f(G(W))= W を復元する。
    第三者はg が分からないため、f(G(W))を傍受できても復元できない。
    Bは G が分からないため、G(W) を偽造できない。
これで、送り手が誰かを確認できるようになった。



アルゴリズムは分かったが、ではそんなに都合の良い一方向関数があるか。

一方向関数

  1. 素因数分解を利用する。
    有名なのが、RSA暗号

  2. 離散対数問題を利用する

  3. 有理数体上での楕円関数曲線を利用する

  4. ナップザック問題を利用する


主な公開鍵暗号

一方向関数として採用されているものを併記してある。

KPS(Key Predistribution System)

公開鍵自体の偽造などを防ぐため、公開鍵自体をどうやって送り手に送るかが問題になる。
KPSは公開鍵をe-mailアドレスなどを用いて、送り手が識別しやすく、偽造しにくくしたもの。
暗号化アルゴリズムを複雑にして、逆関数を求められないように工夫してある。


キーエスクロー

鍵を紛失、焼失した場合など、暗号を復号する手段がなくなるのを防ぐため、
というより、凶悪犯罪を政府機関が捜査するときの障害を取り除けるように、
秘密鍵も公開鍵も、どこかの機関が管理することを、政府は要求している。
鍵自体を保存するのではなく、鍵生成の種、アルゴリズムなどを別々の機関が保存、管理し、
いざというときは、それらの情報から鍵を生成できるようにしたもの。
エスクローという言葉のイメージが悪いので、キーリカバリーシステムとも言う。





表紙に戻る