こんにちは、こじろうです。
この記事では、文系SEの方々やITビギナーの方々向けに、公開鍵・秘密鍵について紹介していきたいと思います。
【この記事でわかること】
- 公開鍵・秘密鍵とは何か?
- 具体的なポイントは何なのか?
- 公開鍵・秘密鍵を押さえておくとどこで役立つの?
効率よく通信相手が本物か確認できるメジャーな手段
パスワード利用せずとも、アクセス先が「本物」であることが確認できるから
相手が本物かどうか確認する時、ログインIDとパスワードを利用する場合が多いと思いますが、Webサイトにアクセスする側(みなさま側)からすると「このサイトって本当に本物なのか?」判別することって、どうすればいいんでしょうか?
一言で言ってしまうと、そのWebサイトのURL部分左端にある鍵マーク🔓があれば本物で、なければ偽物と判別できます。
参考:カミアプさんのAmazonそっくりの偽サイトに要注意!騙されない為の見分け方とは
この鍵🔓マークを設定する仕組みの中核を担う技術が、公開鍵・秘密鍵認証になります。
これによって、送信者は自分が意図した人以外には対象のファイルを見せないようにすることができるわけです。
また、この鍵を使うことで、やり取りするデータを暗号化できます。
SSL/TLS認証と表現される
この公開鍵・秘密鍵を利用する認証やデータのやり取り、一般にはSSL(Secure Socket Layer)/TLS(Transport Layer Security)と呼ばれています。
参考:SSLとTLS
後ほど紹介しますが、この仕組みは自力で構築することもできるのですが、多くのWebサーバはSSL/TLS認証環境を構築してくれる企業に依頼します。
費用感としては年間数千円ですし、かなり面倒な作業なのでスペシャリストにお金払って依頼することが多いのです。
代表的なSSL/TLS認証提供企業としては、VerisignさんやGMOさん、X serverさん、お名前.comさんが挙げられます。
Verisign
GMO
SSL/TLS認証だけのサービスはもちろんですが、昨今はWebサーバのレンタルやドメインの登録とセットで提供される場合がほとんどです。
参考:Webサーバについての参考記事 (※更新中)
参考:ドメインについての参考記事 (※更新中)
具体的には、”認証局”という団体(企業)が取りまとめてくれている
指輪を買うときも、「この指輪のダイヤモンドは●●社が保証します」みたいな証明書がくっついてきますよね。
ITの世界にもこの保証をしてくれたり、証明書を発行してくれる団体や企業(認証局と言います)があるのです。(それが上記で紹介したGMOやX Server、お名前.comなのです。)
公開鍵・秘密鍵を利用した認証の準備
- Webサーバ(Amazonの様なECサイトなどを想像してください)稼働させる前に認証局として活動している企業へ、秘密鍵とSSL証明書の発行を依頼
※実際は、秘密鍵は申請者自身で作成(詳しい手順・やり方を認証局側から案内されます。)します。
参考:Verisign(ベリサイン)社SSLストア - 認証局は依頼元から提供された秘密鍵を元に公開鍵を作成
※公開鍵とは、秘密鍵と対になる鍵のことです。後ほど、公開鍵と秘密鍵を使って「Webサイトが本物かどうか」どのように確認するか触れます。 - 認証局は公開鍵を元にSSL証明書を作成
- 認証局は依頼元へSSL証明書(内部には公開鍵が入っている)を提供
- 依頼者はWebサーバへSSL証明書をインストール
参考:GMO GlobalSign SSL証明書のインストール(インポート)方法
上記の実施には、認証局団体(企業)とのやり取り含めて大体2~3日かかります。これらが完了すると、公開鍵/秘密鍵を使った認証の準備が整うこととなります。
公開鍵・秘密鍵を利用した認証の流れ
- ユーザがWebサーバ(Amazonの様なECサイトなどを想像してください)へアクセス
- Webサーバは、⑴準備段階で認証局から受け取った”サーバ証明書”と、⑵ハッシュ値(多くの場合、ハッシュ関数SHA-1にサーバ証明書を投入し、得られたハッシュ値)、そして同じく⑶認証局から提供された公開鍵の3つをアクセスしてきたユーザへ渡す
※ここが公開鍵・秘密鍵の認証において最も分かりづらいところなのですが、実は皆さんのPCにインストールされているWebブラウザには、上記の通り信用できる認証局と、それらが発行するサーバ証明書のリストが記載されているのです。こちら(画像設定中)
もし、②で送られてきたサーバ証明書が、全く世の中に広まっていない、信用できるかどうか分からない企業(団体)が発行したサーバ証明書の場合、Webブラウザ上に注意喚起の画面が表示されます。
この画面、見たことありませんか?推奨されないとかよくわからないけど見てしまえ!なんだ、何もないじゃん…ということもあったと思います。
冒頭の偽物サイトはもちろんですが、悪意のないサイトでもその認証局を利用して秘密鍵、公開鍵、サーバ証明書を生成・設定していないサイトへアクセスすると、この画面が表示されるのです。
余談ですが、Googleはこの秘密鍵、公開鍵、サーバ証明書を生成・設定していないサイトに対して、どんなに有用な内容を書いていても、検索順位を大幅に落とすことを宣言しています。Webサイト運営者は無視できない項目ですね。
- ユーザは、受け取ったサーバ証明書に対して自分自身でもハッシュ値を計算し、その値が②⑵で受け取ったハッシュ値を合致するか確認
もし、ここで双方のハッシュ値が合致しなければ、途中で何者かがサーバ証明書に手を加えた(改ざん等)ことになり、安全なアクセスが妨げられるため、アクセスは中断となります。 - 確かに、本物のサイトにアクセスできていることが確認できたら、ユーザ~Webサーバ間でデータ(Amazonだったらクレジットカード情報等、他人に見られてはまずい情報をやり取りしますよね!)を暗号化するための、共通鍵を作ります。
この共通鍵は公開鍵から生成できるのですが、ここから先はこの記事の本題とはズレるため割愛します。
参考:公開鍵を使って情報を暗号化する。
- 共通鍵が出来上がったら、ユーザは共通鍵を公開鍵で暗号化してWebサーバへ送ります。Webサーバは、暗号化された共通鍵を自分の秘密鍵で解凍します。
この段階で、ユーザとWebは同じ鍵(共通鍵)を保持しており、いわばお互いを確認しあう”合言葉”を取得できた状態になります。
- お互いに共通鍵を取得できたあとは、この共通鍵を使ってやり取りする情報を暗号化/復号化していきます。例えばユーザは自分の入力情報(Amazonで買い物する場合なら買い物する商品や個数、送付先住所、支払時のクレジットカード情報等)をこの共通鍵で暗号化し、Webサーバ(Amazon)へ送ります。
ユーザの情報を暗号化された状態で受け取ったWebサーバ(Amazon)は、同じく共通鍵で復号化し、ユーザの情報を認識します。
ここまでハッシュ化と暗号化という同じような言葉を多用してきましたが、似て非なるものです。
参考:ハッシュ識別子、元に戻せない。暗号化はデータを隠す、元に戻せる。
この仕組みをPKI(Public Key Infrastructure)と言います。
鍵の片方を誰でも取得可能な状態にしつつも、データの暗号化を実現するこの方法は画期的なのですが、一昨年の秋に共通鍵の交換の処理が破られました。
共通鍵の仕組みは簡単だけど、手間がかかる。そのため、仕組みは複雑&処理が重くなるけど、鍵を作る量を減らせる。公開鍵/秘密鍵が開発され、日々進歩しているのですが、ハッキングの標的にも日々晒され続けているわけで、我々としてはその動向を日々、注視し、最新の情報をと手ちくことが重要ですね。
それでは、Tchau◎
こじろう
※冒頭の画像はまりぽーささん@写真ACからの提供でした。