复习自用,仅供参考~
概论
- CIA: 机密性(Confidentiality), 完整性(Intergrity), 可用性(Availability).
- 体制: ( M , C , K 1 , K 2 , E , D ) (M,C,K_1,K_2,E,D) (M,C,K1,K2,E,D) 明文空间, 密文空间, 加密密钥空间, 解密密钥空间, 加密空间, 解密空间; 加密变换 c = E k 1 ( m ) c=E_{k_1}(m) c=Ek1(m), 解密变换 m = D k 2 ( c ) m=D_{k_2}(c) m=Dk2(c).
- 评价: 无条件安全 P ( M ∣ C ) = P ( M ) P(M|C)=P(M) P(M∣C)=P(M); 可证明安全(破解本质为数学难题); 计算安全(破解代价超过信息价值;破解时间超过信息时效).
- 分析: 唯密文攻击, 已知明文攻击, 选择明文攻击, 选择密文攻击, 自适应选择明文攻击, 选择密钥攻击.
- 香农《保密系统的通信原理》建立密码系统理论模型, 信息论为密码学奠定理论基础.
- 柯克霍夫斯原则(公开设计): 密码体制安全性依赖于密钥保密, 密码算法公开.
古典密码
仿射
- 仿射密码: 单表代换
- 加密: c ≡ a m + b ( m o d n ) c\equiv am+b({\rm mod}\ n) c≡am+b(mod n).
- 解密: m ≡ a − 1 ( c − b ) ( m o d n ) m\equiv a^{-1}(c-b)({\rm mod}\ n) m≡a−1(c−b)(mod n).
- a a a 存在模 n n n 的逆, 故密钥共 n × ( φ ( n ) − 1 ) n\times (\varphi(n)-1) n×(φ(n)−1) 种.
Vigenere
- Vigenere密码: 多表代换
- 加密: c ≡ m + k ( m o d n ) c\equiv m+k({\rm mod}\ n) c≡m+k(mod n).
- 解密: m ≡ c − k ( m o d n ) m\equiv c-k({\rm mod}\ n) m≡c−k(mod n).
Vernam
- Vernam密码: 多表代换, 序列密码基础
- 加密: c i = m i ⊕ k i c_i=m_i\oplus k_i ci=mi⊕ki.
- 解密: m i = c i ⊕ k i m_i=c_i\oplus k_i mi=ci⊕ki.
- o p l u s oplus oplus 为异或/模2加法/不进位加法/ G F ( 2 ) GF(2) GF(2)上加法.
统计分析
- 置换不改变字母, 单表代换不改变频率分布, 多表代换频率趋于均匀分布.
- 粗糙度: M . R = ∑ i = 0 25 ( p i − 1 26 ) 2 = ∑ i = 0 25 p i 2 − 0.0385 {\rm M.R}=\sum_{i=0}^{25}(p_i-\frac{1}{26})^2=\sum_{i=0}^{25}p_i^2-0.0385 M.R=∑i=025(pi−261)2=∑i=025pi2−0.0385. 明文或单表代换时 M . R ≈ 0.027 {\rm M.R}\approx 0.027 M.R≈0.027, 更接近 0 0 0 则更可能为多表代换.
- 重合指数: I C = ∑ i = 0 25 p i 2 {\rm IC}=\sum_{i=0}^{25}p_i^2 IC=∑i=025pi2. 多表代换时 I C ≈ 0.0655 {\rm IC}\approx 0.0655 IC≈0.0655. 相同字母间隔为 d 1 , . . . , d n d_1,...,d_n d1,...,dn, 则密钥可能长度为 g c d ( d 1 , . . . , d n ) {\rm gcd}(d_1,...,d_n) gcd(d1,...,dn).
序列密码
- 同步序列密码: 密钥序列产生与明密文无关; 通信双方必须保持精确同步; 错误只影响对应比特, 对失步敏感.
- 自同步序列密码: 密钥序列产生与明文或密文相关; 加解密时造成错误传播, 但错误传播有界.
线性反馈移位寄存器(LFSR)
- 移位寄存器: 值
S
=
(
s
0
,
s
1
,
.
.
.
,
s
n
−
1
)
S=(s_0,s_1,...,s_{n-1})
S=(s0,s1,...,sn−1) 为状态.
线性反馈函数: s n − 1 ← f ( s 0 , s 1 , . . . , s n − 1 ) = g n − 1 s n − 1 + . . . + g 1 s 1 + g 0 s 0 s_{n-1}\gets f(s_0,s_1,...,s_{n-1})=g_{n-1}s_{n-1}+...+g_1s_1+g_0s_0 sn−1←f(s0,s1,...,sn−1)=gn−1sn−1+...+g1s1+g0s0, g i ∈ G F ( 2 ) ⟹ g_i\in GF(2) \implies gi∈GF(2)⟹ 连接多项式 g ( x ) = g n x n + . . . + g 0 ∈ G F ( 2 ) [ x ] g(x)=g_nx^n+...+g_0\in GF(2)[x] g(x)=gnxn+...+g0∈GF(2)[x]. - LFSR
S 0 = O S_0=O S0=O 则 S i = O S_i=O Si=O; S 0 ≠ O S_0\ne O S0=O 则 S i ≠ O S_i\ne O Si=O.
本原多项式: f ( x ) ∈ F [ x ] f(x)\in F[x] f(x)∈F[x], 有 d e g f = n {\rm deg}f=n degf=n, inf { p ∈ Z + : f ( x ) ∣ x p − 1 } = 2 n − 1 \inf \{p\in\mathbb{Z}_+: f(x)|x^{p-1}\}=2^n-1 inf{p∈Z+:f(x)∣xp−1}=2n−1.
g ( x ) ∈ G F ( 2 ) [ x ] g(x)\in GF(2)[x] g(x)∈GF(2)[x] 为本原多项式 ⟺ \iff ⟺ 输出序列周期达到最大值 2 n − 1 2^n-1 2n−1; 此时输出序列称为 m m m-序列. - LFSR分析
截获长度 l ≥ 2 ( 2 n − 1 ) l\geq 2(2^n-1) l≥2(2n−1) 的明密文对 ( c , m ) (c,m) (c,m), 则 k = c ⊕ m k=c\oplus m k=c⊕m, 有状态 S i , . . . , S i + n + 1 S_i,...,S_{i+n+1} Si,...,Si+n+1 .
记 X = ( S i , . . . , S n ) X=(S_i,...,S_n) X=(Si,...,Sn), Y = ( S i + 1 , . . . , S i + n + 1 ) Y=(S_{i+1},...,S_{i+n+1}) Y=(Si+1,...,Si+n+1), 有 Y ≡ H X ( m o d 2 ) Y\equiv HX({\rm mod}\ 2) Y≡HX(mod 2).
m m m-序列时, X X X满秩, H ≡ Y X − 1 ( m o d 2 ) H\equiv YX^{-1}({\rm mod}\ 2) H≡YX−1(mod 2) 为连接多项式的友矩阵, O ( n 3 ) O(n^3) O(n3) 内可求得.
H = ( 0 1 0 . . . 0 0 0 1 . . . 0 . . . 0 0 0 . . . 1 g 0 g 1 g 2 . . . g n − 1 ) H=\left( \begin{array}{} 0 & 1 & 0 & ... & 0 \\ 0 & 0 & 1 & ... & 0 \\ ... \\ 0 & 0 & 0 & ... & 1 \\ g_0 & g_1 & g_2 & ... & g_{n-1} \end{array}\right ) H= 00...0g0100g1010g2............001gn−1
- 非线性序列实现
- 非线性反馈函数: 如引入与运算/模2乘/ G F ( 2 ) GF(2) GF(2)上乘法.
- LFSR的非线性组合: 线性部分为前馈电路, 确保序列的长周期性和均匀性.
- 非线性分组码
A5
- 欧洲移动通信GSM标准, 手机到基站间的链路语音加密; 算法未公开, 区别主要在连接多项式上.
- 三个较短的LFSR组成, 64位种子密钥(19+22+23).
g 1 ( x ) = x 19 + x 18 + x 17 + x 14 + 1 g 2 ( x ) = x 22 + x 21 + 1 g 3 ( x ) = x 23 + x 22 + x 21 + x 8 + 1 \begin{aligned} &g_1(x)=x^{19}+x^{18}+x^{17}+x^{14}+1 \\ &g_2(x)=x^{22}+x^{21}+1 \\ &g_3(x)=x^{23}+x^{22}+x^{21}+x^8+1 \end{aligned} g1(x)=x19+x18+x17+x14+1g2(x)=x22+x21+1g3(x)=x23+x22+x21+x8+1
控制位为 LFSR1(8), LFSR2(10), LFSR(10); 相同的两个/三个移位, 不同的不移位. - 安全问题: LFSR过短; 不同种子密钥也能产生相同的密钥序列; 种子密钥过短.
RC4
- RSA数据安全公司加密软件BSAFE, 1987年Ron Rivest提出; 本质为对数据表进行非线性变换.
- 初始化: 线性填充256字节S表, 密钥循环填充T表; i i i 遍历 0 − 255 0-255 0−255, j ≡ j + S [ i ] + T [ i ] ( m o d 256 ) j\equiv j+S[i]+T[i]({\rm mod}256) j≡j+S[i]+T[i](mod256), 交换 S [ i ] S[i] S[i] 和 S [ j ] S[j] S[j].
- 密钥序列产生: i i i 循环遍历 0 − 255 0-255 0−255, j ≡ j + S [ i ] ( m o d 256 ) j\equiv j+S[i]({\rm mod}256) j≡j+S[i](mod256), 交换 S [ i ] S[i] S[i] 和 S [ j ] S[j] S[j], t ≡ S [ i ] + S [ j ] ( m o d 256 ) t\equiv S[i]+S[j]({\rm mod}256) t≡S[i]+S[j](mod256), k i = S [ t ] k_i=S[t] ki=S[t].
- 安全问题: 存在弱密钥使得初始置换后 S S S 不变, 即 i = j i=j i=j; 存在弱密钥使得子密钥序列在100万字节内完全重复; 存在信息泄漏漏洞和加密漏洞; 种子密钥有效长度为128bit.
ZUC
- 国密; 4G宽带无线通信系统(LTE)国际标准; 分为机密性128-EEA3和完整性128-EIA3; 本质为对LFSR进行非线性组合.
- 三层结构: LFSR, BR(比特重组), 非线性F函数(唯一非线性部件, 安全性).
⊞ \boxplus ⊞ 为 G F ( 2 32 ) GF(2^{32}) GF(232) 上加法; ∣ | ∣ 为连接字符串; H _H H 为高16bit; L _L L 为低16bit; < < < < < < <<< 为循环左移.- LFSR: 本原多项式
g
(
x
)
∈
G
F
(
2
31
−
1
)
[
x
]
g(x)\in GF(2^{31}-1)[x]
g(x)∈GF(231−1)[x],
g
(
x
)
=
x
16
−
2
15
x
15
−
2
17
x
13
−
2
21
x
10
−
2
20
x
4
−
2
8
−
1
g(x)=x^{16}-2^{15}x^{15}-2^{17}x^{13}-2^{21}x^{10}-2^{20}x^{4}-2^8-1
g(x)=x16−215x15−217x13−221x10−220x4−28−1;
输出 m m m 序列周期 ( 2 31 − 1 ) 16 − 1 (2^{31}-1)^{16}-1 (231−1)16−1; 16个31bit 寄存器 S 0 , . . . , S 15 ∈ [ 1 , 2 31 − 1 ] S_0,...,S_{15}\in [1,2^{31}-1] S0,...,S15∈[1,231−1]. - BR: X 0 = S 15 H ∣ S 14 L X_0=S_{15H}|S_{14L} X0=S15H∣S14L, X 1 = S 11 L ∣ S 9 H X_1=S_{11L}|S_{9H} X1=S11L∣S9H , X 2 = S 7 L ∣ S 5 H X_2=S_{7L}|S_{5H} X2=S7L∣S5H, X 3 = S 2 L ∣ S 0 H X_3=S_{2L}|S_{0H} X3=S2L∣S0H.
- F:
W
=
(
X
0
⊕
R
1
)
⊞
R
2
W=(X_0\oplus R_1)\boxplus R_2
W=(X0⊕R1)⊞R2,
W
1
=
R
1
⊞
X
1
W_1=R_1\boxplus X_1
W1=R1⊞X1,
W
2
=
R
2
⊞
X
2
W_2=R_2\boxplus X_2
W2=R2⊞X2;
R 1 = S ( L 1 ( W 1 L ∣ W 2 H ) ) R_1=S(L_1(W_{1L}|W_{2H})) R1=S(L1(W1L∣W2H)), R 2 = S ( L 2 ( W 2 L ∣ W 1 H ) ) R_2=S(L_2(W_{2L}|W_{1H})) R2=S(L2(W2L∣W1H));
L 1 ( a ) = a ⊕ ( a < < < 2 ) ⊕ ( a < < < 10 ) ⊕ ( a < < < 18 ) ⊕ ( a < < < 24 ) L_1(a)=a\oplus(a< < < 2)\oplus(a< < < 10)\oplus(a< < < 18)\oplus(a< < < 24) L1(a)=a⊕(a<<<2)⊕(a<<<10)⊕(a<<<18)⊕(a<<<24),
L 2 ( a ) = a ⊕ ( a < < < 8 ) ⊕ ( a < < < 14 ) ⊕ ( a < < < 22 ) ⊕ ( a < < < 30 ) L_2(a)=a\oplus(a< < < 8)\oplus(a< < < 14)\oplus(a< < < 22)\oplus(a< < < 30) L2(a)=a⊕(a<<<8)⊕(a<<<14)⊕(a<<<22)⊕(a<<<30);
S S S 盒为 ( S 0 , S 1 , S 0 , S 1 ) (S_0,S_1,S_0,S_1) (S0,S1,S0,S1), 每8bit作为索引, 返回 S S S 盒中对应的8bit. - 输出密钥序列: Z = W ⊕ X 3 Z=W\oplus X_3 Z=W⊕X3.
- LFSR: 本原多项式
g
(
x
)
∈
G
F
(
2
31
−
1
)
[
x
]
g(x)\in GF(2^{31}-1)[x]
g(x)∈GF(231−1)[x],
g
(
x
)
=
x
16
−
2
15
x
15
−
2
17
x
13
−
2
21
x
10
−
2
20
x
4
−
2
8
−
1
g(x)=x^{16}-2^{15}x^{15}-2^{17}x^{13}-2^{21}x^{10}-2^{20}x^{4}-2^8-1
g(x)=x16−215x15−217x13−221x10−220x4−28−1;
- 运行流程
- 128bit 初始密钥和 128bit 初始向量装入寄存器
S
0
,
.
.
.
,
S
15
S_0,...,S_{15}
S0,...,S15.
- 128bit 初始密钥分为 16 个 8bit: K E Y = k 0 ∣ ∣ k 1 ∣ ∣ . . . ∣ ∣ k 15 {\rm KEY}=k_0 || k_1 ||...|| k_{15} KEY=k0∣∣k1∣∣...∣∣k15.
- 128bit 初始向量分为 16 个 8bit: I V = i v 0 ∣ ∣ i v 1 ∣ ∣ . . . ∣ ∣ i v 15 {\rm IV}=iv_0||iv_1||...||iv_{15} IV=iv0∣∣iv1∣∣...∣∣iv15.
- 240bit 常量分为 16个 15bit: D = d 0 ∣ ∣ d 1 ∣ ∣ . . . ∣ ∣ d 1 5 D=d_0||d_1||...||d_15 D=d0∣∣d1∣∣...∣∣d15.
- S i = k i ∣ ∣ d i ∣ ∣ i v i S_i=k_i||d_i||iv_i Si=ki∣∣di∣∣ivi.
- 初始化 F F F, R 1 = 0 R_1=0 R1=0, R 2 = 0 R_2=0 R2=0.
- 初始化模式运行32次: BR → \to →W=F(X_0,X_1,X_2) → \to →LFSR; 不输出.
- 工作模式运行1次并舍弃 W W W: BR → \to →W=F(X_0,X_1,X_2) → \to →LFSR.
- 密钥序列产生: 工作模式运行, 每时钟节拍输出 32bit.
- 128bit 初始密钥和 128bit 初始向量装入寄存器
S
0
,
.
.
.
,
S
15
S_0,...,S_{15}
S0,...,S15.
- 128-EEA3参数表
输入参数 | 长度(bit) | 含义 |
---|---|---|
COUNT | 32 | 计数器 |
BEARER | 5 | 承载层标识 |
DIRECTION | 1 | 传输方向标志 |
CK | 128 | 明文序列bit长度 |
IBS | LENGTH | 输入序列 |
输出参数 | 长度(bit) | 含义 |
---|---|---|
OBS | LENGTH | 输出序列 |
k
i
=
c
k
i
k_i=ck_i
ki=cki,
i
=
0
,
1
,
.
.
.
,
15
i=0,1,...,15
i=0,1,...,15.
i
v
0
=
C
O
U
N
T
0
iv_0={\rm COUNT}_0
iv0=COUNT0,
i
v
1
=
C
O
U
N
T
1
iv_1={\rm COUNT}_1
iv1=COUNT1,
i
v
2
=
C
O
U
N
T
2
iv_2={\rm COUNT}_2
iv2=COUNT2,
i
v
3
=
C
O
U
N
T
3
iv_3={\rm COUNT}_3
iv3=COUNT3;
i
v
4
=
B
E
A
R
E
R
∣
D
I
R
E
C
T
I
O
N
∣
00
iv_4={\rm BEARER}|{\rm DIRECTION}|00
iv4=BEARER∣DIRECTION∣00,
i
v
5
=
i
v
6
=
i
v
7
=
00000000
iv_5=iv_6=iv_7=00000000
iv5=iv6=iv7=00000000;
i
v
j
+
8
=
i
v
j
iv_{j+8}=iv_j
ivj+8=ivj,
j
=
8
,
9
,
.
.
.
,
15
j=8,9,...,15
j=8,9,...,15.
- 安全问题
抵御多种已知攻击: 弱密钥, Guess-and-Determine(猜测-决定)攻击, Binary-Decision-Tree(二叉决策树)攻击, 线性区分攻击, 代数攻击, 选择初始向量攻击.
主要威胁为侧信道攻击: DPA攻击.
分组密码
- 本质为单表代换和置换, 复杂多轮非线性, 通过混淆和扩散实现.
- 混淆: 密钥和密文间依赖关系复杂, 抗统计分析.
- 扩散: 明文每 bit 影响尽可能多的密文 bit.
- 香农乘积密码
- 幂等密码: S 2 = S S^2=S S2=S; 不会增强安全性.
- 迭代密码: S n S^n Sn; 通过简单密码得到高强度密码; 分组密码和hash函数的核心思想.
- 组件
- S盒: 混淆; 非线性代换; 安全强度, 抗差分攻击和线性攻击能力; 规模越大, 非线性程度越高, 混淆性能越好, 实现效率越低.
- P置换: 线性置换; S盒后将混淆效应扩散.
- 轮函数F: 快速实现密钥和明文的混淆扩散; 复杂性和轮数决定了实现效率.
- 密钥扩展: 生成轮密钥(子密钥); 密钥与密文独立, 抗统计分析, 抗弱密钥, 结果简单易于实现, 种子密钥影响均衡.
结构模型 | 特点 | 代表算法 |
---|---|---|
S-P网络 | 每轮异或密钥后, S盒分组小块混淆扩散, P置换整体扩散, N i = F ( N i − 1 ⊕ K i ) N_i=F(N_{i-1}\oplus K_i) Ni=F(Ni−1⊕Ki) | PRESENT, AES |
Feistel网络 | 分为左右两部分, R i = F ( R i − 1 , K i ) ⊕ L i − 1 R_i=F(R_{i-1},K_i)\oplus L_{i-1} Ri=F(Ri−1,Ki)⊕Li−1, L i = R i − 1 L_i=R_{i-1} Li=Ri−1, 最后一轮不做对换; 同个算法加解密 | DES |
Lai-Massey | 16bit 模 2 16 + 1 2^{16}+1 216+1乘法群, 16bit 模 2 16 2^{16} 216 加法群, G F [ 2 ] / f ( x ) GF[2]/f(x) GF[2]/f(x) 加法群, d e g f = 16 {\rm deg}f=16 degf=16 | IDEA |
滑动窗口 | 广义Feistel网络; 轮函数, 密文链接滑动 | SM4 |
工作模式 | 含义 | 特点 |
---|---|---|
ECB(Eletronic Code Book)电子密码本 | 分组用相同密钥加密; 相同明文产生相同密文 | 简单快速, 可并行 |
CBC(Ciper Block Chaining)密码分组链接 | 初始化 i v iv iv 得到第一组密文, 第一组密文与第二组明文异或后再加密 | TSL及IPSEc协议推荐; 仅解密支持并行 |
CFB(Cipher Feedback)密文反馈 | 初始化 i v iv iv 得到密文 E E E, v i vi vi 左移 n n n 位, 密文 E E E 与明文异或后得到密文 C C C, C C C 高位 n n n 位填入 v i vi vi | 支持流式数据, 错误有界; 仅解密支持并行 |
OFB(Output Feedback)输出反馈 | 初始化 i v iv iv 得到密文 E E E, v i vi vi 左移 n n n 位, 密文 E E E 与高位 n n n 位填入 v i vi vi, 密文 E E E 与明文异或后得到密文 C C C | 支持流式数据, 错误有界; 不支持并行 |
CTR(Counter)计数器 | 自增算子加密后与明文异或得到密文 | 相当于一次一密; 可并行 |
分组密码 | 网络结构 | 分组长度(bit) | 密钥长度(bit) | 子密钥长度(bit) | 轮数 | S S S 盒规模 | 结构特点 |
---|---|---|---|---|---|---|---|
DES | Festal网络 | 64 | 56(+8) | 48 | 16 | 6进4出 | 对合 |
3-DES | Festal网络 | 192 | 112( K 3 = K 1 K_3=K_1 K3=K1)/168 | 48 | 16 × \times × 3 | 6进4出 | 对合 |
AES | S-P网络 | 128 | 128/192/256 | 128 | 10/12/14 | 8进8出 | 对称 |
SM4 | 滑动窗口 | 128 | 128 | 32 | 32 | 8进8出 | 对合 |
PRESENT | S-P网络 | 64 | 80/128 | 64 | 31 | 4进4出 | 非对称 |
DES
-
数据加密标准(Data Encryption Standard): 16 轮 Feistel 网络对合加解密.
体现香农密码设计思想; 公开密码算法先例; 商用密码典范. -
密钥扩展
初始密钥(64bit)经PC1表置换得到 C i C_i Ci 和 D i D_i Di (各28bit), 循环左移 l s i ls_i lsi 位;
经PC2表置换得到第 i i i 轮子密钥 K i K_i Ki (48bit);
置换表中元素 p t i pt_{i} pti 意为将待置换中的第 p t i pt_{i} pti 位置换到第 i i i位. -
初始置换与结束逆置换
明(密)文(64bit)经IP表置换进入加密;
完成加(解)密后经IPR表置换得到密(明)文(64bit). -
轮函数
32bit输入经E表置换扩充到48bit;
与子密钥(48bit)异或后, 经S盒压缩回32bit(混淆), 再经P表置换得到32bit输出(扩散);
S盒6位输入 b 1 b 2 b 3 b 4 b 5 b 6 b_1b_2b_3b_4b_5b_6 b1b2b3b4b5b6, 输出 s b 1 b 6 , b 2 b 3 b 4 b 5 s_{b_1b_6, b_2b_3b_4b_5} sb1b6,b2b3b4b5. -
S盒设计准则: (DES中唯一非线性变换)
改变1bit输入至少2bit发生变化;
S ( x ) S(x) S(x) 和 S ( x ⊕ 001100 ) S(x\oplus 001100) S(x⊕001100) 至少2bit发生变化;
S ( x ) ≠ S ( x ⊕ 11 e f 00 ) S(x)\neq S(x\oplus 11ef00) S(x)=S(x⊕11ef00), e , f ∈ { 0 , 1 } e,f\in\{0,1\} e,f∈{0,1};
改变5bit输入, 输出的0和1数目大致相等;
足够的非线性度以抵抗线性攻击;
差分性均匀以抵抗差分攻击;
足够的代数次数和项目以抵抗插值攻击和高阶差分攻击. -
攻击类型: 穷钥攻击; 侧信道攻击(能量分析, 故障注入分析); 差分攻击; 线性攻击.
-
安全问题: 密钥太短(有效仅56bit); 存在弱密钥; 互补对称性(异或运算导致).
-
3-DES: 3轮DES; 112(1和3轮密钥相同)/256bit 密钥; 加解密速度慢.
AES
- 高级数据加密标准(Advanced Encryption Standard): 10/12/14 轮 S-P 网络对称加解密(对应 128/192/256bit 密钥).
-
G
F
(
2
)
[
x
]
GF(2)[x]
GF(2)[x] 上运算
G F ( 2 ) GF(2) GF(2) 上多项式域 G F ( 2 8 ) ≅ G F ( 2 ) [ x ] / ( x 8 + x 4 + x 3 + x + 1 ) GF(2^8)\cong GF(2)[x]/(x^8+x^4+x^3+x+1) GF(28)≅GF(2)[x]/(x8+x4+x3+x+1) 中元素为 b ( 8 ) = b 7 x 7 + b 6 x 6 + b 5 x 5 + b 4 x 4 + b 3 x 3 + b 2 x 2 + b 1 x + b 0 b_{(8)}=b_7x^7+b_6x^6+b_5x^5+b_4x^4+b_3x^3+b_2x^2+b_1x+b_0 b(8)=b7x7+b6x6+b5x5+b4x4+b3x3+b2x2+b1x+b0;
乘法需对既约多项式 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 取模, 乘法逆元可由扩展Euclid算法得到.
考虑 x b ( 8 ) = ( b ( 8 ) < < 1 ) ⊕ m ( x ) xb_{(8)}=(b_{(8)}< < 1)\oplus m(x) xb(8)=(b(8)<<1)⊕m(x), 高次乘法可重复 x x x 乘实现. -
G
F
(
2
8
)
[
x
]
GF(2^8)[x]
GF(28)[x] 上运算
G F ( 2 8 ) GF(2^8) GF(28) 上 d e g f ≤ 3 degf\leq 3 degf≤3 多项式环 G F ( 2 8 ) / [ x 4 + 1 ] GF(2^8)/[x^4+1] GF(28)/[x4+1] 中元素为 b ( 32 ) = B 3 x 3 + B 2 x 2 + B 1 x + B 0 b_{(32)}=B_3x^3+B_2x^2+B_1x+B_0 b(32)=B3x3+B2x2+B1x+B0;
乘法需对(非既约)多项式 x 4 + 1 x^4+1 x4+1 取模.
考虑 x b ( 32 ) = b ( 32 ) > > 8 xb_{(32)}=b_{(32)}> >8 xb(32)=b(32)>>8, 高次乘法可视为 G F ( 2 8 ) GF(2^8) GF(28) 上矩阵乘法. - 状态矩阵
128bit 明(密)文和密钥按列优先载入4阶方阵;
加(解)密后按列优先输出密(明)文. - 密钥扩展: 4字输入, 扩展为44字输出; 1word (字)
=
=
= 4byte
=
=
= 32bit.
w [ i ] = w [ i − 1 ] ⊕ w [ i − 4 ] w[i]=w[i-1]\oplus w[i-4] w[i]=w[i−1]⊕w[i−4], 4 ∤ i 4 \not|\ i 4∣ i;
w [ i ] = w [ i − 4 ] ⊕ S ( w ′ [ i − 1 ] ) ⊕ R c o n [ i ] w[i]=w[i-4]\oplus S(w'[i-1])\oplus Rcon[i] w[i]=w[i−4]⊕S(w′[i−1])⊕Rcon[i], 4 ∣ i 4 | i 4∣i;
即每个字循环左移1字节后进行S盒置换. - 轮函数: 轮密钥加(即子密钥异或)
→
\to
→ (逆)字节代换
→
\to
→ (逆)行位移
→
\to
→ (逆)列混合; 最后一轮(逆)列混合改为轮密钥加.
- 字节代换: 取每个字节在 G F ( 2 8 ) GF(2^8) GF(28) 上的逆后进行仿射变换, 可等效为S盒置换;
- 逆字节代换: 逆仿射变换再取逆, 可等效为逆S盒置换.
- 行位移: 第 i = 0 , 1 , 2 , 3 i=0,1,2,3 i=0,1,2,3 个字循环右移 i i i 字节;
- 逆行位移: 第 i i i 个字循环左移 i i i 字节.
- 列混合: 按列的字在 G F ( 2 8 ) [ x 4 + 1 ] GF(2^8)[x^4+1] GF(28)[x4+1] 上与 a ( x ) = 0 x 03 x 3 + 0 x 01 x 2 + 0 x 01 x + 0 x 02 a(x)={\rm 0x03}x^3+{\rm 0x01}x^2+{\rm 0x01}x+{\rm 0x02} a(x)=0x03x3+0x01x2+0x01x+0x02 相乘, 可等效为 G F ( 2 8 ) GF(2^8) GF(28) 上的矩阵乘法;
- 逆列混合: 与 a − 1 ( x ) = 0 x 0 B x 3 + 0 x 0 D x 2 + 0 x 09 x + 0 x 0 E a^{-1}(x)={\rm 0x0B}x^3+{\rm 0x0D}x^2+{\rm 0x09}x+{\rm 0x0E} a−1(x)=0x0Bx3+0x0Dx2+0x09x+0x0E 相乘; 可等效为 G F ( 2 8 ) GF(2^8) GF(28) 上的矩阵乘法.
- 安全问题: 主流数据加密标准; 无弱密钥, 128bit 密钥空间可达 2 128 2^{128} 2128; 主要威胁是侧信道攻击(能量侧信道, 电磁侧信道, 故障注入).
SM4
- 国密, ISO/IEC 国际标准; 128bit 密钥 32 轮非平衡 Feistel 网络(滑动窗口).
- 密钥更新:
S
S
S盒置换
→
\to
→
L
L
L 线性变换.
初始密钥 ( M K 0 , M K 1 , M K 2 , M K 3 ) (MK_0,MK_1,MK_2,MK_3) (MK0,MK1,MK2,MK3), K i = M K i ⊕ F K i K_i=MK_i\oplus FK_i Ki=MKi⊕FKi , r k i = K i + 4 = K i ⊕ T ( K i + 1 ⊕ K i + 2 ⊕ K i + 3 ⊕ C K i ) rk_i = K_{i+4} = K_i\oplus T(K_{i+1}\oplus K_{i+2}\oplus K_{i+3}\oplus CK_i) rki=Ki+4=Ki⊕T(Ki+1⊕Ki+2⊕Ki+3⊕CKi);
F K i FK_i FKi 为系统参数, C K i CK_i CKi 为固定参数, T ( B ) = L ( S ( B 0 ) ∣ S ( B 1 ) ∣ S ( B 2 ) ∣ S ( B 3 ) ) T(B)=L(S(B_0)|S(B_1)|S(B_2)|S(B_3)) T(B)=L(S(B0)∣S(B1)∣S(B2)∣S(B3)).
非线性S盒置换输入字节 b 1 b 2 b 3 b 4 b 5 b 6 b 7 b 8 b_1b_2b_3b_4b_5b_6b_7b_8 b1b2b3b4b5b6b7b8, 输出字节 s b 1 b 2 b 3 b 4 , b 5 b 6 b 7 b 8 s_{b_1b_2b_3b_4, b_5b_6b_7b_8} sb1b2b3b4,b5b6b7b8;
对字进行线性变换 L ( B ) = B ⊕ ( B < < < 13 ) ⊕ ( B < < < 23 ) L(B)=B\oplus (B < < < 13)\oplus (B < < < 23) L(B)=B⊕(B<<<13)⊕(B<<<23). - 轮函数: 轮密钥加
→
\to
→
S
S
S盒置换
→
\to
→
L
′
L'
L′ 线性变换.
X i + 4 = X i ⊕ T ′ ( X i + 1 ⊕ X i + 2 ⊕ X i + 3 ⊕ r K i ) X_{i+4} = X_i\oplus T'(X_{i+1}\oplus X_{i+2}\oplus X_{i+3}\oplus rK_i) Xi+4=Xi⊕T′(Xi+1⊕Xi+2⊕Xi+3⊕rKi);
T ′ ( B ) = L ′ ( S ( B 0 ) ∣ S ( B 1 ) ∣ S ( B 2 ) ∣ S ( B 3 ) ) T'(B)=L'(S(B_0)|S(B_1)|S(B_2)|S(B_3)) T′(B)=L′(S(B0)∣S(B1)∣S(B2)∣S(B3));
对字节进行非线性的S盒置换;
对字进行线性变换 L ′ ( B ) = B ⊕ ( B < < < 2 ) ⊕ ( B < < < 10 ) ⊕ ( B < < < 18 ) ⊕ ( B < < < 24 ) L'(B)=B\oplus (B < < < 2)\oplus (B < < < 10)\oplus (B < < < 18)\oplus (B < < < 24) L′(B)=B⊕(B<<<2)⊕(B<<<10)⊕(B<<<18)⊕(B<<<24). - 反序输出: 输入 ( X 1 , X 2 , X 3 , X 4 ) (X_1,X_2,X_3,X_4) (X1,X2,X3,X4), 输出 ( Y 1 , Y 2 , Y 3 , Y 4 ) = ( X 35 , X 34 , X 33 , X 32 ) (Y_1,Y_2,Y_3,Y_4)=(X_{35},X_{34},X_{33},X_{32}) (Y1,Y2,Y3,Y4)=(X35,X34,X33,X32).
- 安全问题: 抗差分分析和线性分析; 主要威胁是侧信道攻击(故障注入).
PRESENT
- CHES会议: 80/128bit 密钥 31 轮 S-P网络.
超级轻量级, 适用于资源受限环境. - 密钥更新:
初始密钥 k 79 k 78 . . . k 0 k_{79}k_{78}...k_{0} k79k78...k0.
循环左移 61bit; 高 4bit S盒置换;
轮数加 k 19 k 18 k 17 k 16 k 15 ← k 19 k 18 k 17 k 16 k 15 ⊕ r o u n d k_{19}k_{18}k_{17}k_{16}k_{15} \gets k_{19}k_{18}k_{17}k_{16}k_{15}\oplus {\rm round} k19k18k17k16k15←k19k18k17k16k15⊕round;
取高 64bit k 79 k 78 . . . k 16 k_{79}k_{78}...k_{16} k79k78...k16 为子密钥. - 轮函数: 轮密钥加
→
\to
→
S
S
S 盒置换
→
\to
→
P
P
P 置换.
S盒输入 4bit b 1 b 2 b 3 b 4 b_1b_2b_3b_4 b1b2b3b4, 输出4bit s b 1 b 2 b 3 b 4 s_{b_1b_2b_3b_4} sb1b2b3b4;
P置换对 64bit 重新排列.
公钥密码
- 对称加密问题
- 密钥管理困难: n n n 个实体的网络需要 ( n − 1 ) n 2 \frac{(n-1)n}{2} 2(n−1)n 个密钥及同等数量的保密信道.
- 难以解决签名和认证问题: 接收方可以伪造原文; 发送方可以否认行为.
- 非对称加密基本条件
- 安全: k e ≠ k d k_e\ne k_d ke=kd 且由 k e k_e ke 不能得到 k d k_d kd;
- 保密: D ( E ( m ) ) = m D(E(m))=m D(E(m))=m;
- E E E 和 D D D 高效;
- 保真:
E
(
D
(
m
)
)
=
m
E(D(m))=m
E(D(m))=m.
单向陷门函数: y = f ( x ) y=f(x) y=f(x) 满足: (1)给定 x x x, 计算 y y y 很容易; (2)给定 y y y, 不掌握陷门, 计算 x = f − 1 ( y ) x=f^{-1}(y) x=f−1(y) 很困难; (3)给定 y y y, 掌握陷门, 计算 x f − 1 ( y ) xf^{-1}(y) xf−1(y) 很容易.
- 数学难题
- 大合数分解难题: 大素数乘积容易
p
×
q
=
n
p\times q=n
p×q=n, 大合数分解困难
n
=
p
×
q
n=p\times q
n=p×q.
- 离散对数难题(DLP): 有限域
G
F
(
p
)
GF(p)
GF(p) 上生成元幂乘容易
a
b
=
c
a^b=c
ab=c, 求对数困难
log
a
c
=
b
\log_a c=b
logac=b.
- 椭圆曲线离散对数难题(ECDLP): 椭圆曲线群 E p ( a , b ) E_p(a,b) Ep(a,b) 中基点倍乘容易 d P = Q dP=Q dP=Q, 求倍数困难 d = Q P d=\frac{Q}{P} d=PQ.
- 误差还原难题(LWE): 有限域 G F ( p ) GF(p) GF(p) 上矩阵乘法加误差容易 v = A s + e v=As+e v=As+e, 解带噪音的线性方程组困难 s = A − 1 ( v − e ) s=A^{-1}(v-e) s=A−1(v−e).
- 大合数分解难题: 大素数乘积容易
p
×
q
=
n
p\times q=n
p×q=n, 大合数分解困难
n
=
p
×
q
n=p\times q
n=p×q.
- 工作方式
- 发送方 A A A: 先用发送方私钥 k A d k_{Ad} kAd 签名 s = D ( m , k A d ) s=D(m,k_{Ad}) s=D(m,kAd), 再用接收方公钥 k B e k_{Be} kBe 加密 c = E ( s , k B e ) c=E(s,k_{Be}) c=E(s,kBe).
- 接收方 B B B: 先用接收方私钥 k B d k_{Bd} kBd 解密 s = E ( c , k B d ) s=E(c,k_{Bd}) s=E(c,kBd), 再用发送方公钥 k A e k_{Ae} kAe 验证 m = D ( s , k A e ) m=D(s,k_{Ae}) m=D(s,kAe).
- 机密性: 公钥加密, 私钥解密.
- 真实性: 私钥签名, 公钥验证.
RSA
- RSA: 素数
p
,
q
p,q
p,q,
n
=
p
q
n=pq
n=pq,
g
c
d
(
e
,
φ
(
n
)
)
=
1
{\rm gcd}(e,\varphi(n))=1
gcd(e,φ(n))=1,
φ
(
n
)
=
(
p
−
1
)
(
q
−
1
)
\varphi(n)=(p-1)(q-1)
φ(n)=(p−1)(q−1).
- 公钥 ( e , n ) (e,n) (e,n), 加密 c = E e , n ( m ) ≡ m e ( m o d n ) c=E_{e,n}(m)\equiv m^e({\rm mod}\ n) c=Ee,n(m)≡me(mod n).
- 私钥 d ≡ e − 1 ( m o d φ ( n ) ) d\equiv e^{-1}({\rm mod}\ \varphi(n)) d≡e−1(mod φ(n)), 解密 m = D d , n ( m ) ≡ m d ( m o d n ) m=D_{d,n}(m)\equiv m^d({\rm mod}\ n) m=Dd,n(m)≡md(mod n).
- RSA参数选取
p , q p,q p,q 足够大, 一般场景使 n n n 达到1024bit, 重要场景2048bit.
p , q p,q p,q 为强素数, p − 1 , p + 1 , q − 1 , q + 1 p-1,p+1,q-1,q+1 p−1,p+1,q−1,q+1 中均无除 2 2 2 外的小因子.
p , q p,q p,q 位数不能相差过大或过小.
私钥 d ≠ e d\ne e d=e.
g c d ( p − 1 , q − 1 ) {\rm gcd}(p-1,q-1) gcd(p−1,q−1) 尽可能小, 最好为2; 以避免密文迭代攻击.
e e e 应保证 m e ≪ n m^e\ll n me≪n; 有人建议为素数 2 16 + 1 = 65537 2^{16}+1=65537 216+1=65537, 二进制表示中仅含两位 1 1 1, 加密速度较快.
d d d 应较小以保证解密速度, 但确保 d ≪ n 4 d\ll \frac{n}{4} d≪4n.
多个用户不得共用同一个模 n n n; 以避免共模攻击. - RSA算法
- 大素数验证: Miller-Rabin测试.
- 加密优化算法: 快速模幂, Montgomery.
- 解密优化算法: CRT, 快速模幂, Montgomery.
ElGamal型
- D-H协议: 大素数
p
p
p 和模
p
p
p 原根
g
g
g, 任选
2
≤
x
,
y
≤
p
−
2
2\leq x,y\leq p-2
2≤x,y≤p−2.
- 公钥 ( p , g ) (p,g) (p,g), 私钥 x , y x,y x,y.
- 握手: k X → Y ≡ g x ( m o d p ) k_{X\to Y}\equiv g^x({\rm mod}\ p) kX→Y≡gx(mod p), k Y → X ≡ g y ( m o d p ) k_{Y\to X}\equiv g^y({\rm mod}\ p) kY→X≡gy(mod p).
- 密钥: k ≡ k Y → X x ≡ k X → Y y ≡ g x y ( m o d p ) k\equiv k_{Y\to X}^x\equiv k_{X\to Y}^y \equiv g^{xy}({\rm mod}\ p) k≡kY→Xx≡kX→Yy≡gxy(mod p).
- ECDH: 椭圆曲线群
E
p
E_p
Ep,
G
∈
E
p
G\in E_p
G∈Ep,
∣
G
∣
=
q
|G|=q
∣G∣=q 为大素数, 任选
2
≤
a
,
b
≤
q
−
2
2\leq a,b\leq q-2
2≤a,b≤q−2.
- 公钥 ( p , G ) (p,G) (p,G), 私钥 x , y x,y x,y.
- 握手: k A → B = a G k_{A\to B}=aG kA→B=aG, k B → A = b G k_{B\to A}=bG kB→A=bG.
- 密钥: k = a k B → A = b k A → B = ( a b ) G k=ak_{B\to A}=bk_{A\to B}=(ab)G k=akB→A=bkA→B=(ab)G.
- ElGamal: 大素数
p
p
p 和模
p
p
p 原根
g
g
g, 任选
2
≤
a
≤
p
−
2
2\leq a\leq p-2
2≤a≤p−2,
Y
a
≡
g
a
(
m
o
d
p
)
Y_a\equiv g^a({\rm mod}\ p)
Ya≡ga(mod p).
- 公钥 ( p , g , Y a ) (p,g,Y_a) (p,g,Ya), 加密 u ≡ g k ( m o d p ) u\equiv g^k({\rm mod}\ p) u≡gk(mod p), v ≡ m Y a k ( m o d p ) v\equiv mY_a^k({\rm mod}\ p) v≡mYak(mod p), c = E p , g , Y a , k ( m ) = ( u , v ) c=E_{p,g,Y_a,k}(m)=(u,v) c=Ep,g,Ya,k(m)=(u,v), 任选 2 ≤ k ≤ p − 2 2\leq k\leq p-2 2≤k≤p−2, k ≠ a k\ne a k=a.
- 私钥 a a a, 解密 m ≡ D a ( c ) ≡ v u a ( m o d p ) m\equiv D_a(c)\equiv \frac{v}{u^a}({\rm mod}\ p) m≡Da(c)≡uav(mod p).
- 参数选取: p p p 足够大, 一般场景512bit, 重要场景1024bit.
- ECEG: 椭圆曲线群
E
p
E_p
Ep,
G
∈
E
p
G\in E_p
G∈Ep,
∣
G
∣
=
q
|G|=q
∣G∣=q 为大素数, 任选
2
≤
d
≤
q
−
2
2\leq d\leq q-2
2≤d≤q−2,
P
=
d
G
P=dG
P=dG.
- 公钥 ( P , G , E , q ) (P,G,E,q) (P,G,E,q), 加密 C 1 = r G C_1=rG C1=rG, C 2 = M + r P C_2=M+rP C2=M+rP, c = E E p , P , G , r ( M ) = C 1 , C 2 c=E_{E_p,P,G,r}(M)=\\{C_1,C_2\\} c=EEp,P,G,r(M)=C1,C2, 任选 2 ≤ r ≤ q − 2 2\leq r\leq q-2 2≤r≤q−2, r ≠ d r\ne d r=d.
- 私钥 d d d, 解密 M = D E p , d ( C ) = C 2 − d C 1 M=D_{E_p,d}(C)=C_2-dC_1 M=DEp,d(C)=C2−dC1.
- 参数选取: p p p 足够大, 一般为160bit; 余因子 h = ∣ E p ∣ ∣ G ∣ ≤ 4 h=\frac{|E_p|}{|G|}\leq 4 h=∣G∣∣Ep∣≤4; 避免选用超奇异和反常椭圆曲线.
SM2
- 本质为ECEG.
- 初始化: 椭圆曲线群
E
p
E_p
Ep,
G
∈
E
p
G\in E_p
G∈Ep,
∣
G
∣
=
q
|G|=q
∣G∣=q 为大素数, 任选
2
≤
d
≤
q
−
2
2\leq d\leq q-2
2≤d≤q−2,
P
=
d
G
P=dG
P=dG,
h
=
∣
E
p
∣
∣
G
∣
≤
4
h=\frac{|E_p|}{|G|}\leq 4
h=∣G∣∣Ep∣≤4.
避免选取非超奇异和反常椭圆曲线, p p p 达到 160bit, h ≤ 4 h\leq 4 h≤4, S = h P ≠ O S=hP\neq O S=hP=O.
公钥 ( P , G , E , q ) (P,G,E,q) (P,G,E,q), 私钥 d d d. - 加密: 生成
2
≤
r
≤
q
−
1
2\leq r\leq q-1
2≤r≤q−1,
r
≠
d
r\ne d
r=d.
( x 1 , y 1 ) = r G (x_1,y_1)=rG (x1,y1)=rG, ( x 2 , y 2 ) = r P (x_2,y_2)=rP (x2,y2)=rP, t = k ( x 2 ∣ y 2 ) t=k(x_2 | y_2) t=k(x2∣y2).
密钥派生函数 k k k: 32bit计数器 c t = 0 x 01 {\rm ct}={\rm 0x01} ct=0x01, 得到 ⌊ l e n v ⌋ \lfloor\frac{{\rm len}}{v}\rfloor ⌊vlen⌋ 个hash值 h = H ( x 2 ∣ y 2 ∣ c t ) h=H(x_2 | y_2 | {\rm ct}) h=H(x2∣y2∣ct), 并截断为 l e n {\rm len} len; 其中 l e n {\rm len} len 为 m m m 长度, v v v 为hash值长度, 一般采用SM3.
C 1 = x 1 ∣ y 1 C_1=x_1 | y_1 C1=x1∣y1, C 2 = m ⊕ t C_2=m\oplus t C2=m⊕t, C 3 = h ( x 2 ∣ m ∣ y 2 ) C_3=h(x_2 | m | y_2) C3=h(x2∣m∣y2), c = C 1 ∣ C 2 ∣ C 3 c=C_1 | C_2 | C_3 c=C1∣C2∣C3 - 解密:
(
x
2
,
y
2
)
=
d
C
1
(x_2,y_2)=dC_1
(x2,y2)=dC1,
t
=
k
(
x
2
∣
y
2
)
t=k(x_2 | y_2)
t=k(x2∣y2),
m
=
C
2
⊕
t
m=C_2\oplus t
m=C2⊕t.
u = H ( x 2 ∣ m ∣ y 2 ) u=H(x_2 | m | y_2) u=H(x2∣m∣y2), 验证 u = C 3 u=C_3 u=C3.
Hash函数
- Hash/杂凑/散列: 将任意长度消息变为固定长度的信息摘要/数字指纹/Hash值/杂凑值/散列值, 记 h = H ( m ) h=H(m) h=H(m).
- Hash函数性质
- 单向性(抗原像攻击): 给定 h h h, 找到 m ′ m' m′ 有 h ( m ′ ) = h h(m')=h h(m′)=h 在计算上不可行.
- 抗弱碰撞性(抗第二原像攻击): 给定 m m m, 找到另一 m ′ m' m′ 有 H ( m ) = H ( m ′ ) H(m)=H(m') H(m)=H(m′) 在计算上不可行.
- 抗强碰撞性: 找到一对 ( m , m ′ ) (m,m') (m,m′) 有 H ( m ) = H ( m ′ ) H(m)=H(m') H(m)=H(m′) 在计算上不可行.
- 随机性: 输出具有伪随机性.
- 有效性: 运算高效.
- 错误检测: 输入发生很小变化都会使得输出很大不同.
- 应用: 完整性保护; 消息认证码(MAC); 辅助公钥加密, 数字签名, 密钥交换.
- 消息填充: 加密分组为
l
l
l bit, 最后
m
m
m bit 小端序/大端序存放消息长度, 原消息填充 1bit “1” 和
s
s
sbit “0”, 有
l
∣
1
+
s
+
m
l|1+s+m
l∣1+s+m.
SHA-1/SM3: m + 1 + s ≡ 448 ( m o d 512 ) m+1+s\equiv 448({\rm mod}\ 512) m+1+s≡448(mod 512). - 迭代型结构(Merkle-Damgard): 每轮
l
l
l bit和上一轮输出一同加密得到下一轮输出.
SHA-1/SM3: 每 512bit 为一组; C V 0 = I V CV_0=IV CV0=IV, C V i = f ( C V i − 1 , M i − 1 ) CV_i=f(CV_{i-1},M_{i-1}) CVi=f(CVi−1,Mi−1), i = 1 , 2 , . . . , n i=1,2,...,n i=1,2,...,n, H ( M ) = C V n H(M)=CV_n H(M)=CVn.
Hash函数 | 摘要长度(bit) | 消息长度( 2 n 2^n 2n bit) | 分组长度(bit) | 字长度(bit) | 寄存器数量 | 迭代步骤 | 安全强度( 2 n 2^n 2n) |
---|---|---|---|---|---|---|---|
SHA-1 | 160 | <64(大端) | 512 | 32 | 5 | 80 | 80 |
SHA-256 | 256 | <64(大端) | 512 | 32 | 8 | 64 | 128 |
SM3 | 256 | <64(大端) | 512 | 32 | 8 | 64 | 128 |
SHA-384 | 384 | <128 | 1024 | 64 | 6 | 80 | 192 |
SHA-512 | 512 | <128 | 1024 | 64 | 8 | 80 | 256 |
HMAC
- MAC(Message Authentication Code, 消息认证码/密码校验和): 验证消息真实性.
共享密钥 k k k, 发送方发送 ( M A C = C k ( m ) , m ) ({\rm MAC}=C_k(m),m) (MAC=Ck(m),m), 接收方比较 C k ( m ′ ) = M A C ′ C_k(m')={\rm MAC}' Ck(m′)=MAC′. - HMAC: 基于Hash函数的MAC.
H M A C k = H [ ( k + ⊕ o p a d ) ∣ ∣ H [ ( k + ⊕ i p a d ) ∣ ∣ M ] ] {\rm HMAC}_k=H[(k^+\oplus {\rm opad}) || H[(k^+\oplus {\rm ipad}) || M]] HMACk=H[(k+⊕opad)∣∣H[(k+⊕ipad)∣∣M]].
Hash分组大小为 l l l bit : k + : k^+ :k+ 为左侧填充0至 l l l bit; o p a d {\rm opad} opad 为 ( 01011010 ) 2 (01011010)_2 (01011010)2 循环填充到 l l l bit; i p a d {\rm ipad} ipad 为 ( 00110110 ) 2 (00110110)_2 (00110110)2 循环填充到 l l l bit.
数字签名
- 数字签名: 验证消息真实性和身份合法性.
特点: 签名与文件绑定; 不可抵赖性; 不可伪造性; 第三方可验证性.
发送方签名 δ = s g n ( m , k d ) \delta={\rm sgn}(m,k_d) δ=sgn(m,kd), 接收方比较 v r f ( m ′ , k e ) = δ ′ {\rm vrf}(m',k_e)=\delta' vrf(m′,ke)=δ′.
RSA
- RSA: 素数
p
,
q
p,q
p,q,
n
=
p
q
n=pq
n=pq,
g
c
d
(
e
,
φ
(
n
)
)
=
1
{\rm gcd}(e,\varphi(n))=1
gcd(e,φ(n))=1,
φ
(
n
)
=
(
p
−
1
)
(
q
−
1
)
\varphi(n)=(p-1)(q-1)
φ(n)=(p−1)(q−1).
- 私钥 d ≡ e − 1 ( m o d φ ( n ) ) d\equiv e^{-1}({\rm mod}\ \varphi(n)) d≡e−1(mod φ(n)), 签名 δ = s g n ( m , d ) ≡ m d ( m o d n ) \delta={\rm sgn}(m,d)\equiv m^d({\rm mod}\ n) δ=sgn(m,d)≡md(mod n).
- 公钥 e e e, 验证 m ′ = v r f ( m ′ , e ) ≡ δ e ( m o d n ) m'={\rm vrf}(m',e)\equiv \delta^e({\rm mod}\ n) m′=vrf(m′,e)≡δe(mod n).
- 安全问题
- 共模伪造: δ 1 ≡ m 1 d ( m o d n ) \delta_1\equiv m_1^d({\rm mod}\ n) δ1≡m1d(mod n), δ 2 ≡ m 2 d ( m o d n ) \delta_2\equiv m_2^d({\rm mod}\ n) δ2≡m2d(mod n), 可得 δ 1 δ 2 ≡ ( m 1 m 2 ) d ( m o d n ) \delta_1\delta_2\equiv (m_1m_2)^d({\rm mod}\ n) δ1δ2≡(m1m2)d(mod n).
- 中间人攻击: 加密信息 c ≡ m e ( m o d n ) c\equiv m^e({\rm mod}\ n) c≡me(mod n), 伪造信息 c ′ ≡ r e m e ( m o d n ) c'\equiv r^em^e({\rm mod}\ n) c′≡reme(mod n), 签名 ( c ′ ) d ≡ r m ( m o d n ) (c')^d\equiv rm({\rm mod}\ n) (c′)d≡rm(mod n), 造成 m m m 泄漏.
- 一般不对消息直接签名, 而对消息的hash值签名; 加密密钥对和签名密钥对分离; 先签名再加密.
ElGamal型
- ElGamal: 大素数
p
p
p, 有循环群
F
p
∗
=
⟨
g
⟩
F_p^*=\langle g\rangle
Fp∗=⟨g⟩.
- 私钥 2 ≤ x ≤ p − 2 2\leq x\leq p-2 2≤x≤p−2, 签名 ( m , δ = ( r , s ) ) (m,\delta=(r,s)) (m,δ=(r,s)), 其中 r ≡ g k ( m o d p ) r\equiv g^k({\rm mod}\ p) r≡gk(mod p), s ≡ k − 1 ( m − r x ) ( m o d p − 1 ) s\equiv k^{-1}(m-rx)({\rm mod}\ p-1) s≡k−1(m−rx)(mod p−1), 选取 2 ≤ k ≤ p − 2 2\leq k\leq p-2 2≤k≤p−2 且 g c d ( k , p − 1 ) = 1 {\rm gcd}(k,p-1)=1 gcd(k,p−1)=1.
- 公钥 y ≡ g x ( m o d p ) y\equiv g^x({\rm mod}\ p) y≡gx(mod p), 验证 g m ≡ r s y r ( m o d p ) g^m\equiv r^sy^r({\rm mod}\ p) gm≡rsyr(mod p).
- 安全问题
k k k 一次性, 否则联立 δ 1 ≡ k − 1 ( m 1 − r x ) ( m o d p − 1 ) \delta_1 \equiv k^{-1}(m_1-rx)({\rm mod}\ p-1) δ1≡k−1(m1−rx)(mod p−1) 和 δ 1 ≡ k − 1 ( m 2 − r x ) ( m o d p − 1 ) \delta_1 \equiv k^{-1}(m_2-rx)({\rm mod}\ p-1) δ1≡k−1(m2−rx)(mod p−1), 造成私钥 x x x 泄漏. - DSA: 大素数
p
p
p 且大素因子
q
∣
p
−
1
q|p-1
q∣p−1,
q
q
q 至少160bit, 生成元
g
≡
h
p
−
1
q
(
m
o
d
p
)
>
1
g\equiv h^{\frac{p-1}{q}}({\rm mod}\ p)>1
g≡hqp−1(mod p)>1, 即
∣
g
∣
=
q
|g|=q
∣g∣=q.
- 私钥 2 ≤ x ≤ p − 2 2\leq x\leq p-2 2≤x≤p−2, 签名 ( m , δ = ( r , s ) ) (m,\delta=(r,s)) (m,δ=(r,s)), 其中 r ≡ ( g k ( m o d p ) ) ( m o d q ) r\equiv (g^k({\rm mod}\ p))({\rm mod}\ q) r≡(gk(mod p))(mod q), s = k − 1 ( H ( m ) + r x ) ( m o d q ) s=k^{-1}(H(m)+rx)({\rm mod}\ q) s=k−1(H(m)+rx)(mod q), 选取 2 ≤ k ≤ q − 2 2\leq k\leq q-2 2≤k≤q−2.
- 公钥 y = g x ( m o d p ) y=g^x({\rm mod}\ p) y=gx(mod p), 验证 r ≡ g u y v ( m o d q ) r\equiv g^uy^v({\rm mod}\ q) r≡guyv(mod q), 其中 u ≡ H ( m ) s − 1 ( m o d q ) u\equiv H(m)s^{-1}({\rm mod}\ q) u≡H(m)s−1(mod q), v ≡ r s − 1 ( m o d q ) v\equiv rs^{-1}({\rm mod}\ q) v≡rs−1(mod q).
- ECDSA: 椭圆曲线群
E
p
(
a
,
b
)
E_p(a,b)
Ep(a,b), 基点
∣
G
∣
=
n
|G|=n
∣G∣=n, 余因子
h
=
∣
E
p
∣
p
h=\frac{|E_p|}{p}
h=p∣Ep∣.
- 私钥 2 ≤ d ≤ n − 2 2\leq d\leq n-2 2≤d≤n−2, 签名 ( m , δ = ( r , s ) ) (m,\delta=(r,s)) (m,δ=(r,s)), 其中 k G = ( x 1 , y 1 ) kG=(x_1,y_1) kG=(x1,y1), r ≡ x 1 ( m o d n ) r\equiv x_1({\rm mod}\ n) r≡x1(mod n), s ≡ k − 1 ( H ( m ) + r d ) ( m o d n ) s\equiv k^{-1}(H(m)+rd)({\rm mod}\ n) s≡k−1(H(m)+rd)(mod n), 选取 2 ≤ k ≤ n − 2 2\leq k\leq n-2 2≤k≤n−2.
- 公钥 P = d G P=dG P=dG, 验证 r ≡ x 2 ( m o d n ) r\equiv x_2({\rm mod}\ n) r≡x2(mod n), 其中 u ≡ H ( m ) s − 1 ( m o d n ) u\equiv H(m)s^{-1}({\rm mod}\ n) u≡H(m)s−1(mod n), v ≡ r s − 1 ( m o d n ) v\equiv rs^{-1}({\rm mod}\ n) v≡rs−1(mod n), u G + v P = ( x 2 , y 2 ) uG+vP=(x_2,y_2) uG+vP=(x2,y2).
SM2
- 在SM2加密算法的基础上, 本质为ECEG.
- 初始化: 椭圆曲线群
E
p
E_p
Ep,
G
∈
E
p
G\in E_p
G∈Ep,
∣
G
∣
=
q
|G|=q
∣G∣=q 为大素数, 任选
2
≤
d
≤
q
−
2
2\leq d\leq q-2
2≤d≤q−2,
P
=
d
G
P=dG
P=dG,
h
=
∣
E
p
∣
∣
G
∣
≤
4
h=\frac{|E_p|}{|G|}\leq 4
h=∣G∣∣Ep∣≤4.
避免超奇异和反常椭圆曲线, p p p 达到 160bit, h ≤ 4 h\leq 4 h≤4, S = h P ≠ O S=hP\neq O S=hP=O.
公钥 ( P , G , E , q ) (P,G,E,q) (P,G,E,q), 私钥 d d d. - 签名: ( m , δ = ( r , s ) ) (m,\delta=(r,s)) (m,δ=(r,s)), 其中 k G = ( x 1 , y 1 ) kG=(x_1,y_1) kG=(x1,y1), r ≡ H ( Z ∣ M ) + x 1 ( m o d q ) r\equiv H(Z|M)+x_1({\rm mod}\ q) r≡H(Z∣M)+x1(mod q) 且 r ≠ 0 r\ne 0 r=0 及 r + k ≠ q r+k\ne q r+k=q, s ≡ ( 1 + d ) − 1 ( k − r d ) ( m o d q ) s\equiv (1+d)^{-1}(k-rd)({\rm mod}\ q) s≡(1+d)−1(k−rd)(mod q) 且 s ≠ 0 s\ne 0 s=0, 选取 2 ≤ k ≤ q − 2 2\leq k\leq q-2 2≤k≤q−2.
- 验证: r + s ≢ 0 ( m o d q ) r+s\not\equiv 0({\rm mod}\ q) r+s≡0(mod q) 且 r ≡ x 2 ( m o d q ) r\equiv x_2({\rm mod}\ q) r≡x2(mod q), 其中 s G + ( r + s ) P = ( x 2 , y 2 ) sG+(r+s)P=(x_2, y_2) sG+(r+s)P=(x2,y2).
身份认证
- 口令
- 安全问题: 弱口令易被暴力破解和字典攻击; 口令明文传输和明文保存易导致泄漏.
- 解决办法: 口令加盐Hash存储; 通过TSL传输.
- 挑战-应答
- 实现方案: 数字签名.
- 安全问题: 依赖于密钥管理; 需确保用户公钥的真实性和完整性以避免中间人攻击.
- ZKP(零知识证明): 使验证者(V)确信证明者§能够证明某一信息, 但无法获得其他任何信息.
- 基于DLP的认证协议: P向V证明知道私钥
x
x
x, 而不泄露
x
x
x;
p
p
p 为大素数, 公钥
y
≡
g
x
(
m
o
d
p
)
y\equiv g^x({\rm mod}\ p)
y≡gx(mod p).
- 承诺: P随机选取 2 ≤ k ≤ p − 2 2\leq k\leq p-2 2≤k≤p−2 并发送 r ≡ g k ( m o d p ) r\equiv g^k({\rm mod}\ p) r≡gk(mod p).
- 挑战: V随机发送 b ∈ { 0 , 1 } b\in\{0,1\} b∈{0,1}.
- 应答: P发送 s g n ≡ k + b x ( m o d p − 1 ) {\rm sgn}\equiv k+bx({\rm mod}\ p-1) sgn≡k+bx(mod p−1).
- 验证: V验证 g s ≡ r y b ( m o d p ) g^s\equiv ry^b({\rm mod}\ p) gs≡ryb(mod p).
- 重复 t t t 次, P欺骗成功概率为 1 2 t \frac{1}{2^t} 2t1.
- Schnorr协议: P向V证明知道私钥
x
x
x, 而不泄露
x
x
x;
p
p
p 为大素数, 大素数
q
∣
p
−
q
q|p-q
q∣p−q,
g
g
g 为模
q
q
q 原根, 公钥
y
≡
g
x
(
m
o
d
p
)
y\equiv g^x({\rm mod}\ p)
y≡gx(mod p).
- 承诺: P随机选取 2 ≤ k ≤ q − 2 2\leq k\leq q-2 2≤k≤q−2 并发送 r ≡ g k ( m o d p ) r\equiv g^k({\rm mod}\ p) r≡gk(mod p).
- 挑战: V随机发送 1 ≤ e ≤ 2 t < q 1\leq e\leq 2^t<q 1≤e≤2t<q.
- 应答: P发送 s ≡ k − e x ( m o d q ) s\equiv k-ex({\rm mod}\ q) s≡k−ex(mod q).
- 验证: V验证 r ≡ g s y e ( m o d p ) r\equiv g^sy^e({\rm mod}\ p) r≡gsye(mod p).
- 无需重复, P欺骗成功概率为 1 2 t \frac{1}{2^t} 2t1.
密钥管理
- 密钥管理原则
- 区分密钥管理的策略和机制
- 全程安全原则
- 最小权利原则
- 责任分离原则: 加密密钥不能用于签名
- 密钥分级原则: 高级密钥保护低级密钥
- 密钥按时更换原则
- 密钥满足特定安全性指标: 密钥长度足够; 避免弱密钥
- 密钥分级
- 初级密钥: 具体业务中直接使用.
- 中级(二级)密钥: 保护初级密钥, 生存周期较长.
- 高级(主)密钥:保护中级密钥, 应由硬件产生.
- 公钥数字证书管理
- 产生原因: 公钥密码体制中(加密或签名)公钥可以公开, 但完整性和真实性必须严格保护.
- 公钥数字证书(ITU 国际电信联盟 X.509 v3): 主体身份信息, 主体公钥, CA(可信签证机构)信息, CA签名, 有效期.
- PKI(公钥基础设施): 签发证书机构(CA), 注册登记证书机构(RA), 管理服务(存储和发布证书目录, 密钥管理, 时间戳), 证书管理及应用的法律法规.
密码学新方向
侧信道攻击
- 类别: 时间侧信道, 电磁侧信道, 能量侧信道(DPA, CPA, SPA), 光学侧信道, 声学侧信道.
- 时间侧信道攻击: Kocher发现并提出, 开启侧信道分析时代.
- 选择明文攻击; 利用不同明文的加密运算时间不同猜测密钥.
- 假设: T m → ∞ ∼ N ( μ , σ 2 ) T_{m\to\infty}\sim N(\mu, \sigma^2) Tm→∞∼N(μ,σ2), T 1 , T 2 , . . . , T N T_1,T_2,...,T_N T1,T2,...,TN 相互独立, 统计量 t 1 , . . . , t M t_1,...,t_M t1,...,tM 相互独立; 样本方差即为总体方差.
- 指标: 方差 v a r ( x ) = E ( [ ( X − E ( X ) ] 2 ) = σ 2 var(x)=E([(X-E(X)]^2)=\sigma^2 var(x)=E([(X−E(X)]2)=σ2; 信息熵 H ( x ) = − ∫ − ∞ + ∞ p ( x ) ln ( p ( x ) ) d x = 1 2 ln ( 2 π e σ 2 ) H(x)=-\int_{-\infty}^{+\infty}p(x)\ln(p(x))dx=\frac{1}{2}\ln(2\pi e\sigma^2) H(x)=−∫−∞+∞p(x)ln(p(x))dx=21ln(2πeσ2); 越小说明猜测越准确.
- RSA防御时间测信道攻击
- 增加随机延迟.
- 盲处理明文再加密.
- 快速模幂算法分支平衡化: 增加空操作; 蒙哥马利乘法.
- 蒙哥马利模乘.
同态加密
同态加密 | 类别 | 密文加 | 密文乘 | 难题 |
---|---|---|---|---|
Paillier | 加法同态(半同态) | ∞ \infty ∞ | 0 | 大整数因子分解 |
ElGamal | 乘法同态(半同态) | 0 | ∞ \infty ∞ | DLP(离散对数难题) |
BFV | 部分同态(半同态) | ∞ \infty ∞ | 有限次 | RLWE(环上误差还原难题) |
BFV with Bootstrapping | 全同态 | ∞ \infty ∞ | ∞ \infty ∞ | RLWE |
- 同态加密应用
- 安全向量内积: A,B 各有一向量, 均希望计算两向量内积而不发送彼此信息.
- 安全数据库: 云端存放并计算数据, 但不希望数据暴露给云端.
- 安全聚合: 联邦学习场景, 仅在参与方较多时才能起到保护作用.