「プロになるためのWeb技術入門」訂正

id:kdoiさんからご指摘いただきました。詳しいご指摘内容は、こちらのエントリをご覧ください。

公開鍵暗号を使ってAliceからBobへメッセージを送る場合、Bob(メッセージの受け手)が一対の公開鍵と秘密鍵を生成し、公開鍵をAliceへ送ります。公開鍵は盗まれてもかまわないので、メールで送っても問題ありません。Bobの公開鍵を受け取ったAliceは、その公開鍵を使ってBobへ送りたいメッセージを暗号化して送ります。(以下略)

確かに、上記引用の太字の部分は誤解を招く誤った書き方でした。実際には kdoi さんのご指摘通り、Aliceが受け取った公開鍵が「たしかにBobが送信したものであること」を確認する必要があります。(これを「公開鍵の検証」といいます)

なぜそのような問題になるかは、上記エントリで kdoi さんがうまくまとめてくださっているので、引用させていただきます。

悪意の第三者(Charlie)は、BobがAliceに送った公開鍵b-pを盗み取り、新たにCharlieが生成した鍵ペアの公開鍵c-pをボブのものであるとしてAliceに送りつけることが可能です。Aliceは、Charlieの生成した公開鍵c-pをBobの公開鍵として登録します。 Aliceは、送信したい電文をc-pを使って暗号化して送出しますが、これはCharlieの秘密鍵c-sで復号できますので、Charlieは電文を読むことができます。さらに、Charlieがb-pを使って再び電文を暗号化しBobに送りつけると、Bobは自分の秘密鍵b-sによって電文を復号することになりますが、盗聴には気がつきません。ここで、CharlieがAliceから取得した電文をそのままb-pで再暗号化してBobに送れば「盗聴」ですが、内容を操作すれば「改ざん」が可能になります。

具体的に公開鍵の検証を行う手段としては、これまた上記エントリの「公開鍵の検証の実際」で書かれているようにデジタル証明書を使います。

公開鍵の検証までを1つのコラムのなかで説明すると、話が複雑になって理解が難しくなると思い、大きく端折っていたのですが、端折り方がよくありませんでした。反省・・・。増刷の機会がありましたら、可能な範囲で修正したいと思います。

ご指摘いただいた id:kdoi さん、本当にありがとうございました。m(_ _)m