我正在尝试手动解密OpenSSL发送的DTLS数据包。
服务器和客户端之间使用的密码套件是TLS_RSA_WITH_AES_256_CBC_SHA256,我的理解是,密码使用的IV被加到加密的应用程序数据中。我也知道服务器使用的主秘密。
现在,关于我的问题,OpenSSL是如何从主秘密中派生加密密钥的?
发布于 2016-02-07 21:31:39
Meta:愚人并没有增加太多内容,但是在重新阅读时,我注意到我错过了"D“。
TLSv1.2的密钥建立、加密/解密和身份验证过程是在RFC 5246 TLSv1.2 + ECC密钥交换(不是这里) RFC 4492 TLS ECC中指定的,经5246年附录A.7修正。这些过程也适用于DTLSv1.2 RFC 6347 DTLSv1.2,尽管与TLS相比,DTLS的记录头、实际传输和某些错误处理有所不同。
SSL/TLS/DTLS密钥建立由两个部分组成:一个是基于(仅)所使用的密钥交换算法而变化的,并产生一个“预主秘密”;另一个部分是基于(仅)批量密码和MAC算法(S)选择和使用预主秘密来生成主秘密,然后是几个工作密钥、IVs和nonces。加密/解密和身份验证过程也有类似的变化。
对于TLS_RSA_WITH_AES_256_CBC_SHA256,密钥交换算法是RSA.主从秘密由客户端选择,RSA在服务器的公钥下加密,发送给服务器,由RSA对其进行解密和检查。在7.4.2中见RSA、7.4.7.1和8.1.1的项目。若要在服务器外执行此操作,需要(服务器私钥的副本)。
然后,利用在8.1中定义的PRF (PseudoRandom函数)与非keys一起使用预主秘密来导出第5条中指定的主密钥;然后再与非keys一起使用对附录C中的大小使用相同的PRF来导出在6.3中指定的工作密钥。对于TLS_RSA_WITH_AES_256_CBC_SHA256,密码是AES_256_CBC,在每个方向上需要32个八进制密钥,每个方向的密钥为HMAC- the 256,密钥为32个。
每个数据记录都是MACed并由发送方加密,并由接收方解密和验证。MAC/验证进程由6.2.3.1指定(对于所有非AEAD密码/套件,此套件不是AEAD),CBC模式(块)密码的加密/解密过程由6.2.3.2指定;它确实选择了每个记录IV并将其添加到加密的记录数据中。
对于另一个密匙套件,大纲是相同的,但在某些地方,RFC 5246的特定部分不同,适用于基于ECC的密钥交换(ECDH、ECDHE或ECDH_anon) RFC 4492。
https://security.stackexchange.com/questions/112638
复制相似问题