2019/5/17追記 QUICの暗号化について説明を書きました
asnokaze.hatenablog.com
2020/09/16「WiresharkがHTTP/3に対応した - ASnoKaze blog」
WiresharkはIETF版 QUICパケットのdecryptに対応しているので、やってみる。
Wiresharkの細かい対応状況については以下の通りです。
Tools · quicwg/base-drafts Wiki · GitHub
最新のソースコード内に書かれているTODOとしては、以下の通り。
* to-do list: * DONE key update via KEY_PHASE bit (untested) * TODO 0-RTT decryption
https://github.com/wireshark/wireshark/blob/master/epan/dissectors/packet-quic.c#L173
(なお今回はGoogle QUICについては言及しない)
準備
必要なもの
- Wireshark (今回は3.0.0を使用)
- パケットダンプ
- 該当通信のKEYLOGファイル
QUICのパケットをdecryptするために、KEYLOGファイルが必要です。各実装によってQUIC通信時に使用したシークレットをファイルとして出力できるようになってるものがあります。
Cloudflareが実装してるQUICHEのサンプルクライアントでは、SSLKEYLOGFILE 環境変数に出力先を指定しておくと出力されます。
https://github.com/cloudflare/quiche
SSLKEYLOGFILE=./keylog target/debug/examples/http3-client https://localhost:4433/index.html --no-verify
(ChromeもすでにSSLKEYLOGFILE環境変数を設定すれば、下記のようなデータが出力されます)
KEYLOGファイルは以下のような中身をしています。
QUIC_CLIENT_HANDSHAKE_TRAFFIC_SECRET ..... QUIC_SERVER_HANDSHAKE_TRAFFIC_SECRET ..... QUIC_CLIENT_TRAFFIC_SECRET_0 ..... QUIC_SERVER_TRAFFIC_SECRET_0 ..... QUIC_EXPORTER_SECRET .....
このKEYLOGファイルをWiresharkに食わせてやれば、パケットが復号されます。