1、引言
2、密码学基础
2.1 密码学基础概念
一个密码系统可以使用一个六元组$CS=(P,C,E,D,K_e,Kd)$
- P表示明文集合:$P=D_k[C]$
- C表示密文集合:$C=E_k[P]$
- E表示加密算法
- D表示解密算法
- $K_e$表示加密密钥
- $K_d$表示解密密钥
- 攻击者可以观察密文C而不能接触到密钥K或者明文M,通过密码分析来恢复K或者M
2.2 密码体制
以加密密钥和解密密钥是否相同
对称加密
- 加密效率高
- 存在密钥分配问题
非对称加密(公钥加密体制):加密密钥和解密密钥不同
- 使用不同但是相关的一组密钥
- 公钥对外公开,私钥对外保密,在理论上公钥推出私钥<u>计算上</u>不可行
- 计算开销大,不适合大量数据加密
以密文数据段是否与明文数据段在整个明文中的位置有关
分组加密
- 加密过程仅仅与加密算法和密钥有关,与加密明文在分组中的位置无关
- 相同的明文分组在相同的密钥作用下产生相同的密文分组
序列加密(流密码)
- 加密结果不仅与加密算法和密钥有关,还和加密的明文部分在整个明文中的位置有关
加密过程是否可以解密
- 单向函数密码体制:hash
- 双向函数密码体制
2.3 密码分析
密码基本原则:加密安全性必须依靠密钥安全性
- 无条件安全(做不到)
有条件安全:计算安全性,实际安全性
- 计算安全性:破解一个密码系统可行,但是在如今的计算资源下不可行
实际安全性
- 破解密码的成本超过加密信息本身
- 破解密码时间超过加密信息的生命周期
对于有如下的信息:
- 加密算法
- 密文
- 一个或者多个(明文,密文)对
- 攻击者选择的明文和其对应的密文(使用相同的密钥加密)
- 攻击者选择的密文和其对应的明文(使用相同的密钥加密)
攻击类型 | 攻击者掌握信息 |
---|---|
唯密文攻击 | 1+2 |
已知明文攻击 | 1+2+3 |
选择明文攻击 | 1+2+4 |
选择密文攻击 | 1+2+5 |
选择文本攻击 | all |
从上到下的攻击越来越容易
- 唯密文攻击(Cipher only attack):穷举
已知明文攻击(Known Plaintext Attack):可以通过固定的格式得到对应的信息
- 电子邮件、PostScript的文件固定首部
- 选择明文攻击(Chosen Plaintext Attack):差分攻击
- 选择密文攻击(Chosen Ciphertext Attack)
- 选择文本攻击
一般情况下,加密算法需要能够抵御已知明文攻击
3、古典密码
4、对称密码
4.1 概述
- 源端使用加密算法和密钥加密产生密文
- 目的端使用解密算法和密钥解密得到明文
- 其中加密密钥和解密密钥相同,通过安全信道进行分发
4.2 分组密码原理和操作模式
4.2.1 基本原理
- 当前基本所有的重要对称加密算法都是基于Feistel分组密码结构
- 一般而言,对称密码体制的安全性取决于加密算法和密钥,一个好的加密算法可以抵抗已知明文攻击
扰乱和扩散
- 扰乱:让密文的统计特征和明文和加密密钥的关系尽量复杂
- 扩散:让明文和密钥的字母影响尽量多的密文字母,从而时明文和密钥的统计特征被扩散
- Feistel分组密码结构
加密过程
- 利用密钥K生成n个子密钥
- 密文分组被分为左右等长的两部分$(LE_0,RE_0)$,分组的两部分分别进行处理后,左右部分在进行交换,组合产生新的密文分组C
解密过程
- 前面步骤和加密相同
- 但是在n轮循环中使用的子密钥顺序和加密相反
相关参数
- 分组长度:越长安全性越高,加密越慢
- 密钥长度:越长安全性越高,加密越慢
- 循环次数:次数越多安全性越强
- 子密钥生成算法:算法越复杂,安全性越强
- 轮函数:越复杂,其扰乱和混淆功能越强
4.2.2 分组模式
a. 电子密码本(ECB)
步骤
- 将明文P划分为长度为w的明文分组$P_1,P_2,...,P_n$,若有必要进行填充
- 使用相同的密钥对每个明文分组进行加密
特点
- 相同的明文得到相同的密文
- 可以采用并行加密处理
缺点
- 容易受到主动攻击,攻击者可以通过修改密文的分组顺序对结果进行攻击
b. 密文分组链接(CBC)
加密方式
- 不直接对明文分组进行加密,而是对当前明文分组与前一密文分组的异或结果进行加密
- 在对第一个明文分组进行处理时,由于没有密文分组可以使用,因此引入一个初始向量IV与第一个明文分组进行异或,且IV向量和密钥一样受到保护
CBC的错误传递问题
- 当密文分组长度发生变化,后面的分组会造成错位,错位会延续
攻击方式
- 可以修改IV中的某些比特位,这样或造成解密时明文分组1的某些bit位反转
c 密文反馈模式(CFB)
加密方法
- 前一个密码分组会被送到密码算法的输入端,加密后和明文分组进行异或
- 该模式能将任意分组密码转换为流密码,本质时利用分组加密模块产生密钥流
- 注意解密时使用的是加密函数
不足
- 与明文异或的比特流和密文相关
- 若传输中密文出错,则会造成解密错误
- 一个密文单元出错,会造成连续多个解密明文错误
攻击方式
- 重放攻击
c.输出反馈模式(OFB)
加密方式
- 和CFB结构相似但是不同于CFB将密文单元反馈回去,OFB将加密函数反馈
优点
- bit差错不会传播
缺点
- 比CFB容易受到篡改攻击
d. 计数器CTR
4.3 数据加密标准DES
4.3.1 DES的加密和解密
基本参数
- 明文长度:64bit
- 密钥长度:56bit
- 循环轮次:16次
基本描述
- 上述的 左边为加密过程,右边为密钥生成过程
a.加密步骤
- 初始置换IP,按照IP表将输入明文分组的64bit进行重新排列,产生64bit为输出。然后将其左右分为各32位
- Feistel密码结构,循环16次,每次循环使用48bit子密钥,经过16次循环输出左右两部分进行交换,合并为64bit
- IP逆置换,将64bit进行重新排列,得到输出的密文
b. 子密钥生成过程
- 64bit输入首先通过置换选择PC-1,选择其中56bit进行重新排列
- 每一个循环都通过一个循环左移和一个置换操作组合产生一个子密钥K
4.3.2 Simple DES(考试)
- 8bit明文,10bit密钥,输出8bit密文
4.3.3 双重DES
DES安全性分析:
- Sbox实现小块的非线性变换,达到混乱目的
- 置换P实现大块的非线性变换,达到扩散的目的
安全问题:
- 密钥太短,迭代次数太少,Sbox可能不够安全
双重DES:
- 利用两个不同的密钥对明文进行两次连续加密
缺陷:
容易受到中途攻击
- 即中间结果为$X=E_{k_1}[P]=D_{K_2}[C]$
- 所以将密文加密和X比对就可以缩短密钥空间
4.3.4 三重DES
双密钥三重DES
- DES-EEE2:使用两个密钥轮流进行加密
- DES-EDE2:使用两个密钥,进行$K_1加密-K_2解密-K_1加密$的操作
三密钥三重DES
- DES-EEE3
- DES-EDE3
4.4 高级加密标准AES
4.4.1 概述
- AES分组长度为128bit,密钥长度可变,可以为128,192,256位,分别叫AES-128,AES-192,AES-256
- AES不采用Feistel分组密码结构
4.4.2 算法结构
4.4.3 轮函数
4.4.4 密钥扩展
5、非对称密码
5.1 概述
对称密码体制问题
- 密钥交换:将密钥安全的传递
- 数字签名:确保来自特定的主体
5.2 非对称密码体制的基本原理
特点:
- 使用相关的一组密钥,分别作为公钥和私钥
- 仅仅在知道算法和公钥的情况下求出私钥在计算上不可行
- 两个中任意一个都可以用来加密,但是功能不同
机密性服务
$加密:C=E_{KU}[M]\\解密:M=D_{KR}[C]$
- 使用公钥进行加密,当用户拿到加密后的信息,使用自己的私钥解密
- 公钥需要提前公布
数字签名:
$加密:C=E_{KR}[M]\\解密:M=D_{KU}[C]$
- 用户A要保证自己的信息确实是自己发送的,则利用自己的私钥加密,其他用户拿到后用公钥解密,最后可以解读就是说明信息是A发送的
双重加密:A向B发信息,保证A信息的机密性和确实是A发送
- 加密:$C=E_{KU_B}[E_{KR_A}[M]]$
- 解密:$M=D_{KR_B}[D_{KU_A}[C]]$
5.3 RSA
5.3.1 算法描述
算法过程:
计算公共参数
- 选择两个足够大的素数p,q且满足$p\ne q$
- 计算$n=p * q$
- 计算欧拉函数$\phi(n)=(p-1)(q-1)$
计算公钥私钥
- 选择整数e,使得$gcd(\phi(n),e)=1,1<e<\phi(n)$,即他们互素
- 计算d,使得$ed=1mod\phi(n)$,即d是e在模$\phi(n)$下的逆元
- 公钥为KU={e,n}
- 私钥为KR={d,n}
- 加密:$C=M^emodn$
- 解密:$M=C^dmod n$
5.3.2 算法中的计算问题
加密和解密中的模幂运算:
在实际的RSA中,e和d的值可能很大,结果会超过计算机可以计算的范围,因此需要使用算法进行对应的优化
- 原理:$(a*b)modn=[(amodn)(bmodn)]modn$
例如$x^{19}mod n$
可以写成$19=1*2^4+1*2^1+1*2^0\\x^{19}mod n=((x^{2^4}mod n)(x^{2^1}mod n)(x^{2^0}mod n))modn$
可以有如下程序
c=0,d=1; //d为中间结果,C实际可以作为验证,最后的c为b
for i=k downto 0 do{ //这里k为二进制的最高位的数权
c=2*c; //移动
d=(d*d)modn; //到达下一位,其数权变大,所以其模也变为之前的乘方
if bi=1 then{ //第i位的数为1
c=c+1;d=(d*a)modn; //底数
}
}
中国剩余问题优化:
解密密钥为{d,n},其中d很小就会被穷举攻击,采用同余方程组可以加数整个解密过程
RSA密钥产生:
- 由于大素数很难找,,所以实际如今的算法是一个概率算法
5.3.3 安全性分析
数学难题:大整数难分解问题
针对RSA的攻击:
- 强行攻击
- 计时攻击
- 数学攻击
参数考虑:
- p和q间应该差几位,在1024位密钥中,p,q的值应该均在$10^{75}-10^{100}间$
- (p-1)和(q-1)均应有一个大的素因子
- gcd(p-1,q-1)较小
- 当$e<n,d<n^{\frac{1}{4}}$时,d很容易被确定
5.4 Diffie-Hellman密钥交换
5.4.1 算法描述
A与B之间希望交换一个秘密密钥,则
算法拥有两个全局公开的参数:
- 一个大素数q
- q的一个原根$\alpha$:可以理解为一个底数
A产生的密钥
- 随机产生私钥$X_A,X_A<q$
- 计算并公开$Y_A,Y_A=\alpha^{X_A}modq$
- B产生的密钥:过程同上面的A
- 用户A产生秘密密钥:$K=Y_B^{X_A}modq$
- 用户B产生秘密密钥:$K=Y_A^{X_B}modq$
从此,A和B拥有了秘密密钥K
可以理解为:
A,B的
- 公钥:{$Y_A,\alpha,q$}
- 私钥:{$X_A$}
- 共享密钥:$K=Y_B^{X_A}modq=Y_A^{X_B}modq$
5.4.2 安全性分析
基于数学难题:离散对数难分解
- 已知一个大素数q和它的一个原根$\alpha$后,给定i计算$b=\alpha^imodp$容易,但是给定b,确定i在计算上是不可行的。
安全攻击:
- 中间人攻击
5.5 ElGamal密码体制
5.5.1 算法描述
过程同Diffie-Hellman,对于A有:
- 公钥:{$Y_A,\alpha,q$}
- 私钥:{$X_A$}
对于用户B
- 对于任意明文M,$0\le M\le q-1,选择一个k$
- 计算$K=Y_A^{k}mod q$
- 加密生成密文$(C_1,C_2),其中C_1=\alpha^kmodq,C_2=KMmodq$
对于用户A对其进行解密:
- 计算密钥$K=C1^{X_A}modq$
- 计算明文$M=(C_2K^{-1})modq$
6、数据完整性算法
6.1 安全散列函数
6.1.1 安全散列函数应用
- 差错检测
基本功能
消息认证:验证消息的完整性
- 使用对称加密对附加散列值的报文进行加密
- 使用对称加密仅对散列值进行加密
- 使用散列值、公共秘密值的明文方案
- 使用散列值、公共秘密值的密文方案:比上面多一个加密步骤
数字签名:防止源点或者终点抵赖
- 使用公钥加密体制及源端私钥仅对散列值进行加密
- 使用对称加密体制对报文和已使用私钥加密的散列值进行加密
6.1.2 散列函数安全性要求
散列函数的性质:
- 可以处理任意大小的数据分组
- 产生定长的输出
- 给定一个x,对于计算H(x)较为容易
- 具有单向性
- 抗弱碰撞:给定任意x,寻找$y\ne x使得H(y)=H(x)$在计算上是不可行的
- 抗强碰撞:寻找任意$(x,y)对,使得H(y)=H(x)在计算上是不可行的$
攻击方式:
- 生日攻击:在k个人中,至少有两个人的生日相同的概率大于0.5的最小k值为23
6.1.3 散列函数结构
基本结构:
- 迭代型
基本算法描述:
$$ CV_0=IV\\ CV_i=f(CV_{i-1},Y_{i-1})\\ H(M)=CV_L $$
其中f为压缩函数,需要保证找出其碰撞在计算上是不可行的
6.1.4 MD5报文摘要算法
a.MD5算法描述
基本步骤:
对报文进行填充
- 使报文的长度于448模512同余,及填充至512整数倍减去64(用于附加长度)
- 报文必须填充,填充的比特串最高位为1,其余位为0
附加报文长度
- 将留出的64bit以小端对齐(最低有效位存储于低地址位)方式来初始化报文长度
- 此时的报文长度为512的倍数,则可以以512分组,每个分组可以表示为16个32位字报文可以表示为$M[0,1,2,...,N-1],其中N=16*L,L为分组数目$
初始化MD缓存
- 算法使用一个128bit的缓存来存放中间结果和最终散列值
- 该缓存可以表示为4个32位字(ABCD),每个寄存器按照小端对齐方式存储数据
- 每个寄存器有其初始值(可查)
处理512bit报文分组序列
- 使用函数$H_{md5}$对于每个分组进行处理
- 该压缩函数有4个循环,每个循环使用常数表T[1,2,...,64]的四分之一
- 输出报文摘要
b.MD5压缩函数
- md5压缩函数有4个循环步骤,每次循环又对ABCD进行了16次迭代压缩
- 其中g为逻辑函数FGHI中的一个
- $CLS_s$为循环左移s位,位移位数可以参考表格
在4次循环处理过程中,每次以不同的次序使用16个字X[k](一个分组)
- 第一次使用初始次序
- 第二次循环和第四次循环分别对字次序k进行置换
- 参数表T[i]中的每个数只被使用一次
6.2 报文认证码
作用:用于验证报文完整性的一种安全机制和服务
6.2.1 报文认证与报文认证码
报文认证:
网络攻击的形式
- 泄露:保密性
- 通信量分析:保密性
- 伪装:报文认证
- 内容篡改:报文认证
- 序号篡改:报文认证
计时篡改:报文延迟或者重放
- 报文认证
- 抵赖:数字签名
报文认证码:
$$ MAC=C_K(M) $$
其中M是变长的报文,K是共享密钥
- MAC和加密算法类似,但是MAC函数不需要保证可逆
安全性要求
- 抗弱碰撞
- 均匀分布
6.2.2 报文认证函数
两个基本层次:
- 低层的认证函数
- 高层的认证协议
认证函数分类:
报文加密
- 对称加密:机密性和认证
- 非对称加密:机密性
- 非对称加密:认证和数字签名
- 非对称加密:机密性,认证和数字签名
- 报文验证码
- 散列函数
6.2.3 基于散列函数的报文认证码HMAC
设计目标:
- 无需修改的使用现有的散列函数
- 出现新的散列函数时,可以很快的迭代
- 保持原有散列函数的性能
- 使用和处理密钥简单
- 基于对嵌入散列函数合理的假设,对鉴别机制的强度有一个易懂的密码编码分析
算法描述:
其中:
- $K^+$是将密钥左边填充0后的结果
- ipad为00110110重复b/8次
- opad为将01011010重复b/8次
- H为散列函数
对应的公式为
$$ HMAC_K(M)=H[(K^+\oplus opad)||H[(K^+\oplus ipad)||M]] $$
6.3 数字签名
- 直接数字签名
- 需仲裁的数字签名:使用第三方机构
7、密钥分配和用户认证
7.1 密钥分配
7.1.1 基于对称加密的密钥分发
例如A和B进行通信时,分发的方式:
- 用户A选择对应的密钥,并通过物理方式传送给B
利用可信第三方选择密钥,通过物理方式传送给A和B
- 上述的过程n个用户间互相通信,则整个网络需要维护$\frac{(n-1)n}{2}$
- n很大时过程不可行
- A和B预先共享一密钥,其中一方选择新的密钥通过旧的密钥分发给对方
A和B与可信第三方各自拥有自己的保密信道,第三方C选择密钥通过密码信道分发给A和B
- 该方式最为常见,其中C为密钥分配机构(KDC)
- 每个用户必须和KDC间有一个唯一密钥,为主密钥
- KDC通过主密钥把会话密钥分发给A和B,会话结束密钥销毁
- 会话密钥需要$\frac{(n-1)n}{2}$,但是主密钥只需要n个
7.1.2 基于非对称加密的密钥分发
简单的秘密密钥分配
- 基本过程
- 用户A产生一个公钥私钥对$\{KU_a,KR_a\}$并发送给B,,其中包含A的公钥和标识号$ID_A$
- 用户B将密钥$K_s$通过A的公钥进行加密,然后发给A
- A使用私钥机密的到对应的$K_s$
- 用户A和B分别弃用对应的公钥和私钥,之后只用$K_s$进行通信
- 存在问题:主动攻击
- 攻击者C截获A发送的报文,然后发送自己的公钥私钥和A的标识符对给B
- B使用C的公钥加密后发送给C以后,C解密得到对应的$K_s$
- C使用A的公钥加密后将数据发送给A
- 之后C获得对应的$K_s$于是可以进行对应的解密
- 具有机密性和认证功能的秘密密钥分配
- A利用B的公钥加密N1和IDA发送给B,其中N1表示现在的状态
- B解密后拿到N1+N2然后使用A的公钥加密发送以后给A
- A解密后加密N2发送给B,完成整个认证
- A使用自己的私钥加密(确保是A发送而不是C伪造)再使用B的公钥加密后发送给B
7.1.3 公钥分发
该方法采用公钥直接公开的方式,可以有如下的方案
公钥公开发布
- 将公钥直接发送给会话参与者或者广播发送
- 任何人都可以伪造公示,无法判断是否是A发送的公钥
公钥公开到可访问的目录
- 将公钥发送到受信任的系统或者组织
- 攻击者可能入侵机构,获得所有的公钥或者篡改对应的记录
- 公钥管理机构:该方案对上述目录进行呢改进
- 用户A发送一个请求和一个带有时间戳的报文给公钥管理机构,其中请求表示希望和B通信
- 机构返回一个B的公钥+时间戳并且使用自己的私钥加密来确保身份
- B进行相同的过程得到A的公钥
- 采用非对称密钥分发带认证的方式进行后续通信
- 缺点:公钥管理机构流量过大,并且依然有被入侵的风险
公钥证书
- 在该过程中,不需要公钥管理机构,用户通过证书权威机构(CA)制作对应的证书,其中包含用户的公钥和其他信息,然后用户将证书分发给会话参与者,其他用户验证证书是否为CA制作。
要求:
- 任何用户可以阅读证书的公钥和信息
- 任何用户可以验证证书是否为CA颁发
- 证书只能由CA颁发
- 任何用户可以验证证书的时效性
- 步骤
7.2 用户认证原理
7.2.1 双向认证
通信双方互相认证彼此身份并交换会话密钥,其关注的核心是机密性和时效性
机密性保证
- 使用密文进行传输
时效性保证:防止重放攻击
- 时间戳:得到精确的时间较为困难
- 询问应答:A向B发送一个包含随机数的报文进行询问,B返回应答报文中包含上次A发送给B的随机数
7.2.2 单向认证
- 双方不需要认证对方的身份,仅仅需要对一方进行认证,例如:电子邮件
7.3 Kerberos
- 基于可信第三方的认证系统
- 解决问题:假定在一个分布式系统中,工作站中的用户希望系统只向认证授权的用户进行提供服务
需求
- 安全性:网络窃听者无法伪造成另外的用户
- 可靠性:服务可靠
- 透明性:用户不会察觉到改系统的存在
- 可拓展性
特点
建立在可信第三方认证协议基础上
- 存在密钥分配中心KDC,为Kerberos服务器
- KDC由AS(认证服务器)和TGS(票据许可服务器)组成
- 基于对称密码体制认证
跨域认证
- Kerberos将网络划分为多个域,每个域都有自己的认证服务器并且实施自己的安全策略
- 提供不同域之间的认证,一个域中的用户可以访问另外一个域的服务器
7.4 X.509证书和公钥基础设施
7.4.1 X.509证书
- 依赖于可信第三方来实现认证(CA)
- 采用非对称密码
- 证书核心包含公钥,公钥持有者,和CA签名
证书特点
- 任何CA公钥的用户都可对该CA发布的证书进行验证,保证了公钥的可信
- 除CA外,任何一方不可能不被察觉的修改证书
证书的构成部分:
- 信息部分(I)
- 数字签名部分(S):$S=E_{KR_{CA}}[H(I_A)]$,该部分了为信息部分的散列值再通过CA的私钥进行加密的结果,这里的A表示CA对于证书持有者A的数字信息$I_A$
例如CA对于A发布的证书可以表示为如下的形式
$CA<<A>>=CA\{I_A\}=I_A||S=I_A||E_{KR_{CA}}[H(I_A)]$
对于一个用户A,知道CA的公钥便可以验证该证书是否有效
- X.509的一般格式
第一版
- 版本
- 证书序列号:CA给出的唯一标识
- 签名算法标识符:标记对应的算法,例如RSA,DSA,MD5,SHA-1
- 颁发者名称
- 有效期
- 主体名称:持有者名称
- 主体公钥信息
第二版
- 颁发者唯一标识符
- 主体唯一标识符
第三版
- 证书拓展
共有信息
- 签名:RSA,DSA,MD2,MD5,SHA-1
证书获取
一个用户可以有两种方式获得另外一个用户的证书
- 从公开目录中获取
- 用户直接传递其证书
单一CA的问题及解决方式
- 大型网络系统中,单一CA无法完成对应的证书管理工作
- 解决方法:采用多CA,每个CA管理一部分的用户证书,不同CA管理的用户可以互相验证
证书链
- 多CA需要解决的问题:不同CA间的用户互相验证的问题
- 解决方式:A从$CA_1$处得到证书,B从$CA_2$处得到证书,要让A可以验证B的证书,可以让$CA_1$为$CA_2$签发一个证书,从而A可以得到$CA_2$的公钥
具体步骤如下:
- A从目录中得到为$CA_2$签名的证书,由于A有$CA_1$的公钥,解密得到对应的$CA_2$的公钥
- A从目录中得到$CA_2$对于B签名的证书,由于A在上面得到了对应$CA_2$的证书,经过解密得到B的公钥
对应的证书链如下:$CA_1<<CA_2>>CA_2<<B>>$
- 对于CA的保存:采用层次结构
对于一个结点例如X为例,包含两个证书
- 前向证书:其他CA颁发给X的证书
- 后向证书:X发给其他CA的证书
证书的撤销
- 每个CA保存一个CRL(certificate Revocation List)证书撤销列表,用于保存已经撤销但是没有过期的证书
- 当对一个数字证书验证时,验证者不仅仅需要检查证书的签名以及有效期,还需要检查该证书是否在CRL
7.4.2 公钥基础设施(PKI)
- 一种运用公钥的概念和技术来实施并提供安全服务具有普遍使用行的网络安全基础设施
8、传输层安全协议
8.1 SSL/TLS
- SSL协议是基于对称加密和公钥加密算法的加密传输信道协议,位于应用层和传输层之间。
- 采用RSA、DES等加密技术来是实现数据的保密性,采用MD5算法来实现完整性
8.1.1 SSL记录层协议
- SSL记录层协议是一种简单的封装协议,它定义了数据传输格式。主要完成分组和组合,压缩和解压缩,以及消息认证和加密功能
为SSL提供了两种服务:保密性和消息完整性。
- 保密性有协议商议出的会话密钥来实现,用于加密SSL负载数据
- 消息完整性主要有计算数据的MAC来实现
- SSL记录层的操作:
- 分片:将上层送来的报文分为$2^{14}$字节或者更小
- 压缩:为可选,压缩要保证信息不丢失且增加的长度不超过1024字节
- 增加MAC:在压缩的数据上计算报文鉴别码
- 加密:使用厂规的加密方式加密(报文+MAC),加密长度增加不超过1024字节
添加首部:
- 内容类型(8bit):表示上一层协议
- 压缩长度(16bit):加密后的数据长度
- SSL版本(8+8主版本+从版本)
8.1.2 SSL握手协议
8.1.3 SSL密码规范更换协议
8.1.4 SSL报警协议
8.2 WTLS
8.3 HTTPS
8.4 OpenSSL
9、网络层安全协议
9.1 IPSec
9.1.1 IPSec体系结构
认证头AH
- 定义了数据源认证和完整性校验
封装安全载荷ESP
- 为IP数据报文能提供数据源校验,完整性校验,抗重放和数据加密
Internet密钥交换IKE
- 为AH和ESP提供密钥交换机制
安全关联SA
- 提供了安全协议、模式、算法和应用与单向IP流的密钥
- 处理方法:丢弃、绕过、IPSec保护
9.1.2 AH协议
AH报头格式
- 下一个首部:表示AH首部后面一个有效载荷
- 安全参数索引(SPI):0表示没有安全关联,1-255表示保留给IANA
- 序列号:唯一标识报文分组,用于反重放
- 鉴别数据:包含完整性校验值ICV
数据分组完整性检查
- 可由发送方根据报文校验码MAC生成
- 可实现HMAC-MD5-96和HMAC-SHA-1-96
- ICV用的数据包括:传输中不改变或者可以预测的IP首部字段,AH首部和高层协议数据
- 接收端收到数据后,首先进行散列计算,然后和发送端的该字段比对,若相等,则表示完整,如果不相等,则丢弃分组
AH传输模式和隧道模式
传输模式
- 用于为上层协议提供保护,例如TCP,UDP,ICMP
- 用于两个主机间的端到端通信
隧道模式
- 对整个IP数据包提供保护,原IP数据报+AH首部+新的IP首部构成新的IP数据报
- 在传输过程中,路由器不能检查内部的IP首部
- 利用边界的防火墙或者边界路由器实现隧道模式建立,内部网络的主机可以在不实现IPSec的情况下参与安全通信
9.1.3 ESP协议
ESP报头格式:
- 安全参数索引(SPI):标志安全关联
- 序列号:防止重放
- 有效载荷数据:包含下一个首部所描述的数据
填充
- 加密算法要求明文是某个数目的整数倍
- 字节对齐
- 隐藏有效载荷的真实长度
- 鉴别数据:ICV
认证和加密算法
认证算法:由SA指定
- DES
- MD5、SHA-1
加密算法
- 服务可选,由SA指定
ESP传输模式和隧道模式
- 传输模式:对IP数据报中的数据部分进行加密和鉴别
- 隧道模式:保护整个IP首部在内的IP数据报
ESP和AH比较
AH | ESP | |
---|---|---|
认证服务 | 专门提供该服务 | 可选,范围比AH窄,ESP头前的IP报文不会被保护 |
保密服务 | 不提供该服务 | 提供该服务 |
防止重放 | 有 | 有 |
9.1.4 安全关联SA
三个参数标识
- 安全标识索引SPI
- 目标IP
- 安全协议标识符SPID
安全策略数据库SPD
- 定义了对IP数据报进行如何形式的提供服务
处理方法
- 旁路
- 丢弃
IPSec安全处理
- IPSec协议
- 模式
- 使用算法
安全关联数据库SAD
- 每一项定义与某个安全关联相关的参数
字段
- 序号计数器
- 序号计数器溢出
- 抗重放窗口
- AH信息
- ESP加密信息
- ESP鉴别信息
- SA生存期
- IPSec模式
- 路径MTU
安全关联组合
为跨越Internet/Intranet的两台主机提供端到端安全
- IP1+AH+高层传输单元:传输模式
- IP1+ESP+高层传输单元:传输模式
- IP1+AH+ESP+高层传输单元:传输模式
- IP2+AH+IP1+高层传输单元:隧道模式
- IP2+ESP+IP1+高层传输单元:隧道模式
简单的虚拟专用网络
- IP2+AH+IP1+高层传输单元:隧道模式
- IP2+ESP+IP1+高层传输单元:隧道模式
1+2的结合
- 在2的情况下加入发送和接收主机端到端的安全
- 远程主机通过隧道进入内部网络
9.1.5 IKEv2协议
9.2 基于IPSec的VPN
9.2.1 VPN简介
虚拟专用网络
- 通过接收方和发送方在公网上建立一个虚拟的安全隧道来传输加密的信息以此来保证安全
分类
- 基于多协议标签交换的MPLS VPN
- 基于安全隧道技术的IPSec VPN
- 基于安全套接字协议的SSL VPN
9.2.2 IPSec VPN通信
通过IPSec协议来建立安全的 数据隧道的VPN解决方案
发送数据包过程:
- 源主机向路由器发送一个数据包
- 针对数据包查询策略,加上AH或ESP头
- 进行IKE处理,对没有SA安全策略的建立新的SA
- 进行SA处理,增加序列号字段
- IP包封装处理,加上一个额外的IP头
- 发送
接收数据包过程:
- 剥去额外的IP头,利用数据包AH或ESP头调用IPSec层
- 摘出SPI,从IP头中选出源和目的地址及协议
- 用以上参数从SAD中取出所需的SA,如果没有找到就丢弃
- SAD返回SA,IPSec根据对应规则对包处理
- 验证这个给包的安全策略
- 验证正确,解密这个包,转发到真正的主机
9.2.3 优越性
- 在IP层实现了加密认证和访问控制技术
- 可透明的搭建Intranet和Extranet
- 能为任何形式的Internet通信提供安全保护协议