part2では,PKIの基本を解説する。PKIを理解するうえで避けては通れない公開鍵暗号方式について説明したうえで,公開鍵暗号方式を使うことで, part1で取り上げたインターネットの四つの脅威がどのように解決されるのか,具体的に見ていく。

 PKIを説明するうえでどうしても避けて通れない技術がある。公開鍵暗号方式だ。そこでまずは公開鍵暗号方式についてきちんと理解しておこう。

 古典的な暗号方式では,あるデータを暗号化する際に使う暗号鍵と,暗号化されたデータを元に戻す復号のときに使う暗号鍵が同じだった。

 それに対して公開鍵暗号方式は,暗号と復号に異なる鍵を使う。つまり,片方の鍵で暗号化したものは,その鍵では復号できず,ペアで作られたもう一つの鍵でしか復号できない。しかも,二つの鍵は,暗号化する鍵と復号する鍵というように役割分担されているわけでなく,どちらも同じように暗号化と復号に使える(図1)。さらに,一方の鍵からもう一方の鍵を推定することが極めて難しい。こんな不思議な鍵のペアを使うのが,公開鍵暗号方式なのである。

図1●公開鍵暗号方式とは?
図1●公開鍵暗号方式とは?
ポイントは,二つの鍵を使う点。一方の鍵で暗号化したデータはもう一方の鍵でしか復号できない。しかも,片方の鍵からもう片方の鍵を推定できない。この公開鍵暗号方式がPKIの基盤技術となる。

 公開鍵暗号方式と呼ばれる理由は,この二つの鍵のうち一方をだれでも利用できるように公開するから。こちらの鍵を「公開鍵」と呼ぶ。もう一方の鍵はユーザー本人だけが秘密に保管することから「秘密鍵」と呼ばれる。

公開鍵を使えばだれとでも暗号通信できる

 次は,公開鍵暗号方式を使うことで,part1に取り上げたインターネットの四つの脅威がどのように解決されるのか,具体的に見ていこう。

 盗聴を防止するには,やりとりするデータを暗号化して送ればいい。

 ただし,古典的な暗号化方式では,送り手と受け手で同じ暗号鍵を持っている必要があり,不特定のユーザー同士では暗号通信ができなかった。

 それが,公開鍵暗号方式使えば,だれとでも暗号通信が可能になる(図2の(1))。なぜなら,ユーザーAがユーザーBに暗号で通信したいと思ったら,ユーザーBが公開している公開鍵を使って暗号化して送ればいいからだ。こうすれば,暗号化されたデータはユーザーBの秘密鍵でしか復号できない。ユーザーBの公開鍵をだれでも使えるようにしておけば,だれでも安全にユーザーBへデータを送れる。当事者以外はそのデータを盗聴できなくなる。

図2●公開鍵暗号方式を使えば四つの脅威を取り除ける
図2●公開鍵暗号方式を使えば四つの脅威を取り除ける
暗号化と電子署名という二つの方法で,図1の四つの脅威を取り除き,ネットワークでも十分確実な情報のやりとりが可能となる。
[画像のクリックで拡大表示]

計算結果を暗号化したものが電子署名

 改ざん,なりすまし,否認の三つの脅威は,実は一つの対策で防止できる。それは,やりとりする文書に電子的な署名をつける「電子署名」という方法である(図2の(2))。電子署名でも,公開鍵暗号方式が使われる。では,電子署名の処理の流れを追って見ていこう。

 送信側では,相手に送る文書を基に電子署名を作る。まず最初に文書を「一方向ハッシュ・アルゴリズム」という関数にかける。

 「一方向ハッシュ・アルゴリズム」などと書くと,難しい印象を持つかもしれないが,イメージとして捉えるのはそれほど難しくない。たとえば,文書を整数の並びに置き換えて考えてみよう。文書が「5,3,8,7,2」の場合,その合計を計算すると「25」になる。文書の一部が改ざんされたりして内容が「5,4,8,7,2」と変わると,計算結果も「26」に変わる。この両者を比べれば元の文書が改ざんされたのがわかるというわけだ。さらに,計算結果(この場合は「25」)から元の文書(数字の並び)を導き出せない。

 こうした関数を一方向ハッシュ・アルゴリズムといい,計算結果をダイジェストと呼ぶ。

 PKIでは,SHA-1(シャーワン)MD5(エムディーファイブ)といったアルゴリズムが使われる。文書をこれらのアルゴリズムにかけると,一定長のダイジェストを結果として出す。

 ダイジェストが計算されたら,次はそのダイジェストを自分の秘密鍵で暗号化する。この暗号化されたダイジェストが電子署名そのものである。

電子署名で三つの脅威が解消されるワケ

 送信側のユーザーAは,こうして作成した電子署名を元の文書につけてユーザーCに送る(図2の(2))。これで,改ざん,なりすまし,否認の三つを解消できる。次は受信側の手順からしくみを見ていこう。

 受信側のユーザーCは,電子署名を送信者であるユーザーAの公開鍵で復号する。さらに,受け取った文書から送信側と同じ手順でダイジェストを計算する。電子署名を復号して得られた結果と,文書から計算したダイジェストを比較して両者がまったく同じなら,二つのことが同時に言える。つまり,(1)その文書は確かにユーザーAが送信したものであり,(2)文書は途中で改ざんされていない。

 この文書がもし,ユーザーA以外の人から送られてきたものなら,ユーザーAの公開鍵で電子署名を復号できない。何らかの結果が出ても,それは文書をハッシュ・アルゴリズムで計算した結果と合致しない。これで,なりすましが防げる。途中で文書が改ざんされていた場合も,電子署名を復号した結果と文書をハッシュ・アルゴリズムで計算した結果が合わなくなる。

 これで,電子署名がなりすましと改ざんの対策になることが確認できた。ということは,同意に否認の防止にもなっている。なぜなら,その文書は確実にユーザーAから送られてきたものだと確認できたのだから,後でユーザーAが「そんな文書は送っていない」と言っても言い逃れはできない。

 今回は,なりすましと改ざん,否認の三つの問題を電子署名という一つのしくみで解決したが,それぞれの目的だけに公開鍵暗号方式を使うことも可能である。たとえば,ハッシュ・アルゴリズムだけでも文書の改ざんを防止する手段になるし,まるで意味のない文字列を自分の秘密鍵で暗号化したものでも電子署名として使える