見出し画像

ハンドシェイク確立からアラート通知まで対応!「SSLレコード」の全貌

はい、こんにちは!松井真也です。

シリーズ「毎日あなたが安全にウェブ利用できるスゴイ仕組み:SSL/TLS」の第8回で最終回でございます!

前回は、SSL/TLSによる接続開始から終了までのフローをご紹介しました。Client HelloとServer Helloで暗号方式を決定、Server Certificateでサーバ認証を終えると、クライアントが「プレマスターシークレット」を暗号化してサーバと共有して「マスターシークレット」を作るのでした。

その上で、「マスターシークレット」から「暗号化鍵」と「MAC鍵」を作り、それらを使って機密性と完全性を保証した通信ができるのでした!一見複雑ですが、とても合理的なものを感じます!

さて今回は、「SSLレコードがどのように構成されているか?」というお話です。SSLレコードは、SSLで送信するデータの単位です。下位層であるTCPセグメントのペイロードに含まれます。でも、具体的にはどんな値が含まれているのでしょうか?ハンドシェイクの過程でいろんなデータを送りますよね。果たしてどうやって送るのやら?

早速見てみましょう!

SSLレコードの基本構成はこうだ!

SSLレコードは、「5バイトのヘッダ」と続く「ペイロード」から構成されています。他の階層のデータユニットと同じで、このヘッダが重要な情報を持っています。

ヘッダには、

  • コンテンツタイプ(1バイト)

  • プロトコルバージョン(2バイト)

  • ペイロードの長さ(2バイト)

が含まれています。

これにより、受信したデータがどのような種類で、どのバージョンのプロトコルに従っているか、そしてどれだけのデータが含まれているかが判断できるのんですね~。

では、ヘッダがどのように構成されているか分かったところで、その構成要素の詳細を掘り下げましょう!

1)コンテンツタイプ

コンテンツタイプは、SSLレコードで「どのようなデータを送るのか」を示す重要な指標です。主に以下の4つのタイプに分けられます。

  • ハンドシェイク(タイプコード22): SSL接続の確立時に使用されるメッセージです。例えば、Client Helloが「1」で、Server Helloが「2」などです。

  • 暗号仕様変更(Change Cipher Spec)(タイプコード20): 接続中の暗号化パラメータや鍵が確定・変更された際に使用されます。ハンドシェイクの最後の部分に登場しましたね。

  • アラート(タイプコード21): エラーや警告など、何らかの問題が発生したことを通知します。例えば、デジタル証明書が検証できなかったとか、合意できるプロトコルスイートがないとかなどです。

  • アプリケーションデータ(タイプコード23): 実際にユーザー間でやり取りされるデータです。例えば、ウェブページの内容やメールの本文がこれに該当します。

2)プロトコルバージョン

SSLレコードで、使用されるプロトコルのバージョンが明確にされます。このバージョンにより、どのようにデータを解析し、処理するかが決定されます。

SSL3.0やTLS1.3などがあり、異なる特性を持つのは以前紹介したとおりです。ただ、古いバージョンのSSL/TLSではセキュリティが低いので、新しいバージョンのTLS1.2や1.3を使うことが推奨されます。

3)レコード長

レコード長は、そのSSLレコードがどれだけのデータを含んでいるかを示します。理論上、1つのレコードは最大で2の16乗-1(65,535バイト)のデータを持つことができます。

しかし、実際にはセキュリティの観点からもっと小さいサイズが推奨されていて2の14乗(16384バイト)までが使用されます。これにより、データが適切に管理され、効率的に処理されることが保証されます。


これでハンドシェイクの過程で一体どんなデータが送られているのか?のナゾが少し解けましたね!


はい本日はここまで!今回はSSLレコードの構成とその役割についてお話ししました!これでSSL/TLSシリーズはおしまいです。

お疲れ様でした!

この記事が気に入ったらサポートをしてみませんか?