要約
SSL/TLSハンドシェイクとは、ブラウザとサーバー間の安全な接続を確立するためにバックグラウンドで行われるネゴシエーションです。一般的に「SSLハンドシェイク」と呼ばれていますが、現在このプロセスは、より安全なTransport Layer Security(TLS)プロトコルを利用しています。このハンドシェイクにより、暗号化方式の決定、証明書による両者の認証、セッションキーの交換が、すべてわずか数秒のうちに行われます。このプロセスは堅牢ですが、BREACH攻撃や中間者攻撃などの攻撃を完全に防ぐことはできません。
SSL/TLSハンドシェイクでデバイスを接続する方法
Secure Sockets Layer(SSL)ハンドシェイクは、お使いのブラウザと、アクセスしたいWebサイトをサポートするサーバーなど、2つのデバイス間の接続を定義するものです。
SSLハンドシェイク中に、2つのデバイスは以下を決定します。
- 両者が使用するセキュリティのバージョン
- どのような暗号化方式で情報を保護しますか?
- 当事者双方がどのように検証されるか
SSLハンドシェイクにおける「SSL」という言葉は誤用です。セキュア・ソケット・レイヤー(SSL)プロトコルは古く、今日ではほとんど使用されていません。現在、ほとんどのデバイスはトランスポート・レイヤー・セキュリティ(TLS)を使用しています。
「TLSハンドシェイク」という用語の方がより正確ですが、このステップを単に「SSLハンドシェイク」と呼ぶのが一般的です。
SSLハンドシェイクとは?
ブラウザでウェブサイトを開くと、接続が瞬時かつ自然に確立されたように思えるかもしれません。しかし実際には、2つのデバイスはどのように通信し、情報を転送するかをネゴシエートする必要があります。そのネゴシエーションは、SSLハンドシェイクを通じて行われます。
前述したように、SSLハンドシェイクはTLSハンドシェイクと呼ばれることもあります。理由は次のとおりです。
Netscape社が1995年にSSLプロトコルを開発しました。残念ながら、セキュリティ上の欠陥が多数ありました。2000年代初頭、業界はセキュリティの向上を期待してTLSプロトコルに移行しました。名称が変更されても、ハンドシェイクプロセスは変わりません。
SSLハンドシェイクは、通信セッションを開始するプロセスです。2つの当事者は互いを認識し、情報を保護する方法を決定し、互いのセキュリティプロトコルを検証し、セッションキーを設定します。
SSL/TLSハンドシェイクのプロセスは、どのような手順で実行されますか?
説明したように、SSLハンドシェイクはネゴシエーションです。両当事者はスタイルとプロトコルについて合意します。SSLハンドシェイクの手順は、これらの合意の結果であり、両者が何を望んでいるかによって異なります。
一般的に、SSLハンドシェイクは次の手順で進められます。
連絡:ブラウザは「クライアントhello」メッセージをサーバーに送信します。このメッセージには、クライアントが使用するSSLバージョン、暗号設定(詳細については後述)、セッション固有の情報など、重要な詳細が含まれています。
初回応答:サーバーは、セキュリティの証拠(証明書を介して)、サーバーの暗号設定、およびセッション固有のデータを返送します。
認証:ブラウザは、セキュリティ証明書を検証して、適切な権限を持つ機関と通信していることを確認します。
キー交換:ブラウザとサーバーがキーを交換し、交換のセキュリティを検証します。
まとめ:サーバーとブラウザの両方が作業の完了を確認し、ハンドシェイクが終了します。
これらのステップは複雑ですが、両サイドが作業を行うのにかかる時間はほんの数秒です。遅延に気づくユーザーはほとんどいません。
SSL/TLSハンドシェイクはどの程度安全ですか?
SSLハンドシェイクの手順を見ると、鍵交換について言及されていることに気づくでしょう。そのプロセスには暗号化が含まれており、そのプロセスでは2つの形式が使用されます。
暗号化の2つの形式は次のとおりです。
| タイプ | 使用されたキー | 目的/備考 |
|---|---|---|
| 非対称暗号化 | 公開鍵(暗号化用);秘密鍵(復号用) | 公開鍵は、サーバーのセキュリティ証明書を介して容易に入手でき、説明に使用されます。秘密鍵は復号に使用されます。 |
| 対称暗号化 | 共有セッションキー | 非対称暗号化の後、両者は共有鍵を設定します。この単一のセッションキーにより、サーバーへの負担を軽減しながら安全な接続を確立できます。 |
両当事者は、いわゆる「暗号スイート」についても合意します。これは、どのような種類の認証が必要か、どのようにデータを暗号化するかなどに関する一連のルールです。
SSL/TLSハンドシェイクの既知の脆弱性にはどのようなものがありますか?
これらの手順により、転送中のデータを保護できます。しかし、残念ながら攻撃を受ける可能性は依然としてあります。例えば、BREACH攻撃では、ハッカーが転送中のデータを改ざんすることが可能です。ハッカーが乗っ取りを行い、中間者攻撃を仕掛ける可能性もあります。問題は、暗号化された状態で攻撃者に盗まれるデータから始まります。
多くのセキュリティ専門家は、脆弱なAndroidアプリのニュースが流れた2012年に、暗号化におけるセキュリティリスクに気づきました。このニュースを見逃しましたか?こちらでまとめ記事をお読みください。
よくある質問(FAQ)
SSLとTLSの違いとは?
SSLは1995年にNetscape社によって開発されましたが、セキュリティ上の欠陥が多数ありました。2000年代初頭、業界はセキュリティの向上を求めてTLSプロトコルに移行しました。名称が変更されても、ハンドシェイクのプロセスは変わりません。
SSL/TLSハンドシェイクでは何が行われますか?
SSL/TLSハンドシェイクでは、まずブラウザがサーバーに「client hello」メッセージを送信します。次に、サーバーが証明書と暗号設定で応答し、ブラウザがその証明書を認証します。その後、両者間で鍵が交換され、双方がハンドシェイクの完了を確認します。
SSLハンドシェイクがTLSハンドシェイクと呼ばれることがあるのはなぜですか?
「SSLハンドシェイク」という用語は誤った呼び方です。SSLプロトコルは旧式であり、現在ではほとんど使用されていません。現在、ほとんどのデバイスはTLSを使用しているため、「TLSハンドシェイク」がより正確な用語ですが、古い名称も通称として残っています。
SSL/TLSハンドシェイクでは、どのような種類の暗号化が使用されますか?
このハンドシェイクでは、公開鍵で暗号化し、秘密鍵で復号する「非対称暗号化」と、当事者間で共有セッションキーを設定してサーバーへの負荷を抑えながら安全な接続を可能にする「対称暗号化」という2種類の暗号化方式が使用されます。
SSL/TLSハンドシェイクにおける暗号スイートとは何ですか?
暗号スイートとは、当事者双方が合意した一連のルールのことで、どのような種類の認証が必要か、どのようにデータを暗号化するかなどを定義します。
SSL/TLSハンドシェイクには、どのようなセキュリティリスクが伴いますか?
SSL/TLSハンドシェイクによる保護があっても、攻撃を受ける可能性はあります。例えば、BREACH攻撃では、ハッカーは転送中のデータを改ざんできます。ハッカーは乗っ取りを行って中間者攻撃を実行することもできます。この問題は、データが暗号化される際に攻撃者が盗むことから始まります。
参考文献
Transport Layer Security(TLS)とは (2018年11月、Network World。
BREACH攻撃の内部:HTTPSトラフィックのエクスプロイトを回避する方法。TechTarget。