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

发布时间:2022-04-30 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了php – 如何解密HTTPS(ECDHE)数据?脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
我试图了解HTTPS的确切工作原理并进行一些实际测试.

我有一个从TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA加密的HTTPS通信中捕获的数据.

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

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

起初对我来说听起来很容易,所以我写了这个脚本

$masterKey = '8ef36f0eB2C10ea6142693374f6c5c7ae65eee5f6bd45bd1990b08e6c144227382726496b795d62284bd8c6c0CADbbdb';

$someRandomEncryptedData = '170303001D314A69C7DF95E07AAF51FBDA01C178D45330BC902308DF8C418FA5B02B';

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

echo $sDecrypted;

然后我注意到主密钥是96字节长(48作为二进制字符串),这导致PHP警告,因为密钥应该是256位(32字节)长.我错过了什么吗?

总而言之,没有.

因为您询问DH和ECDH,它们是密钥协议协议:客户端不生成随机密钥,在服务器的公钥下对其进行加密,然后将其发送到服务器.这是密钥传输(如RSA密钥传输),而不是DH或ECDH.密钥传输在TLS 1.3中消失.

TLS分为两个阶段:密钥协议和批量转移.这些阶段的定义不如IPSec中的定义.当客户端和服务器使用DH或ECDH时,它们会到达PRemaster_secret.这是Diffie-Hellman或Elliptic Curve Diffie-Hellman的共同秘密.

他们使用premaster_secret,随机添加客户端,随机添加服务器,然后到达master_secret.然后他们接受master_secret并从中导出6个对称密钥:

>客户初始IV
>客户端加密密钥
>客户端mac密钥
>服务器初始IV
>服务器加密密钥
>服务器mac密钥

这些键用于键入块或流密码.

如果你注意到,每一方都对premaster_secret做出贡献 – 客户贡献g ^ a,服务器贡献g ^ b.然后每一方通过nonce贡献master_secret – 客户端随机和服务器随机.

双方有两个贡献的原因是传输方案,如RSA密钥传输,不允许服务器贡献给premaster_secret.服务器必须等到master_secret的派生才通过nonce贡献给密钥材料.

所以进展是premaster_secret到master_secret到6个会话密钥.我不确定万能钥匙在哪里……

我认为如果你有主密钥,通常更容易将其插入Wireshark. Wireshark wiki谈到了一个主密钥(虽然我不知道它是什么 – 有一个premaster_secret和master_secret).请参阅Wireshark wiki获取Secure Socket Layer (SSL).

是啊… :)查看Rfc 5246.那是Transport Layer Security (TLS) Protocol Version 1.2.然后让我们谈谈简单:)

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

脚本宝典总结

以上是脚本宝典为你收集整理的php – 如何解密HTTPS(ECDHE)数据?全部内容,希望文章能够帮你解决php – 如何解密HTTPS(ECDHE)数据?所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。