DreamerDreamのブログ

夢想家の夢です。〜揚げたてのモヤっとしたものをラフレシアと共に〜

小学生でもわかる!共有鍵(共通鍵)、公開鍵と秘密鍵とは?

インターネットではここ近年、「http」から「https」のセキュアな通信へと移行する動きが出ています。

f:id:DreamerDream:20180917145052p:plain

 

今回はhttpsで使われている暗号化技術の1つ、「共有鍵」「公開鍵と秘密鍵」について、難しいことは専門家がかな〜り詳細に説明してくださっていますので、僕は難しいことは避けて出来るだけ実生活の中で使われるような方法で簡単にイメージをしていただこうと思います。

 

まずは、どのWebページでも説明されていると思われる基本的なことですが、

例えば、AさんがBさんに手紙を出す事にします。

f:id:DreamerDream:20180918122617p:plain

 

どうでも良いような内容であれば、第三者を仲介者として手紙を運んでもらっても全く問題はありませんよね?

f:id:DreamerDream:20180918122655p:plain

 

ここで大事なのは、この「第三者」は見るかもしれないし、見ないかもしれない。ということです。

これが、インターネットで使われるいわゆる「生のデータ」であり、httpで接続された状態です。

インターネット上の情報は誰かに見られているかもしれません。しかし見られないかもしれません。

「送っている人も受け取る人も見られているか見られていないかは解らない。」というのが基本です。

 

こういった生のデータは単純なホームページの閲覧程度であれば問題視されませんが、クレジットカードの情報等の個人データを扱う場合には大問題になりかねます。

 

そこで、httpsの大切な機能の一つ!大事な手紙は「鍵の付いた箱で運ぶ!

f:id:DreamerDream:20180917145125p:plain

という方法が提案されます。(「暗号化」と呼ばれる技術です)

 

f:id:DreamerDream:20180918124305p:plain

これならば第三者に見られることはありませんし誰かに盗まれたとしても開けられる心配もありません。

問題解決!とおもいきや、これではBさんにも開けられません。なんてこった!

お互いにヒミツのデータをやり取りする場合は、お互いに同じ鍵が無いと中を見る事ができません。

この、お互いに同じ鍵を持った場合、共通した鍵を「共有(共通)鍵」といいます。

f:id:DreamerDream:20180918124155p:plain

 

では、何かの方法でAさんにはBさんにも使える南京錠を開けるための共有鍵を渡さないといけませんね。

しかし、普通に鍵だけ送った場合

f:id:DreamerDream:20180918124429p:plain

複製を作られる可能性があります。

 

f:id:DreamerDream:20180918124619p:plain

 

この一度の取り引きで鍵を盗まれてしまえば、今後いくら鍵をかけても無駄ということになります。

じゃあ別の鍵を用意しますか?その別の鍵はどうやって安全に送りましょうか?

 

・・・・・・・・・・

ここで、だいたいのwebページで紹介されているのは公開鍵と暗号鍵という鍵の存在でしょう。ほとんどの説明ページはこのような2本の鍵のある図になっていると思います。

f:id:DreamerDream:20180918122127p:plain

 

 

「鍵なのに?閉めれるけど開かない?」そういう誤解や混乱を避けるためには施錠専用の公開鍵を「解錠状態の南京錠の錠」そのもの、解錠専用の秘密鍵を「南京錠を開けるための鍵」とするとここでは理解しましょう。

f:id:DreamerDream:20180918125425p:plain

 

今度はBさんに鍵の掛けられる公開鍵(解錠状態の南京錠)を送ってもらいましょう。

この錠はBさんの持っている秘密鍵でしか開けられません。

 

f:id:DreamerDream:20180918125726p:plain

 

 

AさんはBさんとやり取りするための鍵(共有鍵)を1本箱にいれ、公開鍵を閉めました。

公開鍵で一度閉めてしまえばAさんにも開ける事が出来ません

f:id:DreamerDream:20180918130020p:plain

 

公開鍵で施錠された共有鍵は途中で第三者が共有鍵の複製を作ろうとしても中が解らないので無理です。

 

f:id:DreamerDream:20180918130512p:plain

 

公開鍵によって施錠された箱をBさんは手元で持っていた秘密鍵を使って開ける事ができました。

中には共有鍵が入っていましたので、それを使って無事に秘密の手紙も見る事ができました。

f:id:DreamerDream:20180918130917p:plain

そして、今度は共有鍵を既に持っているAさんへも同じ鍵で秘密のデータを送れば誰にも見られることはありませんね。

めでたし、めでたし。

 

と思いきやっ!

三者がBさんの公開鍵を手に入れ、偽の公開鍵をAさんに渡した場合はどうなるでしょう??

AさんはBさんの公開鍵だと信じてしまいます。これが「なりすまし」と呼ばれる方法です。

f:id:DreamerDream:20180918132934p:plain

AさんはBさんの公開鍵だということをどうやって確認するのでしょうか?

実は「証明書」という型で確認することができますが・・・

証明書のお話は今回の本題ではなってしまうので今回はこのあたりで失礼します。

 

証明書の必要性はコチラ↓に詳しく書かれていますので興味があれば是非。

glorificatio.org

 

今回の目的、共有鍵、公開鍵と秘密鍵のイメージは掴んでいただけましたでしょうか?

このように、インターネットでの大事な情報のやり取りにはいろいろな鍵を渡して、キチンと本人に渡っているのかを確認するような機構が複雑に作られています。

そしてこれらは私達が意識せずとも自然に使っている技術なのです。

 

しかしインターネットのセキュリティー技術も人が作るものですから「カンペキ」というものは無く、今でもあの手この手での攻防戦が繰り広げられています。

 

https通信をするには基本的に外部機関の証明書が必要ですが、例えば自分だけしか使わないような暗号化通信のみを取り入れたい場合には「オレオレ証明書の発行」という方法もあります。

dreamerdream.hateblo.jp

 

実際の暗号化の方法について興味を持たれましたらこちらが詳しく載っていますのでオススメです↓。

qiita.com

 

さいごに、

https通信がいくらセキュリティーがしっかりしているといってもサーバー側からは情報は見ようと思えば丸見えの状態ですので「誰かに見られている可能性」を考え、ネットリテラシーのある言動を心がけましょう。

dreamerdream.hateblo.jp

 

https://cdn.profile-image.st-hatena.com/users/DreamerDream/profile.png私、(PONさん (@o_n_pon) | Twitter)を応援してくださるお優しいかたは15円から投げ銭可能ですので↓よりカンパをお願いしますm(_ _)m

kampa.me