電子証明書は、公開鍵暗号方式の特長を活かして「通信の暗号化」と「電子署名」という二つの目的で利用することができます。電子署名とは、紙に署名をしたり印鑑を押すことと同じように、電子データに自分の署名を加えることです。
それでは、暗号化の流れから見てみましょう。
電子証明書で情報を暗号化する
ここでは、A 君とB さんのふたりが暗号化通信を行う場合を例に して説明します。ふたりはすでに自分の電子証明書を持っている ものとします。
暗号化の流れ
1. 電子証明書を交換する
まず、A 君とB さんはそれぞれ自分の電子証明書を相手に渡します。
p style="text-align: center;">
これで準備完了です。引き続き、A君からBさんへ暗号文を送信するところを見てみましょう。
2. 相手の電子証明書を使って暗号化
A 君はB さんに送りたい情報(平文)を用意し、B さんの電子証明書に含まれている公開鍵で暗号化し、B さんに送信します。
3.自分の秘密鍵を使って復号
B さんは、A 君から送られた暗号文を受け取ります。
受け取った暗号文はB さんの公開鍵で暗号化されたものです。したがって、B さんの秘密鍵を使えば復号できます。
暗号化に使われたB さんの電子証明書は誰でも入手することができます。
つまり、B さんの電子証明書を持っている人なら誰でもB さん宛に暗号文を送ることができます。
しかし、B さん宛の暗号文を復号できるのは、B さんだけです。なぜなら、B さんの電子証明書に含まれている公開鍵に対応する秘密鍵はB さんだけが持っているからです。
もし、A 君がB さん宛に送った暗号文を悪意のあるハッカーが入手しても、ハッカーはB さんの秘密鍵は持っていませんから、復号することはできません。
B さんがA 君に暗号文を送る場合も同様です。B さんはA 君の電子証明書で平文を暗号化してA 君に送ります。
実際には私たち一般の利用者でも安心して暗号化通信を行えるように、このような手続きはソフトウェアが自動的に行うことがほとんどです。
電子証明書で情報に電子署名をする
電子証明書は広く一般に配布することを前提としているため、第三者が入手することもできます。
もし、A 君の電子証明書を利用して暗号化したメッセージを、Bさんになりすましたハッカーが送ってきたとしたらどうなるでしょうか?
A 君は、自分宛に送られてきた暗号文が間違いなくB さんからのものであるかを知ることはできません。A 君とB さんは、暗号文が間違いなく情報をやりとりしたい相手から送られてきたものであることを確認するためにはどうすればよいのでしょうか?
電子署名も電子証明書を使って行うことができます。次に電子署名の仕組みを見てみましょう。
電子署名を実現する「ハッシュ」とは?
電子証明書を使った電子署名では、公開鍵暗号方式に加えて、「ハッシュ」と呼ばれている技術が使われています。
ハッシュとは、元となっているデータをある決まった長さのまったく異なるデータに変換することです。この変換手法を「ハッシュ関数」と呼んでいます。
また、変換後のデータを「メッセージダイジェスト」と言います(メッセージダイジェストを「ハッシュ値」や「フィンガープリント」と呼ぶこともあります)。
ハッシュ関数によって生成されたメッセージダイジェストにはいくつかの特性があります。
メッセージダイジェストを元に戻すことはできない
第一に、メッセージダイジェストから元のデータに戻すことはできません。
データの変換は、常に元のデータからメッセージダイジェストへの一方向のみです。
元のデータが変化するとメッセージダイジェストも変化する
第二に、元のデータにわずかでも変更が加わると、メッセージダイジェストも変化します。
このため、変更前のメッセージダイジェストと比較できれば、もし元のデータが改ざんされてしまったとしても、改ざんを検知することができます。
電子署名に使われているハッシュ関数は、異なるデータから同一のメッセージダイジェストが生成される確率は極めて低くなっています。
電子署名の流れ
1. 平文からメッセージダイジェストを生成する
それでは今度もA 君とB さんのふたりを例にして、RSA アルゴリズムをベースとした一般に良く使われている電子署名の流れを説明します。A 君が電子署名をするものとします。
まず、A 君はB さんに送る元のデータ(たとえば電子メールの本文など)を用意します。
そして、平文からハッシュ関数を使ってメッセージダイジェストを生成します。
2.メッセージダイジェストを秘密鍵で暗号化する
次にA 君は、メッセージダイジェストを自分の秘密鍵で暗号化します。
これが電子署名になります。
3. 相手に元のデータ・暗号化されたメッセージダイジェスト・電子証明書を送る
そしてA 君は、元のデータ・暗号化されたメッセージダイジェスト・自分の電子証明書をB さんに送ります。
A 君が電子署名したデータを受け取ったB さんは、A 君の公開鍵を使って暗号化されたメッセージダイジェストの復号を試みます。成功すれば元データの所有者が確かにA 君だと分かります。
なぜならA 君しか持ち得ない秘密鍵で暗号化されたメッセージダイジェストの復号に成功するのはA 君の公開鍵だけだからです。
電子署名で改ざんの検知もできる
B さんはA 君の平文が第三者によって改ざんされているかどうかを検知することもできます。
A 君が暗号化したのはメッセージダイジェストですから、B さんは、A 君から送られてきた元のデータからハッシュ関数を使ってメッセージダイジェストを生成し、復号したメッセージダイジェストと比較すればよいのです。
もし、二つのメッセージダイジェストが一致しなければ、改ざんされた可能性があるということになります。
なお、実際にはメッセージダイジェストの作成や暗号化などはソフトウェアが自動的に行います。
私たちは安心して電子署名を行ったり電子署名を確認することができます。
最後に余談を
電子証明書に含まれている電子署名とは?
第7 話で「電子証明書には認証局の署名がある」と説明したことを覚えてますか?電子証明書に含まれている電子署名とは何でしょうか?電子署名の流れを理解した方は想像できると思います。
それは、認証局に提出された所有者情報と公開鍵のメッセージダイジェストを、認証局の秘密鍵で暗号化したものです。
認証局の秘密鍵は認証局だけが持っています。したがって、ウェブブラウザなどのあらかじめインストールされている認証局の公開鍵(認証局の電子証明書)を使って復号することで、電子証明書の発行者は間違いなく認証局であることがわかります。
また、電子証明書に含まれる所有者情報が第三者によって改ざんされたとしても、検出することができます。電子証明書に含まれている所有者情報と公開鍵からメッセージダイジェストを生成し、元のメッセージダイジェスト(認証局の秘密鍵で暗号化されたもの)と比較すればよいのです。
二つのメッセージダイジェストが一致しなければ、電子証明書が改ざんされた可能性があるということになります。
第8話 まとめ
- 電子証明書を使うと暗号化と電子署名が行えます。
- 平文を暗号化するには、送信相手の電子証明書を入手し、電子証明書に含まれている公開鍵を使います。
- 電子署名にはハッシュという手法も併用します。ハッシュを使うと情報が改ざんされているかを検知できます。
- 平文に電子署名するには、平文からメッセージダイジェストを生成し、自分の秘密鍵で暗号化します。
- 電子証明書には認証局の秘密鍵を使った電子署名が含まれています。