俺の報告

RoomClipを運営するエンジニアの日報(多分)です。

日報 #27 - 共通鍵、公開鍵、秘密鍵、電子署名について

ちょっと告知から。
RoomClipStyleというムック本が出ます。
予約開始初日で全体ランキング今んとこ68位といういい調子ですので、
宜しければぜひぜひ。
http://www.amazon.co.jp/RoomClip-Style-%E6%89%B6%E6%A1%91%E7%A4%BE%E3%83%A0%E3%83%83%E3%82%AF/dp/4594609260/

さて、とはいえ日報は日報です。
最近ちょいとやることに迫られまくっていて、ゆるやかに日報が書けておりません。
つまり僕のタスク量的にはいっぱいいっぱいということなのでしょう。
この辺で冷静にならないと、虚弱体質のワーカホリックは地獄を見る羽目になるので注意です。

本日のテーマは、
heart bleed問題で記憶が新しい「鍵」周りの話を少し。
文字だけで全てを説明するにはあまりに挑戦的なテーマです。
なので、出来るだけシンプルに概要だけつかむことにします。

「公開鍵、秘密鍵、共通鍵、電子署名」周りの話を、
懇切丁寧に一つ一つ説明していくことほど眠たいことはありません。
とはいえ、
不思議な南京錠と鍵の入った箱を投げ合いながら、
太郎君が花子ちゃんにラブレターを送る話にされても、
あんまりピンとこないものです。
丁寧にしても駄目、フランクにしすぎても駄目、となると、
僕のような「半端者」が活躍する出番ですね。
さぁノリだけで説明していきましょう。

まずテーマの確認です。
「あぁセキュアな通信してぇ…」
これが欲求です。
そして結論というか、即答する答えはこれです。
「いやだから、共通鍵使えばよくね?」
ぶっちゃけ話はコレで終わりです。
通信、というかメッセージを2者間でやりとりする時、
安全な方法は「共通の鍵」で暗号して送信、受信したら複合、を繰り返せばいいんです。

そうなると、問題の本質は、
「じゃぁどうやってその共通鍵を渡すのさ?」
というその1点に(シンプルにするために)集約させることができるわけです。

共通鍵を持っていない2者間に、セキュアに共通鍵を渡す。
例えば僕と、あなたでセキュアな通信をしたいと考えます。
あなたは今後僕とやり取りをする上で大事な「共通鍵」を何とかして僕に送りつけたい。
これも実はそんな難しい話ではなくて、
僕の公開鍵を使って「共通鍵」を暗号化して、僕に送ってくれればいいんです。
暗号化された「共通鍵」を複合できるのは、公開鍵のペアである秘密鍵をもっている僕だけなので、
さぁ見事に「セキュアに共通鍵をゲット」できました。
それ移行の通信は「あなたが決めた共通鍵」で暗号化しながら通信できますね。
わぁお!楽勝!

ここまでがいわゆる「オレオレ認証」の類です。

さて世間一般のセキュアな通信はコレでは終わりません。
電子署名を使ったサーバ証明ってやつがありますね。
要は本人確認です。

さて改めて、あなたと僕の通信について考えます。
あなたは、僕が「本当にtom_rcなのか」を確認したいとします。
すごい簡単ですね。
はてなに問い合わせればいいんです。
はてなさん、俺が相手している人ってマジでtom_rc?」
はてなさんは応えます。
「え?うん。そんなに気になるなら、本人に確認メール送っとくから、それを見せてもらったら?」
それでもあなたは聞きます。
「えー、でも適当にメール偽装されたらそれでアウトだし。。。」
はてなさんは半ギレで応えます。
「ッチ、うっせーな…じゃぁtom_rcっていう言葉を秘密鍵で暗号化してtom_rcに送っとくわ。それを見せてもらって、あんたが俺の公開鍵で復号化して、正しくtom_rcって解答が出てきたら、本物だよな?」
はてなさんカッケー。
これで晴れて僕とはてなさんとの関係が証明されます。
と同時に、あなたは僕を信頼していいわけです。

これがSSLの証明書です。

Rapid SSLとかグローバルサインとかで証明書をダウンロードして、、、とかいいますが、
証明書ってのは、このケースにおける「はてなさんからの暗号化されたメール」だと思えばよいのです。
それさえ見せつければ、相手は自分を信頼してくれます。
そうして、先ほどのように共通鍵を送りつけて、セキュアな通信をすればいいわけです。

あれ、、、

やっぱり長くて分りづれぇ!!!