Web协议详解与抓包实战之TLS【四】

前言

《Web协议详解与抓包实战》课程学习,陶辉老师主讲

学习内容:

  1. HTTP–TLS/SSL–TCP/IP自上而下根据应用学习web协议-TLS原理
  2. 结合抓包工具实践验证:chrome下的network面板、Tcpdump、Wireshark

TSL协议工作原理

TLS/SSL的功能实现主要依赖于三类基本算法:散列函数 Hash、对称加密和非对称加密,其利用非对称加密实现身份认证和密钥协商,对称加密算法采用协商的密钥对数据加密,基于散列函数验证信息的完整性。

image-20201229171106688

设计目的:

  • 身份验证
  • 保密性
  • 完整性

image-20201229095857680

TLS协议内容

  • Record记录协议
    • 对称加密
  • Handshake握手协议
    • 验证通讯双方的身份
    • 交换加解密的安全套件
    • 协商加密参数

TLS安全密钥套件

image-20201229100159879

对阵加密的工作原理

AES对称加密在网络中的应用,相关概念主要见我另一篇文章web安全之密码学基础

image-20201229101217401

对称加密的核心运算–XOR异或运算

image-20201229101845356

填充padding

  • Block cipher分组加密:将明文分成多个等长的Block模块,对每个模块分别加解密

  • 目的:当最后一个明文Block模块长度不足时,需要填充

  • 填充方法:

    image-20201229104431880

对称加密的工作模式

ECB模式:电子密码本模式

Electronic codebook模式:

  • 直接将明文分解为多个块,对每个块独立加密
  • 问题:无法隐藏数据特征

image-20201229105747833

CBC模式:密码分组链模式

Cipher-block chaining模式

  • 每个明文块先于前一个密文块进行异或后,在进行加密
  • 问题:加密过程串行化

image-20201229110024708

CTR模式:计数器模式

Counter模式:

  • 通过递增一个加密计数器以产生连续的密钥流
  • 问题:不能提供密文消息完整性校验

image-20201229110339428

密文消息完整性校验–【hash函数】

基于hash函数使用MAC(Message AUthentication Code)算法进行完整性验证

image-20201229110758927

GCM模式

  • Galois/Counter Mode
    • 相当于CTR+GMAC

image-20201229110912680

AES加密算法

Advanced Encryption Standard 高级加密标准算法

image-20201229140508251

AES的三种密钥长度

  • AES分组长度是128位(16字节)

  • 密钥长度有三种

    image-20201229140755228

加密步骤

image-20201229140823811

加密流程

  • C = E(K, P)
    • 其中C代表密文,E代表加密函数,P为明文,K为密钥
  • 初始轮
    • AddRoundKey 轮密钥加
  • 普通轮
    • SubBytes 字节替代
    • ShiftRows 行移位
    • MixColumns 列混合
    • AddRoundKey 轮密钥加
  • 最终轮
    • SubBytes 字节替代
    • ShiftRows 行移位
    • AddRoundKey 轮密钥加

image-20201229144858205

一轮中的4个操作阶段

这4分操作阶段使输入位得到充分的混淆,详细请参考AES加密算法的详细介绍与实现

SubBytes 字节替代

AES的字节代换其实就是一个简单的查表操作。AES定义了一个S盒和一个逆S盒。
AES的S盒:

行/列 0 1 2 3 4 5 6 7 8 9 A B C D E F
0 0x63 0x7c 0x77 0x7b 0xf2 0x6b 0x6f 0xc5 0x30 0x01 0x67 0x2b 0xfe 0xd7 0xab 0x76
1 0xca 0x82 0xc9 0x7d 0xfa 0x59 0x47 0xf0 0xad 0xd4 0xa2 0xaf 0x9c 0xa4 0x72 0xc0
2 0xb7 0xfd 0x93 0x26 0x36 0x3f 0xf7 0xcc 0x34 0xa5 0xe5 0xf1 0x71 0xd8 0x31 0x15
3 0x04 0xc7 0x23 0xc3 0x18 0x96 0x05 0x9a 0x07 0x12 0x80 0xe2 0xeb 0x27 0xb2 0x75
4 0x09 0x83 0x2c 0x1a 0x1b 0x6e 0x5a 0xa0 0x52 0x3b 0xd6 0xb3 0x29 0xe3 0x2f 0x84
5 0x53 0xd1 0x00 0xed 0x20 0xfc 0xb1 0x5b 0x6a 0xcb 0xbe 0x39 0x4a 0x4c 0x58 0xcf
6 0xd0 0xef 0xaa 0xfb 0x43 0x4d 0x33 0x85 0x45 0xf9 0x02 0x7f 0x50 0x3c 0x9f 0xa8
7 0x51 0xa3 0x40 0x8f 0x92 0x9d 0x38 0xf5 0xbc 0xb6 0xda 0x21 0x10 0xff 0xf3 0xd2
8 0xcd 0x0c 0x13 0xec 0x5f 0x97 0x44 0x17 0xc4 0xa7 0x7e 0x3d 0x64 0x5d 0x19 0x73
9 0x60 0x81 0x4f 0xdc 0x22 0x2a 0x90 0x88 0x46 0xee 0xb8 0x14 0xde 0x5e 0x0b 0xdb
A 0xe0 0x32 0x3a 0x0a 0x49 0x06 0x24 0x5c 0xc2 0xd3 0xac 0x62 0x91 0x95 0xe4 0x79
B 0xe7 0xc8 0x37 0x6d 0x8d 0xd5 0x4e 0xa9 0x6c 0x56 0xf4 0xea 0x65 0x7a 0xae 0x08
C 0xba 0x78 0x25 0x2e 0x1c 0xa6 0xb4 0xc6 0xe8 0xdd 0x74 0x1f 0x4b 0xbd 0x8b 0x8a
D 0x70 0x3e 0xb5 0x66 0x48 0x03 0xf6 0x0e 0x61 0x35 0x57 0xb9 0x86 0xc1 0x1d 0x9e
E 0xe1 0xf8 0x98 0x11 0x69 0xd9 0x8e 0x94 0x9b 0x1e 0x87 0xe9 0xce 0x55 0x28 0xdf
F 0x8c 0xa1 0x89 0x0d 0xbf 0xe6 0x42 0x68 0x41 0x99 0x2d 0x0f 0xb0 0x54 0xbb 0x16

状态矩阵中的元素按照下面的规则映射为一个新的字节:把该字节的高4位作为行值,低4位作为列值,取出S盒或者逆S盒中对应的行的元素作为输出。例如,加密时,输出的字节S1为0x12,则查S盒的第0x01行和0x02列,得到值0xc9,然后替换S1原有的0x12为0xc9

同理,解密时的逆字节替换也有一个相应的逆S盒来进行查表映射

ShiftRows 行移位

将矩阵中的每个横列进行循环式移位

  • 第一行不变
  • 第二行循环左移1个字节
  • 第三行循环左移2个字节
  • 第四行循环左移3个字节

image-20201229150707391

同理,逆行移位就是将状态矩阵中的每一行执行相反的移位操作(即右移操作)

MixColumns 列混合

列混合变换是通过矩阵相乘来实现的,利用的是线性代数的知识点,有兴趣可以深入了解

image-20201229151100878

AddRoundKey 轮密钥加

image-20201229152220966

密钥扩展

image-20201229151917225

非对称加密

加密过程:

image-20201229152610174

RSA算法

参考web安全之密码学基础

主要使用RSA算法来生成CA证书

image-20201229163945007

openssl验证RSA

openssl genrsa -out private.pem  # 生成私钥
openssl rsa -in private.pem -pubout -out public.pem # 从私钥中生成公钥
openssl asn1parse -i -in private.pem   # 查看ASN.1格式的私钥
openssl rsautl -encrypt -in hello.txt -inkey public.pem -pubin -out hello.en # 使用RSA公钥加密
openssl rsautl -decrypt -in hello.en -inkey private.pem -out hello.de # 使用RSA私钥解密
  • 生成私钥

image-20201229161457307

  • 从私钥中生成公钥

image-20201229161522575

  • 查看ASN.1格式的私钥

image-20201229162106439

image-20201229162919370

  • 查看ASN.1格式的公钥

image-20201229163021724

image-20201229163156707

  • 使用RSA进行加解密

image-20201229163714276

非对称加密应用:PKI证书体系

数字签名的核心概念:基于私钥加密,只能使用公钥解密。这样拥有公钥的大家都知道某个消息是谁发出的,起到了身份认证的作用

由于RSA算法无法确保服务器身份的合法性,因为公钥并不包含服务器的信息,至少存在两类问题:中间人攻击和信息抵赖

解决上述身份验证问题的关键是确保获取的公钥途径是合法的,能够验证服务器的身份信息,为此需要引入权威的第三方机构CA(如沃通CA)。CA 负责核实公钥的拥有者的信息,并颁发认证"证书",同时能够为使用者提供证书验证服务,即PKI体系(PKI基础知识)

  • 公钥的管理:Public Key Infrastructure(PKI) 公钥基础设施
    • 由 Certificate Authority (CA)数字证书认证机构将用户个人身份信息与公钥关联在一起
    • 公钥数字证书组成
      • CA信息、公钥用户信息、公钥、权威机构的签字、证书有效期
    • PKI用户
      • 向CA核实公钥的用户
      • 希望使用已核实公钥的用户

CA使用的具体流程:证书的签发客户端的证书验证

image-20201230102012996

证书信任链:服务器证书、中间证书与根证书在一起组合成一条合法的证书链,证书链的验证是自下而上的信任传递的过程。

image-20201230102242347

PKI公钥基础设施

image-20201230102325199

证书类型

image-20201230102441150

非对称加密应用:DH密钥交换协议

  • RSA密钥交换

    image-20201230141247589

    • 没有前向保密性的意思:若攻击者将双方通信报文全部保存,在将来的某一天将server的私钥解开,那就可以解密拿到双方通信的对称加密密钥,以此就可以解密双方之前所有的通信内容!!

为了解决这个问题,产生了DH密钥交换协议

image-20201230141629613

  • DH密钥交换协议算法

    核心原理:

    image-20201230142216115

    密钥:

    Alice(client) Bob(server)
    公钥 g,p,A B
    私钥 a b

    image-20201230141759841

    • 实例:

    image-20201230142249507

  • DH密钥交换协议存在的问题

    • 中间人伪造攻击

    image-20201230142514004

    • 运算量非常大,运算速度慢

      • 解决:使用ECDH密钥交换协议

        • DH 依赖的是——求解“离散对数问题”的困难。
        • ECDH 依赖的是——求解“椭圆曲线离散对数问题”的困难
      • image-20201230142940250

      • 关键原理:

        image-20201230143659078

      • ECDH步骤:

        image-20201230143006391

TLS1.2 通讯过程

我们通过通讯过程的流程图,结合www.sina.com.cn抓包进行实践学习

image-20201230145343165

  1. Client Hello

    image-20201230145915116

  2. Server Hello

    image-20201230150014386

3/4/5. Certificate, Server Key Exchange, Server Hello Done

image-20201230150457553

  1. Client Key Exchange, Change Cipher Spec, Finished

    image-20201230150647060

  2. 后续客户端和服务器双方生成共同的一个密钥利用对称加密算法来进行通信

通过上述演示,可以看到TLS1.2的加密套件非常多,其中有些套件比较古老,使用现在的算力完全可以轻易破解,因此出现了FREAK攻击

  • 中间人通过篡改客户端支持的加密套件来进行攻击
    • 高安全性的套件删除,迫使服务器选择安全性低的套件,来尝试破解密钥

image-20201230151256152

  • TLS1.3的改进

    • 直接全部使用安全性高的套件

    image-20201230151517577

握手的优化(TLS1.3)

  • Session resume session ID

    • session缓存:以服务器生成的session ID为依据

    image-20201230163246058

  • Session resume with session ticket

    • 由于session ID运行在内存中无法分享,反向代理到其他服务器还得重新握手建立密钥,所以产生了session ticket

    image-20201230163850082

  • TLS1.3的0RTT握手

    • 建立在非首次请求中

    image-20201230164018092

结合三类算法的特点,TLS的基本工作方式是,客户端使用非对称加密与服务器进行通信,实现身份验证并协商对称加密使用的密钥,然后对称加密算法采用协商密钥对信息以及信息摘要进行加密通信,不同的节点之间采用的对称密钥不同,从而可以保证信息只能通信双方获取。

参考

HTTPS协议详解(二):TLS/SSL工作原理

HTTPS协议详解(三):PKI 体系

猜你喜欢

转载自blog.csdn.net/weixin_39664643/article/details/111994122