密码学复习
1. 概述
1.1 密码技术在信息安全保障体系中的地位与作用
1.1.1 信息安全的基本定义
保密性
完整性
可用性
可控性
抗抵赖性
1.1.2地位与作用
提供保密性
用于认证
提供完整性
抗抵赖
1.2 密码技术的发展
1.2.1 古典密码
1.2.2 近代机械密码
通过机械装置对明文字母用其他字母进行自动多轮代换
一战二战
1.2.3 电子密码
标志: 电子技术代替手工操作和机械操作
1.2.4现代密码
标志:加解密密钥不同,公钥体制
2. 几种典型的古代密码体制
核心–替换和代换
2.1移位密码
加解密都是循环移位运算
密钥空间为25
2.2代换密码
明文空间: 26字母
密文空间:26字母
密钥空间: 所有可能置换的集合
大小:26!
2.3仿射密码
Ekey(x)=(k1x+k2)mod26
Dkey(x)=k1^-1(y-k2)mod 26
2.4维吉尼亚密码
明文空间,密文空间,密钥空间都是长度为m的英文字母串的集合
密钥空间:26^m
2.5置换密码
明文分组,每组进行给定元素位置互换
不是整数倍时,在最后一段添加字符进行填充
密钥空间:m!
2.6转轮机密码
不谈
3古典密码体制分析
3.1 密码体制的分析概述
3.1.1 密码学分类
密码编码学
密码分析学
3.1.2科克霍夫安全准则
密码体制的安全性依赖于对密钥的保密,不依赖于对算法的保密
3.1.3 评价密码系统安全性的三种方法
-
无条件安全性 ,假定分析者有无限的计算资源,仍然无法破译----一次一密
-
计算安全性(又称为实际安全性)
破译所需时间非常长/计算时间超过被加密信息的生命周期
或
破译费用超过加密信息本身的价值/破译的实际费用非常巨大 -
可证明安全性
将密码系统的安全性归结于某个数学难题
问题–无法证明问题本身的安全性
3.1.4常见的攻击形式
难度依次降低
- 穷举攻击法
- 唯密文攻击–只知道密码算法和密文
- 已知明文攻击–已知某些明文-密文对
- 选择明文攻击–分析者可选择特定的明文并得到对应的密文
- 选择密文–分析者可以选择一些密文得到相应的明文
3.2 代换密码的唯密文攻击
3.2.1 分析思路
单表代换–频率分布相同
多表代换–有规律可循
3.2.2 明文字母的频率分布
3.2.2.1 单表
密文量够大可以直接得到准确的频率分布表格,参考明文频率分布,可以得到密文字母对应的明文字母
密文量不够大,缩小猜测范围
3.2.2.2多表
利用频率特性求得加密周期,然后转换成单表代换分析
3.2.3 仿射密码体制的唯密文攻击
就是上面的单表代换分析
仿射密码解密:
D
k
(
y
)
=
k
1
−
1
(
y
−
k
2
)
m
o
d
26
Dk(y)=k1^-1 (y-k2) mod 26
Dk(y)=k1−1(y−k2)mod26
验证:
k1与26互质
3.3 Hill密码的已知明文分析
3.3.1Hill密码
明文P与密文C都是n维向量
密钥k为**Z26** 上的可逆矩阵
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lFdYQFnr-1636466036817)(C:\Users\www13\AppData\Roaming\Typora\typora-user-images\image-20211109113658069.png)]
4. 分组密码
4.1、分组密码的几个概念
4.1.1对称体制–加解密k相同
4.1.2分组概念
加密过程将明文消息的编码划分成多个长度为n的组,每个组在同一密钥的控制下变幻成密文数字序列
4.1.3对称体制的分类
分组密码
流密码–每次加密一位/一字节的明文
4.1.4数学模型
明文长度m<n: 有数据拓展的分组密码
m>n:数据压缩
m==n:无拓展也无压缩的分组密码
4.2、数据加密标准DES
4.2.1总体结构
分组长度为64位
循环次数为16
密钥长度为64位(8位奇偶校验)
4.2.2 总体描述
-
初始置换IP
1.1 将64位明文分成两部分(通过初始置换表)
1.2 密钥置换–用密钥置换表对密钥进行置换
1.3 子密钥生成–对56位密钥分成28+28,根据加密轮数,两部分密钥分别循环左移1位或2位
压缩置换–从56位密钥中选出48位作为当前加密的轮密钥(查表) -
16轮加密
L i = R i − 1 Li=Ri-1 Li=Ri−1
扩展变换–将64位输入序列的右半部分Ri从32位扩展到48位,重复了某些位,改变了输入序列 的次序
S盒替代–48位轮密钥与扩展后的分组序列进行异或运算,得到48位结果序列,之后用S盒替代
S盒: 6位输入,4位输出,8个S盒各不相同,前2位确定行,后4位确定列非线性
P盒置换–S盒代替后32位输出按照P-盒进行置换(置换表)
R i = L i − 1 ⊕ f ( R i − 1 , K i ) Ri=Li-1\oplus f(Ri-1,Ki) Ri=Li−1⊕f(Ri−1,Ki) -
末尾置换IP-1
4.2.3解密
只要将密文作为输入再进行一次加密即可
轮密钥与加密过程使用的次序相反(即进行的是循环右移)
4.3、DES分析
4.3.1雪崩效应
明文/密钥的一点改变使密文发生大的变化
4.3.2DES的穷举分析
弱密钥:
对于初始密钥,产生的子密钥都一样
00000000 0000000
00000000 FFFFFFFF
FFFFFFFFF 0000000
FFFFFFFFF FFFFFFFF
半弱密钥***
在产生密钥时,可以人为进行检查,过滤弱密钥
互补对称性
穷举攻击时只需尝试密钥空间的一半
4.4、分组密码的设计原则
4.4.1 针对安全性的设计准则
混淆原则
所设计的密码应使密钥、明文和密文之间的依赖关系相当复杂,掩盖明文和密文之间的关系,以至于这种依赖性对密码分析者来说无法利用
强调密钥的作用
增加密钥与密文之间关系的复杂性
扩散原则
所设计的密码应使得密钥的每一位影响密文的许多位以防止对密钥进行逐段破译,而且明文的每一位也应影响密文的许多位以便隐藏明文的统计特性
小扰动的影响波及到全局,明文或密钥中的一位影响到密文的多位
密文没有统计特性
密码体制必须能抵抗现有的所有攻击方法
4.4.2 针对实现的设计准则
软件实现的原则
使用字块和简单的运算.
尽量避免按位置换
尽量选择容易计算的方式(基本指令)
硬件实现的原则
加解密具有相似的特点
尽量使用规模结构(为了能在超大规模集成电路上实现)
4.5、分组密码的设计结构
SP结构
混淆层–扩散层
Feistel结构
特点:加解密相似,安全系数高
5 分组密码AES
5.1 AES算法的数学运算
略
5.2 AES介绍
将状态矩阵State初始化为M
将轮密钥与State异或
轮密钥的产生:
N轮加密需要N+1个子密钥
每个字包含N+1个字节
好我赌它不会考这个
前Nr-1轮{
5.2.1字节替换
用S-盒进行替换操作
S-盒按如下方法构造:
(1)一个字节表示成十六进制的{xy},x,y分别为行和列输入
(2)求该字节在GF(28)中的乘法逆(模m(x)=x8+x4+x3+x+1),设乘法逆为( b7b6b5b4b3b2b1b0)
(3)然后进行如下计算,求得( b7’b6’b5’b4’b3’b2’b1’b0’) ,即为结果。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2Bah6FQv-1636466036818)(C:\Users\www13\AppData\Roaming\Typora\typora-user-images\image-20211109154529421.png)]
5.2.2行移位
对替换的结果State做行移位操作
for i in range(1,4):
第i行向左移动i-1个字节(如果是解密则为向左)
5.2.3列混合
对State做列混合运算
把每列看做一个三次多项式,在与固定多项式a(x)=3X3+1x2+x+2 进行模x^4+1的乘法运算
5.2.4异或运算
最后密钥异或
}
最后一轮{
5.2.1字节替换
用S-盒进行替换操作
5.2.2行移位
对替换的结果State做行移位操作
5.2.3列混合
对State做列混合运算
}
输出密文C
解密:
- 逆S盒
- 反向行移位
- 列混合的逆变换
5.2.4AES的特点
- 不属于Feistel结构
- 加解密相似但不对称
- 支持128数据块大小
- 支持128/192/256密钥长度
- 结构简单,速度快
- 有较好的数学理论作为基础
5.3 分组密码的工作模式
不谈
6 RSA公钥密码体制
6.1 公钥密码体制提出的背景
- 在对称密码体制中,密钥分发复杂,代价高
- 密钥量增大导致密钥管理困难
- 保密通信系统的开放性差,如果双方素不相识或没有可靠的密钥传递渠道,则无法通信
- 存在数字签名的困难性.即发送方可以抵赖发送过的消息
基本思想:
- 所有用户的公开密钥可以被其他所有用户访问
- 每一个用户的解密密钥将右用户保存并严格保密
6.2RSA算法描述
6.2.1数理基础
基于数论知识–两个大素数求乘积容易,从乘积得两个大素数困难
n的欧拉函数fai(n)–小于n且与n互素的正整数的个数.
定理1:如果m1,m2都是整数,且他们互素,则fai(m1,m2)=fai(m1)*fai(m2)
定理2:如果p为素数,则fai§=p-1
欧拉定理: 设m是正整数,且a与m互素,则a^fai(m)模m=1
6.2.2具体流程
-
密钥生成
- 选择两个随机大素数p,q,计算
n=pq , fai(n)=(p-1)(q-1) - 选择随机数e,1<e<fai(n),满足e与fai(n)互素
并计算d=e^-1modfai(n) - 公钥为(e,n),私钥为d
- 选择两个随机大素数p,q,计算
-
加密
- 对明文m<n,其对应的密文为
c=m^emodn
- 对明文m<n,其对应的密文为
-
解密
-
对密文C,其对应的明文为
m=c^dmodn
-
思考,对于给定的pq,ed对最多有fai(fai(n))个
6.2.3RSA的实现
7.ElGamal公钥密码体制
7.1基础数据
已知:{
大素数p
p的本原根a
随机的整数x(1<x<p-1)
y=a^xmodp
}
公钥:(p,a,y)
私钥:x
7.2 加密
-
随机选择一个整数k(1,p-1), 计算
c 1 = a k m o d p c1=a^kmodp c1=akmodpc 2 = m ∗ y k m o d p c2=m*y^kmodp c2=m∗ykmodp
- 密文为二元组(c1,c2)
7.3 解密
用户用私钥x对密文(c1,c2)的 解密过程如下:
m
=
c
2
/
(
c
1
x
)
−
1
m
o
d
p
m=c2/(c1^x)^-1modp
m=c2/(c1x)−1modp
7.4安全性
基于zp*上离散对数问题的困难性
随机数k使得相同的明文可又多个密文,增加了安全性–同一明文可有多达p-1个密文
8 ECC公钥密码体制
我赌他的考卷里没有概念题
8.1 椭圆曲线计算
x 3 = λ 2 − x 1 − x 2 ( m o d p ) x3=\lambda^2-x1-x2(modp) x3=λ2−x1−x2(modp)
y 3 = λ ( x 1 − x 3 ) − y 1 ( m o d p ) y3=\lambda(x1-x3)-y1(modp) y3=λ(x1−x3)−y1(modp)
λ = y 2 − y 1 x 2 − x 1 m o d p , P ≠ Q 3 x 1 2 + a 2 y 1 m o d p , P = Q \lambda=\frac{{\frac{y2-y1}{x2-x1}modp,P\neq Q}}{{\frac{3x1^2+a}{2y1}modp,P= Q}} λ=2y13x12+amodp,P=Qx2−x1y2−y1modp,P=Q
8.2 椭圆曲线密码体制
8.2.1密钥的生成
设$Ep(a,b)是有限域Zp上的一条椭圆曲线,任取g(g属于Ep(a,b)),再取正整数x<p
计算y=xg
公钥为g,y,p,私钥为x
8.2.2 加密变幻
明文m
c1=kg
c2=m+ky
密文(c1,c2)
8.2.3解密变幻
m=c2+(-xc1)
8.2.4明文信息嵌入椭圆曲线
将整数K从一个较大值取到极限(即k*(m+1)<p)
对其中的每个k计算Ax=mK+j,A=x^3+ax+b
用欧拉准则判断A是否是模p的二次剩余,若是则有解
如果找不到则映射失败.
9.散列函数与消息鉴别
9.1 概述
9.1.1散列函数的定义
将一个任意长的二进制串映射为一个定长(长为k)的二进制串
9.1.2~的性质
- 单向性
给定h(m),得到m在计算上不可行 - 弱抗碰撞性
对给定的m,寻找一个和m不同但散列值相同的m’,在计算上不可行 - 强抗碰撞性
寻找任意两个不同的m和m’,使得h(m)=h(m’)在计算上不可行
9.2散列函数的构造与设计
迭代处理固定长度的压缩函数
9.2.1迭代型散列函数的一般构造
MD方法如图
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fBk4KFQs-1636466036820)(C:\Users\www13\AppData\Roaming\Typora\typora-user-images\image-20211109183839440.png)]
三种设计方式
- 基于公开密钥密码算法的设计
- 对称分组密码算法设计
- 直接设计–MD2,4,5,SHA
9.2.2MD4算法
- 预处理–将输入分组,每个分组512位,再将分组分成32位的16个块
x = M [ 0 ] M [ 1 ] . . . M [ n − 1 ] x=M[0]M[1]_{...}M[n-1] x=M[0]M[1]...M[n−1]
按需要对最后一组(512位)进行填充
- 给定4个——。。。。。
9.2.3生日攻击
一般性:设一个在1~n之间均匀分布的整数型随机变量,若使该变量的k个取值中至少有两个取值相同的概率大于0.5,则k至少多大?
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1bkTALaW-1636466036821)(C:\Users\www13\AppData\Roaming\Typora\typora-user-images\image-20211109190013692.png)]
9.3消息鉴别
基于散列函数的消息鉴别
- 用对称密码体制加密消息及其散列值–完整性,机密性
- 对称密码体系只对散列值进行加密–完整性
- 公钥密码体制对散列值进行加密–完整性,抗抵赖
- 结合公钥密码体制和对称密码体制–完整性,抗抵赖,机密性
- 单独使用散列算法-【共享一个秘密】-完整性
- 在5的基础上,使用对称加密算法对原文和秘密加密–完整性,机密性
10 数字签名
10.1 概述
为什么对称加密方法难以实现签名?
密钥k双方共享,这种方式无法防止双方内部的攻击
根本原因:消息鉴别是基于秘密共享的
10.2数字签名的执行方式
10.2.1直接数字签名
只有通信双方参与,无第三方
几种形式
(1) S→R:ES的私钥[M]
S直接用私钥对M加密。提供真实性,抗抵赖。
(2) S→R:M||ES的私钥[H(M)]
S用私钥对M的散列值加密。提供真实性、抗抵赖、完整。
(3) S→R:ER的公钥[ES的私钥(M)]
S用私钥对明文M签名,对签名的结果再用公钥加密,有两次加解密运算。提供真实性、抗抵赖、保密性。
(4) S→R:EK[M||ES的私钥[H(M)]]
S用私钥对明文M的散列值签名,再与M一起对称加密,有两次加解密运算。提供真实性、抗抵赖、保密性、完整性
直接数字签名的不足–对签名的验证依赖于发送方的私钥,发送方可以声称私钥丢失
解决办法–被签名的消息包含一个由公证的第三方生成的时间戳
10.2.2仲裁数字签名
Ø基本工作方式
(1)从S发给R的签名消息先被送给仲裁A
(2)A检验该消息签名的出处和内容,然后对消息注明日期,并附加上一个**“仲裁证实”** 的标记发给R
(3)R验证仲裁的附加信息以及S的签名
(4)S、R双方出现争议,则一起交由A来裁决
几个方案
Ø方案一:对称加密,仲裁者可以看到消息内容
具体过程如下:
(1)S→A:M**||ES与A的对称密钥[IDs||H(M)]**
•IDs:S的身份标识。
•ES与A的对称密钥[IDs||H(M)]:对M的签名
•M:明文
(2)A→R:EA与R的对称密钥**[IDs||M||ES与A的对称密钥[IDs||H(M)]****||T]**
•A对ES与A的对称密钥**[IDs||H(M)]**解密后验证S的签名,验证完后加上IDs、时间戳T一起加密后发往R。
•R收到后解密后,结果保存以备后用。
Ø方案一的仲裁
①如果出现争议,R可声称自己收到的M的确来自S,并将EA与R的对称密钥**[IDs||M||ES与A的对称密钥[IDs||H(M)]****||T]**发给A,由A仲裁。
●
②A对EA与R的对称密钥**[IDs||M||ES与A的对称密钥[IDs||H(M)]****||T]解密,再对ES与A的对称密钥[IDs||H(M)]**进行解密,并通过H(M)和IDs来判断是不是S的签名。
10.3基于公钥密码体制的典型数字签名方案
10.3.1RSA数字签名方案
•基本算法如下:
1.系统初始化过程
①产生两个大素数p,q,计算n=pq;
②随机选取一个与φ(n)互素的整数e作为公钥,私钥d满足ed=1 mod φ(n)。
ü用户A公开公钥e,n,保密d,p和q。
2.签名产生过程
用户A对消息M∈Zn用d进行签名,计算
SA=Sig(M)=Md mod n
并将SA附在消息M后。
3.签名验证过程
假设用户B要验证用户A对消息M的签名,用户计算
M’=SAe mod n
其中e为公钥,通过判断M与M’是否相等来确认签名是否确是A所产生,如果不是,拒绝该签名消息。
10.3.2EIGamal数字签名方案
•算法描述
1.系统初始化:对系统公共参数和用户的密钥进行设置。
(1)系统公共参数
ü选择大素数p;
ü选择p的一个本原根a。
(2)用户选择密钥
ü用户选择一个随机数x,且1≤x<p-1,计算y=ax mod p。
üx作为私钥用于签名,y作为公钥用于验证。
公开p,a以及公钥y,私钥x保密。
•算法描述
2.签名过程
(1)选择与p-1互素的随机数k,k∈Zp*;
(2)签名方对消息M计算:
r= a k a^k ak mod p
s=(M-xr)k-1 mod (p-1)
其中x为私钥。
(3)用户A将(r,s)作为对消息M的数字签名,与消息M一起发送给接收方。
3.验证签名过程
接收方B在收到消息M与签名(r,s)后进行验证。
(1)计算 y r r s y^{r}r^s yrrs mod p和 a M a^M aM mod p,其中y为A的公钥。
(2)若 y r r s y^{r}r^s yrrs = a M a^M aM mod p,则确认签名有效,否则无效
10.3.3基于椭圆曲线密码的数字签名
Ø设E是定义在有限域Zp上的椭圆曲线,E上的点构成有限群,记为Ep(a,b)。在Ep(a,b)中选择一个基点G,设其阶为n。
. 参数选取
Ø用户选取大整数d(1<d<n)作为私钥,以点Q=dG作为公钥。系统的公开参数有:
ü参数p;
ü椭圆曲线E;
如p>3时,由y2≡x3+ax+b mod p,4a3+27b2≢0 mod p定义的曲线。
ü基点G及其阶n;
ü每个用户的公钥Q=dG。
签名过程
①选择随机数k,1<k<n-1;
②计算:kG=(x1,y1),取r=x1 mod n。若r=0,重新选择k,并再次计算kG和r;
③计算:s=k-1(H(M)+dr) mod n,其中d为签名方A的私钥。若s=0,回到第①步。否则用户A把(r,s)作为消息M的签名,与消息M一起发送给接收方。
\3. 签名验证
(1)验证r和s是否满足:1≤r,s≤n-1,若不是则拒绝签名
(2)计算u1=H(M)s-1 mod n和u2=rs-1 mod n
(3)利用公钥Q计算:X(x2,y2)=u1G+u2Q,取v=x2 mod n
(4)若v=r,接受签名,否则拒绝签名。
11 序列密码
11.1•概述
是一种对称密码
使用简单的加密运算,但不同时刻使用的密钥不同
密钥流生成器的要求
11.2•反馈移位寄存器的工作原理
两部分组成
- 移位寄存部分
存放n位数字,每位数字均属于Zm={0,1…m-1} - 计算部分
将移位寄存部分的内容输入,能输出一个值,反馈到最后一位
11.3•线性反馈移位寄存器(LFSR)
反馈函数:
f ( x 1 , x 2 , … , x n ) = c n x 1 ⊕ c n − 1 x 2 ⊕ … ⊕ c 2 x n − 1 ⊕ c 1 x n , f(x_1,x_2,…,x_n)=c_nx1⊕c_{n-1}x_2⊕…⊕c_2x_{n-1}⊕c_1x_n, f(x1,x2,…,xn)=cnx1⊕cn−1x2⊕…⊕c2xn−1⊕c1xn,
m序列
LFSR产生的有 2 n − 1 2^n-1 2n−1种状态的序列
是一种伪随机序列
11.4•m序列的随机性质分析
随机性假设的三个条件
- 一个周期内,0和1出现的次数至多相差1
- 长为k(k<n)的游程出现的频率为 1 2 k \frac{1}{2^k} 2k1
- 自相关系数是二值的
m序列的移位相加特性
一个m序列与其经任意次延迟移位产生的另一个不同序列模2相加,得到的和序列仍是该m序列的平移等价。
11.5•m序列的密码分析
•m序列具有良好的序列平衡、自相关函数等伪随机特性,并且产生方法简单,所以m序列是现有线性伪随机序列理论中最著名的、理论最完备的、应用最广泛的序列。
m序列的码元有线性递推关系 ,这说明仅利用生成序列的连续2n-1个码元,就能给出公式中的n个系数ci,从而m序列就很容易被破译
•序列的复杂度用移位寄存器的线性长度来定义,针对LFSR,其级数n就是序列的复杂度。n越大,复杂度越高,复杂度越高,就越难破解。
但是,当n较大时,序列周期p=2n-1也较大,导致相邻周期距离较远,可能比明文都长,这时的秘钥序列流长度达不到一个周期,不能形成伪随机序列。这一矛盾是m序列的最大缺陷
已知明文攻击
当反馈函数 f ( x 1 , x 2 , … , x n ) = c n x 1 ⊕ c n − 1 x 2 ⊕ … ⊕ c 2 x n − 1 ⊕ c 1 x n , f(x_1,x_2,…,x_n)=c_nx1⊕c_{n-1}x_2⊕…⊕c_2x_{n-1}⊕c_1x_n, f(x1,x2,…,xn)=cnx1⊕cn−1x2⊕…⊕c2xn−1⊕c1xn,的各个c被破解后,f即被破解
假设已知一段长为2n的明文-密文对,即已知:
x = x 1 x 2 … x 2 n , y = y 1 y 2 … y 2 n x=x_1x_2…x_{2n},y=y_1y_2…y_{2n} x=x1x2…x2n,y=y1y2…y2n
可求出对应的密钥序列 z = z 1 z 2 … z 2 n z=z_1z_2…z_{2n} z=z1z2…z2n,其中
$z_i=x_i⊕y_i $
在求得z1z2…z2n后,进而可求得对应的LFSR的反馈函数的参数{ci},方法如下。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-glQSL83F-1636466036823)(C:\Users\www13\AppData\Roaming\Typora\typora-user-images\image-20211109215231609.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lyGbl3Kj-1636466036824)(C:\Users\www13\AppData\Roaming\Typora\typora-user-images\image-20211109215238418.png)]