【特集】S/MIMEでセキュアな電子メール環境をつくる!
〜実は危ない電子メール、安全性を実現するS/MIMEの詳細解説〜

プライベートに仕事に、いまや“電子メール”はわれわれの生活には欠かせないものになりつつある。だが、電子メールが重要なインフラになるほど、第三者による「盗聴」や「なりすまし」といったリスクがつきまとうようになる。そこで活躍するのがS/MIMEだ。S/MIMEを利用することで、暗号化による安全な通信が行える。また、証明書などのPKIのインフラの利用により、本人かどうかの確認も行える。

本記事では、このS/MIMEの仕組みや利用方法について紹介する。また、S/MIMEとよく引き合いに出されることの多い「PGP」との違いについても解説している。ぜひ、安全なメールインフラ構築の参考にしていただければと思う。

澤野弘幸
オレンジソフト
2001/5/30


 1. なぜメールにセキュリティが必要か?
Index
1. なぜメールにセキュリティ?
メールのリスク/S/MIMEとPGP

2. S/MIMEの仕組み
メールフォーマット/署名の検証

3. メーラごとの設定法
Outlook Express/Nescape他

 現在、私たちにとって電子メールは、会社やプライベートでも、コミュニケーションのツールとして欠くことのできないものとなっています。そして、コミュニケーションには意図しない第三者というリスクがつきまといます。古代ローマ時代の将軍シーザーは、どうしたら対戦相手に同盟国とのメッセージを盗み見られないか考えました。シーザーは「メッセージのアルファベットを3文字ずらしているよ」ということを、あらかじめ同盟国の相手と決めておいて、メッセージの文字をそれぞれ3文字ずらして送りました。相手は送られたメッセージの文字を3文字分戻すことで、もともとのメッセージの内容を知ることができました。これが暗号の始まりといわれています。

 では、インターネットの現代、電子メールではどのように暗号が使われているのでしょうか? 本記事では、電子メールで使われるS/MIMEという暗号技術に焦点をあて、電子メールを安全に使うための方法を学んでいこうと思います。

   1.1 電子メールのリスク

 まず、電子メールに潜むリスクには、どのようなものがあるのでしょう。インターネットに潜む3つのリスク、

  • 盗聴
  • なりすまし
  • 改ざん

は、すなわち、電子メールのリスクでもあるわけです。まずは、この3つのリスクが、電子メールではどのような形で表れるのかを見てみましょう。暗号の説明には定番となっている「アリス」「ボブ」「イブ」に登場願います。

●盗聴
 アリスがボブに電子メールでメッセージを送る場合、メッセージの先頭にあて名として、ボブのアドレスを付けて送信します。このメッセージがボブに届くまでに、幾つものコンピュータを経由しています。

 この途中の経由しているコンピュータの操作者は、簡単にアリスの電子メールのメッセージを見ることができます。

図1 盗聴は、メールが届くまでの間に第三者によってその内容を見られること。上記の場合、アリスからボブ宛のメールをイブによって見られている


●なりすまし

 アリスとボブの電子メールを知っているイブは、送り元アドレスにアリスのメールアドレスを記入することによって、「アリス」と偽ってボブに電子メールを送ることが簡単にできます。

 電話なら声で、手紙なら署名の筆跡などで本人だと分かりますが、電子メールの世界では、本人の痕跡を残すことができません。

図2 なりすましは、第三者があたかも本人であるかのように偽って本人名義のメールを送信すること。上記の場合、イブがあたかもアリスであるかのように偽ってボブにメールを送信している


●改ざん

 イブは盗聴した電子メールの内容を変更。「アリス」になりすまして、ボブに元の内容とは異なるメッセージを送ることができます。

図3 改ざんは、第三者がメールの送信内容を途中で変更してしまうこと。上記の場合、アリスが送信した内容のメールを、イブが途中で変更してしまっている


   1.2 リスクを回避する方法

 このようなリスクを持った電子メールを安全に使うために、それぞれのリスクに対応した3つの方法が考えられています。

●盗聴には暗号化で対応
 メッセージを暗号化することによって、たとえ盗聴されたとしても、簡単には元のメッセージが読み取られないようにします。これを「メッセージの秘匿性」といいます。

図4 メール本文を暗号化すれば、簡単には元の内容がわからない


●なりすましには電子署名で対応

 電話における声、手紙における署名のように、「電子署名」と呼ばれる本人の痕跡を付けて送ります。この方法で、差出人を偽る「なりすまし」に対応します。これを「認証」といいます。

図5 メールに「電子署名」と呼ばれる本人を識別する署名をつけておけば、第三者によるなりすましを防げる


●改ざんには電子署名と暗号化で対応

 暗号化しておけば、元のメッセージを読み取られませんし、電子署名を付けておけば、暗号文の差出人を偽ることもできません。これを「メッセージの完全性」といいます。

図6 暗号化と電子署名を併用すれば、第三者には、内容を見ることも、差出人を偽ることもできない


●暗号方式や電子署名の内容をどうやって相手に伝えるか?

 暗号化と電子署名が、電子メールのリスクを回避するための方法として有効なようです。でも、みんなが勝手な方法で電子メールを暗号化しても、元のメッセージへの戻し方が分かりませんし、電子署名が付いていても、何を意味しているのか分かりません。暗号化とはいえ、自分にしか元のメッセージが分からないのでは意味がありません。

 そこで、たくさんある暗号方式のうち、どれをどのように組み合わせて使うのか、暗号化されたデータをどのようにフォーマットするのか、みんなが同じように扱えるための約束事が必要です。そこで、Philip Zimmermannという人が考えたのがPGP(Pretty Good Privacy)です。それとは別に、IETFといういろんな約束事を決める団体で議論して、紆余曲折ありながら結実したのがS/MIME(Secure/Multipurpose Internet Mail Extensions)です。2つとも、共通鍵暗号方式公開鍵暗号方式と、メッセージダイジェスト関数と呼ばれる方法を組み合わせて使っています。

 まず最初に世に出たのはPGPです。1991年にインターネットに配布されています。これまた、紆余曲折、すったもんだあって、現在ではバージョン6になっています。PGPが出た後、MOSS(MIME Object Security Services)という方式や、PEM(Privacy Enhanced Mail)という方式も考えられましたが、現在では使われていません(このPEMが発展して、後のS/MIMEとなったといってもいいかもしれません)。

 そして、PGPとともに現在使われているのが、S/MIMEと呼ばれる方式です。PGPとS/MIMEが少し違うのは、PGPはPhilip Zimmermann氏がコンピュータのプログラムとして実行できるものを提供しましたが、S/MIMEはそのままで実行できるプログラムではない点です。S/MIMEは、あくまでも電子メールに暗号を利用する際の手順の約束事です。

 IETFで決められた約束事は、特別にRFCと呼びますが、約束事ごとにそれぞれ番号を振って「RFCの何番」というふうにいいます。S/MIMEにもRFCの番号があります。RFC2311からRFC2315までがS/MIMEです。現在では、S/MIMEもすでに次のバージョンが出ていて、バージョン3となっています。そのバージョン3に対応するRFCとして、RFC2630〜RFC2634が発表されています。バージョンアップとともに仕様も膨らむのはソフトウェアの宿命なのか、この5つのRFCでもバージョン3の仕様は満たせないため、引き続き議論がなされています。そのため、現在市場に出回っているほとんどの製品は、まだ前のバージョンであるS/MIME バージョン2を使っています(かくいうオレンジソフトのS/MIME対応ソフトウェア「S/Goma」もバージョン2です)。

 PGPですが、いまではこちらも仕様をオープンにして、「みんなで議論しよう」ということで、OpenPGPとしてRFCになっています。こちらはRFC2440です。

 PGPやS/MIMEが利用している、「共通鍵暗号方式」「公開鍵暗号方式」「メッセージダイジェスト関数」といった暗号技術について、次節で説明します。

   1.3 暗号の分類

 暗号化とは、メッセージと鍵と呼ばれるデータを組み合わせ、数学的な処理を施すことで、事実上、判読が不可能な暗号文を出力することです。この数学的な処理方法のことを暗号アルゴリズム、または単にアルゴリズムといいます。暗号文から元のメッセージに戻すことを復号といいます。暗号の元となるメッセージについては、暗号文と対比させる意味で平文といいます。電子メールの場合、メールにはメッセージの文章とファイルを添付したりしますが、暗号の世界では平文とはいいつつも、文章だけではなく添付ファイルも含めて平文と呼んでいます。鍵は数バイトから数百バイトのデータで、暗号アルゴリズムに適したデータを使います。冒頭でシーザーがやったことにあてはめると、アルファベットを3文字ずらして伝えていましたから、3が鍵で、文字をずらすことが暗号アルゴリズムにあたります。

 PGPやS/MIMEで使われている暗号の方式がシーザーのころと違うことといえば、暗号アルゴリズムを公開していることです。「文字をずらしているよ」って公表しているってことですね。シーザー以降も、ずっと後までそうでしたが、暗号アルゴリズムは秘密にしておくのが安全でした。だって、鍵と処理方法の両方を分からなくしておいた方が安全ですよね。でも、現在の暗号は、鍵さえなければ処理方法が知られていても安全です。「処理方法を知っていれば、暗号文を解読する方法も考えられるだろう。だけど、この数学的な処理を解くのには、コンピュータの時代だとはいえものすごく時間がかかるぞ、2年3年てものじゃない。数十年とかかるだろう」という考え方です。

 だから、その安全性とは未来永劫保証されているわけではなくて、「現実的な話、そんなに時間がたってから解読できても意味ないよね」ってことです。それよりも、公開してみんなが使えたり、安全性の検証をみんなで行った方がよいわけです。従って、公開されたアルゴリズムは特許の問題もありますが、特許権が放棄されていたり、期限が切れていたりすれば、自由に使っていいわけです。例えば、共通鍵暗号では「RC2」「DES」「トリプルDES」「IDEA」、公開鍵暗号では「RSA」、メッセージダイジェスト関数では「MD5」「SHA1」などがそれに該当します。RSAというアルゴリズムは、アメリカのRSAという会社が特許を持っていましたが、2000年の9月、期限切れのちょっと前に特許権を放棄しました。

 また、3つの方式のうち、メッセージダイジェスト関数はほかの2つとは異なり、鍵は存在しません。そして復号もしません。つまり、元の平文に戻すことは絶対にできません。どんなことをしても変換結果から元の平文に戻すことができないことが、メッセージダイジェスト関数の「キモ」です。この「キモ」を使って電子署名が行われます。

●共通鍵暗号方式
 対称鍵暗号秘密鍵暗号とも呼ばれます。暗号化に使う鍵と復号に使う鍵が同じです。古典的な方法ですね。後から、公開鍵暗号方式が考えられたので、それとの対比でこのように呼ばれるようです。通信相手ごとに違う鍵を用意して、相手によって使い分けます。または、通信ごとに鍵を用意して、暗号文と鍵をそのつど相手に渡すことになります。その場合、何か工夫が必要です。

図7 共通鍵暗号方式では、暗号化と復号に使う鍵は同じものである

 共通鍵暗号方式は、さらに2つの方式に分けることができます。ストリーム暗号ブロック暗号です。ストリーム暗号の1つにRC4があります。RC4はSSLで使われています。PGPやS/MIMEではブロック暗号を使います。ブロック暗号の仲間では、アメリカ政府とIBMが一緒に考えた、DESがこの方式です。DESを3回繰り返したトリプルDESや、PGPで使われているIDEAなどもそうです。そして、アメリカ政府が呼びかけてDESの後継となるさらに強固なブロック暗号(AES:Advanced Encryption Standard)を決めようということで、たくさん立候補した中から、Rijndael(“ラインデール”と読むそうです)が最終候補になっています。このAES(おそらく間違いなく「Rijndael」)をS/MIME バージョン3で使うための手順も議論されています。

●公開鍵暗号方式
 暗号化と復号に異なる鍵を使います。あなただけが手元に持っていて、他人に使われないようにしておく鍵を私有鍵といいます。一方、通信の相手に渡す鍵を公開鍵といいます。そして、

  • あなたの公開鍵で暗号化したら、あなたの私有鍵で復号します
  • あなたの私有鍵で暗号化したら、あなたの公開鍵で復号します

図8 公開鍵暗号方式では、暗号化と復号に、それぞれ公開鍵と私有鍵の一対のペアを使用する

 つまり、利用者それぞれが一組の公開鍵と私有鍵の鍵のペアを持ちます。あなたの公開鍵を公開して、みんなが入手できるようにしておけば、相手によって使い分けたり、通信のつど鍵を用意する必要はありません。なんだか便利そうです。でも、共通鍵暗号に比べて複雑な数学の処理をしているので、処理に時間がかかります。元となるメッセージが大きいと、ものすごく時間がかかります。ここでも、何か工夫が必要です。

 もう1つの問題。公開したあなたの公開鍵、みんなはどうして、あなたの公開鍵だと信頼できるのでしょう? その話は、また後ほど詳しく説明します。また私有鍵について、秘密鍵という言い方もしますが、ここでは共通鍵暗号における秘密鍵との混同を避けるために、私有鍵ということにします。

 公開鍵暗号のアルゴリズムには、電子署名と暗号化の両方に使えるRSA、暗号化に使うDiffie-Hellman、電子署名に使うDSAなどがあります。ここではやはり、使い勝手のよいRSAが最もよく使われています。これ以降の解説で公開鍵暗号と出てきたら、それはRSAのことだと考えてください。S/MIME バージョン3では、特定の企業に依存しないDSAやDiffie-Hellmanを積極的に使っていこうとしていましたが、特許も切れたということで、「やっぱりRSAでもいいんじゃない?」って感じになっているようです。

 また最近では、楕円曲線という数学的な特性を使った方式もあるようです。ECDSAなどがそうです。楕円曲線暗号はRSAに比べて鍵が小さく、処理が軽量になるという長所があるようです。

●メッセージダイジェスト関数
 まず、メッセージを固定長の小さなデータに変換するものをハッシュ関数といいます。ハッシュ関数のうち、変換結果を元のメッセージに戻すことができないものをメッセージダイジェスト関数といいます。メッセージダイジェスト関数の特徴はもう1つ、複数のメッセージが同じ結果になることが、計算上ありえないことです。メッセージダイジェスト関数が変換した結果をダイジェストといいますが、ダイジェストの長さはMD5で16バイト、SHA1で20バイトです。

図9 メッセージダイジェスト関数で生成されたデータ(ダイジェスト)は、元の形に復元することができない

 ただ、MD5は衝突の危険性が報告されているので、最近では、SHA1がよく使われます。

   1.4 電子署名と暗号化の手順

 それでは、S/MIMEやPGPが3つの方式をどのように組み合わせて電子署名や暗号化をしているのか、あなたがボブに電子メールを送ることにして、見てみましょう。まずは、電子署名です。

●電子署名
 送信側(あなた)
(1) メッセージダイジェスト関数を使ってメッセージのダイジェストを作成します
(2) あなたの秘密鍵とダイジェストを組み合わせて公開鍵暗号方式で暗号化します(→署名データの作成)
(3) ボブにメッセージ本体と署名データをメールで送ります
 
 受信側(ボブ)
(4) あなたと同様に、メッセージダイジェスト関数を使ってメッセージのダイジェストを作成します
(5) 署名データをあなたの公開鍵で公開鍵暗号方式を使って復号します。その復号結果とは、あなたが作ったダイジェストです
(6) (4)(5)の結果を比較して、同一であれば、受け取ったメッセージは、あなたが作成したメッセージに間違いないことが分かります。なぜなら、あなたの公開鍵で復号できるものは、あなたの私有鍵でしか暗号化できないからです。そしてもし、受け取ったメッセージが元のメッセージと違うなら、あなたが作ったダイジェストと受け取ったメッセージのダイジェストは違った値になるからです

図10 電子署名を検証する仕組み。メールに添付されている暗号化されたダイジェストと、受け取った平文をもとに生成したダイジェストを比較して、同一のものであれば、「改ざん」や「なりすまし」はなく、本人の文書であることが確認できる



●暗号化
 送信側(あなた)
(1) あなたは、メッセージを共通鍵暗号方式で暗号化し暗号文を作成します
(2) (1)で使った秘密鍵を、ボブの公開鍵を使って公開鍵暗号方式で暗号化します。受信者が複数いる場合、受信者ごとに、同様の操作をします
(3) (1)の暗号化の結果のデータと(2)の結果のデータをメールで送ります
 
 受信側(ボブ)
(4) 送られてきたデータの中から、自分あてのパートの暗号文を自分の私有鍵を使って公開鍵暗号方式で復号します。その結果、共通鍵暗号方式の秘密鍵を獲得します
(5) (4)で得た、秘密鍵を使って暗号文を復号し元のメッセージを得ます

図11 暗号化の際は、まず本文を共通鍵を使って暗号化し、この共通鍵を送信相手の公開鍵を使用して暗号化したものを添付して送る。メールを受け取った人物は、自分の私有鍵を使って暗号化された共通鍵を復号。復号された共通鍵により、本文の復号ができる。このように複雑な手順をとる理由は、少しでも処理に時間のかかる公開鍵暗号方式の処理を緩和するためである



●電子署名と復号
 送信側(あなた)
(1) 下の絵のようにメッセージに電子署名を付けて、それをメッセージとして暗号化します
 
 受信側(ボブ)
(2) 受け取ったメッセージを復合します。その結果は、電子署名の付いたメッセージになりますね。今度はその電子署名を検証します

図12 電子署名と暗号化を組み合わせた例。まず本文に電子署名を行い、暗号化して相手に送信する。受け取った相手は、そのメールを復号して電子署名の検証を行う


 これまでのやりとりについて、ちょっとまとめてみます。電子署名と暗号化、それぞれに暗号方式を組み合わせて使っています。

電子署名 メッセージダイジェスト関数と公開鍵暗号
暗号化 共通鍵暗号と公開鍵暗号

 公開鍵暗号の最初の説明では、メッセージ自体を暗号化の元データとするような話でした。それでももちろん問題はないのですが、実際に使うときには、ダイジェストや秘密鍵を組み合わせます。ダイジェストなら20バイト程度、共通鍵暗号の鍵にしても多くて21バイト程度。それらを公開鍵暗号の元データにすることで、公開鍵暗号の処理に時間がかかるという欠点を補うのです。

 もう1つ、共通鍵暗号の欠点、秘密鍵を幾つも用意しないといけない、用意した秘密鍵を相手に渡さなければならないという点。こちらは、秘密鍵を公開鍵暗号で暗号化するということで解決しています。

 下の一覧は、共通鍵暗号方式と公開鍵暗号方式の中で代表的なアルゴリズムの鍵の長さを表にしたものです。

 共通鍵暗号方式
RC2
40/64/128ビット
DES
56ビット
トリプルDES
168ビット
 公開鍵暗号方式
RSA
512/768/1024/2048ビット
DSA
512/768/1024/2048ビット
ECDSA
112から256ビットくらいまで


   1.5 公開鍵をいかにして信頼するのか
     〜PGPとS/MIMEの違い

 電子署名、暗号化ともに、「公開鍵が確実に通信相手のものである」ということが重要な意味を持ちます。電子メールで「この公開鍵を使って暗号化してね」と公開鍵を添付して送ったとしても、「そのメールって本物なの?」と振り出しに戻ってしまいます。「アリスの公開鍵です」といって公開鍵を入手したとしても、本当に本人のものかどうか、どうやって確認したらいいのでしょう?

 そこで必要になるのが電子署名です。アリスの公開鍵とアリスの名前、電子署名した人の名前などのデータを1つにして、それに電子署名を付けます。PGPでは、これもまた公開鍵と呼んでいます。S/MIMEでは、公開鍵証明書、または単に証明書といいます。

 では、その電子署名、だれがどうやって付ければ信頼できるものなのでしょうか? 同様に、電子署名を付けた人の公開鍵も信頼できるものでなければなりません。そのあたりの解決策が、PGPとS/MIMEでは異なります。

 S/MIMEでは、その仕組みにPKIを使っています。その点は、Webブラウザ〜Webサーバ間の通信の暗号化、認証を行うSSLと同じですね。PKIを一言でいってしまうと、「認証局という第三者的機関が、公開鍵とその持ち主を保証する」です。その結果が、認証局が電子署名して発行した公開鍵証明書と呼ばれるデータです。認証局を商用のサービスとして提供している会社として、ベリサイン社などが有名です。ちなみに、ベリサイン社では公開鍵証明書のことをデジタルIDと呼んだりしています。PKIについての詳細はここでは省きますが、解説した記事が別にありますので、興味がある方はSecurity&Trustフォーラムを参照してください。

 PGPはその出自からして、PKIのようなピラミッド型の階層構造はなじまないようです。PGPでは信頼の輪と呼ばれる参加者たちの相互扶助的な方式をとっています。では、PGPの信頼の輪とは、どのようなものなのでしょうか。下の絵をご覧ください。

図13 PGPの「信頼の輪」の関係図

(1) あなたはボブに直接会って公開鍵を受け取り、あなたの鍵で電子署名します

(2) あなたとイブ、アリスは、以前から暗号をやりとりしていて、お互いに公開鍵に電子署名を付けあっている間柄です

(3) イブとアリスは、受け取ったボブの公開鍵に付いているあなたの電子署名を検証します。間違いなくあなたの電子署名だと確認できれば、たとえイブとアリスの2人がボブのことをよく知らなくても、その公開鍵は信頼できるものとして扱います

 この方法の欠点は、例えば、私有鍵が盗まれて不正に利用されるような状況になったとき、それ以降は公開鍵の効力を無効としなければなりませんが、それを「無効だよ」と伝えることが困難です。本来、PKIでもその困難さは同じなのですが、PKIでは仕様として無効情報を参照するようにと規定しています。鍵の有効性を検証する中央機関があるような構造では、それも比較的容易に実現できそうですが、PGPのような中心を持たない構造では無理がありそうです。それでも最近のPGPでは、この点も改良されてきているようです。

   1.6 S/MIMEとPGPの使い道

 それぞれの長所、欠点をまとめてみます。

●S/MIMEの場合
 認証局という第三者的機関を導入したことにより、通信対象が広がり、不特定多数の相手と安全に通信することが可能になります。不特定多数と秘密を共有するというのもなんだか変ですよね。S/MIMEではどちらかというと、電子署名が有効に使われるのではないでしょうか。

●PGPの場合
 認証局という第三者的存在を必要としません。認証局のシステムの維持、管理ということが必要ないので、導入が容易です。友達同士とか、閉じたコミュニティの中で使うのに便利そうです。そこではどちらかというと、電子署名より部外者から秘匿すること、つまり暗号化が有効に使われるのかもしれません。


  「S/MIMEの仕組み」 へ


Index
【特集】 S/MIMEでセキュアな電子メール環境
1. メールになぜセキュリティが必要か?
電子メールのリスク
リスクを回避する方法
暗号の分類
電子署名と暗号化の手順
公開鍵をいかにして信頼するのか
S/MIMEとPGPの使い道
  2. S/MIMEの仕組み
S/MIMEを使った、メールメッセージの形式
電子署名と検証の仕組み
暗号化の仕組み
証明書の取得方法
電子署名から見たPKI
ほかの人の公開鍵証明書の集め方
  3. メーラでのS/MIMEの利用方法
Outlook Express
Netscape Messenger
Orangesoft Winbiff
 


Security&Trust フォーラム 新着記事
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Security & Trust 記事ランキング

本日 月間