HTTPS = HTTP + 加密 + 认证 + 完整性保护
密码学
对称加密(Symmetric encryption)
通信双方使用同一密钥进行通信。
- 序列密码 将一字节的明文输入即可得到一字节的密文输出,一般针对无穷序列(RC4)
- 分组密码 每次加密一整块数据,例如128字节 需要填充有规律(AES)
- 最后的字节指示填充的数据,解码的时候需要删除响应填充
散列函数(hash function) 摘要算法
将任意长度的输入转换为定长的输出的算法。 一般用于验证消息的完整性
特性:
- 单向性,无法得到原始输入
- 弱抗碰撞型, 一条信息只有一条散列
- 强抗碰撞型,计算上很难找到两条散列相同的消息
常见算法:
- SHA1 160位, 逐渐淘汰
- SHA256 变种等
消息验证代码(message authentication code MAC)
以身份验证扩展了散列函数的密码学函数,保证信息不被整体篡改
扩展:
基于散列的消息验证代码(hash-based message authentication code, HMAC)
分组密码模式
为了加密任意长度的数据,对分组密码的一种扩展。
ECB,CBC, CFB ,OFB ,CTR, GCM
- 电码本模式(electronic codebook ECB) 支持的数据长度刚好是块大小的整数倍,如果满足需要填充
- 缺点:简单,很容易被攻击(TLS, BEAST)
- 加密块链模式(cipher block chaining, CBC) 为了解决ECB中确定性,引入了
初始向量
(initialization vertor IV),开始时随机生成一个初始IV进行加密,之后使用上一块的密文作为IV,以此类推!
非对称加密(asymmetric encryption)
针对多用户之间通信,对称加密显得繁碎且不安全,非对称加密使用一种,多用户共享公钥,服务器保有私钥的方法来解决这个问题。
Alice 使用公钥加密, Bob使用私钥解密, Bob使用私钥加密,Alice也可以使用公钥解密!
核心特性
:公钥加密只能私钥解密,私钥加密可以用公钥解密
缺点:
1. 性能差,不适用数据量大的场景, HTTPS下使用RSA来协商对称私钥,然后使用对称算法来通信
常用算法:RSA
数据签名(digital signature)
用于验证一条电子消息或者一片电子文档的真实性。
流程:
- 计算签名文档的散列
- 对结果散列和额外的元数据进行编码
- 使用私钥加密编码数据,其结果就是签名,可以追加到文档中作为身份验证的数据
- 接受方使用公钥来验证文件的完整性
其他相关
随机数生成
分为真/假随机数生成器(true random/ pseudorandom number generator TRNG/PRNG)
密码衡量强度
ENISA提供了文档
####中间人攻击(man-in-the-middle, MITM)
被动网络攻击(passvie network attack)监听双方会话等
主动网络攻击(active network attack) 劫持流量(证书链解决的问题)
reference: 《HTTPS 权威指南》
协议
详细规范:RFC 5246 (TLS1.2)
记录协议(record protocol)
负责在传输连接上交换所有的底层消息,应用数据的对称加密传输,占据一个TLS连接的绝大多数流量。
1 | struct { |
握手协议
流程分为以下几类:
完整的握手 (full handshark)
1 | Client Server |
- 交换各自支持的功能,对需要连接的参数达成一致
- 验证初始的证书,或使用其他方式进行验证
- 对将用于保护会话的共享主密钥达成一致
- 验证握手消息未被第三方团体修改
ClientHello
1 | Handshake protocol: ClientHello |
客户端身份验证
只有经过身份验证的服务器才允许请求客户端身份验证1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18Client Server
ClientHello -------->
ServerHello
Certificate*
ServerKeyExchange*
CertificateRequest*
<-------- ServerHelloDone
Certificate*
ClientKeyExchange
CertificateVerify*
[ChangeCipherSpec]
Finished -------->
[ChangeCipherSpec]
<-------- Finished
Application Data <-------> Application Data
Figure 1. Message flow for a full handshake
会话恢复
1 | Client Server |
密钥交换
公钥基础设施
- 订阅人
订阅人(或者说最终实体)是指那些需要证书来提供安全服务的团体。 - 登记机构
登记机构(registration authority,RA)主要是完成一些证书签发的相关管理工作。例如,
RA会首先对用户进行必要的身份验证,然后才会去找CA签发证书。在某些情况下,当CA希望在用户附近建立一个分支机构时(例如在不同的国家建立当地登记中心),我们也称RA为本地登记机构(local registration authority,LRA)。实际上,很多CA也执行RA
的职责。 证书颁发机构
证书颁发机构(certification authority,CA)是指我们都信任的证书颁发机构,它会在确认申请用户的身份之后签发证书。同时CA会在线提供其所签发证书的最新吊销信息,这样信赖方就可以验证证书是否仍然有效。信赖方
信赖方(relying party)是指那些证书使用者。技术上来说,一般是指那些执行证书验证的网页浏览器、其他程序以及操作系统。他们是通过维护根可信证书库来执行验证的,
这些证书库包含某些CA的最终可信证书(信任密钥,trust anchor)。更广泛地说,信赖方是指那些需要通过证书在互联网上进行安全通信的最终用户。
证书类型
Binrary(DER) certificate
包含原始格式的X.509证书,使用DER ASN.1编码ASCII(PEM) certificate
包含base64编码过的DER证书,以-----BEGIN CERTIFICATE-----
开头,以-----ENDCERTIFICATE-----
结尾Binrary(DER) key
包含DER ASN.1编码之后的密钥的原始格式ASCII(PEM) key
包括base64编码后的DER密钥和一些元数据信息PKCS#7 certificate
用于签名和加密数据的传输,一般以.p7b .p7c结尾PKCS#12 key and certificate
一种用来保存服务器私钥和整个证书链的复杂格式 一般以.p12和.pfx结尾
常用命令1
2
3
4
5
6
7
8#PEM 转 DER
openssl x509 -inform PEM -in fd.pem -outform DER -out fd.der
#DER 转 PEM
openssl x509 -inform DER -in fd.der -outform PEM -out fs.pem
# PKCS#12 <-----> pem
openssl pkcs12 -export -name "My certificate" -out fd.p12 -inkey fd.key -in fd.crt