公開鍵、秘密鍵、WEBの暗号化された通信の仕組みなどわかりにくいので私なりに分かり易くまとめてみました。
これを読めばなんとなくこの手の話題にはついていける理解力を得られるかと思います。
WEBブラウザとは
詳しい暗号化の説明の前に、前提知識としてWEBブラウザが何かを簡単に解説します。
皆さんがインターネットの検索の時に使用するWEBブラウザはWEBサーバーと通信するために必要なソフトウェアです。
PCやスマホでのインターネットの通信は欠かせないので標準でインストールされています。
この記事を含む、全てのインターネットのページの内容はWEBサーバーという高性能のパソコンの箱のようなものに格納されており、それをWEBブラウザがURLを元にして「このページの内容とか画像を見せて」とWEBサーバーにリクエストを送ってその返信内容を私たち人間に見せる様に綺麗に整形して表示してくれます。
WEBブラウザからWEBサーバーへのリクエストは「HTTPリクエスト」と呼ばれています。
WEB通信は暗号化しないと安全でない理由
HTTPプロトコルはシンプルさがメリットでもありデメリットにもなります。
主なデメリットはセキュリティが非常に弱いということです。
一言で言いますと、「暗号化されていないので、悪い人が盗聴や改善し放題」ということなのです。
デメリット
・通信が暗号化されていないので、盗聴を防げない
・通信内容やホームページを改ざんから防げない
・サーバーのなりすましを防げない
*プロトコルは「決まりごと」という意味があります。アプリケーションやサーバー間などで通信を行うに際に事前に決め事をいくつかしておかないと通信がうまくいかなくなるために決めます。
サーバーへのリクエストやそれに対するレスポンスの内容が人間が読んでも理解できる平文で行われていので図1の様にハッカーなどに通信を盗聴されると内容が筒抜けになります。
*平文とは暗号化されていない文のことです。
安全にWEB通信を行うには(HTTPSについて)
より安全にWEBアクセスを行うためのプロトコルがHTTPS(HyperText Transfer Protocol Secure)です。
ブラウザのURLの左側に鍵マークがついているかどうか見ればHTTPSかどうか確認できます。
HTTPでは暗号化されていないので攻撃され放題と先述しましたが、HTTPSはSSL(Secure Sockets Layer)やTLS(Transport Layer Security)などのプロトコルで送受信データを暗号化しています。
SSLはTLSの前身で今は使用されていませんが、歴史的にSSLが長く使用されていた為、現在も並行して表記されることが多いです。
以前は、限られた通信のみHTTPSが使用されていましたが、現在は、ほぼ全てのブラウザがHTTPS対応です。
WEBサーバーでHTTPSに対応するには、サーバー証明書が必要です。
SSL/TLSサーバー証明書とは
SSL/TLSプロトコルで使用される証明書をSSL/TLSサーバー証明書と言います。
証明書とは通信暗号化に必要な鍵とWEBサイト運営者や所有者の情報を含んでおり、サーバー証明書によって通信の暗号化、なりすまし防止、改ざん防止などになります。
改ざん防止の詳しい解説は以下の記事で行っております。
HTTPSで通信を行うには事前にサイト運営者が認証局(CA:Certification Authority)にサーバー証明書を発行してもらう必要があります。
サーバー証明書を使用すると、サーバーの実在性やIPアドレスやホスト名レベルで保証します。
つまり図1でハッカー2が通信を傍受してIPアドレスなどを偽装しようとしても、証明書の内容と一致しないとブラウザが危険を検知してユーザーに教えてくれるなど危機を回避することができます。
公開鍵、秘密鍵、共通鍵の仕組み
共通鍵暗号方式はその名の通り、暗号化と復号化に同じ鍵を使用します。
*復号化とは暗号化された文字を鍵を使用して元に戻すことです。
公開鍵暗号方式は暗号化と復号化で別々の鍵(公開鍵、秘密鍵)を使用します。
共通鍵暗号方式
メリット | 暗号化の処理が高速なので膨大なデータサイズのファイルの暗号化などに向いている |
デメリット | 送信者と受信者で共通の鍵を共有するので安全な受け渡しが難しい(受け渡し時に盗聴されたら鍵の意味がなくなる) |
デメリット | 通信者が増えるたびに鍵を作らないといけないので数が膨大になる |
公開鍵暗号方式
メリット | RSAという非常に安全な暗号方式を採用している |
メリット | 共通鍵のようにペアごとに鍵を用意する必要はない |
デメリット | 暗号化の複雑な計算処理が必要となるため、負荷が大きくなりがちなので大きなデータの暗号化には不向き |
SSL/TLSって何? 暗号化の手順
SSL/TLSに話を戻します。
SSL/TLSでは共通鍵暗号方式と公開鍵暗号方式の2つの方式で暗号化をしています。
2つの方式を組み合わせているのでより強固な暗号方式と言えます。
では手順を見てみましょう。
1. ブラウザはサーバーにHTTPリクエストを送信。
2. サーバー側が「公開鍵」と「秘密鍵」を作成し、リクエストを送信したブラウザに公開鍵付きのサーバー証明書を送信。(ここで証明書が送付されることよって安全なサーバーであることが保証される。)
3. サーバー証明書より公開鍵を取得。(この公開鍵は文字通り公開しているので誰でも見れるし見られてもOK。)
4. ブラウザ側で共通鍵を生成。(前述した通り、共通鍵のデメリットは鍵の受け渡しの方法なのでこのまま生成した鍵をサーバーに送ってはセキュアではない。)
5. 公開鍵を使用して共通鍵を暗号化。
6. 公開鍵で共通鍵を暗号化してサーバーに送信。(仮にこの通信を盗聴されても問題ない。理由は秘密鍵はサーバーだけが持っているので、他の人は秘密鍵を使わないと暗号化された共通鍵を復号化できないから。)
7. 秘密鍵でサーバーが共通鍵を復号化(暗号化された共通鍵を復号化できるのは秘密鍵だけ。)
まとめ
SSL/TLSは共通鍵暗号方式と公開鍵暗号方式の2つのメリットとデメリットを補ったプロトコルです。
公開鍵暗号方式を使用して全てのデータを暗号化/復号化するとデータの負荷がかかり過ぎるので、SSL/TLSでは共通鍵の受け渡しするために使用しています。
共通鍵は処理が高速なので、受け渡しさえ安全に行えれば非常に使い勝手の良い方式ですので、受け渡しに公開鍵暗号方式を使用することによってセキュアになりました。
とはいえSSL/TLSも例外ではありませんが、完璧な暗号化方式は存在しないので定期的にバージョンを確認して脆弱性に備えたアップデートを行うことが大切です。
参考
SSL脆弱性確認
https://www.ssllabs.com/ssltest/
Google ChromeでのTLSのバージョンの確認方法の記事
「公開鍵、共有鍵、秘密鍵、SSL/TLSとは? WEB通信の暗号化をわかりやすく解説」への2件のフィードバック
コメントは受け付けていません。