对称加密
加密的安全性,取决于密钥的保密性和算法的安全性,而不是算法的保密性
DES(退役)/3DES(遗留)/Camellia(现行)/AES(现行)/ChaCha20(现行)
序列算法和分组算法
ChaCha20是序列算法,DES和AES是分组算法
AES(Advanced Encryption Standard)算法
分组算法
- 数据分组:把明文分割成多个固定长度的数据分组
- 分组运算:把每个明文数据分组通过加密函数转换成密文数据分组
- 链接模式:联系上一个分组运算和下一个分组运算
分组密码
ECB模式
- 不使用初始化向量和链接模式
- 无法隐藏数据特征
CBC模式
- 初始化向量和链接模式的使用解决了数据重放攻击的问题
- 每个明文块与前一个密文块异或后再进行加密
- 加密过程串行化
CTR模式
- 通过递增一个加密计数器来产生连续的密钥流
- 不能提供密文消息完整性校验
非对称加密
PKI证书体系
PKI(Public Key Infrastructure,公钥基础设施)
DH密钥交换协议
- RSA(Ron Rivest,Adi Shamir,Leonard Adleman)算法
- DH(Diffie-Hellman key Exchange)
- ECDH(Elliptic Curve Diffie-Hellman key Exchange)
RSA密钥交换存在前向不安全的问题
DHE算法,私钥不参与密钥的协商,即使私钥泄露,客户端和服务端之间加密的报文都无法被解密
ECDHE算法是DH密钥交换协议使用椭圆曲线后的变种
单向散列函数
- 正向计算容易,逆向计算困难
- 运算结果均匀分布,构造碰撞困难
- 确定输入,固定长度输出
雪崩效应
MD5(退役)/SHA-256(现行)/SHA-512(现行)
消息认证码
消息认证码(Message Authentication Code,MAC),一种确认完整性并进行认证的技术
- 消息的完整性:消息没有被篡改
- 消息的认证:消息来自正确的发送者
- 消息认证码和单向散列函数的区别:消息认证码的输出除了消息以外还需要对称密钥
- 对称密钥的参与是为了进行验证
实现
基于单向散列函数的消息验证码(Hash-based Message Authentication Code,HMAC)
认证加密
认证加密(Authenticated Encryption,AE),一种把对称密码和消息认证码相结合,同时满足机密性,完整性和认证三大功能的机制
- Encrypt-then-MAC,加密后验证,IPSec协议采用
- MAC-then-Encrypt,验证后加密,SSL协议采用
- Encrypt-and-MAC,加密并验证,SSH协议采用
带关联的认证加密(Authenticated Encryption with Associated Data,AEAD),能够解决公开信息的完整性问题
- GCM
- CCM
- Poly1305
综合考虑加密算法和加密模式
- AES/GCM
- AES/CCM
- ChaCha20/Poly1305
数字签名
消息认证码的局限性:消息认证码无法防止否认
A将报文摘要(通过SHA等哈希算法生成报文摘要)通过私钥加密生成签名,与明文报文发送给B,B对收到的明文报文生成摘要,同时通过公钥解密私钥加密的报文摘要,比较两份报文是否相等就能验证报文是否被篡改
证书
数字证书(包括自签名证书)
- 证书序列号
- 证书签名算法
- 证书颁发者
- 有效期
- 公开密钥
- 证书签发机构的数字签名
- ...
证书的特点:链式
认证和双向认证
TLS/SSL
TLS是SSL的标准化
- 1995 SSL3.0
- 1999 TLS1.0
- 2006 TLS1.1
- 2008 TLS1.2
- 2018 TLS1.3
TLS协议组成
- 记录协议(Record Protocol)
- 握手协议(Handshake Protocol)
- 警报协议(Alert Protocol)
- 变更密码规范协议(Change Cipher Spec Protocol)
安全密码套件
TLS_DHE_RSA_WITH_AES_256_CBC_SHA
- DHE指密钥交换协议,RSA指数字证书生成算法
- AES_256_CBC指AES对称加密算法的256位CBC模式
- SHA指验证消息完整性的哈希算法
- Client Hello,携带支持的TLS/SSL版本,加密套件,产生的随机数A等
- Server Hello,携带选出的TLS/SSL版本,加密套件,产生的随机数B等
- Server Certificate(可选),携带服务端数字证书
- Server Key Exchange(可选),选择ECDHE算法时需要的额外参数
- Client Certificate Request(可选),请求客户端给出数字证书
- Server Hello Done
- Client Certificate(可选),携带客户端数字证书
- Client Key Exchange,选择ECDHE算法和选择RSA算法不同,RSA算法是客户端直接生成随机数 C,然后用服务端的公钥加密发送给服务端,作为 pre-master key,ECDHE算法是生成椭圆曲线的公钥发送给服务端
- Certificate Verify(可选),如果服务端要求客户端提供证书,则需要发送Certificate Verify
- Client Change Cipher Spec,提示服务端之后使用master key进行对称加密通信
- Client Handshake Finished
- Server Change Cipher Spec,提示客户端之后使用master key进行对称加密通信
- Server Handshake Finished
DTLS
DTLS(Datagram Transport Layer Security)
DTLS用于加密UDP通信过程,SSL/TLS用于加密TCP通信过程
与 SSL/TLS 在实现上的区别
- 加入超时重传机制
- 加入序列号处理UDP乱序
- 直接在UDP之上对握手消息做分段
- 加入了HelloVerifyRequest 和Cookie,用于服务端对客户端的二次校验,避免 DoS 攻击
DTLS-SRTP
OpenSSL
攻击
- 中间人攻击
- 重放攻击
- DDos攻击