PS:持続は最大の超越です。
最近、HTTPS に関する知識を尋ねられることがあり、使い方は知っているものの、理解が不十分な人が多いです。今日は HTTPS に関連する知識をまとめるために来ました。この文章では主に理論的な知識を扱い、次回は実際のケーススタディを書きます。主な内容は以下の通りです:
- HTTPS とは何か
- HTTP の欠点
- 公開鍵暗号技術
- HTTPS 暗号通信
- 公開鍵証明書
- SSL と TLS
- なぜ HTTPS を使用しないのか
HTTPS とは何か#
簡単に言うと、HTTPS(HTTP Secure)は、HTTP プロトコルの基礎の上に暗号化と認証メカニズムを追加した HTTP です。
HTTPS は HTTP に対する新しいプロトコルではなく、HTTP 通信インターフェース部分で SSL(Secure Socket Layer)および TLS(Transport Layer Security)プロトコルを使用して実現されています。これにより、HTTP は最初に SSL と通信し、その後 SSL と TCP が通信する形になります。HTTP と HTTPS の図は以下の通りです:
HTTP の欠点#
HTTP の欠点は以下の通りです:
- 通信が平文で行われるため、内容が盗聴される可能性がある
- 通信相手の身元を確認しないため、なりすましによるリクエストが容易
- メッセージの完全性が保証されないため、改ざんされる可能性がある
公開鍵暗号技術#
対称鍵暗号と非対称鍵暗号の暗号アルゴリズムでは、暗号化アルゴリズムは公開されており、鍵は秘密です。暗号化と復号化には鍵が必要で、鍵がなければ復号化できません。逆に、鍵が盗まれた場合、暗号化された内容が解読される可能性があります。
- 対称鍵暗号
この暗号方式は共有鍵暗号(Common key crypto system)とも呼ばれ、暗号化と復号化に同じ鍵を使用します。通信時には、復号化に使用するために鍵を相手に送信する必要がありますが、鍵の送信中に盗まれる可能性もあるため、この暗号方式の通信の安全性は鍵を安全に送信する方法に依存します。図は以下の通りです:
- 非対称鍵暗号
この方式は公開鍵暗号とも呼ばれ、一対の非対称鍵を使用します。一つは公開鍵(public key)、もう一つは秘密鍵(private key)です。公開鍵は自由に送信でき、秘密鍵は秘密にしなければなりません。
暗号文を送信する側は相手の公開鍵を使用して暗号化し、相手は受け取った情報を自分の秘密鍵で復号化します。この方式では復号化に使用する秘密鍵を送信する必要がなく、秘密鍵が盗まれる心配もありません。図は以下の通りです:
HTTPS 暗号通信#
元々の HTTP は TCP と直接通信していましたが、TCP/IP プロトコルファミリーの動作メカニズムにより、通信内容が伝送経路上で盗聴される可能性があります。インターネットは全世界に接続できるネットワークで構成されており、通信回線上の通信機器はすべてが私有ではないため、通信が安全でないこともあります。これにより HTTPS が誕生しましたが、HTTPS はどのように暗号化されるのでしょうか?
HTTPS は混合暗号メカニズムを採用しており、鍵が安全に交換できる場合、通信には対称鍵暗号のみを使用することが可能です。鍵の安全な交換が保証できない場合は、鍵交換の段階で非対称暗号方式を使用し、その後対称暗号方式を使用します。このようにする理由は、対称鍵暗号が非対称鍵暗号よりも処理速度が速いためです。
しかし、暗号化されたからといって安全になるわけではなく、盗聴されないわけでもありません。実際には、通信が暗号化されていても、通信内容は技術的手段で盗聴される可能性がありますが、通信が暗号化されることで具体的なメッセージ情報を理解するのは難しくなります。これは暗号化の目的を達成したことになります。
HTTPS 暗号通信の過程では公開鍵を送信する必要がありますが、公開鍵の正当性はどのように保証されるのでしょうか。それはもちろん、デジタル認証機関が発行した公開鍵証明書によってです。
公開鍵証明書#
ここではデジタル認証機関(CA、Certificate Authority)とその関連機関が発行する公開鍵証明書について触れます。デジタル証明書認証機関は、クライアントとサーバーの両方が信頼できる第三者機関としての立場にあり、その具体的な業務プロセスは以下の通りです:
- サーバー運営者がデジタル証明書認証機関に公開鍵の申請を行う;
- デジタル証明書認証機関が身元を確認した後、申請された公開鍵にデジタル署名を行い、その公開鍵を公開鍵証明書に結びつけて、サーバーがこのデジタル認証機関が発行した公開鍵証明書をクライアントに送信します;
- クライアントはデジタル認証機関が発行した公開鍵を取得し、デジタル署名の検証を行います。これは、公開鍵が本物のデジタル認証機関によって発行されたものであることを確認し、公開鍵が信頼できるものであることを確認するためです;
- 確認が完了したら、その公開鍵を使用してメッセージを暗号化します;
- サーバーは秘密鍵を使用してメッセージを復号化します。
具体的な業務プロセスは以下の図の通りです:
第三のステップでは、デジタル認証機関の公開鍵がクライアントに安全に送信されることを保証するために、ほとんどのブラウザ開発者はブラウザのバージョンをリリースする際に、一般的な認証機関の公開鍵をブラウザに組み込んでいます。
SSL と TLS#
HTTPS は SSL(Secure Socket Layer)と TLS(Transport Layer Security)の 2 つのプロトコルを使用しています。SSL 技術は最初にブラウザ開発者のネットスケープ社によって提唱され、SSL3.0 以前のバージョンが開発されました。現在、主導権は IETF(Internet Engineering Task Force、インターネット技術標準化団体)に移っています。
IETF は SSL3.0 を基準に、後に TLS1.0、TLS1.1、TLS1.2 を策定しました。TSL は SSL をモデルに開発されたプロトコルであり、時にはこのプロトコルを SSL と呼ぶこともあります。現在の主流バージョンは SSL3.0 と TLS1.0 です。
SSL と TLS は実際には TLS が SSL のアップグレード版であると理解できます。TLS は SSL に基づいており、両者の具体的な違いは専門家に任せるとして、ここでは SSL と TLS の関連背景を簡単に紹介します。
なぜ HTTPS を使用しないのか#
HTTPS は SSL(TLS を含む)を使用することで安全で信頼性がありますが、SSL は暗号処理を行うため、全体の通信が遅くなる原因となります。頻繁な暗号化と復号化はサーバーとクライアントのハードウェアリソースを消費します。
SSL は通信を遅くするだけでなく、CPU やメモリなどのリソースを大量に消費するため、全体の処理速度が遅くなります。HTTP と比較すると、ネットワーク負荷は 2 倍から 100 倍遅くなる可能性があります。以下の図を参照してください:
HTTPS を使用する場合、ハードウェアコストが増加することを意味します。また、デジタル認証機関から証明書を購入することもコストがかかります。
以上が、HTTPS が安全で信頼性があるにもかかわらず、多くのウェブサイトが HTTP を使用する理由です。