zoukankan      html  css  js  c++  java
  • 具有扩展主密钥时SSL/TLS的主密钥计算

    具有扩展主密钥时SSL/TLS的主密钥计算

    梦之痕bhl 2020-02-19 17:12:28 

    https://blog.csdn.net/laing92?t=1


    简介
    最近在基于openssl1.0.2t源码做开发,解密TLS1.2数据包,出现部分数据包解密失败的问题,通过定位发现,不同的HTTPS服务器,在客户端与服务端协商时部分扩展字段有差异,导致计算密钥失败或错误,其中关于“Extended Master Secret Extension”,如果协商时具有此扩展字段,计算主密钥的方式会有所差异,具体对此字段的解释,详见RFC7627

    TLS密钥计算流程
    无“Extended Master Secret”
    在TLS中,每个会话都有一个“master_secret”,其计算方式如下:

    master_secret = PRF(pre_master_secret,“主密码”,
    ClientHello.random + ServerHello.random)
    [0..47];
    1
    2
    3
    其中“pre_master_secret”是某些密钥交换的结果协议。例如,当握手使用RSA密码套件时,该值是由客户端均匀随机生成的。

    具有“Extended Master Secret”
    全面协商扩展主密钥后,握手时,“master_secret”的计算公式为:

    master_secret = PRF(pre_master_secret,“扩展的主密钥”,
    session_hash)
    [0..47];
    1
    2
    3
    其中的session_hash的定义如下:

    session_hash = 哈希(handshake_messages)
    1
    其中“handshake_messages”是指所有已发送的握手消息,或者从ClientHello开始,直至并包ClientKeyExchange消息,包括以下内容的类型和长度字段握手消息。

    三重握手
    三重握手(Triple Handshake) (CVE-2014-1295):攻击者(A)分别与客户端(C)和服务器(S)握手,协商出同一个主密钥;之后令客户端(C)和服务器(S)之间重新协商(renegotiation)或继续(resumption)会话来握手。可攻破重新协商,TLS Exporter RFC5705和"tls-unique" RFC5929。

    具体握手过程
    C:客户端。 A: 攻击者 S:服务端

    C向A发送“ ClientHello”,A将其转发给S。

    S向A发送“ ServerHello”,A将其转发给C。

    S将包含其证书链的“证书”发送给A。
    A用自己的证书链替换它,并将其发送给C。

    S向A发送“ ServerHelloDone”,A将其转发给C。

    C向A发送“ ClientKeyExchange”,其中包含
    “ pre_master_secret”,已使用A的公钥加密。解密
    “ pre_master_secret”,使用S的公钥对其重新加密,并且
    将其发送给S。

    C向A发送“完成”。A计算其“完成”
    与S连接并将其发送给S。

    S向A发送“完成”。A计算其“完成”
    与C的连接,并将其发送给C。

    通过以上方式,如果使用无“Extended Master Secret”扩展字段的计算方式将发现,从C->A和从A->S之间使用的会话密钥是一样的,这种叫做未知密钥共享(unkown key-share(UKS))攻击。当使用

    master_secret = PRF(pre_master_secret,“扩展的主密钥”,
    session_hash)
    [0..47];
    1
    2
    3
    的计算方式时,因为有session_hash,计算了所有协商消息的hash,如果中间攻击者A对协商消息进行改动,则客户端和服务端计算的hash值则不一样,最后计算出的主密钥也会不同。

    参考资料
    https://tools.ietf.org/html/rfc7627
    https://forum.nginx.org/read.php?2,272703,272704
    ————————————————
    版权声明:本文为CSDN博主「梦之痕bhl」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/laing92/article/details/104396530

  • 相关阅读:
    python基础(十七)
    Python基础(十六)
    Python基础(十五)
    Python基础(十四)
    Python基础(十三)
    Python基础(十二)
    项目分享:模拟博客园登录
    项目分享:模拟购物车
    Python基础(十一)
    课件站
  • 原文地址:https://www.cnblogs.com/bigben0123/p/12890869.html
Copyright © 2011-2022 走看看