web-dev-qa-db-ja.com

TLSハンドシェイクのバイト数

TLSトラフィックでClientHelloとServerHelloに必要な正確なバイト数を正確に特定するにはどうすればよいですか?これは、関心のあるTLSバイトをキャプチャするためのトラフィック分析の目的です(クライアントhelloおよびサーバーhelloのみ)。

1
anonymous

TLSトラフィックでClientHelloとServerHelloに必要な正確なバイト数を正確に特定するにはどうすればよいですか?

ClientHelloのサイズはさまざまです。その一部は、特定のクライアントのTLS実装または構成、特にクライアントと拡張機能によって提供される暗号の数に依存します。次に、ユースケース固有の違いがあります。たとえば、クライアントはALPN拡張を追加して、Webクライアントの場合にHTTP/2のサポートを通知する場合があります。 server_name拡張子のサイズは、ターゲットホスト名のサイズによって異なります。そして、クライアントが既存のセッションを再開しようとした場合、さらにセッションIDまたはセッションチケットが存在する可能性があります。これらすべてのバリエーションがわかっている場合にのみ、ClientHelloのサイズを計算して、ClientHello構造の必要な部分を埋めるだけです。

ServerHello自体も同様の可変サイズで、主に追加された拡張機能の種類に依存します。ただし、ServerHelloの後は、ServerHelloDoneメッセージまでの追加の可変部分(証明書(数とサイズの両方で異なる可能性があります)、キー交換の特定の部分、オプションの可変サイズのCertificateRequestなど)を取得します。同様に、これらすべてがわかっている場合にのみ、サイトのサイズを計算できます。

代わりに、これに関するいくつかの統計を取得したい場合は、お気に入りのユースケースのパケットキャプチャを実行し、関連する部分を抽出してサイズを測定します(またはRoraZが提案するように長さフィールドを確認します)。これから導き出す結論は、測定したユースケースとコンテキストにのみ適用されることに注意してください。他のクライアントまたは他のサーバーが使用されている場合、または同じクライアントまたはサーバーが使用されていてもホスト名と証明書が異なる場合でも、まったく異なる場合があります。

すでにトラフィックをキャプチャしている場合、すべてのレコードは RFC 5246セクション6.2レコードレイヤー で説明されている同じ構造に従うため、各レコードのサイズの取得は簡単です。最初はContentTypeです(1バイト-レコードの0x16)。 TLSハンドシェイクで)、プロトコルバージョン(2バイト)、残りのデータの長さ(uint16、つまり2バイト)。

3
Steffen Ullrich

Wireshark のようなツールを実行することがオプションの場合...これがTLSハンドシェイクのスナップショットです-クライアントhello、サーバーhello(イーサネット/ TCPフレーミングを含む)の長さをバイト単位で確認できます。

TLS handshake

各フレームを選択すると、詳細が表示されます。たとえば、Client Helloは次のとおりです。

enter image description here

注ネットワークノイズを減らすために、Wiresharkのフィル​​ターボックスに「ssl」(TLSを含む)も追加しました。 Wiresharkには [〜#〜] sdk [〜#〜] もあります。

1
HTLee

クライアントのhelloは2000バイトの大きなブロックではありません。ネットワーク上で約80〜300バイトを見たことがあります。32バイト以上のsslidを持つものもあれば、他のものにはない拡張機能を持つものもありますが、大きなブロックではありません。 2000バイトのメモリ、サーバーhelloの場合も同様です。ネットワーク内のトラフィックをキャプチャして演習を行うことをお勧めします。

0
camp0