このセクションと次の講義では､ Pjpを使ってテキストファイルや電子メールを暗号化・復号化する方法を紹介します｡
また､ ファイルや電子メールなどの署名や整合性の検証にも使用します｡
そうすれば､ 送受信するデータはすべて暗号化され､ 送信データの完全性を確認することができるので､
安全に通信することができるようになるのです｡
つまり､ 私たちが送信するデータには署名がつき､ 受信者はそのデータが実際に私たちから送られたもので､
改ざんされていないことを確認することができるのです｡
さて､ なぜBGPを暗号化と整合性の検証に使うかというと､ これは時の試練に耐え､
まだ破られていない非常に強力な暗号化だからです｡
リーク情報に基づいても､ 政府機関ですらまだ破ることができないようです｡
だから､ PJPはかなり良い暗号化の略なのに､ とてもとても強い暗号化なのです｡
この発言は実は皮肉で､ これは非常に強力でパワフルな暗号なのです｡
さて､ 今回の講義では､ Pjpの一般的な仕組みについて説明したいと思います｡
そして､ 次の講義では､ あらゆるデータの暗号化に使う方法と､ 署名や整合性の検証に使う方法を紹介します｡
さて､ Pjpは公開鍵または非対称暗号である｡
その仕組みを理解するために､ まず､ もう一つの伝統的な暗号である対称型暗号について見てみましょう｡
では､ DavidとJohnという二人の人間がいる場合を例に挙げてみましょう｡
どうやってコミュニケーションをとるか､ 忘れてしまいそうです｡
ここでは､ DavidがJohnにメッセージを送りたいのだと仮定します｡
そして､ このメッセージの中身はシークレットメッセージです｡
さて､ Davidが自分のメッセージを傍受したり､ 読んだりする者から守りたい場合､
暗号鍵を使ってこのメッセージを暗号化すれば､ メッセージはちんぷんかんぷんなものになります｡
そして､ このメッセージを電子メールや郵便､ テキストメッセージなど､ あらゆる方法でジョンに送ることができる｡
そんなことはどうでもいいんです｡
そして､ このメッセージが傍受された場合､ その内容はちんぷんかんぷんなものになるのです｡
だから､ これを傍受する側にとっては､ 何の役にも立たない｡
ジョンがメッセージを受け取ります｡
メッセージを開いてくれる｡
メッセージはちんぷんかんぷんなままです｡
そして､ ジョンは同じ暗号鍵を使ってこのメッセージを解読し､ その内容であるシークレットメッセージを明らかにするつもりです｡
とても､ シンプルなんですね｡
基本的に､ Davidはメッセージを暗号化するためにキーを使用します｡
ジョンは同じ鍵を使って復号化し､ こうして二人はメッセージを読むことができるようになる｡
しかし､ その鍵を持っていない人は､ メッセージを読むことができません｡
つまり､ DavidとJohnは同じキーを使っているのです｡
したがって､ これは対称的な暗号化として知られています｡
さて､ もうお分かりだと思いますが｡
この鍵はプライベートである必要があります｡
そのため､ 秘密鍵と呼ばれています｡ この鍵を手に入れることができれば､ DavidがJohnに送るメッセージも､
その逆も解読することができます｡
つまり､ これまでの話を総合すると､ 秘密鍵を使えばメッセージを復号化できることがわかるのです｡
そのため､ 秘密にしておくべきなのです｡
しかし､ Davidはどうにかして､ JohnやDavidがコミュニケーションを取りたい相手と共有しなければならないのです｡
したがって､ これは対称型暗号の大きな欠点です｡ なぜなら､ 鍵は秘密にしなければなりませんが､ 同時に共有しなければならず､
より多くの人と共有することで､ 実際の鍵を共有する問題はもちろんのこと､ 攻撃対象が増えるからです｡
どうやって共有するのか？
別メッセージで送るのでしょうか？
もし､ そのメッセージが傍受されたら？
もし､ インターネット上で物を送るときに､ データが何ホップ通過できるか分かっていたらどうでしょう？
これを傍受され､ 読まれ､ そして残りの通信が解読される可能性があります｡
これが､ より安全な暗号を考え出す大きなきっかけとなり､ 非対称暗号や公開鍵暗号が登場することになった｡
では､ ダビデがジョンにメッセージを送りたいという話に戻ろう｡
そして､ その内容は秘密メッセージと非対称暗号化である｡
1つの鍵でメッセージを暗号化する｡
メッセージを空中で送信し､ 別の鍵を使ってメッセージを復号する｡
つまり､ この暗号化では2つの異なる鍵が使われるため､ 非対称暗号と呼ばれるようになったのです｡
この2つの鍵はキーペアと呼ばれる｡
これらは数学的な関係があります｡
一つはメッセージの暗号化に使われ､ もう一つは復号化に使われる｡
そのため､ 復号鍵が共有されることはなく､ より安全性が高いと言えます｡
さて､ 復号化キーが共有されないのであれば､ これはどのように機能するのだろうかとお考えでしょう｡
さて､ 話を戻して､ この仕組みについて詳しく見ていきましょう｡
そこでまた､ ダビデはジョンにメッセージを送ろうとする｡
メッセージの中身はシークレットメッセージです｡
しかし､ このメッセージを送信する前に､ そして暗号化する前に､ ジョンは公開鍵と秘密鍵のキーペアを作成するつもりです｡
先ほど言ったように､ これらの鍵は数学的にリンクされており､ ジョンはメッセージを送信する人物であるDavidに公開鍵を送ることになるのです｡
そのため､ 公開鍵は誰とでも共有することができます｡
実際にインターネットや主要なディレクトリで公開することができます｡
秘密鍵を決定するために使用することはできないので､ 実際には重要ではありません｡
したがって､ 公開鍵を共有しても全く問題ありません｡
そこで､ Davidは公開鍵を受け取る｡
彼は公開鍵を使ってメッセージを暗号化する｡
メッセージは任意の方法で送信されます｡
そんなことはどうでもいいんです｡
仮に傍受されてもちんぷんかんぷんだろうし｡
ジョンが受信します｡
メッセージを開いてくれる｡
メッセージは相変わらずちんぷんかんぷんだが､ 彼は秘密鍵を使ってこのメッセージを復号する｡
そうすれば､ 彼は秘密のメッセージの内容を知ることができる｡
そして､ ご覧の通り､ 秘密鍵は決して共有されていませんでした｡
Johnが秘密鍵を作成し､ Johnが秘密鍵を保管した｡
共有されるのは公開鍵のみで､ 秘密鍵の特定やメッセージの解読には使用できない｡
メッセージの暗号化にのみ使用することができます｡
つまり､ 通信が終わるころには､ DavidはJohnの公開鍵を持ち､ Johnは2人の秘密鍵を持つことになるのです｡
したがって､ Davidは常にJohnにメッセージを送ることができ､ Johnは常に自分の秘密鍵を用いてメッセージを復号することができるようになりました｡
それだけでなく､ DavidがJohnの公開鍵で暗号化した場合､ John以外の誰もこのメッセージを解読することができないので安心です｡
Johnは唯一の秘密鍵を持っており､ 彼の秘密鍵は決して共有されてはならないからです｡
共有する意味がないので､ ジョンが自分の行動を知っていれば､ 100人にメッセージを送ってもらいたい場合でも､
秘密鍵ではなく､ 公開鍵を共有すればいいだけです｡
さて､ ジョンがデビッドに何かを送りたい場合､ 同じことが逆方向にもできる｡
そこで､ Davidはキーペアを作成することになる｡
彼はジョンに自分の公開鍵を送り､ ジョンはデビッドの公開鍵を使ってメッセージを暗号化する｡
それを受け取ったDavidは､ 自分の秘密鍵を使って復号化する｡
だから､ 発想はとてもとてもシンプルです｡
公開鍵を共有することで､ 秘密鍵の特定やメッセージの解読に使用できないため､
完全に安全な公開鍵という名前になっています｡
つまり､ 公開鍵を共有し､ あなたにメッセージを送りたい人は､ そのメッセージをあなたの公開鍵で暗号化し､
この方法であなただけがこのメッセージを復号することができるようになるのです｡
別のメッセージを送りたいときも同様です｡
例えば､ あなたが私にメッセージを送りたかったら､ そのメッセージを私の公開鍵で暗号化すればいいだけです｡
そして､ この方法では､ 私は秘密鍵を誰とも共有しないので､ メッセージを読むことができるのは私一人になるのです｡
だから､ このメッセージはどこにでも入れることができるのです｡
公開しても､ そのメッセージは私以外には読めないので安全です｡