TLSレコード層と暗号スイート
レコードの分割、AEAD暗号化、暗号の選択について理解します。
「TLSレコード層と暗号スイート」はCoddyKit上の無料Cryptology Academyレッスンです。 これはレッスン2/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはCryptology Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Cryptology Academyコースには全4レッスンが含まれています。
レコード層の概要
TLSレコード層は、TLSのトランスポートサブレイヤーです。データを最大16KBのレコードに分割し、必要に応じて圧縮し(TLS 1.2のみ)、AEADで暗号化して、5バイトのヘッダーを追加します。
レコードヘッダーのフィールド
バイト0:ContentType(20=ChangeCipherSpec、21=Alert、22=Handshake、23=ApplicationData)。バイト1~2:レガシーバージョン(TLS 1.2互換では0x0303)。バイト3~4:後続するペイロードの長さ。
レコードでのAEAD暗号化
TLS 1.3では、各レコードをAEAD(例:AES-GCM)で暗号化します。ノンスは、暗黙のシーケンス番号とトラフィックIVをXORして導出します。AADは5バイトのレコードヘッダーです。認証タグが末尾に追加されます。
暗号スイートの命名規則
TLS_AES_128_GCM_SHA256 = 鍵交換(TLS 1.3では暗黙的なECDHE)+ AES-128-GCM(AEAD)+ SHA-256(HKDF用)。TLS 1.2では、TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256がすべての構成要素を明示的に表します。
非推奨の暗号スイート
TLS 1.3で禁止されているもの:RC4(偏りのあるキーストリーム)、3DES(中間一致攻撃、Sweet32)、CBCモード(BEAST、Lucky13、POODLE)、NULL暗号化、輸出グレード(40ビット)暗号、PRFでのMD5/SHA-1。AEADスイートだけが残されています。
レコードのフラグメント化
大きなTLSレコードは、16 KB以下のフラグメントに分割されます。各フラグメントは個別に暗号化されます。受信側は、アプリケーション層に渡す前にレコードを再構成します。フラグメントの境界は意味を持ちません。
アラートプロトコル
アラートはContentType=21のTLSレコードとして送信されます。2バイトで構成され、レベル(1=warning、2=fatal)と説明(0=close_notify、40=handshake_failure、42=bad_certificate、70=protocol_version)が含まれます。fatalアラートを受信すると接続は終了します。
シーケンス番号によるノンス
レコードごとのシーケンス番号は0から始まり、1ずつ増加します。これはIVの長さ(GCMでは12バイト)に合わせてパディングされ、トラフィックIVとXORされます。これにより、ノンスを明示的に送信しなくても、レコード間でノンスが再利用されることを防ぎます。
暗号スイートの選択
256ビットのセキュリティ強度が必要な場合は、TLS_AES_256_GCM_SHA384を優先してください。AES-NIを備えていないモバイルまたは組み込みデバイスでは、TLS_CHACHA20_POLY1305_SHA256を使用してください。機密性が非常に高く、長期間保存するデータには、128ビットの暗号スイートを避けてください。
DTLS:UDP上のTLS
DTLS(RFC 6347)は、TLSをUDP向けに適応させたものです。レコードヘッダーにシーケンス番号を追加し、パケットの順序入れ替わりに対応します。また、DoSを防ぐためにCookieベースのハンドシェイクを使用します。WebRTC、VPN、IoTプロトコルで利用されています。
Pythonでレコードを確認する
TLSレコードのキャプチャには、sslモジュールまたはscapyを使用してください。SSLKEYLOGFILEを設定すると、Wiresharkがレコードを自動的に復号します。Pythonのssl.SSLSocket.read()は、アプリケーション層で透過的に復号します。
確認問題
TLS 1.3のレコード暗号化において、シーケンス番号は何から保護しますか。
まとめ
TLSレコードの構造、AEAD暗号化、ノンスの導出、暗号スイートの選択について理解しました。次は、ハンドシェイク中にTLSがサーバー証明書を検証する方法を学びます。
よくある質問
「TLSレコード層と暗号スイート」レッスンは無料ですか?
はい。「TLSレコード層と暗号スイート」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Cryptology Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Cryptology Academyコースには全4レッスンが含まれています。
「TLSレコード層と暗号スイート」で何を学びますか?
レコードの分割、AEAD暗号化、暗号の選択について理解します。 ブラウザで直接実行するハンズオンコードでCryptology Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Cryptology Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのCryptology Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/4です。
「TLSレコード層と暗号スイート」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このCryptology Academyレッスンでコードを書いて実行できますか?
はい。すべてのCryptology Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。