C++11 使用OpenSSL库测量主密钥
我有一个本地服务器,我正在解析NIC捕获的服务器输入SSL/TLS数据包。正如您所知,在TLS握手过程中,在发送客户端hello消息和服务器hello消息(服务器hello+证书+客户端证书验证)之后,客户端将发送一条客户端密钥交换消息,其中包括服务器用于生成会话主密钥的加密的预主密钥。正如RFC所说,测量主钥匙的公式是:C++11 使用OpenSSL库测量主密钥,c++11,openssl,network-programming,C++11,Openssl,Network Programming,我有一个本地服务器,我正在解析NIC捕获的服务器输入SSL/TLS数据包。正如您所知,在TLS握手过程中,在发送客户端hello消息和服务器hello消息(服务器hello+证书+客户端证书验证)之后,客户端将发送一条客户端密钥交换消息,其中包括服务器用于生成会话主密钥的加密的预主密钥。正如RFC所说,测量主钥匙的公式是: master_secret=PRF(pre_master_secret,“master secret”,ClientHello.random+ServerHello.rand
master_secret=PRF(pre_master_secret,“master secret”,ClientHello.random+ServerHello.random)[0..47]代码>
此外,随机数是在客户端Hello
和服务器Hello
消息期间交换的32字节随机数
我的问题是:
我可以使用OpenSSL的哪个函数获取主密钥?我的课程中的PRF是什么?
要解密加密的预主密钥
(将使用我的服务器的私钥),解密算法是什么?是服务器hello消息中服务器所选择的密码套件中提到的密钥交换算法吗?(例如,在TLS\u DH\u RSA\u WITH_AES\u 128\u CBC\u SHA
cipher套件中,密钥交换算法是Deffie Hellman)如果是,OpenSSL库中输入密钥交换算法、私钥、,加密的缓冲区
并输出解密的缓冲区!(我使用了EVP_openInit
和EVP_DecryptInit
但在EVP_openInit
中,问题是它输入加密密钥,在用私钥解密后,它将使用该密钥解密不应该使用的加密数据。在此之前,它应该测量主密钥,不使用预主密钥a(这是会话密钥)
是两个随机数的总和,如:
uint8_t sum[32];
对于(int i=0;ii如果它是由公钥加密的,它将由私钥根据证书中显示的生成密钥的加密算法解密。这将是RSA。如果密钥是DSA,则过程不同。@user207421感谢您的评论。我正在尝试使用y解密加密的预主密钥我们的建议,现在的问题是我应该使用哪种填充来进行解密过程?