系列文章目录
3.1 密码学基本概念
1. 密码学的安全目标
目标至少包含三个方面:
1.1 保密性(Confidentiality):
- 信息仅被合法用户访问,不被泄露给非授权的用户、实体或过程。
- 提高保密性的手段:防侦查、防辐射、数据加密、物理保密等。
1.2 完整性(Intefrity):
- 资源只有授权方或以授权的方式进行修改,所有资源没有授权则不能修改。
- 影响完整性的因素:故障、误码、攻击、病毒等。
1.3 可用性(Availablility):
- 资源只有在适当的时候被授权访问,并按照需求使用
- 保证可用性的手段:身份识别与确认、访问控制等。
kerckhoffs准则:一个安全保护系统的安全性不是因为它的算法对外是保密的,而是因为它选择的密钥对对手来说是保密的。
评估密码系统安全性主要有三种方法:
(1)无条件安全
(2)计算安全
(3)可证明安全
2.密码体制
通常一个密码系统(简称密码体制)由以下五个部分组成,模型如下图:
- 明文空间M:全体明文的集合
- 密文空间C:全体密文的集合
- 加密算法E:一组明文M的到密文C的加密变换
- 解密算法D:一组密文C到明文M的解密变换
- 密钥空间K:包含加密密钥
K
e
K_e
Ke和解密密钥
K
d
K_d
Kd的全体密钥集合。
加密过程:C = E (M, K e K_e Ke),使用加密算法E和加密密钥 K e K_e Ke,将明文M加密为密文C。
解密过程:M = D(C, K d K_d Kd),使用解密算法D和解密密码 K d K_d Kd,将密文C还原为明文M.
3. 攻击密码的方法和类型
3.1 密码攻击方法
穷举攻击
穷举攻击
穷举攻击:对截取密文尝试遍历所有可能的密钥,直到获得正确的明文;或者使用固定的密钥对所有可能的明文加密,直到的得到与获取密文一致。
统计分析攻击
统计分析攻击
统计分析攻击:利用已经获取的明文和密文已知统计规律进行破译的方法。
数字分析攻击
数字分析攻击
数字分析攻击:密码分析者针对加/解密算法的数学基础和密码学特性,通过数学求解的方法方法来破译密码。
3.2 攻击密码类型
- 仅知密文攻击:密码分析者仅能通过截取的密文破解密码,这种方式对攻击者最为不利。
- 已知明文攻击:密码分析者已知明文——密文对,来破解密码
- 选择明文攻击:密码分析者不仅得到一些“明文——密文对”,还可以选择被加密的明文,并获取相应的密文。
- 选择密文攻击:密码分析者可以选择一些密文,并得到相应的明文。这种方式对攻击者最有利。主要估计公开密钥体制,特别是攻击其数字签名。
4. 古典密码
4.1 古典密码的分类
- 置换密码:明文的字母不变,但位置被打乱。
- 代替密码:代替密码是指先建立一个替换表(代替密码的密钥)。
- 单表密码: 一个明文字符对应一个密文字符。
- 加法密码:明文字母表A={ a 1 a_1 a1, a 2 a_2 a2,……, a n a_n an}和密文字母表B={ b 1 b_1 b1, b 2 b_2 b2,……, b n b_n bn},A到B的一一映射 f:A->B,即 f f f( a i a_i ai)= b i b_i bi。
- 乘法密码:映射函数: f f f ( a i ) (a_i) (ai)= b i b_i bi= a j a_j aj, j = i ∗ k j=i*k j=i∗kmod n n n,其中 k k k和 n n n是互素的。
- 多名码代替密码:单个字符明文可以映射成密文的多个字符之一。
- 多字母代替密码:字符快被成组加密。
- 多表代替密码:使用明文字母到密文字母的多个映射,每个映射是像简单代替密码中的一对一映射。
- 单表密码: 一个明文字符对应一个密文字符。
- 代数密码:代数密码利用代数相关理论和方法进行加密。Vernam密码是常见的代数密码,该方法使用代数运算中的模二运算。(异或)
香农通过数学方法证明了,一次性密钥如果及时销毁所有使用的密钥页,即使对方拿到了密码本的其余部分,也无法解密。
4.2 古典密码的破解
- 穷举分析:穷举分析中密码分析者一次试编所有可能的密钥对所获密文进行破解。
- 统计分析:统计分析估计是指密码分析者通过分析密文和明文的统计规律来破解密码。
5. 量子算法
目前实用的有Shor和Grover,由于技术不成熟,暂时无法对当前的密码体系构成威胁。
抗量子密码、编码密码等用于研究对抗量子算法。
3.2 分组密码
分组密码又称为秘密钥密码或对称密码。使用分组密码对明文加密时,首先对明文分组,每组长度相同,然后对每组明文分组,每组长度相同,然后对每组明文分别加密的到等长的密文。
1. DES
1.1 概述
DES分组长度为64比特,使用56比特秘钥对64比特的明文进行16轮加密,得到64比特的密文串。其中,秘钥为64比特,实际使用56比特,另外8位用作奇偶校验。
DES使用的对合运算,即
f
=
f
−
1
f=f^{-1}
f=f−1
加密和解密为同一算法,总的工作量减半。
1.2 DES的加密过程的公式描述
L
i
=
R
i
−
1
R
i
=
L
i
⨁
f
(
R
i
−
1
,
K
i
)
i
=
1
,
2
,
.
.
.
,
16
L_i = R_{i-1} \\ R_i = L_i \bigoplus f(R_{i-1},K_i) \\ i=1, 2, ... , 16 \\
Li=Ri−1Ri=Li⨁f(Ri−1,Ki)i=1,2,...,16
上一轮的输出为下一轮的输入(P39~45)
1.3 DES的解密
DES解密是以密文为输入,逆序执行加密过程。只有子密钥使用次序不同。
1.4 DES的安全性
- 如果DES秘钥太短经不起穷举攻击
- DES存在弱密钥和半弱密钥
- 弱密钥:秘钥的子秘钥相同,明文连续加密两次得到明文,加密和解密的结果一致。
- 半弱密钥:秘钥的部分子秘钥相同。
1.5 3DES
执行3次DES,安全性高,软件实现速度慢。有两种加密方式
- 第一次和第三次加密使用统一秘钥,秘钥长度128位(有效112位)
- 三次加密使用不同的秘钥,秘钥长度192位(有效168位)
注:每64位需要8位做奇偶校验。
目前中国人民银行的智能卡技术规范支持3DES。
引:DES算法详解
注:DES会出计算题。
【例1】S盒变换,非线性压缩变换。设输入为b1b2b3b4b5b6,则以b1b6组成的二进制位行号,b2b3b4b5组成的二进制位列号。行列交点处对应的值转换为二进制作为输出,对应的值需要查S盒替换表。
解:例如:当S1盒输入为"111000"时,则第1位和第6位组成二进制串"10"(十进制2),中间四位组成二进制“1100”(十进制12)。查询S1盒的2行12列,得到数字3,得到输出二进制数是0011。需要注意行号和列号从0开始。
【例2】置换运算,P45
置换运算P是将S输出的32位数据又来一次置换,置换运算P表如图所示。对应位置的数值用表中对应数字位置的进行替换。例如,第1位放第16位的数字。
16 | 7 | 20 | 21 |
---|---|---|---|
29 | 12 | 28 | 17 |
1 | 15 | 23 | 26 |
5 | 18 | 31 | 10 |
2 | 8 | 24 | 14 |
32 | 27 | 3 | 9 |
19 | 13 | 30 | 6 |
22 | 11 | 4 | 25 |
2. AES算法
由于DES安全强度不够,NIST征集新的数据加密标准ASE(Advanced Encryption Standard),基本要求:比3DES快,至少与3DES一样安全。
2.1 数学基础
AES明文分组长度可以是128位,192位,256位;秘钥长度也可以是128位,192位,256位。
重点:面向字节的乘法运算:P46。
- 面向字节的乘法运算,本质是对应于 f ( x ) f(x) f(x) mod m ( x ) m(x) m(x) 运算,其中
m ( x ) = x 8 + x 4 + x 3 + x + 1 m(x)=x^8+x^4+x^3+x+1 m(x)=x8+x4+x3+x+1
例1:
57
⨁
83
=
(
x
6
+
x
4
+
x
2
+
x
+
1
)
⨁
(
x
7
+
x
+
1
)
=
x
7
+
x
6
+
x
4
+
x
2
=
(
11010100
)
2
=
(
D
4
)
1
6
57 \bigoplus 83 = (x^6+x^4+x^2+x+1) \bigoplus (x^7+x+1) \\ =x^7+x^6+x^4+x^2 \\ =(1101 0100)_2 \\ =(D4)_16
57⨁83=(x6+x4+x2+x+1)⨁(x7+x+1)=x7+x6+x4+x2=(11010100)2=(D4)16
例2:
57
⋅
83
=
x
13
+
x
11
+
x
9
+
x
8
+
x
6
+
x
5
+
x
4
+
x
3
+
1
m
o
d
(
x
8
+
x
4
+
x
3
+
x
+
1
)
=
x
7
+
x
6
+
1
=
(
11000001
)
2
=
(
C
1
)
1
6
57\cdot83=x^{13}+x^{11}+x^9+x^8+x^6+x^5+x^4+x^3+1mod(x^8+x^4+x^3+x+1) \\ =x^7+x^6+1 \\ =(1100 0001)_2 \\ =(C1)_16
57⋅83=x13+x11+x9+x8+x6+x5+x4+x3+1mod(x8+x4+x3+x+1)=x7+x6+1=(11000001)2=(C1)16
注:系数为偶数消去
-
乘法逆元
如果有a(x)b(x)=1mod m ( x ) m(x) m(x),则a(x)的乘法逆元为b(x)
例如:(67*16)mod119 = 1,所以67mod119的逆元为16,求解方式可以参考辗转相除法。
-
乘法的计算机实现:xtime()
xtime()是最高多项式不大于7的多项式b(x)乘以x的乘法运算
b 6 b 5 b 4 b 3 b 2 b 1 b 0 0 b 7 = 0 b 6 b 5 b 4 b 3 b 2 b 1 b 0 0 ⨁ 00011011 b 7 = 1 b_6b_5b_4b_3b_2b_1b_00 \ \ \ \ b_7=0 \\ b_6b_5b_4b_3b_2b_1b_00\bigoplus0001 1011 \ \ \ \ b_7=1 b6b5b4b3b2b1b00 b7=0b6b5b4b3b2b1b00⨁00011011 b7=1
即 b 7 = 0 b_7=0 b7=0,左移一位,$ b_7=1 $,左移一位,再亦或1B -
面向4字节的运算 P48略
2.2 算法框架
AES状态(明文和秘钥都用“状态”表示)
(1)明文state:明文state用二维数组表示,该数组为4行,
N
b
N_b
Nb列。数组每个元素表示1字节,即2个16进制数。
N
b
=
数据块长度
/
32
128
=
>
N
b
=
4
,
192
=
>
N
b
=
6
N_b=数据块长度/32 \ \ \ \ 128=>N_b=4,192=>N_b=6
Nb=数据块长度/32 128=>Nb=4,192=>Nb=6
(2)秘钥state同上,为4×
N
k
N_k
Nk
N
k
=
数据块长度
/
32
N_k=数据块长度/32
Nk=数据块长度/32
(3)加密轮数
N
r
N_r
Nr,取决于
N
b
N_b
Nb 和
N
k
N_k
Nk的值,如下
N r N_r Nr | N b N_b Nb=4 | N b N_b Nb=6 | N b N_b Nb=8 |
---|---|---|---|
N_k=4 | 10 | 12 | 14 |
N_k=6 | 12 | 12 | 14 |
N_k=8 | 14 | 14 | 14 |
AES过程略,重点在读S盒,矩阵相乘
注:在行位移时:1=>0,2=>1,3=>2,4=>3
(1)当秘钥成都为128bit,192bit时,移动规则不变
(2)为256bit时,规则为第4行左移4字节
AES不是对合运算,即(AES)^(-1) != AES,解密是加密的逆过程。
3. SM4
处于安全性和确定性考虑,2006年我国国家密码管理局公布了“无线局域网产品”使用的SM4算法,可以抵御差分攻击、线性攻击,是我国第一次公布的官方的商品密码算法。
特点:
- SM4分组长度和秘钥长度为128位,SM4数据处理单位:字节(4),位(32)
- 属于对合运算,加密算法和解密算法一致,只有论秘钥使用顺序相反。
T()函数:非线性变化,目的是混淆。
子秘钥生成:通过“系统参数”和“固定系数”计算而来。
引:AES简介
4. 分组密码的工作模式
是指以某个分组秘钥算法为基础,解决对任意长度的明文的加密问题的方法。
1980年NIST发布了DES的4中工作模式:电码本模式(ECB),密码分组链接模式(CBC),输出反馈模式(OFB),密码反馈模式(CFB)。
2001年NIST发布AES的5中工作方式:ECB、CBC、OFB、CFB、计数模式。
注:使用工作模式时,明文或密码可能引起密文及其后续密文发生错误。
- 错误传播有界:出现明文或密文错误只产生有限几个错误数据。
- 错误传播无界:出现明文或密文错误会引发后续数据全部错误。
3.3 序列密码
序列密码又称为流密码,是明文流和秘钥流按顺序逐比特进行异或运算,从而产生密文流。属于对合运算。序列密码强度依靠秘钥序列的随机性和不可预测性。序列密码中的关键是保持通信双方精确同步。
1. 线性反馈移位寄存器(计算题!)P64
2. RC4算法:
S表有256个字节,可能的排列有256!,穷举几乎不可能。(现在已经不太安全了)
3. ZUC:祖冲之算法
是由我国自助设计的加密和完整性算法,已被国际组织3GPP推荐为无线通信LTE的第3套加密标准的核心算法。ZUC是一个同步流产生算法。
3.4 HASH函数
哈希函数用于构建数据的“指纹”,而“指纹”用于标记数据。主要用于数据完整性、数字签名、消息认证等。是将任意长度的消息输出为定长消息的函数。
x
=
h
(
m
)
x=h(m)
x=h(m)
Hash函数的特性:
- 单向性
- 弱抗碰撞性
- 抢抗碰撞性
1. Hash函数的安全性
对Hash函数的攻击就是寻找一对碰撞消息的过程。主要有两种:
(1)穷举攻击:典型方式有“生日攻击”,即产生若干明文消息,并计算出消息摘要,然后进行对比,找到碰撞。
(2)利用散列函数的代数结构。如:中间相遇攻击、修正分组攻击和差分分析攻击等。
注:常用的方式也有使用彩虹表对hash值进行破解(https://www.cmd5.com/),原理大致是生成若干个中间结果,从明文和密文两头进行连接,具体原理可以查看百度。
引:什么是彩虹表?、百度百科、彩虹表原理详解
2. MD5与SHA-1算法
-
MD5算法
消息分组长度为512比特,生成128比特的摘要。
-
SHA-1 算法
的输入是长度小于2^64-1比特的任何消息,输出160比特
-
美国国家安全局与国家标准去合作,提出数字安全标准(DDS)及其算法标准(DSA)。DDS数字签名标准的核心是数字签名算法DSA,该算法中杂凑函数采用SHA-1。
3. SM3算法
SM3算法是国家密码管理局半步的安全密码杂凑算法,是把长度为len(1<2^64)比特的消息m,经过填充和迭代压缩,生成长度为256比特的消息摘要。
可用于数字签名和验证,HMAC的生成与认证,以及随机数的生成。
4. HMAC
可用来加密,签名,报文验证等。
H
M
A
C
K
=
H
[
(
K
+
⨁
o
p
a
d
)
∣
∣
H
p
[
K
+
⨁
i
p
a
d
]
]
HMAC_K=H[(K^+\bigoplus opad)||Hp[K^+\bigoplus ipad]]
HMACK=H[(K+⨁opad)∣∣Hp[K+⨁ipad]]
3.5 公钥密码体质
该密码体质需要单向陷门门函数构造。
y
y
y=
f
(
x
)
f(x)
f(x)条件:
- 具有陷门
- 已知x,计算y很容易
- 一致y,不知陷门计算x难,若知道陷门则容易。
困难问题:
- 因子分解问题:计算素数乘积很容易(p*q->n),而计算因子分解困难(n->p*q)。
- 离散对数问题:计算素数幂乘容易(x^y->z),而计算对数困难(log_x z->y)。
公钥密码体制特点:
- 加密:C=E(M, K e K_e Ke)
- 解密:M=D(C, K d K_d Kd)
- 计算上不能由 K e K_e Ke求出 K d K_d Kd
- 加密算法E 和解密算法D 都是高效的
1. RSA
1.1 欧几里得算法
1. 基本算法,用于求解最大公约数
原理:设a=qb+r,其中都是整数,则gcd(a,b) = gcd(b,r) = gcd(b,a % b)
2. 扩展欧几里德算法,主要用于求解不定方程,模线性方程,模的逆元等。
算法原理:对于不完全为0的非负整数,a,b,gcd(a,b)表示,a,b的最大公约数,必然存在整数对x,y,使得gcd(a,b)=ax+by
1.2 用辗转相除法求逆元
求A关于模N的逆元B,即求整数B,使得A*BmodN=1(A,N互素)
-
对余数辗转相除
-
对商数逆向排列
1.3 RSA 算法
典型的非对称加密算法,该算法基于“大素数因数分解”。核心是模幂运算。
D
(
E
(
M
)
)
=
(
M
e
)
d
=
(
M
d
)
e
=
E
(
D
(
M
)
)
m
o
d
n
D(E(M))=(M^e)^d=(M^d)^e=E(D(M))mod\ n
D(E(M))=(Me)d=(Md)e=E(D(M))mod n
因此利用RSA可以同时实现数字签名和数据验证。
-
选出两个大质数p和q,使得p!=q
-
计算
p × q = n p\times q=n p×q=n -
计算
ψ ( n ) = ( p − 1 ) × ( q − 1 ) \psi (n)=(p-1) \times (q-1) ψ(n)=(p−1)×(q−1) -
选择e,是的1 < e < (p-1)(q-1),并且e和(p-1)(q-1)互素
-
计算解密密钥,使得
e d = 1 m o d ( p − 1 ) ( q − 1 ) ed=1 mod (p-1)(q-1) ed=1mod(p−1)(q−1)
-
公钥 = e, n
-
私钥 = d, n
公开n参数,n又称为模
消除原始质数p和q
加解密过程如下:
- 加密
C = M e m o d n C=M^emod\ n C=Memod n
- 解密
M = C d m o d n M=C^dmod\ n M=Cdmod n
数字签名的过程如下:
-
签名
M d m o d n M^dmod\ n Mdmod n -
验证签名
( M d ) e m o d n (M^d)^emod\ n (Md)emod n
2. Diffe-Hellman 与Gamal体制
2.1 Diffe-Hellman密钥交换体制
完成通信双方的“对称秘钥”交互,在不安全的通信环境(被监听)下,也不会造成秘钥泄露。
流程如下:
第一步:公开(p, g)
第二步:通信双方Alice和Bob交换秘钥
- Alice选择随机秘钥x (x <= x < p - 1),发送给Bob:A=g^x (mod p)
- Bob选择随机秘钥y (2 <= y < p - 1),发送给Alice:B=g^y (mod p)
第三步:双方得到公共秘钥
- Alice结合随机秘钥x和已收到Bob的信息,通过计算K=B^x(mod p),得到公共秘钥K
- 同样,Bob通过计算K=A^y(mod p),也得到公共秘钥K
至此,双方进行了安全的对称秘钥交互。
2.2 ELGamal体制
ELGamal是一种改进方案,给予“离散对数问题”上的“公开秘钥秘钥体制”。离散对数问题是指:对于比较大的整数y、g、p,求出一个整数x满足y=g^xmod p是非常困难的。
ELGamal算法略???考试基本不会涉及
3. 椭圆曲线密码
椭圆曲线加法的数学表示:
y
2
=
x
3
+
a
x
+
b
(
m
o
d
p
)
y^2=x^3+ax+b(mod\ p)
y2=x3+ax+b(mod p)
其中x和y取值范围[0, p-1]之间的整数
点P1(x1, y1)、P2(x2, y2)为椭圆曲线上的两个点,则P1+P2=P3=(x3, y3)
{
x
3
=
λ
2
−
x
1
−
x
2
(
m
o
d
p
)
y
3
=
λ
(
x
1
−
x
3
)
−
y
1
(
m
o
d
p
)
λ
=
{
(
y
2
−
y
1
)
/
(
x
2
−
x
1
)
,
P
1
≠
P
2
(
3
x
1
2
+
a
)
/
2
y
1
,
P
1
=
P
2
\left\{ \begin{aligned} x_3=\lambda^2-x_1-x_2(mod\ p) \\ y_3=\lambda(x_1-x_3)-y_1(mod\ p)\\ \lambda= \left\{ \begin{aligned} (y_2-y_1)/(x_2-x_1),\ P_1\neq P_2 \\ (3x_1^2+a)/2y_1, \ P_1=P_2 \end{aligned} \right. \end{aligned} \right.
⎩
⎨
⎧x3=λ2−x1−x2(mod p)y3=λ(x1−x3)−y1(mod p)λ={(y2−y1)/(x2−x1), P1=P2(3x12+a)/2y1, P1=P2
如果人=无穷大,则P3=无穷大。如果任意点,规定P+无穷大=P。
椭圆曲线计算比RSA复杂得多,所以 椭圆曲线秘钥比RSA短。一般认为160位长的椭圆曲线密码相当于1024位RSA密码的安全性。我国第二代居民身份证使用的是256位的椭圆曲线密码。
SM2算法是国家密码管理局发布的椭圆曲线公钥密码算法,用于在我国商用密码体系中替换RSA算法。
3.6 数字签名
数字签名的作用就是确保A发送给B的信息就是A本人发送的,并且没有篡改。
数字签名体制包括施加签名和验证签名两个方面。
-
基本的数字签名过程如下:
- A使用“摘要”算法(如SHA-1、MD5等)对发送信息进行摘要
- 使用A的私钥对消息摘要进行加密运算,将加密摘要和原文一并发给B。
-
验证签名的基本过程如下:
- B接收到加密摘要和原文后,使用和A同样的“摘要”算法对原文再次摘要,生成新的摘要。
- 使用A公钥对加密摘要解密,还原成原摘要。
- 两个摘要对比,一致则说明由A发出且没有经过任何篡改。
数字签名功能有信息身份认证、信息完整性检查、信息发送不可否认性,但不提供原文信息加密,不能保证对方收到消息,也不对接收方身份进行验证。数字签名最常用的实现方法建立在公钥密码体制和安全单向散列函数的基础之上。
3.7 认证
认证用于证实某事是否真实或有效的过程。认证的原理是:通过核对人或事的特征参数(如智能卡、指纹、密钥、口令等),来验证目标的真实性和有效性。
1. 身份认证
1.1 口令认证
好的口令特点是:使用多种字符、具有足够长度、尽量随机、定期更换。
注:口令认证期间加入时间量,可以抵御重放攻击
1.2 生物特征识别
经验表明身体特征(指纹、掌型、视网膜、虹膜等)和行为特征(签名、语音、步态等)可以对人进行唯一标示,可以用于身份识别。目前指纹识别技术最为深入。
2. 报文认证
报文认证是保证通信双方能够验证每个报文的发送方、接收方、内容和时间性的真实性和完整性。报文认证确保:
- 报文是意定发送方发出
- 报文是意定接收方接收
- 报文内容没有出现错误或者没有被篡改
- 报文是按指定的次序接收的
3.8 秘钥管理
密钥管理遵循的原则有:全程安全原则、最小权利原则、责任分离原则、密钥分级原则、密钥设定与更换原则等。
名词:KDC(密钥分配中心)、CA(证书授权中心)
1. kerberos(对称密钥分配)
该协议主要用于计算机网络身份鉴别,要是密钥分配中心的核心。kerberos进行密钥分配时使用AES、DES等分配方式。
用途:可实现单点登录
组成:鉴别服务器AS、票据授予服务器TGS
流程:用户先向AS申请初始票据,然后从TGS获得会话密钥
2. 非对称公钥分配
2.1 PKI,公钥基础设施
PKI是一组规则、过程、人员、设施、软件和硬件的集合,用来进行公钥证书的发放、分发和管理。
典型的PKI系统由5个基本部分组成:证书申请者、RA注册中心、CA认证中心、证书库和证书信任方。
2.2 数字证书
数字证书才用公钥体制进行加密和解密。每个用户有一个私钥来解密和签名;同时每个用户还有一个公钥用来加密和验证。