はじめに
このシリーズでは、文系出身未経験入社の開発エンジニア2年目の自分が、
なんとなく分からずにモヤモヤしていた知識や疑問をざっくりと解説していきます。
ざっくりとなので、多少正確性を欠くことがありますが、もし誤った記載がありましたらご指摘いただけますと幸いです。
認証局とは?
前提知識:公開鍵暗号方式
認証局は、「ネット上で安全に情報のやり取りを行うため」に必要となる組織です。
認証局の必要性を理解するためには、公開鍵暗号方式を理解する必要があります。
知っているよという方は飛ばしてください。
(公開鍵暗号方式の例)
あるWebサイトAがあり、太郎さんがそのサイトでショッピングをするとします。
買った商品を太郎さんの家に届けるためには、WebサイトAに太郎さんの名前や住所などの個人情報を渡す必要があります。
このとき、太郎さんがWebサイトAに送信した個人情報を、第三者に傍受されるリスクがあります。
送信した個人情報はWebサイトAの運営者だけが知ることができるようにしたいので、以下の手順で個人情報を送信することにします。
①太郎さんが入力した個人情報を暗号化する
②WebサイトAに送信する(ここで傍受されても暗号化されているため、個人情報は分からない)
③WebサイトAの運営者が暗号化された太郎さんの個人情報を復号する。
↑のような手順で暗号化して通信を行う方式を公開鍵暗号方式といいます。
①の暗号化のときに太郎さんが使う鍵→公開鍵
②の復号化のときにWebサイトAの運営者が使う鍵→秘密鍵
です。
公開鍵はその名の通り、公開して色んな人にばらまきまくってOKです。
秘密鍵はその名の通り、絶対に他の人に知られてはいけません。
他の人に知られてしまうと、通信を暗号化した意味がなくなります。
補足:「鍵」というとイメージがつきにくいですが、公開鍵や暗号鍵の実体はバイナリ(0と1の羅列)です。ただし、実際に私たちが見るときには、バイナリをBase64エンコードという方法で文字列に変換した後です。
aGVsbG87EjsLske= ← こんな感じの文字列です。
認証局の必要性
認証局は、「公開鍵-webサイトのドメイン-webサイトの運営者の身元」
の3つが紐づいていることを確認します。
確認できた場合は、TLS/SSL証明書(デジタル証明書の一種)を発行します。
※証明書の実体は.pem/.crt/.cerなどの拡張子で保存されるファイルです。
ユーザーのブラウザ(chromeとかsafariとか)はwebサイトと通信を行う際、
webサイトのTLS/SSL証明書をチェックして、信頼できる認証局が発行しているかどうかや、証明書の期限が切れていないかなどを確かめます。
確認できなかった場合は、ユーザーに警告を出すなどして知らせます。
こうして、認証局があることで、(一応は)安全にwebサイトとユーザーが通信を行うことができるというわけです。
以下は補足になるので、読んでも読まなくてもよいです。
補足①:「信頼できる認証局が発行している」はどうやって確かめる?
OSやブラウザには「ルート証明書」というものが組み込まれていて、
この中に信頼できる認証局のリストが含まれています。
証明書のチェックを行う際には、このリストに含まれている認証局が発行しているかどうかをチェックしています。
補足②:認証局が証明書を出している=安全なサイトではない!?
認証局はあくまで、
「公開鍵-webサイトのドメイン-webサイトの運営者の身元」
が一致しているかどうかが確認できれば、証明書を発行します。
そのため例えば、
○○銀行のwebサイトのドメイン→www.marumaruGinko.com
○○銀行の偽のwebサイトのドメイン→www.marumalGinko.com
のように、わざと酷似したドメインを取得した悪質なサイトだったとしても、
証明書の発行自体はできてしまうことがあります。
悪質なサイトであることが認証局に発覚した場合、証明書は取り消されますが、
証明書があるからといって必ずしも安全なサイトではないということは留意しておいた方がよいです。
ちなみに、malというのはスペイン語で「悪」という意味で、偽サイトのドメイン名はスペイン語ジョークでした。「マルウェア」の語源である英語malicious(悪意のある)と同じ語源です。
英語もスペイン語も同じラテン語由来なので。
補足③ 認証局は公的機関?
「局」とついているので、なんとなく公的機関っぽいですが、民間の株式会社が運営していることが大半です。国によっては公的機関が運営していることもあるらしいですが。
どんな会社が運営しているのかというと、アンチウイルスソフトを売っているなど、
他の事業でもサイバーセキュリティに携わっているような会社が多いようです。
おわりに
IT業界で当たり前のように使われている用語や概念って、
なにを指しているのか曖昧だったり、分かりづらかったりすることが多い気がします。
特に未経験で入社すると、「これってどういう意味なんだろう?」と思って調べてみても、結局曖昧な理解のままになってしまい、
上司の指示がちゃんと理解できずに怒られ、結果としてITエンジニアという仕事に苦手意識を持ってしまう...というようなことも少なくないのではないでしょうか?
この記事が、そんな悩みを抱えている方の一助になることができれば幸いです。