わさっきhb

大学(教育研究)とか ,親馬鹿とか,和歌山とか,とか,とか.

「〜すればいいのでは?」の前に

アリスが「ボブと通信したい」と申し出たとき,鍵配布センターはセッション鍵というものをわざわざ新しく作り,それを暗号化してアリスに渡しました.
どうして鍵配布センターは,「ボブの鍵」をアリスの鍵で暗号化してアリスに渡さなかったのでしょうか.
(暗号技術入門-秘密の国のアリス, p.110)

これは答えに気づく*1と,当たり前のように「やったらダメ」となるのですが,そこに気づくまでに脳の変換…「たしかに,そのほうが楽でいいよな」から「ダメだダメだ,それ絶対やっちゃダメ」に変わるまでが楽しいのです.この思考の変化が,一つの“経験”になるというものです.
あっと,上の引用だけでは,情報が足りてませんね.
「アリス」と「ボブ」が,秘密に通信をしたいというのが目的です.通信路は盗聴されるかもしれないので,暗号を使います.対称暗号にします.すなわち,アリスとボブがあらかじめ同じ値を持っていれば,それを鍵として,送信側はメッセージを暗号化して送り,受信側は暗号文を復号します.
アリスとボブだけの秘密通信ならいいのですが,対象とする世界には多くの人がいて,相互に秘密通信をしたいと仮定します.1000人いれば,あらかじめ持っておく鍵の種類は,ひとり当たり999個,全体で約50万になります.
公開鍵暗号に移行することなく,鍵の数を減らす方法があります.「鍵配布センター」を入れるのです.それぞれの人は,鍵配布センターとだけ,値を共有します.アリスは1個.ボブは別のを1個.1000人でも,あらかじめ持っておく鍵の種類は,ひとりにつき1個,全体でも1000個で済みます.
以下,利用者Xが鍵配布センターと共有する鍵のことを「Xの鍵」と呼びます.冒頭の引用でも,「アリスの鍵」「ボブの鍵」を,この意味で用いています.
さて,アリスから鍵配布センターへ暗号文を送り,鍵配布センターがそれをボブのために暗号化をし直して*2,ボブに送るとなると,鍵配布センターの負荷が高くなります.そして,鍵配布センターは中間段階で得られるメッセージを悪用しないと主張しても,悪意を持ってメッセージを読みたがる人や,不慮のトラブルによる情報漏えいを,100%排除するというのはできないものです.
そこで,鍵配布センターは,アリスとボブ(に限りませんが)の間で秘密通信をしたいという問い合わせがあれば,そのための情報(「セッション鍵」です)を乱数を使って生成し,アリスの鍵で暗号化してアリスに送り,一方ボブの鍵で暗号化してボブにも送ります*3.そうすれば,その後は,アリスとボブの間で暗号化や復号の処理をすればよいとなります.鍵配布センターにとっては,通信のたびに暗号化するという労力から開放されますし,生成したセッション鍵を適切に破棄することで,アリス・ボブ間のメッセージを読みたがる人の可能性を,少しは減らすことになります.
という背景のもとで,もとの問題をもう一度ご覧ください.
解答は,「アリスが,ボブの鍵を持ってしまうから」です.アリスはボブ宛の暗号文を読めてしまうし,ボブのふりをして暗号文を作ることも可能になります.
それだけではありません.アリスともボブとも異なる第三者,マロリー*4が,鍵配布センターに,アリスと通信したいので「アリスの鍵をください」と言ったら,鍵配布センターは,アリスの鍵をマロリーの鍵で暗号化して送ることになります.そして,アリスのあずかり知らぬところでbehind Alice's back,アリスの鍵を他の人が所有してしまうことになります.
なので,アリスとボブの関係だけでなく,システム全体として,「利用者と鍵配布センターとの間で共有するはずの鍵が,共有になっていない」という事態になります.そこには,秘密に通信できるという目的が,見事に崩壊しています.
セキュリティから離れて,この問題から得られる教訓は,「〜すればいいのでは?」と思いついたとき,それを認めることで,既存の暗黙のルールに抵触するものはないか,そして当初の目的を果たせなくなるのではないか,全体として機能しなくなってしまったりしないかを,よく考えましょうということです.現状の不便さを解消する提案をしようとする際には常に,考えないといけませんね.

*1:自分で気づかなくても,本の解説を読んで理解するのでかまいません.

*2:アリスからの暗号文を,アリスの鍵で復号してから,得られるメッセージを,ボブの鍵で暗号化する,ということです.

*3:この方式は,man-in-the-middle攻撃に弱いという問題があります.本の中では触れられていませんが,毎年,授業で使わせていただいています.

*4:「ボブ」でもよかったのですが,話を分かりやすくするために,別の人を持ち出しました.