見出し画像

ブラウザの鍵マーク「HTTPS」ってなんだろう? 前半

こんにちはこぐまです。
超久しぶりの投稿です。

仕事中ぼーっと調べもの(ネットサーフィン)してて
ふと思いました。
あ、鍵ついてる。

何気なーく見ているサイト(例えばこのNote)も、
ちゃんと鍵マークついてますね。

最近は、アドレスバーのところをもう一度クリックしないと、
URLの先頭の「https://」という部分は表示されないんですね。

本日は、いくつかのサイトから、自分なりに鍵マーク(HTTPS)について学んで感じたことを共有したいと思います。
IT関連にあまり詳しくない方も、インターネットを利用しない方はほぼいないと思いますので、何かしらの豆知識になれば!と思います。

1.そもそも「サイトにアクセスする」とはどういうことか?

あなたが何気なく検索ワードに適当に好きな言葉入力したり、あるいはブックマークから指定して、あるサイトを開いたとします。
この行為を「サイトにアクセスする」と言います。

この時に何が起きているかというと、「あなたの手にあるPC」と、「世界のどこかにあるPC(サーバといわれることが多いです)」とをつなぐ光の道ができています。世界のどこかにあるPCは、あなたがアクセスしたかったサイトの入り口です。つながったその光の道の上を、あなたの思いが透明な箱に包まれて運ばれていきます。桃のようにどんぶらこどんぶらこ。これが「サイトにアクセスする」ということです。


光の道は一本道ではなく、網の目のような形をしています。
この網の目のような光の道を専門用語で「インターネット」と言います。
また、分かれ道には必ず拠点があり、あなたの思いが詰まった透明な箱を、
次にどちらの道に運べばよいかを管理しています。
この拠点のことを専門用語で「ルーター」と言います。
透明な箱のことを専門用語で「パケット」と言います。

あなたが「サイトにアクセス」するという行為は、専門用語を使えば、
あなたのPCから、インターネット上のいくつものルーターを経由し、世界のどこかにあるPC(サーバ)までパケットを届けることを意味します。

2.「サイトにアクセスする」というあなたの思い(箱)は、世界中から見られています。

少し怖い書き方をしましたが、事実です(笑)
あなたがサイトにアクセスしているという行為は、実は世界中から見られています。光の道はみんなも使う道であり、何よりもあなたの思いは「透明な箱」で運ばれていくからです。つまり、丸見えです。いやん。

あなたがよほど度胸のある人である場合は別として、一般的には
裸の状態を不特定多数に見せるというのは気が引けます。
単純に「イヤ」という気分的なものだけであればまだいいのですが、
透明な箱の中に入っているのがとても素晴らしいお宝であったらどうでしょう?あなたが本当にアクセスしたいサイト(届けたい相手)に到着する前に、誰かが覗き見て中身を盗んでしまうかもしれません。
やはり、裸のまま光の道を歩くのは危険そうです。

じゃあ、どうしよう?
この時一番に思いつくのは、「透明な箱を透明でなくしてしまえばいい!」
ということです。例えば黒塗りとか。でも黒塗りだけでは、手当たり次第に持っていかれて片っ端から開けられたら意味ないですね。なので、「盗まれても開けられないように、鍵をかけてしまえばいい」というアイデアも必要かと思います。

しかしやみくもに黒塗りにしたり、適当に鍵をかけてしまっては、あなたが
本当に渡したい相手がその箱を受け取っても何もできません。

3.ふたりだけの鍵をつくって箱を施錠する

ここで、いい方法が生み出されました。

ふたりだけの鍵」をつくって箱を施錠しよう。
この鍵は魔法の鍵で、施錠すると箱全体を「黒塗り」にしてくれます。
さらに、同じ鍵でないと「黒塗り」を戻すことができません。

この鍵のことを「共通鍵」といいます。
あなたはまず共通鍵を作ります。そして、その共通鍵を相手だけに渡します。これで準備完了です。
あとは共通鍵をつかって、あなたは送りたい箱(パケット)を施錠します。
インターネットでは、このようにパケットを施錠することを、「暗号化する」といいます。暗号化されたパケットは、その中身を見ることはできません。もう裸ではないのです。これで光の道を安全に進めます。
万が一盗まれても、(ほかの人は共通鍵をもっていないので)中身を空けることはできません。
やがてパケットは相手(サーバ)に届き、相手はあなたの共有していた
「共通鍵」を使って施錠を解きます。これを「復号化する」といいます。


4.問題がある

ただしここで一つ問題があります。問題は一番最初にあります。
あなたが作成した共通鍵を最初に相手に送る時点で、世界中の人に見られてしまうということです。この時点ではまだ暗号化されていないですからね。つまりこれは、本来は2人しか使えない共通鍵をみんなが使えてしまうということになってしまいます。

これはマズイですね・・みんなが開錠できる鍵を手に入れることができる状態では、鍵をかけている意味がありません。

5.「共通鍵の無限ループ」

じゃあ、相手に共通鍵を届けるときにも別の鍵を使って暗号化すればいいじゃないか。そういう考えも浮かんできそうです。
でも、その方法って、意外に難しいんです。

ある共通鍵Aを安全に渡すために暗号化する必要があります。 そのための共通鍵Bを作らなくてはなりません。 その共通鍵Bをつくって相手に渡します。 ・・・この時点でもうわかっちゃいますね(笑) 結局、共通鍵Bはこのままでは裸のまま送られてしまいます。 なので、こんどは共通鍵Bを暗号化するための共通鍵Cを作らなくてはなりません。するとこんどは、共通鍵Cを暗号化するための共通鍵Dを・・・ 共通鍵Dを暗号化するための共通鍵Eを・・・

共通鍵を暗号化するための共通鍵をどんどん外側に作り続けていく必要があり、いつまでたっても安全な共通鍵を相手におくりとどけることができません。これを「共通鍵の無限ループ」と私は呼んでいます。

6.新しいタイプの鍵が必要だ!

共通鍵の無限ループに陥ってしまわないような、いい方法はないのか。
そこで生み出されたのが「公開鍵暗号方式」です。
(あ、正確には、本当にこのような推移で生み出されたのかどうかは調べてないのでわからないです・・あくまで私の持論です)

この新しいタイプの鍵には、とても大きな特徴があります。
それは、1組の鍵のペアがあるということです。
このペアは「公開鍵」「秘密鍵」と言われています。
結構名前を聞いた方もいらっしゃるかと思います。

これは非常に面白い仕組みでして、以下のような特徴があります。
・公開鍵で施錠した箱は、ペアとなる秘密鍵でしか開かない
・秘密鍵で施錠した箱は、ペアとなる公開鍵でしか開かない

つまり、「公開鍵で閉めて、公開鍵で開ける」とか
「秘密鍵で閉めて、秘密鍵であける」みたいに
同じ鍵どうして開けることはできないのです。
(これは日常生活ではあまり見られませんね。玄関の
閉めるカギと開けるカギが別々・・なんて家はなかなかないですよね)

そして「公開鍵」という名前の通り、こちらの鍵は世界中に「公開」します。つまり「ばら撒く(正確には誰でも手に入る」んですね。

あなたが箱を送りたい相手が、あなた以外の箱も受け付けているとき(つまり、サーバとして機能しているとき)は、サーバがこの公開鍵と秘密鍵のペアを準備します。そして、サーバは準備した「公開鍵」をあなたに渡します。あなたは、この「公開鍵」つかって、先ほどのあなたが作成した共通鍵を暗号化するんです。するとどうなるでしょうか?

あなたが「共通鍵A」を「サーバの公開鍵」で暗号化する 
→ 「暗号化された共通鍵A」ができる。
→ この「暗号化された共通鍵A」をインターネット経由で相手(サーバ)に送る。

このとき、ほかの人はこの「暗号化された共通鍵A」を複合できるでしょうか・・? 
いいえ、この鍵の仕組み上、それはできないことがわかります。
他の人は、「サーバの公開鍵」は持っていますが、その公開鍵で復号化することはできません。同じ鍵(公開鍵)同士で開けることはできないからです。
復号化できるのは「サーバの秘密鍵」を持っている人だけです。
「サーバの秘密鍵」はだれが持っているかというと、「サーバ自身」です。

つまり、共通鍵の無限ループに陥らずに、共通鍵を公開鍵暗号方式で
一回暗号化するだけで済みます。
すごいですね!

これが唯一破られるケースとしては、
「サーバの秘密鍵が漏洩した場合」です。(※)
だから「サーバの秘密鍵は絶対に漏れてはいけない」のです。
「秘密鍵」という名前の意味が分かっていただけるかと思います。

(※)これ以外のケースとしては、凄腕の鍵開け師(ハッカー)によって、
総当たりで試され、強制的に復号されるというケースもなくはないですが、現在の暗号方式は、現時点の最高峰のPCの計算であっても途方もない年月がかかるような強度となっていますので、ほぼないと言っていいかと思います。量子コンピュータであれば・・どうなんでしょうかね?(笑)

7.まとめ

ここまでのまとめです。

・あなたがサイト(サーバ)にアクセスしてやりとりしている内容は、透明な箱で光の道を運ばれていく。それは世界中のだれからも自由に見られている状態である。
・そのままでは困るので、あなたは「共通鍵」というものを作成し、
それをサーバに送る。あなたは「共通鍵」で送りたい箱(パケット)を黒塗りにし、鍵をかける。これを「暗号化」という。
・ところが、あなたが作った共通鍵を最初に相手に送るその行為自体が、世界中の人に見られてしまう。それを防ぐために共通鍵で暗号化しても「共通鍵の無限ループ」に陥る。
・そこで共通鍵ではない別のタイプの鍵が必要となる。「公開鍵」と「秘密鍵」のペアである。(公開鍵暗号方式)
・あなたが作った「共通鍵」を、「サーバの公開鍵」で暗号化する。そうしてできた「暗号化された秘密鍵」を相手に渡す。こうすることで、「サーバの秘密鍵」を持っている人以外は、「暗号化された共通鍵」を復号化することはできない。

【流れ】
1.あなたが共通鍵を作成
2.サーバからもらった公開鍵で共通鍵を暗号化
3.暗号化された共通鍵をサーバに渡す。
4.サーバは暗号化された共通鍵を自身の秘密鍵で復号して、共通鍵を手に入れる。
ーーこの時点で二人だけの共通鍵が安全に保有できた状態ーー
5.あなたは共通鍵で暗号化した箱(パケット)をサーバに届ける。
6.サーバは共通鍵で箱を復号化する。

HTTPSってなんだろう?の前半の説明がおわりました。
一見これで、ああ、相手と安全に箱がやりとりできそうだ・・と思えますが実は「HTTPS」というのはこれだけでは不十分なのです。

長くなってしまったので今回はここまで!
読んで下さってありがとうございました!


この記事が気に入ったらサポートをしてみませんか?