■ 公開鍵暗号化の弱点
おね〜さんと、
ほげたんのっ!!
3 Minutes Networking、
Supplement !!
ん〜っと。前回、ディジタル署名が登場したわね。これが改ざん・なりすまし・否認の対抗策になる、と。
なんか含みのある終わり方だったよね。「完全に防止できない」とかなんとか。
うん。ディジタル署名だけでは完全に防止できない、と確かに言ったかな。
でもさでもさ、おね〜さん。ディジタル署名使えば、改ざんの検出もできるし、認証もできたよ。なんでダメなのさ?
ディジタル署名「だけ」では、と言ったでしょ? つまり、こういうこと。
[FigureSP18-01:ディジタル署名の弱点]
…、ところでさ。前もそうだったんだけど、なんでこのブラックほげたんは僕になりすましとかしようとするのかな?
恨みでもかってるんじゃない? 「気に入らなかったんだよ、ずーっとな。どうして、いつもいつも手前がリーダーなんだッ!!」とかなんとか。
あ、あぁ。思い通りにいかないのが世の中なんて割り切りたくないよね。
その手を汚せというのかどうか聞きたいところね。
それはそれとして、見事になりすましも改ざんも成功したでしょ?
そだね。ブラックほげたんが改ざんしたデータでハッシュして、ブラックほげたんの秘密鍵で暗号化した署名データを、ブラックほげたんの公開鍵で復号するんだから、そりゃ検証結果は正しくなるよね。
でしょう? ここでのポイントは何?
ん、ん〜。ブラックほげたんの公開鍵が、僕の公開鍵であるって思われてるところ、かな。
そうよね、ほげたんの公開鍵で検証ができたと思ってるから、ほげたんが作成したデータだと信じちゃうわけよね。これはつまり?
つまり、公開鍵のなりすまし?
そう、ディジタル署名の弱点、というよりも公開鍵暗号化の弱点がソコ。公開鍵が送信元/作成者のものであることが前提になっているわけね。なので、公開鍵をなりすましされてしまうと、改ざん防止・認証のシステムそのものが破綻しちゃうわけ。
う、う〜〜ん。そうなっちゃうのか。
ディジタル署名じゃなくて、公開鍵暗号化による通信の秘匿の方も、やっぱり「公開鍵のなりすまし」で破綻しちゃうのよ。
[FigureSP18-02:公開鍵暗号の弱点]
わかった? 「公開鍵のなりすまし」が起きると、公開鍵暗号化を使ったシステムが役に立たなくなっちゃうってことが。
確かに、通信の秘匿も、ディジタル署名もダメになっちゃうね。
でしょ。どうすればいい、ほげたん? どうすれば「公開鍵のなりすまし」を防ぐことができる?
う〜ん・・・、なりすましをふせぐんだから、公開鍵にディジタル署名をつける、ってのはどうだろうか?
どうだろうか、ってね、ほげたん。じゃあ、その公開鍵のディジタル署名を検証するためには公開鍵が必要で、その公開鍵がなりすましされたらどうするのよ。
じゃあ、それにもディジタル署名を…って堂々めぐりだよね、これじゃ。
■ PGP
そうよね。じゃあ、どうやってこの「公開鍵の所有者を保証」するかというと、2つの方法が考え出されたの。
- 個人レベルでの保証
- 第三者機関による保証
個人レベルと第三者機関による保証?
まず、個人レベルの保証ね。まず、信頼できる友人がいます。この人の公開鍵は「確かにその人の公開鍵である」と信頼します。
違ったらどうするの?
さぁ?
えぇぇ!?
いや、これが前提だから。信頼しないことにはどうしようもないの。だから、改ざんやなりすましが起きえない状況、例えば手渡しとかで公開鍵をもらうか、無条件に信頼するかして公開鍵をもらうわけ。
そ、そうなの…。う、うん、まぁ、ともかく友人の公開鍵を信頼したよ。
とりあえず、「直接に公開鍵をもらった人(信頼できる友人)」の公開鍵は「信頼できる公開鍵」よね。その人とはこれでディジタル署名も、通信の秘匿もおっけーになるわね。
そだね。
「信頼している友人」以外とディジタル署名・通信の秘匿を行いたい場合、「信頼できる友人」が「信頼している友人の友人」の公開鍵に署名をしてくれる、という形になるの。
え? えぇ?
[FigureSP18-03:公開鍵の個人レベルでの保証
「信頼できる友人」が署名して送ってきた「信頼できる友人の友人」の公開鍵は信頼できる?
そう、上の例でいえば、ほげたんが入手したネットさんの鍵は「信頼できる」わよね。ほげたんにとってネットさんは「信頼できる友人」だから。
ん、そうなるね。「信頼できる友人」は信頼しちゃうから、僕が入手したネットさんの鍵は「信頼できる」よ。
それをほげたんがディジタル署名をつけて送信する。受け取った私は、署名の検証がOKならば、その公開鍵は「信頼できる友人」であるほげたんが送ってきた(なりすましの防止)、ネットさんの正しい公開鍵(改ざんの防止)である、わよね。
そうだね、ディジタル署名がついてるからそうなるね。
よって、受け取った「ネットさんの鍵は信頼できる」ってことになるわけ。これでネットさんと私は通信の秘匿・ディジタル署名を使えるってことになるわ。これはPGPで使用されているディジタル署名の方式よ。 ▼ link
へぇ、ぴーじーぴーね。でもさ、これ、ネットさんが僕の信頼できる友人だったからいいけど、もし相手が信頼していない人や信頼している人の友人じゃなかったらどうなるの?
信頼してない、信頼している友人が信頼していない場合は、その人を別個に信頼するか、信頼できないから公開鍵を受け取らない、になるわね。
なんか、範囲が狭そうだね。
うん。だからPGPはコミュニティでの利用がメインで、広範囲での利用や、組織での利用はあまりされてないの。だって、例えば会社で利用するとしたら、その社内の人達全員を個別に「信頼する」という設定しなきゃダメなのよ。
あ〜、それはちょっと面倒かも。
でしょ。新入社員が入ってくる季節とか大変よね。よって、もう1つの「第三者機関による保証」が出てくるわけね。
第三者機関って何?
■ 認証局と電子証明書
ん〜、信頼できる第三者により、公開鍵の保証を行うってことなんだけど。そうねぇ、イメージでいうと、お役所かな?
役所? 市役所とか区役所とか?
んっと、ハンコって使うわよね。この文書を書いたのは自分ですよーって証明するために。さらに、ハンコが押してあると改ざんできなくなるし。
うん、「捺印」だっけ。
正規の取引では、その捺印が本人の印鑑かどうか確認するために、印影が必要でしょ。これが私の印鑑を押した場合の印影ですって。さらにそれがニセモノでないことを証明しなきゃだめでしょ?
そだね。お役所は「印鑑証明書」を発行してくれるよね。
[FigureSP18-04:役所と捺印と印鑑証明書]
さて、これをディジタル署名で考えてみると? データ(文書)に改ざん・なりすまし防止に秘密鍵(印鑑)を使って署名(捺印)する。これを検証するために公開鍵(印影)が必要。ここまではいい?
あ、あぁ。なんとなくわかってきた。「公開鍵のなりすまし」を防ぐために、「役所」が発行した「印鑑証明書」が必要って話なんだ。
そうそう。この印影(公開鍵)は印鑑(秘密鍵)と同一(ペア)ですよ、と印鑑証明書は保証しているわけでしょ。それを行っているのが役所。ディジタル署名では印鑑証明書に当てはまるのは「電子証明書」と呼ばれるわけね。それを発行するのが「第三者機関」。
なるほどなるほど。第三者機関という「お役所」と、電子証明書という「印鑑証明書」がでてくるわけだ。
そうね。この第三者機関は通常、認証局、CAと呼ばれるわ。
認証局、CA。
CAは、印鑑証明にあたる電子証明書を発行するわけね。申請者を審査し、公開鍵に「証明」をつけるってわけ。
公開鍵の「証明」が電子証明書、になるわけだ。
そう。だから、電子証明書は公開鍵証明書とも呼ばれるのよ。「公開鍵」が本人のものである「証明」をするものだからね。
そっか。公開鍵の所有者を第三者が保証するための書類ってことだね。
じゃ、この電子証明書を説明していきましょう。電子証明書はITUのX.509で規定されてるわ。RFCでも同じ規格をRFC3280として規定してるの。 で、それを説明するけど、フォーマットがASN.1なんだけど? ▼ link
あせんわん? ASN.1嫌い。
じゃ、普通に書くわね。
フィールド | 説明 | |
---|---|---|
署 名 前 証 明 書 | バージョン | 証明書のフォーマットバージョン。現行はバージョン3 |
シリアル番号 | 発行CAが決定するユニークなシリアル番号 | |
アルゴリズム識別子 | 発行CAが使用した署名(ハッシュと公開鍵暗号)の種類 | |
発行CA名 | 発行CAの名前 | |
有効期間 | GMTで表記された有効期限の開始日時と終了日時 | |
サブジェクト | 公開鍵の所有者名 | |
公開鍵 | 所有者が保持する公開鍵とその種類 | |
発行CAユニークID | 発行CAやサブジェクトを再利用する際に使用する。使用しないことが推奨 | |
サブジェクトユニークID | ||
拡張領域 | 追加情報など | |
署名アルゴリズム | 発行CAが署名する際に使用したハッシュの種類 | |
発行CA署名 | 発行CAによる署名 |
[TableSP18-01:X.509電子証明書]
ん、ん〜〜〜〜。大体わかるような、わからないような。
じゃ、ホンモノ使って説明しましょっか。電子証明書といえばってことで、ベリサインのテスト用のClass1 Digital IDを取得したの。 ▼ link
Class1 Digital ID?
ベリサインは、その電子証明書の使い道と保証の度合によって、電子証明書をクラス分けしてるの。Class1は主に電子メールの暗号化とかに使われるものね。
へ〜。どうでもいいけど、それをこうやってサイトで公開して説明しちゃっていいものなのかなぁ。
う………、ま、まぁ。もしダメだったら変えるから、ベリサインの人見てたら連絡下さい。
と、ともかくよ。これがホンモノの電子証明書ね。
[FigureSP18-05:電子証明書(VeriSign Class1 DigitalID)]
おね〜さん、これだけだといまいちわからないというか。さっきのX.509フォーマットがわからないよ。
それは詳細タブで確認できるわ。
[FigureSP18-05:電子証明書・詳細]
スクロールバーがなんか変なことになってるけど気にしないでね。
バージョン、シリアル番号、署名アルゴリズム、発行者、有効期間の開始と終了、サブジェクト、公開キー、…基本制限?
その「基本制限」から「CRL配布ポイント」までは[TableSP18-01]でいうところの拡張領域ね。そのあとの「拇印アルゴリズム」が「署名アルゴリズム」、「拇印」が「発行CA署名」ってこと。
拇印? あ、あぁ、そうか。署名って拇印みたいなもんだもんね。
そうね。それに一方向ハッシュ関数で出力したダイジェストを「フィンガープリント」なんて呼んだりもするしね。
ふぃんがーぷりんと? 指紋?
人間と指紋の関係って、人間が指をペタッて押して作られた「指紋」は、「人間を識別」できるモノよね。これって「データからハッシュ関数によって作り出されたダイジェスト」と関係的に似てない?
ダイジェストは「データから作られたもので、データを識別できる」もの。指紋は「人間から作られたもので、人間を識別できる」もの。うん、似てるね。だから、ダイジェストをフィンガープリントって呼ぶのか。
そゆことね。んでね、X.509電子証明書に戻るけど。ホンモノと[TableSP18-01]を見比べると、「拡張領域」のところは置いておくとして、大体は書かれてることわかるわよね。
うん、まぁ、大体は。
■ 電子証明書を使った公開鍵の利用
今回の説明でのポイントは、公開鍵とその保有者であるサブジェクト、そしてそれを発行したCA名とその署名が入っていることね。
公開鍵と保有者の名前と、CAの名前とその署名。…CAの署名?
うん、電子証明書の改ざん検出と発行CAの認証を行うために、CAの署名がついてるのよ。これにより、電子証明書の改ざんやなりすましを防ぐってことね。
なるほど…。でも、署名は検証しなきゃダメだよね。検証には公開鍵が必要で。
ってことはCAの公開鍵がいる?
うん。CAは自分の公開鍵を配布するの。電子証明書の形式でCAの公開鍵を配布するわけ。ただし、電子証明書の「発行CA名とその署名」は自分自身になってるわ。
自分自身? え? 自分で自分の電子証明書に署名するの?
そう。これを自己署名証明書と言うの。う〜んと、たとえばベリサインのClass1のCAが発行している自己署名証明書はこんな感じ。
[FigureSP18-06:自己署名証明書]
発行者とサブジェクトが同じでしょ?
う、うん。でもさ、自分で自分の証明書に署名って、なんか変じゃない?
それはしょうがないわね。ま、詳しくは次回話すから、今回は「CAの公開鍵は自己署名証明書で配布されている」って覚えておいてね。ともかく、電子証明書を使った場合の、ディジタル署名は次のようになるわ。
[FigureSP18-07:電子証明書を使ったディジタル署名
うわ、面倒くさっ。3回も検証処理が入ってるよ?
そうなっちゃうわね。次の3つの検証が必要だからね。
- CAの電子証明書の改ざんの確認
- 送信者の電子証明書の改ざんの確認とCAが発行したという認証
- 送信者の署名データによる改ざんの確認と送信者が作成したという認証
(3)は前回のディジタル署名の話。今回のポイントは(2)よね。公開鍵とその所有者の結びつきをCAが保証しているってこと。よって、電子証明書でない公開鍵は受け取らないようにするわけ。
[FigureSP18-08:公開鍵のなりすましの防止]
それにより、公開鍵のなりすましを防ぐってことだね。
そう、それが電子証明書の目的だからね。さて、もう1つの公開鍵暗号化による通信の秘匿の場合も見てみましょう。
[FigureSP18-09:電子証明書を使った公開鍵暗号]
なるほど。これでディジタル署名も公開鍵暗号による通信の秘匿も、なりすましや改ざんがおきなくなるわけだね。
ん〜〜〜。
なにその含みのある笑い? ダメなの? 電子証明書を使ってもダメなの?
ダメじゃないわよ。ただ、まだ足りないわね。
な、何が? もう完璧だと思うんだけどなぁ。
それはまた次回の話になるから、今回の話をまとめましょ。まず、「公開鍵のなりすまし」という脅威の話。
「公開鍵が送信者のものである」ことが公開鍵暗号化を使ったシステムの前提だからだね。
そのため、「個人的な保証」または「第三者機関による保証」が必要って話だったわよね。
「個人的な保証」より、「CAによる電子証明書を使った保証」の方が優れているところはわかる?
範囲の問題? 個人的な保証だと、どうしても「友達の輪」から外れている人は保証できない?
「友達の輪」とはまた古いわね。それもあるし、いちいち友人を個別に信頼しなきゃダメでしょう。
それに比べ、CAを使う場合、CAが発行するすべての電子証明書が保証されるから、よりパブリックに使いやすい。
そうなるよね。
CAが発行した電子証明書以外の方法で公開鍵を受け取らないようにすることで、公開鍵のなりすましを防ぐってことになるわけ。
「公開鍵がその人のものである」という証明が電子証明書だからだね。
そゆことね。そうそう、ほげたん。このCAと電子証明書の仕組みって、結局はディジタル署名という技術よね。
……そだね。どっちかというと、CAと電子証明書という「仕組み」の話だよね。
申請して、発行して、検証する。技術的にはディジタル署名以外特に使ってないよね。
でしょ。前回「技術的にはこれでOK」って言ったでしょ。
さぁ、PKIがわかってきたかな?
PKI? 「公開鍵暗号化を正しく使うための基盤」? 確かにCAや電子証明書という「仕組み」がなければ公開鍵暗号化は正しく使えないね。
でしょう? 「公開鍵のなりすまし」問題があるからね。
そうか、このCAと電子証明書の仕組みがPKIなんだっ!!
ん〜〜〜〜。
またその含み笑い…。そういう笑顔おねーさんホントよく似合うよ。邪悪で。
……。
痛い痛い痛いっ!! 無言でつねらないでっ!! 怖いっ!!
ほげたんはもうちょっと口に気をつけましょう。そんなに生き急ぐ必要はないでしょ。
は、はい…、気をつけます…。
ともかく、さっきも言ったでしょ、「まだ足りない」って。まだ「正しく使えるための基盤」としてなってないのよ。
…何が足りないんだろう?
んふふ。また次回ね。
おね〜さんと、
ほげたんのっ!!
3分間ネットワーク、
サプリメントでした〜〜〜っ!!
- PGP
-
[Pretty Good Privacy]
公開鍵暗号化を利用した、暗号・署名ができるソフトウェア。メールでの利用が多い。RFC4880でメッセージフォーマットが規定されている。
- 第三者機関
-
[Trusted Third Party]
「TTP」と略す。
- 印影
- 読みは「いんえい」。印鑑を押した時にできるいわゆる「印」のこと。
- 電子証明書
-
[Digital Certificate]
ディジタル証明書、公開鍵証明書とも呼ばれる。
- 認証局
- [Certificate Authority]
- X.509
- ITU(国際電気通信連合)が規定した電子証明書と失効リストの規格。ISO(国際標準化機構)とIEC(国際電気標準会議)が同規格を標準化したものがISO/IEC9594-8。IETFが標準化したものがRFC3280。
- ベリサイン
-
[Verisign Inc.]
電子証明書のトップ企業。他にも.netと.comのルートネームサーバを管理する、ネットワークインフラ企業。参考サイトは日本法人の「日本ベリサイン社」のサイト。
- フィンガープリント
-
[FingerPrint]
「指紋」「拇印」の意味。
- ほげたんの今日のポイント
-
- 公開鍵のなりすましにより公開鍵暗号化のシステムは破綻する。
- 公開鍵の所有者の保証を行うためのシステムが必要。
- 公開鍵の保有者を保証する電子証明書とそれを発行するCAが必要である
- 電子証明書以外の方法で公開鍵を受け取らないようにすることでなりすましを防ぐ。
- 公開鍵のなりすましにより公開鍵暗号化のシステムは破綻する。