openssl コマンドライン ツールを使用して SSL トラフィックを復号化する

openssl コマンドライン ツールを使用して SSL トラフィックを復号化する

コマンドライン ツールを使用して手動でデータの抽出/暗号化/復号化を実行しようとしていますopenssl

何をすべきかを把握するために、RFC5246 を確認しています。このツールでこの手順を実行できるかどうかは、私にはよくわかりません。説明にある秘密鍵は、自己署名証明書を作成したときに生成された秘密鍵であると想定しています。

RSA がサーバー認証とキー交換に使用される場合、48 バイトの pre_master_secret がクライアントによって生成され、サーバーの公開キーで暗号化されてサーバーに送信されます。サーバーは、その秘密キーを使用して pre_master_secret を復号化します。その後、両者は上記のように pre_master_secret を master_secret に変換します。

私の仮定が正しいかどうか、誰か教えていただけますか。opensslコマンドライン ツールを使用して、サーバーの秘密キーとクライアントからの暗号化された pre_master_secret を提供して、サーバーの pre_master キーを生成し、それを使用してマスター キーを作成できますか?

もしそうなら、私はそのツールにあまり詳しくないので、どうすればよいかわかりません。

他に指摘しておくべきことは、私が使用している暗号スイートは TLS_RSA_WITH_AES_256_CBC_SHA であり、Wireshark でクライアントからの pre_master_secret の長さが 256 バイトであることが確認できるということです。

答え1

完全に確信があるわけではありませんが、答えは「いいえ」だと思います。opensslコマンドライン クライアントは、さまざまなツールの集合体です。X.509 コマンドは証明書の操作に役立ちますが、暗号化コマンドは OpenSSL 自体のテスト以外にはほとんど役に立ちません。

一般的なアルゴリズムで暗号計算を行う必要がある場合は、Pythonの対話型コマンドラインをお勧めします。クリプトドーム図書館。

ただし、SSL 接続を復号化するには、通常、Wireshark を使用するのが最も簡単な方法です。Wiresharkに秘密鍵の場所を教えるRSA暗号化を使用したTLS接続を復号化します。一時的なDiffie-Hellmanを使用した接続の場合、キーだけではトラフィックを復号化できないため、クライアントまたはサーバーからの追加情報


暗号TLS_RSA_WITH_AES_256_CBC_SHAスイートの使用は、いくつかの理由からお勧めできません。

  • それは持っていない前方秘匿性したがって、サーバーの秘密鍵が侵害された場合、この鍵を使用して行われたすべての接続も侵害されます。Diffie-Hellman 鍵交換 (名前に EDH または ECDHE が含まれる) を使用する暗号スイートには、前方秘匿性があります。
  • これは RSA 復号化を使用しますが、これにはパディングが含まれており、これは実装バグやサイド チャネルを介した漏洩の典型的な原因です。RSA に加えて名前に EDH または ECDHE が含まれる暗号スイート、または DSA または ECDSA が含まれる暗号スイートは、復号化の代わりに署名を使用するため、実装上の欠陥が発生する可能性が低くなります。
  • これは CBC 復号化を使用しますが、これにはパディングが含まれており、これは実装バグやサイド チャネルを介した漏洩の典型的な原因です。名前に CBC が付いていない暗号スイートは、実装上の欠陥の影響を受ける可能性が低くなります。

答え2

SSL/TLS-through-1.2 プレーンRSA鍵交換で使用されるRSAES-PKCS1v1_5は、OpenSSLコマンドライン操作で復号化できます。rsautlまたはpkeyutl(後者は2010年の1.1.0以降)。Windows以外のシステムでは、それぞれのマニュアルページを参照するか、オンライン

これによってプレマスター シークレットが提供されますが、それだけではトラフィックを復号化 (または認証) することはできません。プレマスターと nonce を使用してマスター シークレットを導出し、次にマスター シークレットと nonce を使用して作業キー (複数) を導出する必要があります。導出関数 'PRF' は、SSLv3 (現在は使用されていません)、TLS 1.0 および 1.1 (RFC 2246 および 4346)、および TLS 1.2 (RFC 5246) によって異なります。(PRF は、ドラフトどおりに TLS 1.3 でも異なりますが、これによってプレーン RSA キー交換も完全に排除されます。)

コマンドラインは SSL/TLS PRF に直接アクセスできませんが、それらが構築される HMAC を実行できます (SSLv3 を除く)。dgst上記と同じ場所にあるのマニュアル ページを参照してください。また、-hmac $keyシェルなどから渡されるバイト シーケンスのみを処理できることに注意してください。これがすべてではないため、代わりに が必要になる場合があります-mac hmac -macopt hexkey:$hexkey

そうは言っても、Gilles の意見に賛成です。Wireshark に任せた方がずっと簡単です。問題がキャプチャ ファイル以外の形式でデータを保持している場合、Wireshark ディストリビューションには、通常、偽のキャプチャを作成できるファイルを操作するための補助的なコマンドライン ツールがいくつか付属しており、この場合、Wireshark または tshark main でそれを復号化できます。

関連情報