SSL/TLS
SSL/TLS的工作
- Alice的信用卡号和地址在发送到Bob书店的过程中不能被窃听(保密性)——对称密码、Diffie-Hellman密钥交换
- Alice的信用卡号和地址在发送到Bob书店的过程中不能被篡改(完整性)——消息认证码
- 确认通信对方的web服务器是真正的Bob书店(身份认证)——数字签名
SSL/TLS可以保护其他协议
密码套件
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)负责进行加密
- 使用了对称密码和消息认证码
- 消息被分割成多个较短的片段,对每个片段进行压缩
- 对经过压缩的数据加上消息认证码,保证完整性,对数据进行认证。通过附加消息认证码的MAC值,可以识别篡改。为了防止重放攻击,在计算消息认证码是,还加上了片段的编号。单向散列函数的算法,以及消息认证码所使用的共享密钥都需要与通信对象协商决定
- 经过压缩的片段再加上消息认证码会一起通过对称密码进行加密。加密使用CBC模式,CBC模式的初始化向量(IV)通过主密码(master secret)生成,而对称密码的算法以及共享密钥需要与通信对象协商决定
- 上述经过加密的数据再加上数据类型。版本号、压缩后的长度组成的报头就是最终的报文数据。其中,数据类型为TLS记录协议所承载的四个子协议的其中之一
- 使用了对称密码和消息认证码
- TLS握手协议(TLS handshake protocol)负责除加密意外的其他各种操作
- 握手协议
- 决定算法和共享密钥
- 密码规格变更协议
- 传达改变密码的信号
- 警告协议
- 传达错误
- 应用数据协议
- 将TLS上承载的应用数据传达给通信对象的协议
- 握手协议
握手协议
- ClientHello(客户端->服务器)
- 可用的版本号
- 当前时间
- 客户端随机数
- 会话ID
- 可用的密码套件清单
- 可用的压缩方式清单
- SeverHello(客户端<-服务器)
- 使用的版本号
- 当前时间
- 服务器随机数
- 会话ID
- 使用的密码套件
- 使用的压缩方式
- Certificate(客户端<-服务器)
- 证书清单
- SeverKeyExchange(客户端<-服务器)
- CertificateRequest(客户端<-服务器)
- 服务器能够理解的证书类型清单
- 服务器能够理解的认证机构名称清单
- SeverHelloDone(客户端<-服务器)
- Certificate(客户端->服务器)
- ClientKeyExchange(客户端->服务器)
- 对称密码的密钥
- 消息认证码的密码
- 对称密码的CBC模式中使用的初始化向量IV
- CertificateVerify(客户端->服务器)
- ChangeCipherSpec(客户端->服务器)
- Finished(客户端->服务器)
- ChangeCipherSpec(客户端<-服务器)
- Finished(客户端<-服务器)
- 切换至应用数据协议
- 客户端获得了服务器的合法公钥,完成了服务器认证
- 服务器获得了客户端的合法公钥,完成了客户端认证(当需要客户端认证时)
- 客户端和服务器生成了密码通信中使用的共享密钥
- 客户端和服务器生成了消息认证码中使用的共享密钥
主密码
主密码是TLS客户端和服务器之间协商出来的一个秘密的数值。这个数值非常重要,TLS密码通信的机密性和数据的认证全部依靠这个数值。主密码是一个48bytes(384bits)的数值。
- 主密码的计算
- 预备主密码
- 客户端随机数
- 服务器随机数
- 主密码的目的
- 对称密码的密钥(客户端->服务器)
- 对称密码的密钥(客户端<-服务器)
- 消息认证码的密钥(客户端->服务器)
- 消息认证码的密钥(客户端<-服务器)
- 对称密码的CBC模式所使用的初始化向量(客户端->服务器)
- 对称密码的CBC模式所使用的初始化向量(客户端<-服务器)
TLS中使用的密码技术小结
对SSl/TLS的攻击
- 对各个密码技术的攻击
- OpenSSL的心脏出血漏洞
- SSL3.0的漏洞与POODLE攻击
- FREAK攻击与密码产品出口管制
- 对伪随机数生成器的攻击
- 利用证书的时间差进行攻击