2008/09/05(金)電子署名をなんとか理解する【未分類】spok■電子署名をプログラマ的に理解する初心者PHPプログラマが理解した電子署名の理解の仕方をここに記します。間違ったことを書いていたら、ぜひご指摘ください。「ある文章」のハッシュ値をとる。sha1('「ある文章」');この$hashを、スポックの秘密鍵で暗号化する。);「ある文章」の後に、$hash_angouとスポックの公開鍵を並べたファイル。それが、署名された文章である。$hash_angouしかし、このままでは、まだ足りない。「スポックの公開鍵+スポックの名前」を第三者の認証機関にサインしてもらう(S/MIME方式)。himitukagi_de_angou($koukai_name_hash);それと、認証機関の公開鍵といっしょに並べる。改ざん検知もし、この「ある文章」が改ざんされていたら検出できる。「ある文章」のハッシュ値$hash_decodeをとり、$hash_angouをスポックの公開鍵で解読し、$hashを復元する。$hashであれば、改ざんされていない。イコールでなければ、その「ある文章」は搬送途中で改ざんされているので、信頼できない。この文章はスポックが書いたものと確認できるそこにスポックという名前が書いてあるからと言って、スポックが書いたとは限らない。誰でも、スポックを名乗ることができるからだ。スポックは、認証機関にリアルな世界でスポックであるという免許証などを見せて、その上で、自分の公開鍵を認証機関に署名してもらっている。「スポックの公開鍵+スポックの名前」のハッシュ値をとり、$ninshou_kikan_no_angouを認証機関の公開鍵で復号したものが一致すれば、それはスポックが、スポックであることを証明することになる。認証機関の公開鍵は、そのまま信用していいものだろうか?そこの解決の仕方が、方式によって様々である。S/MIME方式では、第三者の認証機関にお金を払って私を認証してもらい、公開鍵をもらっている。その第三者の認証機関は、マイクロソフトなどのソフトウエア会社に頼んで、予めブラウザやメーラー等に、「信用できる認証機関の公開鍵」として登録してもらっている。それは有名なベリサインなどがそうだ。その認証機関の公開鍵が信用できるのであって、プリインストールされてない、怪しげな認証機関の公開鍵など信用できない。このプリインストールされていない認証機関の証明書がいわゆる、オレオレ証明書ということだ。プリインストールされていなくても、そのプリインストールされている認証機関から証明書を受けた公開鍵は、信用されるのだから、その信用された公開鍵が、また別の公開鍵の証明をしても問題ない。プリインストールはされていないけれども、信用された公開鍵を使って認証機関を名乗っているのが、中間認証機関というやつだ。通常、プリインストールされている認証機関よりも、認証手数料が安いため、よく利用されるが、その中間認証局の運用がまずいと、トラブルを引き起こすこともある。無料の認証機関もある私は無料で私の公開鍵を、通常のパソコンにプリインストールされている認証機関から証明してもらった。私の知る限り、このようなルート証明書を持つ認証機関で無料でやってくれるのは、thawteだけだ。ネット上だけで完結する。無料だからこその制限もある。認証してくれるのは、メールアドレスだけだ。スポックであるという保証はしてくれない。メールアドレスを認証してくれたら、私のメールアドレスから発信されており、内容は改ざんされていない、ということを保証してくれる。これだけでも十分に署名の役割を果たす。スポックの署名ということでなく、スポックのメールアドレスによる署名ということだ。ベリサインにも、お試しの何十日間かだけ有効の署名をしてくれるサービスがあるようだが、私は試していない。PGPは、信頼の輪で無料の認証を得る仕組みPGPには、プリインストールされた認証機関というものはない。友達の友達は信頼できる、という仕組みを使って、大きな信頼の輪を作ることで、その公開鍵の信頼性を高める仕組みだ。通知を徹底させるか、という問題が残ることになる。その点、S/MIMEであれば、認証機関が問い合わせが合ったときに、その署名はすでに無効だ、という返事を返せば、廃止・変更した署名を使った不正を防ぐことが出来る。紙の署名と比べてみる登記申請や、ちょっとお堅い契約書だと、中身を変更する際には契約書のはしっこに「5文字訂正」などと書いて、さらに全員の印が押してあったりする。そのようにしてハッシュ値の一致のようなことをしているわけだ。役所に「印鑑登録」して印鑑証明を発行してもらい、その印影が、スポックのものであると証明してもらっているわけだ。役所が、プリインストールされた認証機関の役割を果たしている。実世界をインターネットの世界がまねたのだろうけど、実によく似ていて、実によくできた仕組みと思う。実世界の署名よりも、電子署名の方が、よほど安心できる、と思う。(それは電子署名の方が偽造が難しいからだ)Qdmailはそんなこんなで、Qdmailも、S/MIME方式での署名ができるように改造中。まもなくリリースします。http://www.cpa-lab.com/tech/0175/tb/※お手数ですが、SPAM防止のためURLの後ろに「ElL」を追加してください。2.03.Infomation管理人のメインサイト。画像アルバムコンテンツPaginatorの使い方。30最近の記事さくらインターネットで空メールエラーmbstrings関数をPHPで使う際の必見サイトQdmailサイトと相互リンクただ簡単にメールを送りたいだけだったのにPHPPHPフレームワークで日本語メール送信。anonymousissetを正しく理解する。ほんじissetを正しく理解する。ほんじissetを正しく理解する。へびにっきissetを正しく理解する。