- ベストアンサー
公開鍵方式の安全性について
- 公開鍵方式は、秘密鍵と公開鍵を組み合わせた暗号方式であり、秘密鍵で暗号化したデータは公開鍵でしか復号できない仕組みです。
- 公開鍵はたくさんの人に配布しておき、誰でも簡単に入手できるようにします。
- そのため、データの送信先であるBさんの公開鍵を通信傍受者のCさんが入手しても、秘密鍵がなければデータを解読することはできません。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
うむ。その疑問はもっともだ。 ところで、AさんからBさんにデータを送る場合、2つのやり方がある。 1.AさんはAさんの秘密鍵で暗号化する。BさんはAさんの公開鍵で復号化する。 2.AさんはBさんの公開鍵で暗号化する。BさんはBさんの秘密鍵で復号化する。 あなたが言っているのは前者よりの話だけど、実はこれはデータの暗号化に使われるものではない。 Aさんの公開鍵は文字通り公開されているので当然悪意のある第三者Cさんも入手できる。 だからAさんの秘密鍵で暗号化されたデータは物凄く悪意のある第三者Cさんも復号化できる。 もろめっちゃ悪意のある第三者Cさんに内容が漏れてしまうから確かにデータは安全ではない。 が、前者の方式は「このデータは確かにAさんが送った(作成した)ものだ」という確認をするためのもので、デジタル署名などとも言われる。 データは誰にでも読めるのでデータの安全性のために行うものではないのだな。 AさんからBさんに送りたいデータの中身を安全にしたい場合は後者の方式を使う。 AさんがBさんの公開鍵でデータを暗号化すると、そのデータをCさんが入手したとしても CさんはBさんの秘密鍵を持っていないのでデータの中身をみる事ができない。 だからデータは安全だ。 この場合、Bさんはデータの安全性とは別にこれが確かにAさんから送られてきたものだと確認する手段が必要だ。 なぜならば、後者の方式は、Bさんに届いたデータの中身が改変されていない事と、 全世界の誰にでも入手できるBさんの公開鍵を使って暗号化されたものである事しか確認できないからだ。 満塁ホームラン級に悪意のある第三者CさんがBさんの公開鍵を使ってウィルスを暗号化し、 「私はAですよ。頼まれてたプログラムを送ります。すぐ開いてください。」 などと送りつけてきた場合に、それがAさんからであるか確実には分からない。 なので最大限にデータを安全にする必要があるパターンでは前者と後者を両方使う。 2方式あるのは分かってもらえたと思うが、じゃあなんで2方式あるのと言われれば、 前者はデジタル署名でPGPなどに用いられてメール送信者の偽装ができなくなる(メールの中身が漏れる事については安全ではない)、後者はSSL手順の最初などに用いられて暗号化通信に使うための元ネタを誰にもばらさないようにWebサーバーとWebブラウザー間でやりとりするために使われるのだ。 > 例えばAさんからBさんにデータを送ったとする。 > データはAさんの秘密鍵で暗号化されている。 > しかしそのデータ通信が発生したことにCさん(Aさん、Bさんの敵)が気付いた。 > Bさんの公開鍵は誰でも簡単に入手できるのだから当然Cさんも入手している。 > そのためBさんに送られたデータはCさんにも解読されてしまう。 ここまでは前述の通りAさんがAさんの秘密鍵で暗号化したデータをBさんに送る時は、中身自体はCさんも見れる。 > 何らかの方法でAさんに送られたデータをCさんも入手してしまえば > 公開鍵でCさんも解読することが可能になってしまう。 いきなり話が逆方向(Aさんが送信ではなくAさんが受信)になってるけど、 もしこれが「Aさんに送られた」→「Bさんに送られた」であれば回答中の本文を読んでいただけたら分かるはず。解読される、が解読されない事を目的としている訳ではないのでそこはリスクではないのだ。
その他の回答 (3)
- uyama33
- ベストアンサー率30% (137/450)
2重に暗号化したらいかがでしょうか? AさんがBさんにデータを送るとき、 1.Aさんは、自分の秘密鍵でデータを暗号化する。 2.さらに、AさんはBさんの公開鍵で1の結果得られているデータをさらに暗号化する。 3.2の結果のデータは2重に暗号化されている。これをBさんに送る。 このばあいは、 途中でデータを横取りしたCさんは、Bさんの秘密鍵を持っていないので復号化できない。 Bさんは、自分の秘密鍵があるので復号化して、Aさんの秘密鍵で暗号化されたデータを得る。 Bさんはさらに、これをAさんの公開鍵で復号化してもとのデータを得る。 途中は安全だし、しかもAさんから送られたことも確認できる。 いかがでしょうか?
お礼
ありがとうございます。別手段として覚えておきます。
- Tacosan
- ベストアンサー率23% (3656/15482)
余談だけど, 「発信者の秘密鍵で暗号化する」のは「デジタル署名」になります. 「秘密鍵で暗号化する」のは当人しかできないからね.
お礼
補足説明をしていただきありがとうございます。
- drum_KT
- ベストアンサー率43% (1108/2554)
AさんからBさんにデータを送る場合は、Aさんの秘密鍵ではなく、Bさんの公開鍵を使って暗号化するのです。 そうすると、解読できるのはBさんだけになります。Aさんの秘密鍵で暗号化したら、当然誰でも解読できることになります。
お礼
簡潔な回答をしていただきありがとうございます。
お礼
暗号化の話とデジタル署名の話両方まとめて詳しく教えていただきありがとうございます。整理ができました。