はじめに
以下は私が暗号技術について勉強中の内容を記述しているものです。
間違いありましたら、ご指摘いただけると幸いです!
対称鍵暗号(共通鍵暗号)
- 送信者と受信者が同じ鍵を持つから、復号化ができる
- 共通鍵なしで復号化することは現実的には不可能とみなされている
- 当事者間にセキュアなチャネルが必要
非対称暗号(公開鍵暗号)
- 公開鍵(パブリックキー)と秘密鍵(プライベートキー)が対(ペア)で作成される
- 公開鍵で暗号化されたデータは対となる秘密鍵でしか復号化できない
-
秘密鍵で暗号化されたデータは対となる公開鍵でしか復号化できない← これは公開鍵暗号の良くある誤解で、こちらの記事(秘密鍵で暗号化?)を参照する! - 当事者間にセキュアなチャネルは不要
- アリスとボブのメッセージやり取りの例
- アリスがメッセージの送信者
- ボブはメッセージの受信者
- アリスがボブの公開鍵でメッセージを暗号化して送信すると、ボブは自分の秘密鍵を使って復号化してメッセージを読み取ることができる。つまり、ボブ以外の人はボブの秘密鍵を持っていないからアリスのメッセージを読み取ることが出来ない。
- でも、ボブの公開鍵は誰もが持っているから、受け取ったメッセージが本当にアリスから送信されたのかは分からない。困る。
そこでアリスは自分の秘密鍵でメッセージを暗号化した後に、さらにボブの公開鍵で暗号化することにした。二重で暗号化した後にメッセージを送信した。これによってメッセージが確かにアリスによって送信されたことが証明出来る。メッセージを受け取ったボブはまず自分の秘密鍵で復号化。続いてアリスの公開鍵で復号化した。うまいことメッセージが複合化できたのでボブは送信者がアリスだということがわかった。-
よりセキュアにメッセージを送信したいアリスは「デジタル署名」を使うことにした。← 「デジタル署名」は「公開鍵暗号(の暗号化機能)」の応用ではないらしい!「公開鍵暗号(という総称の技術)の1ジャンル」のようだ。詳細勉強中! まずメッセージをハッシュ化して、それを元のメッセージにくっつける。そして、それらをアリスの秘密鍵で暗号化、ボブの公開鍵で暗号化してボブに送信した。メッセージを受け取ったボブは、ボブの秘密鍵で復号化、アリスの公開鍵で復号化して、プレーンなメッセージとハッシュ化されているメッセージ①を取り出す。アリスが使ったハッシュアルゴリズムでプレーンなメッセージをハッシュ化②して、先に取り出したハッシュ化されているメッセージ①とそのハッシュ②が一致するかを検証する。もし一致しない場合、メッセージが送信中に破損あるいは改ざんされたことになる。