0Pricing
Cryptology Academy · レッスン

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フィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. TLS 1.3ハンドシェイクをステップごとに学ぶ
  2. TLSレコード層と暗号スイート
  3. TLSにおける証明書検証
  4. TLS攻撃:BEAST、POODLE、ダウングレード
← Cryptology Academyに戻る