TLS


TLS


TCP/IPネットワークを用いた通信に適しており、通信中に伝送層のエンドツーエンドの安全性とデータ整合性を保証する.

TLS暗号化


TLSは対称暗号化と非対称暗号化の組み合わせを用いて,データを安全に伝送する際の性能と安全性の間の良好なトレードオフを提供する.

たいしょう暗号化


対称暗号化を使用すると、データは既知の鍵を使用して暗号化および復号化されます.対称暗号化は演算速度において有効であるが,公開鍵を安全に共有する必要があることを意味する.
graph LR
	sender((송신자))
	reciver((수신자))
	sender-.-|1.대칭키 교환|reciver
	sender-->2.암호화
	2.암호화-->|대칭키|2.암호화
	2.암호화-.->|3.암호문 전송|4.복호화
	4.복호화-->|대칭키|4.복호화
	4.복호화-->reciver

非対称暗号化


非対称暗号化や共有鍵方式は数学的問題(公開鍵)に基づいて発生し,出題者が知らない特定の種類の情報(秘密鍵)は解決しにくい.鍵の作成者はこの問題(公開鍵)を一般人に公開し、特定の情報(秘密鍵)は自分だけが知っているように隠す.この問題で情報を暗号化する人がいる場合、鍵作成者だけがこの問題を解き、元の情報を復号することができます.
graph LR
	sender((송신자))
	reciver((수신자))
	reciver-.->|1.공개키, 개인키 생성|reciver
	공개키_저장소-.-|2.생성된 공개키 저장|reciver
	sender-.-|3.저장된 공개키 획득|공개키_저장소
	sender-->4.암호화
	4.암호화-->|공개키|4.암호화
	4.암호화-.->|5.암호문 전송|6.복호화
	6.복호화-->|개인키|6.복호화
	6.복호화-->reciver

CA


CA(Certificate Authority)は、X.509規格に準拠したデジタル証明書を発行する場所です.デジタル証明書は、証明書所有者(マスター)の公開鍵を検証し、所有者は証明書によって保護されたドメインを制御します.したがって、信頼できるサードパーティとして、クライアントが検証済みサーバに接続されていることを確認できます.

TLS Handshake

sequenceDiagram
    Client->>Server: 1) "client hello"
    Server->>Client: 2) "server hello"
    Server->>Client: 3) Server certificatie
    Client->>Server: 4) Client Key Exchage
    Client-->>Server: 5) Send client certificate
    Client->>Server: 7) Client "finished"
    Server->>Client: 9) Server "finished"
    loop encrypted
    Server->Client: Exchange Message
    end
  • の通信状態、クライアントが利用可能なTLSバージョン、暗号グループリスト、番号および圧縮方法リスト、およびSNIを確認するためにhelloメッセージで情報を交換することを含む.
  • Helloメッセージを使用して情報交換を行い、サーバで使用するTLSバージョン、パスワードグループリスト、番号、圧縮メソッドリストを含む
  • の通信状態を確認します.
  • サーバ上のデジタル証明書の有効期間と、提供されたサーバが正しいかどうかを確認します.
  • は、クライアントおよびサーバが後続のメッセージデータを暗号化するための秘密鍵を計算できるようにする任意のバイト文字列を送信する.任意のバイト文字列自体は、サーバ上の公開鍵で暗号化されます.
  • クライアント証明書リクエストが送信された場合、クライアントはクライアント秘密鍵で暗号化された任意のバイト文字列、およびクライアントのデジタル証明書または「デジタル証明書警告なし」を送信します.これは警告にすぎませんが、一部の実装では、クライアント認証が必要な場合、Handshokeは失敗します.
  • クライアントの証明書を確認します.
  • 秘密鍵を使用して完了メッセージを暗号化し、クライアントセクションが
  • 握手を完了したことを示します.
  • 秘密鍵を使用して「完了」メッセージを暗号化し、サーバ部分が
  • 握手を完了したことを示します.
  • サーバとクライアントは、対称的に暗号化されたメッセージを共有鍵で交換できるようになりました.
  • SNI


    SNI(Server Name Indication)は、TLSプロトコルの拡張子です.クライアントは、TLS HandshowのSNIエントリを使用して接続するホスト名を指定します.これにより、Apache、Nginx、またはHAProxyのようなサーバは、単一のIPアドレスのすべての証明書をベアラするときに必要な秘密鍵を選択して接続を確立することができる.
    SNIを使用すると、サーバのホスト名はTLS握手中に含まれ、サーバのホスト名がHTTPSで共有されるIPアドレスにある場合でも、一意のTLS証明書を持つことができます.

    ESNI


    TLS Handshark中にSNI情報を交換すると,コメントによって伝達される情報を暗号化し,仲介者が盗み取るのを防止する.

    HTTP通信で

    HTTPSによる暗号化

    ESNI付加暗号化

    リファレンス

  • https://www.internetsociety.org/deploy360/tls/basics/
  • https://en.wikipedia.org/wiki/Server_Name_Indication
  • https://www.globalsign.com/en/blog/what-is-server-name-indication/
  • https://www.eff.org/deeplinks/2018/09/esni-privacy-protecting-upgrade-https
  • https://datatracker.ietf.org/doc/draft-ietf-tls-esni/
  • https://blog.cloudflare.com/encrypted-sni/
  • https://blog.cloudflare.com/rfc-8446-aka-tls-1-3/