暗号メールと電子署名

IIJ技術研究所 山本和彦

まくら

僕は名前決めに重きをおく方です。なにかプロジェクトを始める場合に、名前が悪いとやる気になりませんし、逆に素敵な名前が見付かった場合はもう勝ったも同然な気持になります。

僕が世に出した作品の中に、「ハッピーネットワーキング」と「転ばぬ先のセキュリティ」があります。自分自身なかなかよい題名だと思っていますし、好評を博したのも題名がよかったことときっと無関係ではないでしょう。

僕がまだ修士の学生だった 5 年前(- -)、当時盛んに議論されていた PEM (Privacy Enhanced Mail)という暗号メールが便利に利用できるように、ユーザ・インターフェイスを作成し始めました。そのころ僕は mh-e という Emacs 上のメールリーダを使っていましたが、結局 mh-e を拡張することではよいユーザ・インターフェイスを提供できないという結論に達し、一からメールリーダを書くことにしました。

当然まず名前が必要です。プログラムを 1 行も書いてないのに、友達と名前を議論し始めました。僕の考えた条件は、

です。(念のため付け加えておきますが、3 番目の条件である「誰が読んでも」とは、人種を問いません。日本人もアメリカ人もナイジェリア人も、同じように、しかも簡単に発音できるべきです。たとえば "gnus" とか "Linux" などは、僕にとって悪い名前の部類に属します。)

英和辞典の "M" のページを綿密に調べた結果、"Mew" に決定しました。しばらく後に、バイリンギャルの友達に感想を尋ねたところ、「かわいい」という評価を頂きました。そう、もう勝ったも同然だったのです。

さて、昨年の夏ごろから「Mew はポケモンにバージョン番号で負けている」と何回もからかわれました。確かに現在の Mew の stable バージョンは、1.93 です。(0.07 負けています。)そこで、バージョンを一気に上げて反撃に出ることにしました。プロジェクト名が必要ですが、「Mew 2 の逆襲」に決まったのは言うまでもありません。

Mew 2 ではデータベースを活用し、メールを整理しなくても必要なメールを簡単に探せる機能を提供して逆襲します。(誰に?)

さて、今回は PEM に始まった暗号メールと電子署名の歴史を紐解いてみましょう。以下は、インターネットマガジンに掲載された原稿に加筆訂正したものです。

暗号メールとは何か?

「悪者がはびこるインターネットは現実社会よりも危険である」という誤った報道が心無いマスコミによって繰り返されています。確かに、遠隔から姿を見せずに侵入できることやデータの電子的なコピーは証拠が残らないことなどはクラッカーに有利に働くように思えます。通信技術を深く理解していない人にとって、インターネットがよく分からない危険な世界に映るのもいたしかたないでしょう。

しかし、そう悲観的になる必要はありません。危害を加える者にとって武器となる技術が存在する一方で、プライバシを保護する技術も洗練されています。現実社会の安全性にはなんら客観的な根拠がないのに対し、電子的なプライバシのそれは数学的に保証されています。この意味では、現実社会よりもインターネットの方が安全といえるでしょう。ユーザが正しく技術を理解し適切に利用すれば、インターネットは快適で安心できる世界です。

インターネットユーザにとってもっとも馴染みの深いサービスの 1 つがメールです。今回はメールのプライバシを保護するための技術について解説していきます。これは一般的に「暗号メール」という名で知られていますが、この言葉から連想されるイメージはプライバシ保護機能の一面しか捉えていません。インターネットに普及しているプライバシ保護の技術では、以下の 4 つの項目を保証できます。もちろん、暗号メールも例外ではありません。

機密性
意図した相手だけが内容を理解できること。

第3者には内容を知られないこと。

認証
ある名前を名乗る人を、本当にその人だと確認すること。
完全性
送信者が書いた内容がそのまま受信者に伝わること。

第3者によって内容が変更された場合は、それを検知できること。

否認防止
通信内容を後から否定できないこと。

機密性は、まさに暗号メールと言う言葉から連想される機能です。たとえば、Alice が Bob にメールで愛をささやく場合、当然内容を他の人には知られたくありません。メールの機密性を守るためには、Bob だけが読めるようにする暗号技術が利用できます。以前は政府や軍隊の独占物であった解読に数千年以上もかかる強力な暗号は、もう我々市民の手の中にあります。封筒で覆うことで中身を保護している郵便と比較すれば、暗号メールがいかに安全であるかが理解できるでしょう。

認証という機能自体は分かりやすく、その必要性もすぐに察しがつくでしょう。再び封筒を例に挙げるなら、差出人に自分以外の名前を書くのは簡単です。たとえば、嫉妬に狂った Chris が Alice の名を騙って Bob に絶交文を書くかもしれません。郵便では、筆跡だけが相手を見極める手段です。筆跡という手がかりがないメールでは、From: フィールドに Alice と書くだけで、十中八九 Bob をだませます。しかし、「電子署名」利用して認証すれば、メールの差し出し人を確実に認証できます。

完全性も直観的に理解できる機能でしょう。Alice が書いた「愛しています」というセリフを Chris が「大嫌い」と変更し Bob に送りつけるのは、筆跡のないメールなら造作もないことです。しかし、電子署名を利用すればメールの完全性も保証できます。ただし、一般的に暗号メールでは、変更が加えられた事実は検知できますが、どこが変更されたかまでは分からない方式が使用されています。

否認防止は見落としがちなプライバシ保護機能です。インターネットで商売をする際には、商品の発送後に「こんな発注はかけていません」と言われると大打撃です。このような悪質ないたずらを防止するために、後から通信の内容を否定できない機能は、インターネット上でのプライバシ保護にとって重要です。否認防止は認証と完全性から保証できます。つまり、ある文章の内容が変更されていないことを証明でき、さらにそれを書いた人を確実に認証できるなら、否定のしようがありません。このように、否認防止も電子署名によって実現できます。

暗号メールの仕組み

暗号メールには、公開暗号という近代的な暗号が必要となります。この公開暗号のおかげで、上記の 4 つの機能が実現可能となりました。以下では機密性と認証を実現する方法を簡略化して解説します。実際の方法はこれよりも複雑ですが、詳しいことは今回は触れません。

公開鍵暗号では、2 つの鍵を生成します。一方を秘密に保持し、他方を公開するので、 それぞれ「秘密鍵」と「公開鍵」と呼ばれています。これらの鍵は互いに鍵と錠前の関係にあります。一方で暗号化すれば、他方で復号化できます。他の鍵では、暗号文を復号化できません。また、公開鍵から秘密鍵を推測することは大変困難なようになっています。さらに、秘密鍵と公開鍵の組は他の誰のものとも違うように生成されます。(なぜそうなるのか分かる人はいますか? 数学は大切だ! :)

Alice が Bob に暗号文を送ることを考えてみましょう。Alice は Bob の公開鍵、Bob は Alice の公開鍵をあらかじめ手にいれているとします。Alice はラブレターを書いた後、Bob の公開鍵を使ってその内容を暗号化します。この暗号文は、Bob の秘密鍵でしか復号化できません。Bob の秘密鍵は Bob しかもっていないのですから、Bob しかラブレターの内容を読めず、機密性が達成できます。

次は、Bob が Alice を認証する方法に移りましょう。機密性の場合とは逆に、今度は公開鍵と秘密鍵の立場を反転させます。Alice はメッセージのコピーを取り、それを自分の秘密鍵で暗号化します。これが電子署名です。この電子署名とメッセージを一緒に Bob に送ります。Bob はまず、電子署名を Alice の公開鍵で復号化し、一緒に送られてきたメッセージの内容と比較します。まったく同じであれば、このメッセージは Alice が書いたに違いありません。なぜなら、この電子署名を生成できるのは、Alice の秘密鍵を持っている Alice だけなのですから。

完全性もこの電子署名で確かめられることが容易に分かるでしょう。ただし実際には、メッセージ全体を暗号化することは非効率なので、メッセージの特徴づける 16 〜 20 バイト程度の値を抽出しこれを暗号化します。これが、改変の可能性は検出できても、どこが改変されたのか分からない理由です。

否認防止も電子署名で実現できます。 その人が書いたと認証でき、 その人しか書けないことと改変されていないことを証明できるのですから、 (秘密鍵を盗まれたとでも言い訳しない限り) 否定のしようがありません。

暗号メールでは、内容の暗号化と電子署名を同時に組み合わせて使用可能です。よって、1 つのメッセージを送る際に、前述の 4 つの機能を同時に実現できます。

暗号メールの利用で重要なのは、

です。秘密鍵は通常パスワードで暗号化されて保存されています。必要になったらパスワードを入力し、秘密鍵を復号化して取り出すのです。電子署名が改変されないようにするには、信用できる誰かに公開鍵自体に署名してもらうとよいでしょう。この「誰か」を誰にするのかということを、信用モデルといいます。信用モデルについては、後述します。

規制と特許

どんな道具ももろ刃の剣です。適切に利用すれば作業を効率化できますし、また生活を豊かにしてくれます。しかし、悪用されると武器や凶器になりかねません。暗号もそうです。市民のプライバシを保護する一方で、警察がマフィアの悪事の相談を盗聴することを困難にします。

政府によっては危機感を覚え、市民の暗号利用を制限したり、輸出を規制したりしています。アメリカに暗号の輸出規制があることはよく知られた事実です。一説にはアメリカ政府が解読できる暗号のみに輸出の許可がおりるそうです。フランスには、市民が暗号を使用してはいけないという規制があります。(あったという方が正しいかもしれません。;-) また、アメリカでは通信相手に加えて政府も暗号文を解読できるような仕組みをもつ暗号を利用するように圧力をかけ始めています。

幸いなことに日本国内での暗号の利用は自由です。しかし、アメリカの政策になびく通産省は、暗号関連製品の輸出規制に乗り出し始めました。このような規制はソフトウェアの発展やビジネスの展開を著しく抑制します。インターネットの発展を願うなら、このような規制はナンセンスです。

また、暗号は特許やロイヤリティの問題にも悩まされてきました。一企業の利益につながるような技術を、インターネットの標準化組織 IETF が標準として採用する訳にはいきません。しかし、特許はいつかは切れます。1997年4月、多くの人が待ちに待った 2 つの強力な公開鍵暗号の特許が消滅しました。Diffie-Hellman 暗号と ElGamal 暗号です。ちなみに、有名な RSA 暗号の特許は 2000年9月まで有効です。IETF で標準化されるインターネットのあらゆるセキュリティ技術は、このような束縛のない暗号を採用し始めています。

このような背景を持つ現在、我々が安心して利用できる暗号メールは 2 つ存在します。それは、PGP/MIME と S/MIME です。

暗号メールの歴史

PGP/MIME と S/MIME が出現するまでには、時代時代の背景を反映した方式の提案が繰り返されて来ました。ここでは、その長い歴史を簡単に振り返ってみましょう。

長い間利用されて来たメールは、本文に ASCII 文字列のみが許されていました。このため、初期のメールは、テキストメールと呼ばれています。日本で本文に日本語を入れているのは厳密にはルール違反でした。また、画像を送るためには、手作業でファイルを一旦 ASCII 文字列に符号化し本文に挿入していました。

インターネットが裾野を広げ、ユーザの要望が多様化するに従い、テキストメールを拡張するための大きな流れが 2 つ生まれました。一方が国際化を含むマルチメディアへの対応、他方がプライバシの強化です。これらの議論の場は、IETF です。

プライバシの強化としては、PEM(Privacy Enhanced Mail)が開発されました。 暗号メールの歴史からみれば、前述の 4 つの機能を持つ仕様が公開されて知識が普及したことはまさに記念碑的事件だったといってよいでしょう。しかし、PEM はテキストのみしか扱えなかったこと、利用を始めるにはまず誰かに公開鍵を認証してもらい「証明書」を手に入れる必要があることなどが足枷となり潮流に乗れませんでした。

PEM の仕様策定とからみ合うように、マルチメディアメール MIME (Multipurpose Internet Mail Extensions) が標準化されました。MIME では、データ型を指定するためのラベルの導入されたのでさまざまなデータを添付できます。テキストデータには文字コードを指定可能です。また、複数のデータを格納するためのマルチパートやメール自体を格納するためのメッセージというデータ型が定義されたので、本文を柔軟に構造化できます。さらに、配送する際に安全となるような符号化方式も採択されました。

MIME はさまざまなベンダーから支持され急速に広まりました。MIME のおかげで本文に日本語を入れることはもはや違反ではありませんし、さまざまなデータを簡単に添付可能です。

MIME の登場以来、テキストしか扱えない PEM が時代遅れであることは誰の目にも明らかでした。そうは言っても PEM が果たした役割が色あせる訳ではありません。事実 PEM で開発された符号化方式は、そのまま MIME に利用されています。このような時代背景の中で、MIME というメールの汎用的な枠組を使ってプライバシを保護する方式を開発する必要がありました。つまり、PEM の MIME への統合です。

この統合作業の結果、暗号メールの枠組とその中で実現される具体的なサービスが分離さました。前者はマルチパートを利用するので、「セキュリティマルチパート」と呼ばれています。この枠組の中で実現した PEM が、MOSS(MIME ObjectsSecurity Service)です。MOSS は PEM の後継者ですが、互換性は有りません。MOSS では PEM の場合と同じように「証明書」を発行してもらう必要がありますが、このことが再び足枷となりました。結局 MOSS はベンダーの支持を受けることができず、現在では歴史的な産物の地位に甘んじています。

IETF の活動とは関係なく、インターネットで暗号ツールの実質的な標準の地位を得ていたのがPGP(Pretty Good Privacy) です。PGP は証明書の発行というお役所的な制約を持たず、知合い同士が互いに認証し合うことで信用を保証するので、使い始めるのが容易です。暗号や署名を施したファイルをテキストメールで配送するために、PGP は独自の書式を生成できました。しかし、MIME の中での利用方法は規定されていなかったので、自動的な署名の検証や暗号の復号化などは実現できていませんでした。

そこで、PGP を MIME へ統合するために、セキュリティマルチパートに PGP の書式を埋め込む方式が提案されました。この方式は IETF で承認され、現在では PGP/MIME と呼ばれています。PGP の普及度に合わせる形で、PGP/MIME を実装したメールリーダがかなり存在しています。

S/MIME は、暗号の老舗 RSADSI 社が提供する暗号に関する書式 PKCS を MIME に当てはめた暗号メールです。セキュリティマルチパートに強くは依存していませんが、署名の 1 方式としてそれを利用します。S/MIME バージョン 1 は、IETF とは関係なく規定されました。しかし、IETF で承認されない規約は廃れていく傾向にあります。そこで、S/MIME の開発者達は、バージョン 2 を開発する際に IETF に参加しました。

その際 S/MIME は IETF にはふさわしくない問題を抱えていました。1 つは、S/MIME が RSADSI 社の登録商標であったことです。IETF が、ある会社の宣伝となるような名前を利用する訳にはいきません。もう 1 つは、S/MIME が利用している RSA 暗号の特許です。商標と同様に、特定の企業が所有し使用料を課している特許を採用することはできません。

S/MIME の開発者達は、RSADSI に登録商標は保持するものの宣伝目的には利用しないという約束を取り付け、バージョン 2 を「情報提供」という形で発行しました。現在バージョン 3 の策定が進んでいます。Diffie-Hellman 暗号を採用し、真の標準となることを目指しています。

実は、PGP バージョン 2 もRSA 暗号を利用しています。PGP バージョン 2 に基づいた PGP/MIME が標準化のプロセスに乗れたのは、まだ IETF の採択ポリシが緩かったからです。現在、PGP/MIME は S/MIME と同様「情報提供」の位に格下げされています。

現在の PGP のバージョンは 5/6 であり、この書式を広めるために IETF で OpenPGP という分科会が結成されました。PGP バージョン 5 は、公開暗号として RSA 暗号をオプションに、 ElGamal を必須にしています。この PGP の書式は標準として採択されました。今後は、PGP バージョン 5 に基づいた PGP/MIME を開発する必要があります。

PGP/MIME と S/MIME の違い

PGP/MIME と S/MIME のどちらを使えばよいのか迷ってしまう方も多いでしょう。それぞれ、長所と短所を持ち合わせているので、特徴をみきわめて自分の目的に合った方を利用するべきです。

まず機能の差として、信用モデルの違いが挙げられます。PGP は知合いに自分の公開鍵に署名してもらうことによって、自分の公開鍵の信用度を保証してもらいます。つまり、通信相手をよく知っているなら、PGP/MIME は導入の敷居も低く現実的な方法といえます。

S/MIME では、どこかの認証局に自分の公開鍵を保証する証明書を発行してもらう必要があります。つまり、導入の際に利用できる認証局を探さなければならないというPEM や MOSS と同じ問題を抱えています。(自分自身で署名する自己署名という方法を使えば、すぐにでも使い始められますが、そんなことをするぐらいなら PGP/MIME を用いた方がよいでしょう。)

PEM や MOSS の時代とは違って、認証局のサービスを行なう会社が現れました。Verisign 社やサイバートラスト社が例として挙げられます。また、会社でプライベートな認証局を立ち上げてこれを利用する方法も考えられます。

面倒という感が拭えない認証局ですが、知らない人達が通信する際には、両者を認証できる第3者が必ず必要になります。真剣にインターネットでの商売を考えるのなら、認証局は避けては通れない問題です。

実装と普及の面に目を向けてみましょう。PGP バージョン 2 はフリーソフトとして普及したことを反映してか、PGP/MIME を実装しているフリーソフトウェアがたくさん存在しています。日本からも Mew や SEMI といった優れた実装が提供されています。

PGP バージョン 2 の実装は世の中に 1 つしかなかったのに対し、PGP バージョン 5 の実装は少なくなくとも 2 つあります。1 つは本家の PGP で、もう 1 つは GNU の GNUPG です。そこで、今まで悩まなくてよかった相互接続性という問題に直面することになるでしょう。また、多くの人が利用している PGP バージョン 2 から最新のバージョン 5 への移行という問題も抱えています。

S/MIME は、当初から複数のベンダーが実装していました。たとえば、Netscape の Mozilla、MicroSoft の Outlook Express、Orangesoft の Winbiff などで利用できます。当然相互接続性を検証しいく必要があります。また、これらが対応しているのはバージョン 2 であるため、バージョン 3 への移行も課題に挙げられます。さらに、S/MIME には認証局との相互接続性の問題もあります。

あんか

話が込み入りましたので、お口直しに Mew の小話を 1 つ。

田園都市線でたまたま僕の隣に座った女の子達の 1 人が言いました。
「みゅうってどうやったら取れるの?」
どうして僕が Mew の作者だと分かったのかと、ドキッとして女の子の方を向くと、別の女の子が言いました。
「アイテムを 7 番目に置く」
(@ @)??!

次回は文字コードについてお話しします。