gpt4 book ai didi

php - 如何解密HTTPS(ECDHE)数据?

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:41:17 26 4
gpt4 key购买 nike

我正在尝试了解 HTTPS 的工作原理并进行一些实际测试。

我有一个通过 TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA 加密的 HTTPS 通信捕获的数据。

如果我没理解错的话,客户端在 TLS 握手期间会创建一个主 key ,然后使用服务器的公钥对其进行加密并发送到服务器。这个主 key (作为纯文本)然后用作对称 key 来加密正在进行的通信。这是正确的吗?

如果是,如果我知道主 key ,如何解密数据?

起初对我来说这听起来很简单,所以我就写了这个脚本

$masterKey = '8ef36f0eb2c10ea6142693374f6c5c7ae65eee5f6bd45bd1990b08e6c144227382726496b795d62284bd8c6c0cadbbdb';

$someRandomEncryptedData = '170303001D314A69C7DF95E07AAF51FBDA01C178D45330BC902308DF8C418FA5B02B';

$sDecrypted = mcrypt_decrypt(MCRYPT_RIJNDAEL_256, pack('H*', $masterKey), pack('H*', $someRandomEncryptedData), MCRYPT_MODE_CBC);

echo $sDecrypted;

然后我注意到主 key 的长度为 96 字节(二进制字符串为 48),这导致 PHP 发出警告,因为 key 的长度应为 256 位(32 字节)。我错过了什么吗?

最佳答案

client during the request creates a master key, which is then encrypted using server's public key and sent to server. This master key (as a plain text) is then used as a symmetric key for encrypting ongoing communication. Is this correct?

嗯,总而言之,不。

因为你问的是 DH 和 ECDH,它们是 key 协议(protocol)协议(protocol):客户端生成一个随 secret 钥,用服务器的公钥加密它,然后将其发送到服务器。那是 key 传输(如 RSA key 传输),不是 DH 或 ECDH。 TLS 1.3 将取消 key 传输。

TLS 有两个阶段: key 协商和批量传输。这些阶段不像在 IPSec 中那样明确定义。当客户端和服务器使用 DH 或 ECDH 时,它们会到达一个 premaster_secret。这是 Diffie-Hellman 或椭圆曲线 Diffie-Hellman 的共享 secret 。

他们获取premaster_secret,他们随机添加一个客户端,一个随机服务器,然后得到一个master_secret。然后他们获取 master_secret 并从中派生出 6 个对称 key :

  • 客户首字母 IV
  • 客户端加密 key
  • 客户端 mac key
  • 服务器初始 IV
  • 服务器加密 key
  • 服务器 mac key

这些 key 用于加密 block 或流密码。

如果您注意到,每一方都贡献了 premaster_secret - 客户端贡献了 g^a 而服务器贡献了 g^b。然后每一方都通过 nonces 为 master_secret 做出贡献 - 客户端随机和服务器随机。

双方都有两个贡献的原因是传输方案,如 RSA key 传输,不允许服务器贡献 premaster_secret。服务器必须等到 master_secret 的派生才能通过 nonce 贡献 key Material 。

因此进展是 premaster_secretmaster_secret 到 6 个 session key 。我不确定主 key 在哪里...


If yes, how to decrypt the data, if I know the master key?

我认为如果您有主 key ,将它插入 Wireshark 通常会更容易。 Wireshark wiki 讨论了主 key (虽然我不知道它是什么 - 有一个 premaster_secretmaster_secret)。有关 Secure Socket Layer (SSL) 的信息,请参见 Wireshark wiki .


It sounded pretty easy to me at first, so I just wrote this script

是的... :) 查看 RFC 5246。那是 Transport Layer Security (TLS) Protocol Version 1.2 .然后说简单的:)


Then I notice that master key is 96 byte long (48 as binary string)

96 字节是伪随机函数 (PRF) 的输出。查看 RFC 5246,第 13 页。

关于php - 如何解密HTTPS(ECDHE)数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27773086/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com