前章で説明した3つ暗号方式を組み合わせて、電子メールに応用することによって、以下の3つのセキュリティを確保します。

・ メッセージの秘匿性
・ 認証
・ メッセージの完全性

メッセージの秘匿性とは、メッセージを暗号化することによって、意図しない相手に盗み 見られることを防ぐことです。共通鍵暗号、公開鍵暗号方式と組み合わせることによって共通鍵暗号における秘密鍵の共有の困難さを解決し、メッセージの暗号化を実現します。認証とメッセージの完全性はメッセージに電子署名を付け加えることによって実現されます。すなわち、電子署名の正しさを確認することによって、送信元に偽りのないことと、メッセージに改ざんのないことが確かめられます。電子署名は、メッセージダイジェスト関数と公開鍵暗号方式を組み合わせることによって実現します。 そのための手順にはS/MIMEやPGPがあります。次節以降では、どのような手順でこれら3つのセキュリティが可能となるのかを見ていきます。

3.1 公開鍵暗号方式の使い方

まず、あなたは、公開鍵暗号方式を使うために、公開鍵とプライベート鍵のペアを作成します。 その公開鍵は暗号メールをやり取りする相手に渡します。
あなたの公開鍵を持っている通信相手は、あなたが、プライベート鍵をキーとして暗号化したデータを復号することができます。この方式を電子署名で用います。
また、通信相手があなたの公開鍵を用いて暗号化したデータを、あなたは、あなたのプライベート鍵で復号できます。 この方式を暗号化で用います。
したがって、受け取った、公開鍵が正しく相手のものであることが、前提となります。どのようにすれば、受け取った公開鍵が間違いなく相手のものであると信用できるのかについては次章で説明します。

一方、プライベート鍵は、作成した本人だけが保持し、あなただけが使えるように、パスワードを使って暗号化しておくなど安全に保管しておきます。 そして、電子署名をするとき、または、暗号化されたメッセージを復号するために、プライベート鍵を使う場合、パスワードを入力してから使うようにします。 プライベート鍵のパスワードは他人に明かさずにしておき、あなただけが使えるようにしておきます。 ただし、プライベート鍵のパスワードの扱い方は、製品によって、様々です。 OSと統合する、起動後の初回のみ確認するなどのバリエーションがあります。

3.2 メッセ−ジの暗号化

1) 送信側と受信側の処理は以下のようになります。

送信側(アリス)

(1) メッセージを共通鍵暗号方式で、暗号化し暗号文を作成します。
(2) (1)で用いたプライベート鍵を、受信者の公開鍵を鍵として使って公開鍵暗号方式で暗号化します。→ 受信者の数だけ、同様の操作をします。
(3) (1) の暗号化の結果のデータとAの結果のデータをメールで送ります。

受信側(ボブ)

(4) 送られて来たデータの中から、自分宛のパートの暗号文を自分のプライベート鍵を鍵として使って公開鍵暗号方式で復号します。その結果、共通鍵暗号方式のプライベート鍵を獲ます。
(5) (4) で得たプライベート鍵を使って暗号文を復号し元のメッセージを得ます。



 

2) 暗号化されたメールメッセージの中身

暗号化されたメールメッセージは下表のような形式になっています。

受信者ごとのデータのうち、識別データが、自分宛のものを探し出し、そこについている、秘密鍵を暗号化したデータが与えられるので、プライベート鍵を鍵として、復号し、プライベート鍵を得ます。

暗号文
受信者Aの識別データ (証明書発行者名+シリアル番号)
暗号文の作成に用いた、暗号キーを受信者Aの公開鍵をキーとして公開鍵暗号で暗号化したデータ
受信者Bの識別データ (証明書発行者名+シリアル番号)
暗号文の作成に用いた、暗号キーを受信者Bの公開鍵をキーとして公開鍵暗号で暗号化したデータ

3.3 ディジタル署名

1) 送信側と受信側の処理は、以下のようになります。

送信側(アリス)

(1) メッセージダイジェスト関数を使って本文のダイジェストを作成します。
(2) プライベート鍵をキーとしてダイジェストを公開鍵暗号方式で変換します。 → 署名データの作成
(3) 本文と署名データ((2) の結果)をメールで送ります。

受信側(ボブ)

(4) 発信者と同様に、メッセージダイジェスト関数を使って本文のダイジェストを作成します。
(5) 署名データを発信者の公開鍵をキーとして公開鍵暗号方式で復号します。その結果、発信者の作った、ダイジェストを得ます。
(6) (4) と (5) の結果を比較して、同一であれば、発信が作成したメッセージであることが保証されます。


 

2) ディジタル署名のついたメールメッセージの中身

ディジタル署名をつけた、メッセージは下表のような形式になっています。

署名者を識別するデータがあるので、そこに示された証明書発行者名とシリアル番号から、署名者の証明書が明らかになり、その証明書に含まれる、公開鍵によって、署名を検証します。

メッセージ(平文)

署名データ

署名者の識別データ (証明書発行者名+シリアル番号)
ダイジェストを署名者の私有鍵を鍵として公開鍵暗号方式で暗号化したデータ(署名データ)

署名者の証明書(オプション)

3) 証明書の添付

署名者の証明書は、受信した側で既に持っていることも考えられるので、通信量を減らすなどの目的で証明書が添付されていない場合もあります。
Microsoft Outlook Expressでは、「署名付きメッセージにデジタルIDを追加する」をチェックすると証明書を添付し、チェックをはずすと証明書を添付しません。
Netscape Messengerでは、常に証明書を添付しています。
Oangesoft Winbiff+S/Goma では、「証明書を添付する」をチェックすると証明書を添付し、チェックをはずすと証明書を添付しません。

4) 平文のエンコード

電子署名には、上表のようなメッセージ本文を平文のまま送る形式とBASE64とよばれる、コード化をする形式があります。BASE64でコード化された場合、平文は一目では明らかになりませんが、元に戻すための決まった方法があるので、ユーザが意識することなく、メールソフトなどが自動的に元に戻して、平文が確認できます。
Microsoft Outlook Expressでは「署名する前にメッセージをエンコードする」をチェックするとこの形式になります。
Netscape Messengerでは、この形式は選択できません。
Oangesoft Winbiff+S/Gomaでは「分離署名(クリア電子署名)」のチェックを外すとこの形式になります。



3.4 ディジタル署名と暗号化を組み合わせて使う

1) 送信側と受信側の処理は、以下のようになります。

送信側

(1) ディジタル署名をします。
(2) ディジタル署名のついたメッセージを入力として暗号化します。

受信側

(3) 受信したメッセージを復号して、ディジタル署名されたメッセ−ジを得ます。
(4) ディジタル署名を検証します。


2) ディジタル署名と暗号化を組み合わせる2つの方法

暗号化とディジタル署名をひとつのメッセージに対して行う場合、2通りの方法が考えられます。

(1) ディジタル署名したデータを入力として暗号化をする(Sign-Then-Envelop)
受信側では、暗号文を復号し、電子署名されたデータを得る。その後、ディジタル署名の検証を行います。
1)ではこの方法について説明しています。S/MIMEではこの方法が使われます。

(2) 電子署名したデータと暗号化をしたデータをくっつける。(Sign-And-Envelop)
受信側では、暗号文を復号し、平文を得ます。
平文のダイジェストと、電子署名中の暗号化されたダイジェストを復号し、比較、検証します。
PEMと呼ばれる、S/MIMEに似た古い仕様では、この方式になっており、S/MIMEではPEMとの互換のためにのみ用いられます。

i一方のみが使えるようにしておきます。ただし、プライベート鍵のパスワードの扱い方は、製品によって、様々です。OSと統合する、起動後の初回のみ確認するなどのバリエーションがあります。

署名者の識別データ (証明書発行者名+シリアル番号)
ダイジェストを署名者のプライベート鍵を鍵として公開鍵暗号方式で暗号化したデータ (署名データ)

(署名者の証明書)

暗号文

受信者Aの識別データ (証明書発行者名+シリアル番号)
暗号文の作成に用いた、暗号キーを受信者Aの公開鍵をキーとして公開鍵暗号で暗号化したデータ
受信者Bの識別データ (証明書発行者名+シリアル番号)
暗号文の作成に用いた、暗号キーを受信者Bの公開鍵をキーとして公開鍵暗号で暗号化したデータ

 



 

 



Copyright(c) 2001 Information-technology Promotion Agency, Japan All rights reserved.