宣伝。日経LinuxにてLinuxの基礎?を紹介する漫画「シス管系女子」を連載させていただいています。
以下の特設サイトにて、単行本まんがでわかるLinux シス管系女子の試し読みが可能!
Firefoxで拡張機能のインストール時に「この拡張機能は署名されていません」という警告が表示されるけれども、これについて、署名くらい付けろよという話がたまに出る。利用者の安全性を確保するという観点では確かに重要な事だ。けど、現実には、署名付きの拡張機能というのはほとんど無い。それは何故なのか。
このあたりのモヤモヤしてわからんかった事を、自分に理解できた範囲でまとめてみた。
……んだけど、このエントリの内容は嘘まみれであったことが分かった。訂正を含む、続きのエントリを書いたので、そっちを見てください。いちおう、以下の内容は自分の理解できた範囲で正確な情報を提供するように書き直したものです。
電子署名は、公開鍵暗号という方式に基づいた仕組みだ。公開鍵暗号とは、本人だけが知っている「秘密鍵」によって暗号化されたファイルを、誰もが知ることができる「公開鍵」を使って復号化するという、2つの鍵を使った暗号方式のこと。
施錠と開錠を1つだけの鍵でこなす、1つの鍵を使って暗号化と復号化を両方ともこなす「共通鍵暗号」方式では、「たった一つしかない鍵を他人に知られる」と、もう暗号が暗号として役に立たなくなる。そのため、鍵をどうやって他人に見られずに相手に渡すか、また、鍵をどうやって他人に知られないよう守り抜くか、というのが重要になる。
「公開鍵暗号」では、秘密鍵と公開鍵という2つの鍵を使うことでこれらの問題をクリアする。暗号化専用の「秘密鍵」と、復号化専用の「公開鍵」のそれぞれに役割を分けて、それらが正しい組み合わせで使われなければ機能しないようにしてしまうことで、本人は安心してファイルを暗号化して送ることができるし、また、相手はそのファイルを「本人が本物の秘密鍵で暗号化した物」と確認した上で、安心して復号化することができる。
あとの問題は、「その公開鍵が本当に本物の公開鍵なのかどうか」をどうやって保証するかという点。信頼できる相手から、第三者を介さず直接渡してもらえればそれでいい。しかし、インターネットという「情報のバケツリレー」が前提の世界では、「第三者を介さず」というのは非常に難しい。だからせめて、「信頼できる第三者機関を介して」公開鍵を手に入れることが出来るようにはなっている。その第三者機関というのが、Verisignなどの、認証局とかCAとか呼ばれる機関である。そしてこういったCAによって「この公開鍵は本物ですよ」と認証・保証された公開鍵が、いわゆる「証明書」と呼ばれるものである。
このような、公開鍵暗号を使った暗号化と復号化、そして本物の公開鍵を信頼できる第三者機関を介して入手する仕組みまでの全体をひっくるめて、「電子署名」と呼ぶ。あるいは、先の証明書のことを単に「電子署名」とか「署名」とか呼ぶ場合もある。
いかなるCAによっても認証されていない公開鍵は、証明書を配っている者が「この証明書は本物ですよー」と自分で言っているに過ぎず、究極的には「信用できない証明書」ということになる。こういう証明書は、「自己証明」とか「オレオレ証明書」とか呼ばれたりもする。
これを踏まえた上で、以下、本題。
ファイルに署名を付けるには、「署名を付ける対象のファイル」「署名を付けるためのツール」「付ける署名」の3つが必要だ。
署名を付ける対象の拡張機能のファイルは、まあ、好きに作ってください。
拡張機能に署名を付けるツールとしては、NSS Security Toolsを使うらしい。FTPサイトからリリース版のソースやバイナリを入手できるようだけれども、なんかNSS 3.11だとエラーが出てうまくいかんらしいので、NSS 3.10を使う必要があるとかないとか。
あとは、付ける署名をどうやって入手するかなんだけど。この「署名」というのは、「VerisignやThawteなどのRSA証明書発行局(CA)から発行されたNetscape Object Signing Certificate(Netscapeオブジェクト署名証明書)」のことを言うらしい。
このNetscape Object Signing Certificateを使って署名しようと思ったら、事実上、個人では拡張機能に署名できない。電子署名を付けるにはベリサインのObject Signing対応Digital IDというのを買う必要があるが、これは個人では買えないからだ。
個人で趣味で拡張機能作ってる人には、重すぎる負担だと思う。
……と書いてたんだけど、ベリサインより安く証明書を売ってくれる所もあるのね。すんまそ。例えばthawteでは年間約4万円、GlobalSignだと3万円。探せばもっと安い所が他にもあるんだろうか。
ともかく、金を払ったりとか書類を送ったりとかそれなりの苦労をして電子署名を買ったとして、その電子署名には何の意味があるのか。電子署名からはどんな意味合いが読み取れるのか。これは、Netscape署名ツールとは何なのかという文書で簡単に述べられている。
前者が本来の電子署名の役割で、後者は電子署名を実現する上で副次的にもたらされるもの。電子署名の主な意味は、結局はこの2点に集約される、らしい。
ということは、電子署名を使ってもこの2点しか保証されない、という言い方ができるし、この2点が保証できるのなら電子署名以外の方法でも構わない、という言い方もできるだろう。
ファイルは、作者が作成してユーザが利用するまでの間に何度か、改竄される可能性のあるポイントがある。
このどこかのステップでファイルを改竄したり、あるいは、どこかの時点までのステップをまるごと偽装してしまうことによって、攻撃者は攻撃を行うことができる。
これらの中には、改竄をしやすいポイントとしにくいポイントがある。
「通信の最中」、上記5つの段階のうち「2」と「4」は、情報が最も無防備な状態にある。無線LANや携帯電話の通信などの無線通信は、侵入も盗聴も非常にやりやすい。有線での通信でも、中継器などに盗聴のための仕組みを挟み込むことはできる。そのために考え出されたのが、暗号化通信である。SSLにはこれを実現する技術としての性質がある。
「3」の段階もまた、比較的危険なポイントである。公開されているWebサーバは一般的に、IPアドレスが固定されており、攻撃者による攻撃の的となりやすい。サーバに導入しているソフトウェアの脆弱性や、サーバの設定ミスなどを突くことで、ファイルの改竄は可能となる。「1」と「5」は、動的にIPアドレスが変化することが多い一般ユーザの場合は比較的攻撃に晒されにくいけれども、これもまた、絶対とは言えない。遠隔操作で攻撃を受ける可能性も、目を離した隙にコンピュータを操作されて攻撃される可能性も、ゼロではない。これらの攻撃による被害を防ぐのが、電子署名の働きと言える。電子署名は、通信中というごく短期間だけの情報の暗号化ではなく、それに比べて長期に渡って保管されるファイルそのものの暗号化を、実現するものである。
ただし、電子署名が保護できるのは上記のステップの間だけに限られていることは、留意しなければならない。電子署名は、暗号化の前後でファイルが改竄されていないことまでは保証してくれない。作者がファイルに電子署名を施して暗号化するまでの間にファイルが改竄される可能性もあるし、実際に利用するためにユーザの手元で暗号化を解かれたファイル、メモリ上に展開された情報が改竄される可能性もある。電子署名は これらの攻撃を防ぐことはできない。
結局のところ、これらの技術は情報が正確に伝達されていることの保証を相対的に高めるものでしかなく、絶対の保証を与えてくれるものではない。そのため、どこまで信頼性を求めるか、「ここまでのレベルで信頼性が保証されているのなら、そこから先全ての情報も信頼できると見なす」という基準は、自分で決める他ない。
多くの一般人は、(意味があってもなくても)暗号化通信だけで満足している。期限切れの証明書やオレオレ証明書が横行していることが、その証拠である。不誠実な態度であることを承知の上で乱暴な言い方をすれば、そのような一般人を信用させるということを目標に置けば、オレオレ証明書を使った(不完全な)SSLによる通信でWebサイトからファイルをダウンロードさせるだけでもよいと言えるだろう。
また、信頼性の高い暗号化通信を使う代わりに別の方法で通信経路上でのファイルの改竄の可能性を排除するものとして、Mozilla Add-onsに拡張機能を登録するという手もある。詳しくはこのエントリに付けられたコメントを見てもらいたいのだけれども、Mozilla Add-onsではSSLとは別の仕組みを使って、通信中のファイルの改竄を防いでいるからだ。
作者の実在の証明は、電子署名以外にも色々な方法が考えられる。乱暴な話だけれども、いわゆる「公式サイト」の正式なコンテンツとして拡張機能をダウンロードできるようになっているのであれば、そのサイトの作者・管理者が存在しているかどうかの証明が、すなわち拡張機能の作者の存在証明と言うこともできるだろう。
ただ、独自ドメインの取得にせよ「公式サイト」を名乗ることにせよ、電子署名の購入のような厳格なプロセスを経ないものである限りは、全く見たことも聞いたこともない人間が、本当にそれを開発したり配布したりしているのかどうかの証明としては、弱い。でも、サイトの管理者・作者と実際に顔を会わせたことがあったり、社会的に知名度の高い人であったりするなら、認証機関での証明が無くても、相手を信用することはできるだろう。
また、忘れてはいけないことだけれども、証明書は、条件を満たした上で一定の手続きを経れば、誰でも手に入れることができる。署名をした者が本当に信頼に足る者であるかどうかは、ユーザの判断に一任されている。「電子署名があること」と「相手を信用できること」とはイコールではない。この点は次のエントリで詳述している。
以上のことから、僕はこう結論付けた。
あと、こういうことも言える。
ま、そんなとこちゃいますか。
以下、全面改稿前の内容。一応残しておく。
ともかく、金を払ったりとか書類を送ったりとかそれなりの苦労をして電子署名を買ったとして、その電子署名には何の意味があるのか。電子署名からはどんな意味合いが読み取れるのか。これは、Netscape署名ツールとは何なのかという文書で簡単に述べられている。
電子署名の主な意味は、結局はこの2点に集約される、らしい。ということは、電子署名を使ってもこの2点しか保証されない、という言い方ができるし、この2点が保証できるのなら電子署名以外の方法でも構わない、という言い方もできるだろう。
これは、電子署名以外にも色々な方法が考えられる。乱暴な話だけれども、いわゆる「公式サイト」の正式なコンテンツとして拡張機能をダウンロードできるようになっているのであれば、そのサイトの作者・管理者が存在しているかどうかの証明が、すなわち拡張機能の作者の存在証明と言うこともできるだろう。
ただ、独自ドメインの取得にせよ「公式サイト」を名乗ることにせよ、電子署名の購入のような厳格なプロセスを経ないものである限りは、全く見たことも聞いたこともない人間が、本当にそれを開発したり配布したりしているのかどうかの証明としては、弱い。でも、サイトの管理者・作者と実際に顔を会わせたことがあったり、社会的に知名度の高い人であったりするなら、認証機関での証明が無くても、相手を信用することはできる。と、僕は思う。
また、詐欺師が休眠会社の登記簿謄本を使うようなケースも想定すると、認証機関の証明であっても確実な証明であるとは言いきれないだろう。署名は、手続きをした人の存在と、手続きが様式通りに行われた事の証明にはなるけれども、本当にその作者本人が署名を取得したかどうかの証明や、その作者が善意の人であるかどうかの証明にはならないと、僕は思っている。……そこまで疑い始めたらキリが無いって?
ファイルが改竄されていないことの証明は、SSLを使った通信でWebサイトからファイルをダウンロードさせることでカバーできる。これは、Mozilla Add-onsに拡張機能を登録すれば自動的に達成される。
Mozilla Add-ons(AMO)は、サイト全体がSSLによって保護された通信を使ってアクセスするようにできている。なので、少なくとも、AMOからダウンロードしたファイルは、AMOのサーバから自分の手元までの間で改竄されていないことが(ほぼ)保証されている。拡張機能のパッケージ自体に電子署名があってもなくても、これは変わらない。
オレオレ証明書でも、SSLでの通信はできる。この場合、認証機関が関わっていないので、SSLだけでは「そのサイトの作者が実在するかどうか」や「そのサイトが本物かどうか」は証明できない。しかしそれでも、通信が暗号化されていて通信経路上でファイルが改竄されていないことの証明にはなる。作者が実在していることや、サイトが本物であることを、SSLとは別の方法で確認できているのなら、それで必要充分と言うことは出来ると僕は思う。
……と書いてたけどこれは穴がある。詳しくは文末を参照。
以上のことから、僕はこう結論付けた。
てなことを書いていたら、ブクマコメントに「これはひどい」タグが付いていた。どうやらこのエントリの内容は間違ってるらしいですよ、奥さん! でもどこがおかしいのかは僕には分かりませんでした。
さらに少し調べてみたけれども、結局、僕の言いたいことの結論(「絶対に電子署名でなくてはならない、とは言いきれない」「電子署名でありさえすれば信用できる、とは言いきれない」)を否定する材料を見付けられなかったので、僕には、大筋を書き換えることなく細部を直すことしかできなかった。
ということで、僕の頭と技術ではこれ以上の事は分かりませんでした。しかし、いつかの嘘まみれの豆知識コンテンツと違って、ここにはコメントが付けられますし、トラックバックもできます。検索等でこのエントリに直接辿り着いた人にも役に立つように、根本的に間違ってる所にはどうぞ容赦なくハンドアックスを投げてください。
オレオレ証明書では、通信経路上の改竄は防げても、通信する前のサーバ上にあるファイルの改竄は防げないぞ、という指摘があったことに今気付いた。
なるほど確かに、上記の文章では、サーバがクラッキングの被害に遭ってファイルが書き換えられてしまった場合の事を想定していませんでした。「電子署名の役割」を勝手に誤解してました。重ねてすんまそ。ということで結論を訂正。
でもサーバのファイルが改竄されていないことを証明できたからといって、「悪意ある拡張機能ではないこと」、「作者に悪意が無いこと」は証明できないですよねっ。ねっ。……と、往生際の悪い食い下がり方をしてみる僕なのでした。
電子署名をつけるのにVerisignに登録しないといけないというあたりが、これはひどいの原因だと思います…。
Verisignから買うのは手段の一つでしょう。ほかにもいろいろあるはず。
あと、拡張機能はMozilla製品専用という意味では、MFから「おれおれ証明書」を発行してもらうというのでもよいのではないかという気もします。
オレオレ証明書が安全だという誤解を与える可能性があるからではないでしょうか。
「悪意ある拡張機能ではないこと」、「作者に悪意が無いこと」は証明できないですよねっ。ねっ。……と、往生際の悪い食い下がり方をしてみる僕なのでした。 拡張機能に電子署名って「必要」なの? SSLや電子署名は、証明書がベリサインやジオトラスト等の機関から発行され
Latest topics > 拡張機能に電子署名って「必要」なの? - outsider reflex 拡張に電子署名を施すことと Firefox Add-ons | Mozilla Corporation に登録することはまったく別次元の話ですよね。 # Firefox Add-ons | Mozilla Corporation に登録してある拡張でも、拡張
...
「意味がない」という結論はoutsider reflexさんと同じですが、「署名は詐欺師だってどうにかして付けることができるから無意味」という理由だと、企業が正当に署名を付けたときまで同じ理由で無意味ということになる。いくら詐欺師でも、有名企業の名前で署名を付けることはできないし、利用者は署名されている名前を確認する(べきである) ので、署名に意味が無いとは言い切れないはずです。
...
> Mozilla Add-ons(AMO)は、サイト全体がSSLによって保護された通信を使って
> アクセスするようにできている。なので、少なくとも、AMOからダウンロードした
> ファイルは、AMOのサーバから自分の手元までの間で改竄されていないことが
> (ほぼ)保証されている。
AMOで拡張機能をインストールする際、XPIファイルはreleases.mozilla.orgという
ホストからHTTPSではなくHTTPでダウンロードされます。ただし、JavaScriptと
Firefox本体の機能でXPIファイルのSHA-1のハッシュ値の比較が行われ、XPIファイルが
改変されていないかチェックされます。
https://bugzilla.mozilla.org/show_bug.cgi?id=302284
AMOのソースを見ると、ハッシュ値が埋め込まれていることが分かります。
つまり、
1. ダウンロードしたXPIファイルのハッシュ値とAMOに掲載されているハッシュ値が一致する
2. AMOに掲載されているハッシュ値はHTTPSのページに掲載されている
という2つの条件でAMOに登録されている拡張機能が改変されていないことをチェック
しています。
...
そもそも電子署名というのは発信者特定の技術だと思うのだが、なぜそれが内容の安全性にもってかれてしまうのかがよくわからない。Firefox本体も今でこそrelease@mozilla.orgの署名があるが、ちょっと前まではスタッフのgmailアカウントのメールアドレスの署名が入ってて「ぇー」とか思ったことがある。
...
の末尾に2020年11月30日時点の日本の首相のファミリーネーム(ローマ字で回答)を繋げて下さい。例えば「noda」なら、「2006-11-15_cert.trackbacknoda」です。これは機械的なトラックバックスパムを防止するための措置です。
writeback message: Ready to post a comment.