「安全でない通信」って何が安全じゃないの?
こんにちは。筆者です。
ブラウザでhttpのサイトとか開くと出てくる「安全でない通信」ってやつ、見たことありますか?
開発者はしょっちゅう見ますよね。
プロダクションのサイトでそんなのは稀だと思うので、まともなサイトしか見ない一般人は不意にそんなこと言われるとビビると思います。
安全でない通信ってのは、簡単に言えばちゃんとしたhttpsになってないというだけの話なんですが、
それのどこがどう安全じゃないの?と言われると、意外とパッとは出てこない気がしたので、
探せばいくらでもありそうな記事ですが、少しだけ書いてみたいと思います。
「安全な通信」とは?
先述の通り、簡単に言えばちゃんとした証明書を使ったHttps通信の事です。
そもそも通信って?
一応初心者向けに、まずはインターネットを経由してWebサイトを見るというのがどんなイメージなのかから行きますが、
郵便物で例えれば、裏面にIDとパスワードを書いたはがきを送ると、表面にあなたが見たい情報が書かれたはがきが返ってくるみたいな感じで行われていて、この「はがき送ったら送り返してもらう」というやり取りの方式そのものをhttpと呼びます。
httpsなら見られるけど読まれない。
httpは仕様上はがきでのやり取り限定になるんですが、はがきで送るってことは、他人が配達する瞬間をちらっと見ただけで、中に書いてある事が全部読まれちゃいますよね。
やり取りの上ではパスワードとか機密情報も送らないといけないですから、そう簡単に読まれちゃ困ります。
そこで、読んでもわかんないように暗号文で送ればいいじゃん!というのが、httpを暗号化したhttpsという仕組みです。
暗号化ってどうやるの?
多くの場合、あなたが見ているWebサイトから「公開鍵」というものが渡されて、あなたが何かサイトに送る時はこれを使って暗号にします。
この暗号は、公開鍵とペアになる「秘密鍵」を使わないと読めないので、基本は唯一秘密鍵を持ってるWebサイト側にしか読まれないことを担保できます。
暗号化すれば安全ってわけでもない
暗号自体は基本的に安全です。
秘密鍵無しで暗号を破るのは、サマーウォーズの鼻血たらしながらやってたあの意味不明な計算の何倍も大変な計算と神のような予想が必要で、実際は人間には到底無理だし機械でも相当しんどいので、今のところ秘密鍵が無い限り読むことはできないと言えます。
しかし、あなたがもらった公開鍵が偽物だったらどうでしょう。
当然偽物の公開鍵に対応する秘密鍵はWebサイト本人じゃない第三者が持ってるわけなので、あなたはWebサイトにしか読まれないと思っていても、偽の秘密鍵を持ってる第三者にこっそり機密情報を見られてしまいます。
鍵が偽物でない証明
鍵が偽物だとまずいので本物である証明をするための認証局(CA)という存在があります。
認証局は、国際基準をクリアした組織なので、こいつらの言う事は信頼していいよ!という事になっています。
鍵が本物かの確認は、公開鍵に認証局のお墨付きハンコが押されていて、ブラウザがそのハンコが本物であることを確認できれば本物とみなし、
ハンコが本物かの確認は、ブラウザにあらかじめ登録されている信頼できるハンコ一覧の中に、鍵についているハンコが入ってるかどうかで確認します。
どうすれば認証してもらえるのか
ある鍵がWebサイト本人が提供している鍵であれることを認証局に証明すればハンコがもらえます。
一般的には、この鍵をこのサイトで使ってます。と認証局に報告すると、じゃあこれをサイトに載せなさい。というのを渡されるのでそれをサイトに載せて、認証局がそこにアクセスして載ってるのが確認できればハンコつけてくれるという流れでやります。
こうして手に入れたハンコ付きのちゃんとした鍵の事を証明書と呼び、これを用いてhttps通信をすれば、あなたが見ているWebサイトとあなたの間の通信は第三者から見えないと言えるため、安全とされます。
証明書にもランクがある
これまでの手続きで、サイト本人とあなたの間でしか見えない通信は担保できてます。
しかし、サイトの鍵は本物だから通信は安全でも、サイト自体が偽サイトという可能性が存在します。
そこで、サイトの運営者の情報も併せて認証しているよりランクの高い証明書も存在します。
運営組織の名前、住所、電話番号などの情報や、さらにそれらがブラックリスト入りしていないかなども確認したものまであり、
ランクが高い証明書に記載されているこれらの情報は認証局によって証明された情報なので、信頼できる団体が運営しているかどうかの指標にできます。
どこで見れるの?
証明書の情報はChromeだとURLのすぐ左横のアイコンから、下記画像の順番で辿って見れます。
noteは組織まで証明書には含んでないですが、デジタル庁とかだとちゃんと入ってますね。
まぁ、組織があっても実用上は意味ないし、そんなところ確認するよりURL確認した方が早いので、組織まで明記されるケースはあんまり無いかもしれませんが。。。
安全は自分で担保するものだ
ドメイン認証が済んでいるちゃんとした証明書を使ったhttps通信であれば、基本は安全に通信できます。
しかし、語ってきた通り、いくら「通信」が安全でも、あなたが不注意で偽サイトにアクセスするのを、仕組みでどうこうすることはできません。
一般人の皆さんは、何もかもシステムに任せっきりにしないで、何をチェックすればいいのか自分で調べて、送る情報の安全性には自分で責任を持つことを意識してみてもいいかもしれませんね。
開発者の皆さんは、くれぐれもgitに秘密鍵を上げるんじゃないぞ!
以上です。