密码学基础

对称加密

加密的安全性,取决于密钥的保密性和算法的安全性,而不是算法的保密性
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攻击

参考

  • SSL/TLS协议详解
  • 图解密码技术
  • TLS的密码学套件

你可能感兴趣的:(密码学基础)