2016-12-19 10 views
0

私はpcapファイルを解読しようとしています。このpcapファイルには、HLSで暗号化されたビデオストリームのキャプチャが含まれています。 pcapにはTLSv1.2パケットが含まれています。非RSA TLS1.2パケット解読

TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384:

は、以下のpcapファイル

サーバーのHelloメッセージの暗号スイートからいくつかの情報です。

ECのDiffie-HellmanサーバPARAMS:pubkeyで(1)

ザ証明書ステータスメッセージ:

署名ハッシュアルゴリズムハッシュ:SHA256

署名ハッシュアルゴリズムシグニチャーECDSA

クライアント鍵交換メッセージ

ECのDiffie-HellmanサーバPARAMS:pubkeyで(2)

Iはthis Wireshark SSL decryption tutorialに追従しようとしました。しかし、それはRSAの暗号化のためだけに働くようです。 私はしばらくの間研究しており、this discussionが見つかりました。

心に重要なパラメータがあります:私はこの議論からの抽出物を引用しています(サーバの秘密鍵のコピーを持つ)受動 記録されたセッションの復号 鍵交換タイプであった場合にのみ機能しますRSAまたは静的DH。 "DHE"と "ECDHE" 暗号スイートを使用している場合は、サーバーの秘密鍵の知識が であっても、そのようなセッションを復号化することはできません。その場合、あなたはどちらか交渉し、「マスター・シークレット」 が必要になります、または積極的に接続

を傍受するために、サーバのプライベート キーを使用することは、私はクライアントの秘密鍵を持っていることをノートに値するのです。私の場合、クライアントはFFmpegビデオストリーマー(FFplay)です。私はTLS v1.2 RFCでも見ました。

私の質問:

このシナリオでは復号化は可能ですか?はいの場合は、そのためには何が必要ですか?

クライアントの秘密鍵を使用するか、pre_shared_master(Diffie-Hellman)を使用して復号化を行っていますか?

+1

事前共有秘密が必要です。クライアントキーとは何ですか?証明書の秘密鍵ですか?認証にのみ使用されます。 –

+0

あなたの返信ありがとう本当にありがとう!事前共有秘密が必要な場合は、それはDiffie-Hellman公開鍵ですか? RFC(https://tools.ietf.org/html/rfc5246#section-8.1.2)ではそれほど明確ではありません。クライアントプライベートキー(FFmpegキー)は、(https://github.com/FFmpeg/FFmpeg/blob/415f907ce8dcca87c9e7cfdc954b92df399d3d80/libavformat/tests/rtmpdh.c)にあります。これは256文字の長い文字列静的const char * private_key –

答えて

1

いいえ、このシナリオでは復号化することはできません。それはEC Diffie-Hellmanを壊すことを伴います。

復号化が直接ないがpre_master_secretを用いて行うが、キーによって直接プリマスターシークレットから誘導が行われます。つまり、最初にmaster_secretを派生させてからPRFを実行し、その出力をセッションキーとIVに分割することによって、クライアントとサーバーの復号化キーが導出されます。

+0

お返事ありがとうございます。これは私が最初から考えたことですが、専門家と二重チェックしたいと思っていました。あなたの助けを歓迎します –

+0

言葉をやや変更しました。 'pre_shared_master'(TLS RFC)のようなものはなく、' pre_shared_key'はセッションキーを確立する全く異なる方法です。 –

+0

いいえ、pre_master_secretを使用して復号化を実行しません。これは、セッションキーを使用して実行されます。 – EJP

2

最初に、クライアントの秘密鍵または公開鍵は、鍵交換には何ら関与せず、クライアントの認証にのみ使用されます(サーバが要求した場合)。鍵交換で使用されるのはサーバ秘密鍵と公開鍵ですが、RSA鍵交換が使用されている場合のみです。 DHE/ECDHEの場合、それらは使用されないので、秘密/公開鍵では不十分です。このような場合の詳細については、it is possible to decrypt HTTPS with the (private, public) pair if it uses DHE?を参照してください。

秘密鍵の代わりに必要なのは、実際には、秘密鍵が同じであっても、各TLSセッションに固有の交換された鍵です。一部のクライアントはこのキーを後で使用するために保存することができ、クライアントがそれを行うことができる場合は、Decrypting TLS Browser Traffic With Wireshark – The Easy Way!を参照して、トラフィックの復号化を続行する方法を参照してください。

+0

ありがとう本当にありがとうございます!私は一見を持っていました(DHEを使用している場合、(プライベート、パブリック)ペアでHTTPSを解読することは可能ですか?)。私は好奇心だけど... FFplayクライアントはどうやって暗号化されたビデオパケットを解読することができますか?これらの事前共有交換鍵を手動で計算するにはどうすればよいと思いますか?クライアントはopensourceコードであり、すべてのパケットをキャプチャしているので、ビデオトラフィックを手動で解読できるはずです。 –

+1

@JosephWahba:ffplayはTLSクライアントです。すなわち、キー交換を含むサーバーとTLS接続を確立します。この鍵交換の後、サーバとクライアントの両方が暗号鍵を知っています。しかし、トラフィックを見ている人はキーを知らない。私はyoutube上の様々なビデオの1つを見てみることをお勧めします。これは遊び心があり、どのように動作するのかを理解するためにdiffie hellmanの鍵交換を説明します。 –

+1

@JosephWahbaクライアントを変更してコンパイルし、解読したすべてのデータをファイルにダンプするのはなぜでしょうか? –

関連する問題