暗号化された Application Data を Wireshark で復号するためには 2 つの方法があります。
一つはよく知られている Wireshark に秘密鍵を指定する方法、もう一つは Premaster Secret または Master Secret を指定する方法です。
後者の方法では、鍵交換に DH や ECDH を選択した場合でも復号可能です。
今回は、後者の方法で、WebRTC の data channel の中身を確認してみます。
SSLKEYLOGFILE 環境変数
SSLKEYLOGFILE 環境変数に Premaster Secret や Master Secret, Client Random を出力するファイルを指定した後に、下記のように Firefox を立ち上げます。
$ export SSLKEYLOGFILE=/tmp/sslkeylog.log
$ open /Applications/Firefox.app/
SSLKEYLOGFILE 環境変数で指定したファイルには、DTLS 通信時に Client Random と Master Secret が出力されます。
CLIENT_RANDOM dbc21d5193ef6e7b86f366b80a1c0f46558e17eaa8aef6e6b2b8a63e33992537 3d6bac539f19f05a4a6f86fcaa46964ae0079aaaf0e096cac116a453c3a379fa7fb60744a95ab6cc6855111d5dbadcf9
Wireshark の設定
秘密鍵を指定する場合と同様に、[Preferences] -> [Protocols] -> [DTLS] を選択します。
[(Pre)-Master-Secret log filename] に SSLKEYLOGFILE に設定したファイルを指定します。
復号
WebRTC の data channel の場合は動的にポートが決まるため、dtls でフィルタをかけて、パケットの取得を開始します。
Decrypted DTLS data に、送信したメッセージ(JSON)が復号されて表示されます。