1 つの記事で SSL/TLS を理解する

1。概要

Secure Sockets Layer (SSL、Secure Sockets Layer) は、公開鍵暗号化と X.509 デジタル証明書テクノロジに基づくセキュリティ プロトコルであり、ネットワーク通信の ID 認証とデータ転送の機密性と完全性を提供します。

1994 年、Netscape は SSL1.0 を提案しました。いくつかの改訂を経て、1996 年に SSL3.0 が正式にリリースされました。1997 年に、インターネット エンジニアリング タスク フォース (IETF、インターネット エンジニアリング タスク フォース) は、SSL プロトコルに基づくインターネット ドラフトをリリースしました: トランスポート層セキュリティ (TLS、トランスポート層セキュリティ) . 1999 年に IETF が公式の業界標準RFC2246をリリースし、TLS/SSL が通信セキュリティ標準になりつつあります。

SSL/TLS は、トランスポート層とアプリケーション層の間に位置する暗号化プロトコルです (ソケット層の実装に属します). アプリケーション層に対して透過的です. アプリケーション層のデータは、それを SSL 層に渡すことによって暗号化されます. SSL ヘッダーが追加され、トランスポート層に渡されます。
ここに画像の説明を挿入
SSL/TLS はどちらも、身元認証、機密性、整合性サービスを提供できます. SSL シリーズのすべてのバージョンは廃止されましたが、TLS は SSL の後続バージョンであり、誰もが SSL という名前を使用することにまだ慣れています.

2. 契約の構成

SSL プロトコルは、次の 3 つの部分で構成されています。

  • ハンドシェイク プロトコル: 暗号化アルゴリズム、MAC アルゴリズム、およびセッション キーをネゴシエートします。
  • Protocol of Record: 交換されるデータの暗号化と署名
  • アラート プロトコル: 進行中の問題の解決

2.1 ハンドシェイクプロトコル (ハンドシェイクプロトコル)

ハンドシェイク プロトコルは、SSL 接続を確立するためにクライアントとサーバー間で実行される最初のプロトコルです。これは、データが送信される前に完了します。サーバーとクライアントは、このプロトコルを使用して、互いの ID を識別し、暗号化アルゴリズムや MAC アルゴリズムをネゴシエートします。データの暗号化に使用されるセッション キー。

(1) セキュリティ機能の確立

  • Client Hello: クライアントがサーバーに初めて接続するとき、Client Helloクライアントがサポートする暗号化コンポーネント (cipher_suite) を含む最初のメッセージとしてサーバーに送信されます: 暗号化アルゴリズム、圧縮アルゴリズム、ダイジェスト アルゴリズム、およびこの接続クライアント生成された乱数。クライアントが最後のセッションを復元したい場合は、セッション ID も送信する必要があります。

  • Server Hello:このセッションのためにサーバーがサーバーによって決定されたセッションID(セッションID)、およびサーバーの乱数を含む、サーバーからクライアントServer Helloへの応答です。 .Client HelloClient Hello

(2) サーバー認証と鍵交換

クライアントは、サーバーの応答メッセージを使用して、サーバーの実際の ID の認証を完了します。

  • (Server) Certificate: サーバーを検証する必要がある場合、サーバーはServer Helloメッセージの後にその証明書 (証明書) を送信します。通常は X.509v3 バージョンの証明書です。

  • Server Key Exchange: このメッセージは、Server Helloメッセージ宣言の前の暗号スイートを補完し、通信を継続するために必要なアルゴリズム変数をクライアントに提供します (選択したアルゴリズムによって異なります)。

  • Certificate Request: サーバーがクライアントの ID を認証する必要がある場合は、それをクライアントに送信しますCertificate Requestこのメッセージには、サーバーが識別できる証明書の種類と信頼できる CA 証明書シーケンスが含まれています。

  • Server Hello Done: このメッセージは、Server Helloクライアントからの応答を待って終了したことを示します。情報を受信した後、クライアントは、サーバーによって提供された証明書が有効かどうか、およびサーバーの Hello パラメータが受け入れられるかどうかを確認します。

(3) クライアント認証と鍵交換

  • (Client) Certificate: サーバーが要求すると、クライアントはCertificateサーバーの要求を受信したServer Hello Done後にこの情報を送信します。クライアントが適切な証明書を持っていない場合、「証明書がありません」という警告メッセージが送信されます。

  • Client Key Exchange: メッセージの内容は、鍵交換アルゴリズムのタイプによって異なります

    • RSA アルゴリズムが選択されている場合、メッセージにはRSA 公開鍵 によって暗号化された、暗号化前のマスター シークレット (プレマスター シークレット) が含まれます。ここで、RSA 公開鍵は、サーバー証明書の公開鍵、または によってServer Key Exchange一時的に生成された RSA 公開鍵です。サーバー
    • DH アルゴリズムが選択されている場合、メッセージには、サーバーから送信された DH アルゴリズム パラメータを使用してクライアントによって生成された公開値が含まれ、公開値は事前に暗号化されたマスター キーとして生成されます。
  • Certificate Verify: このメッセージは、クライアント証明書の検証を提供するために使用され、署名可能なクライアントが証明書を送信した後にのみ送信されます。

(4) 握手完了

クライアントとサーバーは pre_master_secret を使用して実際のマスター キーmaster_secretを生成し、マスター キーを使用してセッション キーsession_keysを生成し、相互に送信してChange Cipher Spec確認します。

  • Change Cipher Spec: 送信者が暗号化仕様の変更を完了し、ネゴシエートされた暗号スイート (Cipher Suite) とセッション キー (Session Key) を使用してデータを暗号化および送信する準備ができていることを受信者に通知するために、送信者によって使用されます。ワードセクションデータとしてデータパケットに反映されます。

  • Finished: 送信者は、ネゴシエートされた暗号化スイート (Cipher Suite) とセッション キー (Session Secret) を使用してデータを暗号化しFinish、受信者に送信します. 受信者Finisheは、情報を受信した後、コンテンツが正しいかどうかを確認して暗号化を確立する必要があります.および復号化チャネルに成功しました。

ここに画像の説明を挿入
クライアントとサーバーはFinished情報を検証し、暗号化されたチャネルが正常に確立されたことを確認します。2 つの当事者は、生成されたセッション キー (セッション キー) を使用してデータを暗号化して送信できます。

アラート プロトコル

クライアントとサーバーがエラーを検出すると、アラート メッセージを相互に送信します。致命的なエラーが発生した場合、アルゴリズムはただちにセッションを終了し、SSL 接続を閉じ、関連するセッション レコード、シークレット、およびキーを削除します。

2.2 記録プロトコル

クライアントとサーバーは、認証を完了し、セキュリティ情報の交換に使用するアルゴリズムを決定した後、主に次の 2 つのサービスを提供する SSL レコード プロトコルに入ります。

  • データの機密性: 送信されるデータは、ハンドシェイク プロトコルで定義された秘密鍵を使用して暗号化されます。
  • メッセージの整合性: ハンドシェイク プロトコルで定義された MAC を含む秘密鍵を使用して、メッセージ認証コードを計算します。

記録プロトコルは、アプリケーション プログラムによって送信されたメッセージを受信し、データを断片 (管理しやすいように小さなブロックに分割) に分割し、これらのブロックを圧縮するかどうかを選択し、さらにこのブロックのメッセージ認証コードを結合します。 MAC を含むデータ ブロックが一緒に暗号化され、SSL レコード ヘッダーが追加され、TCP 経由で送信されます。データを受信した側は、データを復号化、検証、解凍、再組み立てし、メッセージの内容を復元して、上位層のアプリケーションに送信します。
ここに画像の説明を挿入

  • (1) セグメンテーション: 各上位層アプリケーション データを2 14 2^{14}に分割214 (16K) 以下のデータ ブロック。
  • (2) 圧縮: 圧縮はオプションでロスレスです。
  • (3) MAC の追加: MD5 や SHA などのハッシュ関数を使用してメッセージ ダイジェスト MAC を生成し、メッセージ認証 MAC を圧縮データに追加してデータの完全性を確認します。
  • (4) 暗号化: 圧縮データと MAC を暗号化して、データの機密性を確保します。
  • (5) 追加の SSL ヘッダー出力

3. 暗号スイートと鍵生成

(1)暗号スイート (cipher_suite)

暗号スイートは、鍵交換アルゴリズム、認証アルゴリズム、データ暗号化アルゴリズム、ハッシュ アルゴリズムなど、選択された暗号化プリミティブとその他のパラメーターのセットです。

示されているようにTLS_ECDHE_RSA_WITH_AES_128_GCM_SHA156

  • 鍵交換:ECDHE
  • 認証: RSA
  • データ暗号化アルゴリズム: AES_128_GCM
  • MAC:SHA156

(2)鍵生成

  • PreMaster secretClient Key Exchange : PreMaster Secret は、RSA や Diffie-Hellman などの暗号化アルゴリズムを使用してクライアントによって生成され、サーバーの公開鍵で暗号化されてサーバーに送信されます. サーバーはそれを秘密鍵で復号化して、PreMaster を取得しますシークレット。

  • マスター キー (マスター シークレット) : マスター キー (マスター シークレット) は、さまざまな暗号化アルゴリズム キーを生成するために使用されます。サーバーとクライアントは PreMaster シークレットを使用し、Hello フェーズではクライアントによって生成された乱数を使用します。 Hello フェーズ 生成される乱数は、次の規則に従って生成されます。

Master secret=
MD5(premaster secret + SHA('A'  + premaster secret + ClientHello.random + ServerHello.random))+
MD5(premaster secret + SHA('BB' + premaster secret + ClientHello.random + ServerHello.random))+
MD5(premaster secret + SHA('CCC'+ premaster secret + ClientHello.random + ServerHello.random))

ここに画像の説明を挿入
マスターキーは、最初に一連のハッシュ操作によって十分な長さのキー ブロック (キー ブロック) を生成します. キー ブロックの長さは、SSL で必要なさまざまな暗号化キーの長さ以上です. 次に、SSL はキー ブロック内のデータを個々の暗号化キーに分割し、分割後のキー ブロックにデータが残っている場合、残りのデータはそのまま破棄されます。
ここに画像の説明を挿入
クライアントがデータを送信するとき:

  • 最初にデータを追加しますClient write MAC key
  • 次に、を使用してパケットをClient write encryption key暗号化します
  • 暗号文を受信した後、サーバーはClient write encryption key復号化を使用します
  • サーバーは、以下を使用してClient write MAC keyデータの整合性を検証します。

サーバーがデータを送信するとき:

  • 最初にデータを追加しますServer write MAC key
  • 次に、を使用してパケットをServer write encryption key暗号化します
  • 暗号文を受信した後、クライアントはServer write encryption key復号化を使用します
  • クライアントは、以下を使用してServer write MAC keyデータの整合性を検証します

4. SSLプロトコル適用モード

(1) 匿名SSL接続

このモードは、SSL セキュア接続の最も基本的なモードであり、使いやすく、一般的なブラウザがこのモードをサポートしており、一方向のセキュアなデータ転送アプリケーションに非常に適しています。典型的なアプリケーションは、ユーザーがウェブサイトに登録する際の個人情報 (クレジットカード番号、パスワード、電話番号など) の漏洩を防ぐために、匿名 SSL を使用してウェブサイトに接続することです。

このモードでは、クライアントは電子証明書を持たず、ユーザーは匿名でサーバーにアクセスしますが、サーバーはデジタル証明書を持ってサーバー認証を実現することで、ユーザーがアクセスしたいサイトであることを確認できます。最初の SSL 接続中に、クライアントはサーバー証明書をダウンロードし、ランダムにキーを生成し、このキーを使用して SSL ハンドシェイク合意を実行する必要があります。セッションが完了した後、キーは破棄されます

(2) ピアツーピアセキュリティサービス

このモードでは, 通信の両側がSSL接続リクエストを開始および受信できます. どちらもサーバーとクライアントです. どちらの側もサーバーとクライアント間の双方向認証を実現するデジタル証明書を持っています. 通信側はアプリケーションまたはセキュリティです.プロトコル サーバー(セキュリティ プロトコル プロキシ サーバーは暗号化/復号化ゲートウェイに相当し、内部ネットワークのアクセスを SSL データ パケットに変換し、受信時に SSL データ パケットを復号化します。)

おすすめ

転載: blog.csdn.net/apr15/article/details/128256538
おすすめ