TLS 1.3ハンドシェイクをステップごとに学ぶ
ClientHello、ServerHello、鍵導出、Finishedの流れを確認します。
「TLS 1.3ハンドシェイクをステップごとに学ぶ」はCoddyKit上の無料Cryptology Academyレッスンです。 これはレッスン1/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはCryptology Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Cryptology Academyコースには全4レッスンが含まれています。
TLSが必要な理由
TLS(Transport Layer Security)は、インターネット上で転送中のデータを保護します。すべてのHTTPS接続でTLSが使用されます。RFC 8446(2018)で標準化されたTLS 1.3では、従来のアルゴリズムが廃止され、ハンドシェイクの往復回数が2回から1回に減少しました。
ClientHello
クライアントは、TLSバージョン(1.3)、32バイトのランダムなノンス、サポートする暗号スイートの一覧(例:TLS_AES_256_GCM_SHA384)、およびサポートするグループ(X25519、P-256)のECDH公開鍵を含むkey share拡張を送信します。
ServerHello
サーバーは暗号スイートとkey shareグループを選択し、自身のECDH一時鍵ペアを生成して公開鍵を返します。この時点で、双方がECDHによって共有秘密を計算できます。
HKDFによる鍵導出
TLS 1.3は、early secret → handshake secret → master secretというスケジュールでHKDF(HMAC-based Key Derivation Function)を使用します。各段階で、クライアントとサーバーのハンドシェイクトラフィックおよびアプリケーションデータ用に別々の鍵を導出します。
Server Finished
サーバーは、Certificate、CertificateVerify(秘密鍵を使用してハンドシェイクトランスクリプトに署名したもの)、およびFinished(トランスクリプトに対するHMAC)を送信します。これらはすべてハンドシェイクトラフィック鍵で暗号化されます。
Client Finished
クライアントは証明書チェーンを検証し、CertificateVerifyの署名を確認し、Finished MACを検証してから、自身のFinishedメッセージを送信します。これでハンドシェイクは1回の往復(1-RTT)で完了します。
0-RTT再開
TLS 1.3は、以前のセッションの事前共有鍵(PSK)を使用した0-RTT(ゼロ往復)再開をサポートします。クライアントはすぐにアプリケーションデータを送信できますが、0-RTTデータにはリプレイ防止機能がなく、べき等である必要があります。
TLS 1.3の暗号スイート
TLS 1.3ではAEAD暗号のみが必須です:AES-128-GCM-SHA256、AES-256-GCM-SHA384、ChaCha20-Poly1305-SHA256。すべてECDHEまたはDHEを鍵交換に使用します。RC4、3DES、CBCなどの弱いスイートは廃止されました。
レコード層
ハンドシェイク後、すべてのデータはTLSレコードでラップされます。TLSレコードは5バイトのヘッダー(コンテンツタイプ、バージョン、長さ)とAEADで暗号化されたペイロードで構成されます。シーケンス番号は暗黙的に扱われ、リプレイを防ぐためにAEADノンスの一部として使用されます。
前方秘匿性
TLS 1.3は常に一時鍵交換(ECDHE)を使用するため、サーバーの長期秘密鍵が漏えいしても過去のセッションを復号できません。各セッションには一意の一時鍵ペアがあり、ハンドシェイク後に破棄されます。
Wiresharkでの確認
Wiresharkでは、ClientHelloにrandomとkey_shareが表示され、ServerHelloに選択されたグループが表示されます。その後のレコードは「Application Data」(暗号化済み)として表示されます。セッション鍵を使用して復号するには、SSLKEYLOGFILEをエクスポートします。
確認問題
TLS 1.3の完全なハンドシェイクには、何回の往復が必要ですか?
まとめ
TLS 1.3は、ECDHE、HKDF、AEAD暗号、証明書ベースの認証を組み合わせ、前方秘匿性が必須の1-RTTハンドシェイクを実現します。次はTLSレコード層と暗号スイートについて詳しく学びます。
よくある質問
「TLS 1.3ハンドシェイクをステップごとに学ぶ」レッスンは無料ですか?
はい。「TLS 1.3ハンドシェイクをステップごとに学ぶ」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Cryptology Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Cryptology Academyコースには全4レッスンが含まれています。
「TLS 1.3ハンドシェイクをステップごとに学ぶ」で何を学びますか?
ClientHello、ServerHello、鍵導出、Finishedの流れを確認します。 ブラウザで直接実行するハンズオンコードでCryptology Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Cryptology Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのCryptology Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/4です。
「TLS 1.3ハンドシェイクをステップごとに学ぶ」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このCryptology Academyレッスンでコードを書いて実行できますか?
はい。すべてのCryptology Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- TLS 1.3ハンドシェイクをステップごとに学ぶ
- TLSレコード層と暗号スイート
- TLSにおける証明書検証
- TLS攻撃:BEAST、POODLE、ダウングレード