暗号化された Application Data を復号する


暗号化された 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 が出力されます。

/tmp/sslkeylog.log
CLIENT_RANDOM dbc21d5193ef6e7b86f366b80a1c0f46558e17eaa8aef6e6b2b8a63e33992537 3d6bac539f19f05a4a6f86fcaa46964ae0079aaaf0e096cac116a453c3a379fa7fb60744a95ab6cc6855111d5dbadcf9

Wireshark の設定

秘密鍵を指定する場合と同様に、[Preferences] -> [Protocols] -> [DTLS] を選択します。

[(Pre)-Master-Secret log filename] に SSLKEYLOGFILE に設定したファイルを指定します。

復号

WebRTC の data channel の場合は動的にポートが決まるため、dtls でフィルタをかけて、パケットの取得を開始します。

Decrypted DTLS data に、送信したメッセージ(JSON)が復号されて表示されます。

参考