C++11 使用OpenSSL库测量主密钥

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

我有一个本地服务器,我正在解析NIC捕获的服务器输入SSL/TLS数据包。正如您所知,在TLS握手过程中,在发送客户端hello消息和服务器hello消息(服务器hello+证书+客户端证书验证)之后,客户端将发送一条客户端密钥交换消息,其中包括服务器用于生成会话主密钥的加密的预主密钥。正如RFC所说,测量主钥匙的公式是:

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解密加密的预主密钥我们的建议,现在的问题是我应该使用哪种填充来进行解密过程?