• SSL/TLS


    SSL/TLS

    SSL/TLS的工作

    1. Alice的信用卡号和地址在发送到Bob书店的过程中不能被窃听(保密性)——对称密码、Diffie-Hellman密钥交换
    2. Alice的信用卡号和地址在发送到Bob书店的过程中不能被篡改(完整性)——消息认证码
    3. 确认通信对方的web服务器是真正的Bob书店(身份认证)——数字签名

    SSL/TLS可以保护其他协议

    1616552961055

    密码套件

    SSl/TLS提供了一种密码通信的框架,这意味着SSL/TLS中使用的对称密码、公钥密码、数字签名、单向散列函数等技术,都可以像零件一样被替换。

    SSL和TLS的区别

    • SSL(Secure Socket Layer,安全套接层)SSL3.0已经不安全了
    • TLS(Transport Layer Secure,传输层安全)在SSL3.0基础上设计的,目前使用TLS1.1和TLS1.2,其中TLS1.2新增对GCM、CCM认证加密的支持,此外还新增了HMAC-SHA256,并删除了IDEA和DES,将伪随机函数(PRF)改为基于SHA-256来实现

    使用SSL/TLS进行通信

    层次化的协议

    TLS协议是由TLS记录协议和TLS握手协议两层协议叠加而成的

    • TLS记录协议(TLS record protocol)负责进行加密
      • 使用了对称密码和消息认证码
        1. 消息被分割成多个较短的片段,对每个片段进行压缩
        2. 对经过压缩的数据加上消息认证码,保证完整性,对数据进行认证。通过附加消息认证码的MAC值,可以识别篡改。为了防止重放攻击,在计算消息认证码是,还加上了片段的编号。单向散列函数的算法,以及消息认证码所使用的共享密钥都需要与通信对象协商决定
        3. 经过压缩的片段再加上消息认证码会一起通过对称密码进行加密。加密使用CBC模式,CBC模式的初始化向量(IV)通过主密码(master secret)生成,而对称密码的算法以及共享密钥需要与通信对象协商决定
        4. 上述经过加密的数据再加上数据类型。版本号、压缩后的长度组成的报头就是最终的报文数据。其中,数据类型为TLS记录协议所承载的四个子协议的其中之一

    1616554382270

    • TLS握手协议(TLS handshake protocol)负责除加密意外的其他各种操作
      • 握手协议
        • 决定算法和共享密钥
      • 密码规格变更协议
        • 传达改变密码的信号
      • 警告协议
        • 传达错误
      • 应用数据协议
        • 将TLS上承载的应用数据传达给通信对象的协议

    1616553591256

    握手协议

    1616555252974

    1. ClientHello(客户端->服务器)
      • 可用的版本号
      • 当前时间
      • 客户端随机数
      • 会话ID
      • 可用的密码套件清单
      • 可用的压缩方式清单
    2. SeverHello(客户端<-服务器)
      • 使用的版本号
      • 当前时间
      • 服务器随机数
      • 会话ID
      • 使用的密码套件
      • 使用的压缩方式
    3. Certificate(客户端<-服务器)
      • 证书清单
    4. SeverKeyExchange(客户端<-服务器)
    5. CertificateRequest(客户端<-服务器)
      • 服务器能够理解的证书类型清单
      • 服务器能够理解的认证机构名称清单
    6. SeverHelloDone(客户端<-服务器)
    7. Certificate(客户端->服务器)
    8. ClientKeyExchange(客户端->服务器)
      • 对称密码的密钥
      • 消息认证码的密码
      • 对称密码的CBC模式中使用的初始化向量IV
    9. CertificateVerify(客户端->服务器)
    10. ChangeCipherSpec(客户端->服务器)
    11. Finished(客户端->服务器)
    12. ChangeCipherSpec(客户端<-服务器)
    13. Finished(客户端<-服务器)
    14. 切换至应用数据协议
      • 客户端获得了服务器的合法公钥,完成了服务器认证
      • 服务器获得了客户端的合法公钥,完成了客户端认证(当需要客户端认证时)
      • 客户端和服务器生成了密码通信中使用的共享密钥
      • 客户端和服务器生成了消息认证码中使用的共享密钥

    主密码

    主密码是TLS客户端和服务器之间协商出来的一个秘密的数值。这个数值非常重要,TLS密码通信的机密性和数据的认证全部依靠这个数值。主密码是一个48bytes(384bits)的数值。

    • 主密码的计算
      • 预备主密码
      • 客户端随机数
      • 服务器随机数

    1616557653294

    • 主密码的目的
      • 对称密码的密钥(客户端->服务器)
      • 对称密码的密钥(客户端<-服务器)
      • 消息认证码的密钥(客户端->服务器)
      • 消息认证码的密钥(客户端<-服务器)
      • 对称密码的CBC模式所使用的初始化向量(客户端->服务器)
      • 对称密码的CBC模式所使用的初始化向量(客户端<-服务器)

    TLS中使用的密码技术小结

    1616557848926

    对SSl/TLS的攻击

    • 对各个密码技术的攻击
    • OpenSSL的心脏出血漏洞
    • SSL3.0的漏洞与POODLE攻击
    • FREAK攻击与密码产品出口管制
    • 对伪随机数生成器的攻击
    • 利用证书的时间差进行攻击
  • 相关阅读:
    LF 第三章 装饰器和迭代器相关
    Python 文件管理
    Python 强制类型转换
    安装模块
    LF 第三章
    pep8 Python编码规则
    Help on module pyclbr:
    Help on class timedelta in module datetime:
    Help on function meshgrid in module numpy.lib.function_base:
    Help on module matplotlib.cm in matplotlib:
  • 原文地址:https://www.cnblogs.com/wj99/p/15007201.html
Copyright © 2020-2023  润新知