SSL协议
一、通信安全
(一) 通信安全的安全目标
-
保密性( confidentiality)
- 保证数据在通信过程中不被窃听
-
消息完整性( message integrity)
- 保证数据在通信过程中不被篡改
-
端点认证( endpoint authentication
- 保证通信过程中双方身份的真实性
- 单向认证
- 双向认证
(二)概念
1. 必要的装备
-
加密
- 将明文通过加密算法和密钥转换为密文
-
消息摘要( Message Digest)
- 将任意长度的消息作为输入,产生一个表示消息特征的定长字符串,也称为数字指纹,具有不可逆性和抗冲突性
-
MAC( message authentication codes,信息验证码)
- 保证消息不被篡改的算法,MAC类似于摘要算法,但是在计算MAC时还需要采用一个密钥,目前基本采用HMAC,即 Hash MAC
-
公钥基础设施PK
- 私钥签名、公钥加密、数字证书等等技术等集合,提供身份认证、数据保密性、完整性、操作抗抵赖性
2. 把工具组合起来使用
-
数据加密
- 公钥方式用于加密共享密钥
- 共享密钥用于加密通信数据
-
数据签名
- 先计算通信数据的消息摘要
- 发送方私钥加密消息摘要进行数字签名
(三)密码学 - 摘要算法
- 原文
- 摘要算法
- 摘要值
特点:
- 不可逆
- 不能通过摘要推导出原文
- 碰撞空间大
- 不可能创造出消息M‘让它和消息M与相同的哈希值
常用对称算法:
MD5、SHA1、SHA256、SHA384、SHA512、SM3
(四)CA “数字证书颁发机构” 过程
- 发送方和接收方彼此信任签发对方证书的CA(信任证书颁发机构证书)
- CA可以是多级的,通过证书链来实现信任关系
- 证书链的第一级是“自签”的,被称为“根CA″,中间级别的CA被称为中级CA
二、SSL协议的解释和加密
(Alice发送方,Bob接收方)
(一)简单的安全通道协议
1. 构建玩具安全协议TSP
- 简单的安全消息系统只能发送单条消息
- 交互式的系统需要建立一组可以在整个连接中使用的密钥
- 构建一个Alice和Bob在通信过程中对双方进行认证并建立一组密钥的简单安全通道协议,称之为玩具安全协议(Toy Security Protocol,TSP)。
- 握手(Handshake)。Alice和Bob使用他们的证书和私用密钥来对对方进行认证并交换共享密钥。
- 导出密钥(Key derivation)。Alice和 Bob 使用达成一致的共享密钥导出一组加密密钥,以用于对传输进行保护。
- 数据传输(Datatransfer)将要传输的数据分割成一系列的记录(record),并对每条记录单独加以保护,这样使得数据一准备好就可以进行传输,一旦接收就可以进行处理。
- 关闭连接(Connection closure)。使用特殊的、经过保护的关闭消息,来安全地关闭连接。这样可以阻止攻击者伪造关闭操作而截断正在传输的数据。
2. 单向握手
- 简单的握手——完成单向认证的握手
- 给Bob发送一条Hello消息,告诉她已经作好了通信准备
- Bob以他的证书作为应答
- Alice产生一个准备和Bob共享的单一的密钥,称之为主密钥(master
secret,MS) - 使用Bob证书中的公钥加密MS发送给Bob
- Bob使用自己的私钥解密出MS获得了通信共享密钥
3. 双向握手
- 简单的握手——完成双向认证的握手
- 给Bob发送一条 Hello消息,告诉她已经作好了通信准备
- Bob以他的证书和 Nonce作为应答
- Alice产生一个准备和Bob共享的单一的密钥,称之为主密钥( master secret,MS)
- Alice使用Bob证书中的公钥加密MS,再使用自己的私钥做数字签名
- Bob验证 Alice的证书并获取证书公钥,使用 Alice的公钥验证 Alice的签名
- Bob使用自己的私钥解密出MS获得了通信共享密钥
Nonce是或 Number once的缩写,在密码学中 Nonce是一个只被使用一次的任意或非重复的随机数值。
4. 导出密钥
只有一个共享密钥是不是够用
- 使用同一个密钥来完成不止一种类型的加密操作被认为是不安全的
Ecs用于将数据从客户端发送到服务器端的加密密钥
Mcs用于从客户端发送到服务器端数据的MAC密钥
EsC—用于将数据从服务器端发送到客户端的加密密钥
Msc——用于从服务器端发送到客户端数据的MAC密钥
- 使用一个称作密钥导出函数( key derivation function,KDF的工具来导出上述各种用途的密钥
KDF的输入是主密钥MS和Bob所发送的 Nonce,输出是上述各种用途的密钥
5. 数据传输
-
如何防止重放攻击(MITM Attack)
-
攻击者将截获记录重新发送给接收者
-
将记录进行编号
-
编号必须成为MAC输入的一部分,以防攻击者对席号进行修改
-
M=MAC(MxSequencelD)x=cs或sc
-
序号不能阻止攻击者重放Alice的所有消息,需要Bob每次握手都生成一个新的Nonce,新的握手会使用新的一组不同的密钥
-
如何防止截断攻击(Truncation Attack)
-
攻击者可以很容易伪造数据包,例如TCP的关闭连接,Bob意识不到Alice的消息没有传完整
-
根据记录中运载的数据是普通数据还是控制信息,规定其类型