web-dev-qa-db-ja.com

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バイトであることがわかります。

2
David B

完全にはわかりませんが、答えはノーだと思います。 opensslコマンドラインクライアントは、ツールの異種コレクションです。 X.509コマンドは証明書の操作に役立ちますが、暗号化コマンドがOpenSSL自体のテスト以外に役立つことはめったにありません。

一般的なアルゴリズムを使用して暗号計算を行う必要がある場合は、Pythonインタラクティブコマンドラインと Cryptodome ライブラリを使用することをお勧めします。

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


TLS_RSA_WITH_AES_256_CBC_SHA暗号スイートを使用することは、いくつかの理由から悪い考えであることに注意してください。

  • forward secrecy がないため、サーバーの秘密鍵が危険にさらされると、この鍵で行われるすべての接続も危険にさらされます。 Diffie-Hellman鍵交換(名前にEDHまたはECDHEを含む)を使用する暗号スイートには、前方秘書があります。
  • RSA復号化を使用します。これには、実装のバグとサイドチャネルを介したリークの典型的な原因であるパディングが含まれます。 RSAに加えて名前にEDHまたはECDHEが含まれる、またはDSAまたはECDSAが含まれる暗号スイートは、復号化の代わりに署名を使用するため、実装上の欠陥が発生する可能性が低くなります。
  • これは、実装のバグとサイドチャネルを介したリークの典型的な原因であるパディングを含むCBC復号化を使用します。名前にCBCが含まれていない暗号スイートは、実装上の欠陥に悩まされる可能性が低くなります。

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

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

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

そうは言っても、私はGillesに同意しますが、wiresharkにそれをさせる方がはるかに簡単です。問題がキャプチャファイル以外の形式のデータである場合、wiresharkディストリビューションには、通常は偽のキャプチャを構築できるファイルを操作するためのいくつかの補助コマンドラインツールが付属しています。この場合、wiresharkまたはtsharkmainは復号化できます。

1