HTTPS中的TLS

HTTPS中的TLS

SSL与TLS

SSL:(Secure Socket Layer)安全套接层。

TLS:(Transport Layer Security)传输层安全协议,是IETF在SSL3.0的基础上设计的协议。

从网络协议的角度理解HTTPS

HTTP:HyperText Transfer Protocol 超文本传输协议
HTTPS:Hypertext Transfer Protocol Secure 超文本传输安全协议
TLS:位于 HTTP 和 TCP 之间的协议,其内部有 TLS握手协议、TLS记录协议
HTTPS 经由 HTTP 进行通信,但利用 TLS 来保证安全,即 HTTPS = HTTP + TLS

从密码学角度理解HTTPS

HTTPS使用TLS保证安全,这里安全分为两部分,一是传输内容加密,二是服务端的身份认证。

TLS工作流程

上图为服务端单向认证,还有C/S双向认证,流程类似,但是客户端也有自己的证书,并且发送给服务器进行认证。

密码基础
  1. 伪随机数生成器

    没有真正意义上的随机数,作用主要用于生产对称密码的密钥,用于公钥密码生成密钥对。

  2. 消息认证码

    消息认证码:用于验证消息完整性和消息认证。(防止篡改和伪装)

    1. 发送者与接收者事先共享秘钥
    2. 发送者根据发送消息计算 MAC 值
    3. 发送者发送消息和 MAC 值
    4. 接收者根据接收到的消息计算 MAC 值
    5. 接收者根据自己计算的 MAC 值与收到的 MAC 对比
    6. 如果对比成功,说明消息完整,并来自与正确的发送者
  3. 数字签名

    消息认证码缺点是无法防止否认,因为共享密钥被client, server两端拥有,server可以伪造client发送给自己的消息,这时候就需要各自的密钥不被第二个知晓。

数字签名和消息认证码都不是为了加密,

可以将单向散列函数获取的散列值的过程理解为使用md5摘要算法获取摘要的过程

使用自己的私钥对自己所认可的消息生成一个该消息专属的签名,这就是数字签名,表明我承认该消息来自自己
注意:私钥用于加签,公钥用于解签,每个人都可以解签,查看消息的归属人

公钥密码

公钥密码也叫非对称密码,由公钥和私钥组成,它是最开始是为了解决秘钥的配送传输安全问题,即,我们不配送私钥,只配送公钥,私钥由本人保管
它与数字签名相反,公钥密码的私钥用于解密、公钥用于加密,每个人都可以用别人的公钥加密,但只有对应的私钥才能解开密文

client:明文 + 公钥 = 密文
server:密文 + 私钥 = 明文
注意:公钥用于加密,私钥用于解密,只有私钥的归属者,才能查看消息的真正内容

证书

证书:全称公钥证书(Public-Key Certificate, PKC),里面保存着归属者的基本信息,以及证书过期时间、归属者的公钥,并由认证机构(Certification Authority, CA)施加数字签名,表明,某个认证机构认定该公钥的确属于此人

密码小结
密码 作用 组成
消息认证码 确认消息的完整、并对消息的来源认证 共享秘钥+消息的散列值
数字签名 对消息的散列值签名 公钥+私钥+消息的散列值
公钥密码 解决秘钥的配送问题 公钥+私钥+消息
证书 解决公钥的归属问题 公钥密码中的公钥+数字签名
TLS使用的密码技术
  1. 伪随机数生成器:秘钥生成随机性,更难被猜测
  2. 对称密码:对称密码使用的秘钥就是由伪随机数生成,相较于非对称密码,效率更高
  3. 消息认证码:保证消息信息的完整性、以及验证消息信息的来源
  4. 公钥密码:证书技术使用的就是公钥密码
  5. 数字签名:验证证书的签名,确定由真实的某个 CA 颁发
  6. 证书:解决公钥的真实归属问题,降低中间人攻击概率

参考

  1. SSL加密发生在哪里:https://security.stackexchange.com/questions/19681/where-does-ssl-encryption-take-place
  2. TLS工作流程:https://blog.csdn.net/ustccw/article/details/76691248
  3. 《图解密码技术》:https://book.douban.com/subject/26822106/ 豆瓣评分 9.5