こんばんは、もずくです。
魔法使いオズモンのシリーズ第2回は「公開鍵暗号」についてです。
前回の記事「ハッシュ関数とは」をまだ読んでいない方は(オズモンの設定の話もあるので)お先にどうぞ。
さて、魔法使いオズモン、今回はどんな問題を魔法で解決するのかな…?
やあ、魔法使いのオズモンだよ。
魔法の世界でも人間の世界でも、恋の基本は攻めの姿勢。
ボクの彼女(予定)のマギカちゃんは、ちょっと鈍感なところがあって、ボクの気持ちになかなか気づいてくれない(笑)
だから絶えずプレゼントを送っているんだ。
でも、魔法の世界にはアクマくんという悪いやつがいて、配送中のモノを盗み見たり、酷いときにはそっくり複製したりするんだ。
恋のやりとりってとってもデリケートなのに困ったもんだよ。
だから、魔法の世界には「カギ魔法」っていうのがあるんだ。
カギ魔法を使えばどんなモノもロックできて、中身がわからないようにできる。
受け取る人に同じカギを渡しておけば、その二人にしか開けることのできない贈り物ができるってわけ。
だから、ボクからマギカちゃんへのプレゼントが知らないうちにアクマくんに複製されても、魔法のカギがなければ中身を見ることはできないから安心できる。
でも、このカギ魔法、ちょっと問題があるんだ。
モノを送る前に、相手に魔法のカギを渡しておかなきゃいけないんだけど、そのときはまだ魔法でロックできないわけだから、アクマくんに取られちゃうかもしれない。
マギカちゃんに直接会ったときにしかカギを渡せないのって不便だよね。
だから、ボクが新しいカギの魔法を作ったんだ。
ポイントは、魔法のカギを〔自分用のカギ〕と〔配る用のカギ〕の二つに分けたこと。
こんなふうに、〔配る用カギ〕はみんなにバラまいて、ボク宛に送るモノをロックするのに使ってもらう。
で、〔配る用カギ〕でロックされたものは、同じ〔配る用カギ〕ではアンロックできないようになっている。
つまり、ロックされたモノをアンロックできるのは〔自分用カギ〕を持っているボクだけ…というわけ。
ボクから誰かにモノを送りたいときは、先に相手の〔配る用カギ〕をもらっておかないといけない。
相手の数だけ〔配る用カギ〕があるってことだね。送る相手に合わせてロックするカギを決めるんだ。
最初に紹介したシンプルなカギ魔法の二つの問題が解決されていることがわかるかな?
相手に渡しておくのは盗まれても構わない〔配る用カギ〕で、〔自分用カギ〕は他人に送る必要がないんだ。
すごい発明でしょ?
ちなみに、〔配る用カギ〕は〔自分用カギ〕から作り出すことができるから、自分で保管しておくのは〔自分用カギ〕だけで構わない。
狭い日本の住宅事情にも配慮した設計にしてみたんだ。
そうそう、例によって、人間界のコンピュータの世界にも僕の魔法を真似た「公開鍵暗号」っていう技術があるらしい。
ロックのことを「暗号化」って言い換えたり、〔自分用カギ〕と〔配る用カギ〕を「秘密鍵」と「公開鍵」って言い換えたりしているけど、仕組みはほぼ同じ。
どうみても僕の魔法のパクリだよね。
ちなみに、ブロックチェーンのトークン(暗号通貨)はインターネット上に存在するんだけど、その所有者の証となるのが秘密鍵(プライベートキー)なんだ。
もう少し踏み込んだ話はいつかするけど、秘密鍵はパスワードと同じで無くしたり盗まれたりしたら大変。大切に保管しておきなよ。
あと、ビギナー記事ではやっちゃいけない“余談”なんだけど、ウェブで「https」ってあるでしょ、あれも魔法カギ(暗号化)の仕組みが使われているんだよ。
言ってなかったけど、実は公開鍵暗号(カギを二つに分ける方)って、暗号化・復号化のときにちょっと時間がかかるんだ。
だから、ウェブみたいに頻繁にやりとりするときに、毎回 公開鍵暗号を使っていたら日が暮れるわけ。
だから、httpsの暗号化通信では、一番最初に紹介したシンプルな魔法カギ(人間界では「共通鍵」と呼ばれる)を使うんだ。
共通鍵の問題点は、一番最初にどうやってカギを相手に渡すか…というところだったけど、そこの部分だけ処理の重い公開鍵暗号を使って送る。
共通鍵が安全に二人の手に渡ってしまえば、処理の軽い共通鍵で暗号化して情報をやりとりする。これがhttpsの仕組みだよ。
というわけで、今日は魔法カギ(公開鍵暗号)の話でした:)
最後のhttpsの話が完全に蛇足だけど、絵を書いちゃったからもったいなくて…
次回はいよいよブロックチェーンに頻出する電子署名の話だよ。
楽しみにしててね!