复习自用,仅供参考~
概论
- CIA: 机密性(Confidentiality), 完整性(Intergrity), 可用性(Availability).
- 体制: (M,C,K1,K2,E,D)(M,C,K_1,K_2,E,D)(M,C,K1,K2,E,D) 明文空间, 密文空间, 加密密钥空间, 解密密钥空间, 加密空间, 解密空间; 加密变换 c=Ek1(m)c=E_{k_1}(m)c=Ek1(m), 解密变换 m=Dk2(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≡am+b(mod n)c\equiv am+b({\rm mod}\ n)c≡am+b(mod n).
- 解密: m≡a−1(c−b)(mod n)m\equiv a^{-1}(c-b)({\rm mod}\ n)m≡a−1(c−b)(mod n).
- aaa 存在模 nnn 的逆, 故密钥共 n×(φ(n)−1)n\times (\varphi(n)-1)n×(φ(n)−1) 种.
Vigenere
- Vigenere密码: 多表代换
- 加密: c≡m+k(mod n)c\equiv m+k({\rm mod}\ n)c≡m+k(mod n).
- 解密: m≡c−k(mod n)m\equiv c-k({\rm mod}\ n)m≡c−k(mod n).
Vernam
- Vernam密码: 多表代换, 序列密码基础
- 加密: ci=mi⊕kic_i=m_i\oplus k_ici=mi⊕ki.
- 解密: mi=ci⊕kim_i=c_i\oplus k_imi=ci⊕ki.
- oplusoplusoplus 为异或/模2加法/不进位加法/GF(2)GF(2)GF(2)上加法.
统计分析
- 置换不改变字母, 单表代换不改变频率分布, 多表代换频率趋于均匀分布.
- 粗糙度: M.R=∑i=025(pi−126)2=∑i=025pi2−0.0385{\rm M.R}=\sum_{i=0}^{25}(p_i-\frac{1}{26})^2=\sum_{i=0}^{25}p_i^2-0.0385M.R=∑i=025(pi−261)2=∑i=025pi2−0.0385. 明文或单表代换时 M.R≈0.027{\rm M.R}\approx 0.027M.R≈0.027, 更接近 000 则更可能为多表代换.
- 重合指数: IC=∑i=025pi2{\rm IC}=\sum_{i=0}^{25}p_i^2IC=∑i=025pi2. 多表代换时 IC≈0.0655{\rm IC}\approx 0.0655IC≈0.0655. 相同字母间隔为 d1,...,dnd_1,...,d_nd1,...,dn, 则密钥可能长度为 gcd(d1,...,dn){\rm gcd}(d_1,...,d_n)gcd(d1,...,dn).
序列密码
- 同步序列密码: 密钥序列产生与明密文无关; 通信双方必须保持精确同步; 错误只影响对应比特, 对失步敏感.
- 自同步序列密码: 密钥序列产生与明文或密文相关; 加解密时造成错误传播, 但错误传播有界.
线性反馈移位寄存器(LFSR)
- 移位寄存器: 值 S=(s0,s1,...,sn−1)S=(s_0,s_1,...,s_{n-1})S=(s0,s1,...,sn−1) 为状态.
线性反馈函数: sn−1←f(s0,s1,...,sn−1)=gn−1sn−1+...+g1s1+g0s0s_{n-1}\gets f(s_0,s_1,...,s_{n-1})=g_{n-1}s_{n-1}+...+g_1s_1+g_0s_0sn−1←f(s0,s1,...,sn−1)=gn−1sn−1+...+g1s1+g0s0, gi∈GF(2) ⟹ g_i\in GF(2) \impliesgi∈GF(2)⟹ 连接多项式 g(x)=gnxn+...+g0∈GF(2)[x]g(x)=g_nx^n+...+g_0\in GF(2)[x]g(x)=gnxn+...+g0∈GF(2)[x]. - LFSR
S0=OS_0=OS0=O 则 Si=OS_i=OSi=O; S0≠OS_0\ne OS0=O 则 Si≠OS_i\ne OSi=O.
本原多项式: f(x)∈F[x]f(x)\in F[x]f(x)∈F[x], 有 degf=n{\rm deg}f=ndegf=n, inf{p∈Z+:f(x)∣xp−1}=2n−1\inf \{p\in\mathbb{Z}_+: f(x)|x^{p-1}\}=2^n-1inf{p∈Z+:f(x)∣xp−1}=2n−1.
g(x)∈GF(2)[x]g(x)\in GF(2)[x]g(x)∈GF(2)[x] 为本原多项式 ⟺ \iff⟺ 输出序列周期达到最大值 2n−12^n-12n−1; 此时输出序列称为 mmm-序列. - LFSR分析
截获长度 l≥2(2n−1)l\geq 2(2^n-1)l≥2(2n−1) 的明密文对 (c,m)(c,m)(c,m), 则 k=c⊕mk=c\oplus mk=c⊕m, 有状态 Si,...,Si+n+1S_i,...,S_{i+n+1}Si,...,Si+n+1 .
记 X=(Si,...,Sn)X=(S_i,...,S_n)X=(Si,...,Sn), Y=(Si+1,...,Si+n+1)Y=(S_{i+1},...,S_{i+n+1})Y=(Si+1,...,Si+n+1), 有 Y≡HX(mod 2)Y\equiv HX({\rm mod}\ 2)Y≡HX(mod 2).
mmm-序列时, XXX满秩, H≡YX−1(mod 2)H\equiv YX^{-1}({\rm mod}\ 2)H≡YX−1(mod 2) 为连接多项式的友矩阵, O(n3)O(n^3)O(n3) 内可求得.
H=(010...0001...0...000...1g0g1g2...gn−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乘/GF(2)GF(2)GF(2)上乘法.
- LFSR的非线性组合: 线性部分为前馈电路, 确保序列的长周期性和均匀性.
- 非线性分组码
A5
- 欧洲移动通信GSM标准, 手机到基站间的链路语音加密; 算法未公开, 区别主要在连接多项式上.
- 三个较短的LFSR组成, 64位种子密钥(19+22+23).
g1(x)=x19+x18+x17+x14+1g2(x)=x22+x21+1g3(x)=x23+x22+x21+x8+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表; iii 遍历 0−2550-2550−255, j≡j+S[i]+T[i](mod256)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].
- 密钥序列产生: iii 循环遍历 0−2550-2550−255, j≡j+S[i](mod256)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](mod256)t\equiv S[i]+S[j]({\rm mod}256)t≡S[i]+S[j](mod256), ki=S[t]k_i=S[t]ki=S[t].
- 安全问题: 存在弱密钥使得初始置换后 SSS 不变, 即 i=ji=ji=j; 存在弱密钥使得子密钥序列在100万字节内完全重复; 存在信息泄漏漏洞和加密漏洞; 种子密钥有效长度为128bit.
ZUC
- 国密; 4G宽带无线通信系统(LTE)国际标准; 分为机密性128-EEA3和完整性128-EIA3; 本质为对LFSR进行非线性组合.
- 三层结构: LFSR, BR(比特重组), 非线性F函数(唯一非线性部件, 安全性).

⊞\boxplus⊞ 为GF(232)GF(2^{32})GF(232) 上加法; ∣|∣ 为连接字符串; H_HH 为高16bit; L_LL 为低16bit; <<<< < <<<< 为循环左移.- LFSR: 本原多项式g(x)∈GF(231−1)[x]g(x)\in GF(2^{31}-1)[x]g(x)∈GF(231−1)[x], g(x)=x16−215x15−217x13−221x10−220x4−28−1g(x)=x^{16}-2^{15}x^{15}-2^{17}x^{13}-2^{21}x^{10}-2^{20}x^{4}-2^8-1g(x)=x16−215x15−217x13−221x10−220x4−28−1;
输出 mmm 序列周期 (231−1)16−1(2^{31}-1)^{16}-1(231−1)16−1; 16个31bit 寄存器 S0,...,S15∈[1,231−1]S_0,...,S_{15}\in [1,2^{31}-1]S0,...,S15∈[1,231−1]. - BR: X0=S15H∣S14LX_0=S_{15H}|S_{14L}X0=S15H∣S14L, X1=S11L∣S9HX_1=S_{11L}|S_{9H}X1=S11L∣S9H ,X2=S7L∣S5HX_2=S_{7L}|S_{5H}X2=S7L∣S5H, X3=S2L∣S0HX_3=S_{2L}|S_{0H}X3=S2L∣S0H.
- F: W=(X0⊕R1)⊞R2W=(X_0\oplus R_1)\boxplus R_2W=(X0⊕R1)⊞R2, W1=R1⊞X1W_1=R_1\boxplus X_1W1=R1⊞X1, W2=R2⊞X2W_2=R_2\boxplus X_2W2=R2⊞X2;
R1=S(L1(W1L∣W2H))R_1=S(L_1(W_{1L}|W_{2H}))R1=S(L1(W1L∣W2H)), R2=S(L2(W2L∣W1H))R_2=S(L_2(W_{2L}|W_{1H}))R2=S(L2(W2L∣W1H));
L1(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),
L2(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);
SSS 盒为 (S0,S1,S0,S1)(S_0,S_1,S_0,S_1)(S0,S1,S0,S1), 每8bit作为索引, 返回 SSS 盒中对应的8bit. - 输出密钥序列: Z=W⊕X3Z=W\oplus X_3Z=W⊕X3.
- LFSR: 本原多项式g(x)∈GF(231−1)[x]g(x)\in GF(2^{31}-1)[x]g(x)∈GF(231−1)[x], g(x)=x16−215x15−217x13−221x10−220x4−28−1g(x)=x^{16}-2^{15}x^{15}-2^{17}x^{13}-2^{21}x^{10}-2^{20}x^{4}-2^8-1g(x)=x16−215x15−217x13−221x10−220x4−28−1;
- 运行流程
- 128bit 初始密钥和 128bit 初始向量装入寄存器 S0,...,S15S_0,...,S_{15}S0,...,S15.
- 128bit 初始密钥分为 16 个 8bit: KEY=k0∣∣k1∣∣...∣∣k15{\rm KEY}=k_0 || k_1 ||...|| k_{15}KEY=k0∣∣k1∣∣...∣∣k15.
- 128bit 初始向量分为 16 个 8bit: IV=iv0∣∣iv1∣∣...∣∣iv15{\rm IV}=iv_0||iv_1||...||iv_{15}IV=iv0∣∣iv1∣∣...∣∣iv15.
- 240bit 常量分为 16个 15bit: D=d0∣∣d1∣∣...∣∣d15D=d_0||d_1||...||d_15D=d0∣∣d1∣∣...∣∣d15.
- Si=ki∣∣di∣∣iviS_i=k_i||d_i||iv_iSi=ki∣∣di∣∣ivi.
- 初始化 FFF, R1=0R_1=0R1=0, R2=0R_2=0R2=0.
- 初始化模式运行32次: BR→\to→W=F(X_0,X_1,X_2)→\to→LFSR; 不输出.
- 工作模式运行1次并舍弃 WWW: BR→\to→W=F(X_0,X_1,X_2)→\to→LFSR.
- 密钥序列产生: 工作模式运行, 每时钟节拍输出 32bit.
- 128bit 初始密钥和 128bit 初始向量装入寄存器 S0,...,S15S_0,...,S_{15}S0,...,S15.
- 128-EEA3参数表
| 输入参数 | 长度(bit) | 含义 |
|---|---|---|
| COUNT | 32 | 计数器 |
| BEARER | 5 | 承载层标识 |
| DIRECTION | 1 | 传输方向标志 |
| CK | 128 | 明文序列bit长度 |
| IBS | LENGTH | 输入序列 |
| 输出参数 | 长度(bit) | 含义 |
|---|---|---|
| OBS | LENGTH | 输出序列 |
ki=ckik_i=ck_iki=cki, i=0,1,...,15i=0,1,...,15i=0,1,...,15.
iv0=COUNT0iv_0={\rm COUNT}_0iv0=COUNT0, iv1=COUNT1iv_1={\rm COUNT}_1iv1=COUNT1, iv2=COUNT2iv_2={\rm COUNT}_2iv2=COUNT2, iv3=COUNT3iv_3={\rm COUNT}_3iv3=COUNT3;
iv4=BEARER∣DIRECTION∣00iv_4={\rm BEARER}|{\rm DIRECTION}|00iv4=BEARER∣DIRECTION∣00, iv5=iv6=iv7=00000000iv_5=iv_6=iv_7=00000000iv5=iv6=iv7=00000000;
ivj+8=ivjiv_{j+8}=iv_jivj+8=ivj, j=8,9,...,15j=8,9,...,15j=8,9,...,15.
- 安全问题
抵御多种已知攻击: 弱密钥, Guess-and-Determine(猜测-决定)攻击, Binary-Decision-Tree(二叉决策树)攻击, 线性区分攻击, 代数攻击, 选择初始向量攻击.
主要威胁为侧信道攻击: DPA攻击.
分组密码
- 本质为单表代换和置换, 复杂多轮非线性, 通过混淆和扩散实现.
- 混淆: 密钥和密文间依赖关系复杂, 抗统计分析.
- 扩散: 明文每 bit 影响尽可能多的密文 bit.
- 香农乘积密码
- 幂等密码: S2=SS^2=SS2=S; 不会增强安全性.
- 迭代密码: SnS^nSn; 通过简单密码得到高强度密码; 分组密码和hash函数的核心思想.
- 组件
- S盒: 混淆; 非线性代换; 安全强度, 抗差分攻击和线性攻击能力; 规模越大, 非线性程度越高, 混淆性能越好, 实现效率越低.
- P置换: 线性置换; S盒后将混淆效应扩散.
- 轮函数F: 快速实现密钥和明文的混淆扩散; 复杂性和轮数决定了实现效率.
- 密钥扩展: 生成轮密钥(子密钥); 密钥与密文独立, 抗统计分析, 抗弱密钥, 结果简单易于实现, 种子密钥影响均衡.
| 结构模型 | 特点 | 代表算法 |
|---|---|---|
| S-P网络 | 每轮异或密钥后, S盒分组小块混淆扩散, P置换整体扩散, Ni=F(Ni−1⊕Ki)N_i=F(N_{i-1}\oplus K_i)Ni=F(Ni−1⊕Ki) | PRESENT, AES |
| Feistel网络 | 分为左右两部分, Ri=F(Ri−1,Ki)⊕Li−1R_i=F(R_{i-1},K_i)\oplus L_{i-1}Ri=F(Ri−1,Ki)⊕Li−1, Li=Ri−1L_i=R_{i-1}Li=Ri−1, 最后一轮不做对换; 同个算法加解密 | DES |
| Lai-Massey | 16bit 模 216+12^{16}+1216+1乘法群, 16bit 模 2162^{16}216 加法群, GF[2]/f(x)GF[2]/f(x)GF[2]/f(x) 加法群, degf=16{\rm deg}f=16degf=16 | IDEA |
| 滑动窗口 | 广义Feistel网络; 轮函数, 密文链接滑动 | SM4 |
| 工作模式 | 含义 | 特点 |
|---|---|---|
| ECB(Eletronic Code Book)电子密码本 | 分组用相同密钥加密; 相同明文产生相同密文 | 简单快速, 可并行 |
| CBC(Ciper Block Chaining)密码分组链接 | 初始化 iviviv 得到第一组密文, 第一组密文与第二组明文异或后再加密 | TSL及IPSEc协议推荐; 仅解密支持并行 |
| CFB(Cipher Feedback)密文反馈 | 初始化 iviviv 得到密文 EEE, vivivi 左移 nnn 位, 密文 EEE 与明文异或后得到密文 CCC, CCC 高位 nnn 位填入 vivivi | 支持流式数据, 错误有界; 仅解密支持并行 |
| OFB(Output Feedback)输出反馈 | 初始化 iviviv 得到密文 EEE, vivivi 左移 nnn 位, 密文 EEE 与高位 nnn 位填入 vivivi, 密文 EEE 与明文异或后得到密文 CCC | 支持流式数据, 错误有界; 不支持并行 |
| CTR(Counter)计数器 | 自增算子加密后与明文异或得到密文 | 相当于一次一密; 可并行 |
| 分组密码 | 网络结构 | 分组长度(bit) | 密钥长度(bit) | 子密钥长度(bit) | 轮数 | SSS 盒规模 | 结构特点 |
|---|---|---|---|---|---|---|---|
| DES | Festal网络 | 64 | 56(+8) | 48 | 16 | 6进4出 | 对合 |
| 3-DES | Festal网络 | 192 | 112(K3=K1K_3=K_1K3=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表置换得到 CiC_iCi 和 DiD_iDi (各28bit), 循环左移 lsils_ilsi 位;
经PC2表置换得到第 iii 轮子密钥 KiK_iKi (48bit);
置换表中元素 ptipt_{i}pti 意为将待置换中的第 ptipt_{i}pti 位置换到第iii位. -
初始置换与结束逆置换
明(密)文(64bit)经IP表置换进入加密;
完成加(解)密后经IPR表置换得到密(明)文(64bit). -
轮函数
32bit输入经E表置换扩充到48bit;
与子密钥(48bit)异或后, 经S盒压缩回32bit(混淆), 再经P表置换得到32bit输出(扩散);
S盒6位输入 b1b2b3b4b5b6b_1b_2b_3b_4b_5b_6b1b2b3b4b5b6, 输出sb1b6,b2b3b4b5s_{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⊕11ef00)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 密钥).
- GF(2)[x]GF(2)[x]GF(2)[x] 上运算
GF(2)GF(2)GF(2) 上多项式域 GF(28)≅GF(2)[x]/(x8+x4+x3+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)=b7x7+b6x6+b5x5+b4x4+b3x3+b2x2+b1x+b0b_{(8)}=b_7x^7+b_6x^6+b_5x^5+b_4x^4+b_3x^3+b_2x^2+b_1x+b_0b(8)=b7x7+b6x6+b5x5+b4x4+b3x3+b2x2+b1x+b0;
乘法需对既约多项式 m(x)=x8+x4+x3+x+1m(x)=x^8+x^4+x^3+x+1m(x)=x8+x4+x3+x+1 取模, 乘法逆元可由扩展Euclid算法得到.
考虑 xb(8)=(b(8)<<1)⊕m(x)xb_{(8)}=(b_{(8)}< < 1)\oplus m(x)xb(8)=(b(8)<<1)⊕m(x), 高次乘法可重复 xxx 乘实现. - GF(28)[x]GF(2^8)[x]GF(28)[x] 上运算
GF(28)GF(2^8)GF(28) 上 degf≤3degf\leq 3degf≤3 多项式环 GF(28)/[x4+1]GF(2^8)/[x^4+1]GF(28)/[x4+1] 中元素为 b(32)=B3x3+B2x2+B1x+B0b_{(32)}=B_3x^3+B_2x^2+B_1x+B_0b(32)=B3x3+B2x2+B1x+B0;
乘法需对(非既约)多项式 x4+1x^4+1x4+1 取模.
考虑 xb(32)=b(32)>>8xb_{(32)}=b_{(32)}> >8xb(32)=b(32)>>8, 高次乘法可视为 GF(28)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∤ i4 \not|\ i4∣ i;
w[i]=w[i−4]⊕S(w′[i−1])⊕Rcon[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∣i4 | i4∣i;
即每个字循环左移1字节后进行S盒置换. - 轮函数: 轮密钥加(即子密钥异或) →\to→ (逆)字节代换 →\to→ (逆)行位移 →\to→ (逆)列混合; 最后一轮(逆)列混合改为轮密钥加.
- 字节代换: 取每个字节在 GF(28)GF(2^8)GF(28) 上的逆后进行仿射变换, 可等效为S盒置换;
- 逆字节代换: 逆仿射变换再取逆, 可等效为逆S盒置换.
- 行位移: 第 i=0,1,2,3i=0,1,2,3i=0,1,2,3 个字循环右移 iii 字节;
- 逆行位移: 第 iii 个字循环左移 iii 字节.
- 列混合: 按列的字在 GF(28)[x4+1]GF(2^8)[x^4+1]GF(28)[x4+1] 上与 a(x)=0x03x3+0x01x2+0x01x+0x02a(x)={\rm 0x03}x^3+{\rm 0x01}x^2+{\rm 0x01}x+{\rm 0x02}a(x)=0x03x3+0x01x2+0x01x+0x02 相乘, 可等效为 GF(28)GF(2^8)GF(28) 上的矩阵乘法;
- 逆列混合: 与 a−1(x)=0x0Bx3+0x0Dx2+0x09x+0x0Ea^{-1}(x)={\rm 0x0B}x^3+{\rm 0x0D}x^2+{\rm 0x09}x+{\rm 0x0E}a−1(x)=0x0Bx3+0x0Dx2+0x09x+0x0E 相乘; 可等效为 GF(28)GF(2^8)GF(28) 上的矩阵乘法.
- 安全问题: 主流数据加密标准; 无弱密钥, 128bit 密钥空间可达 21282^{128}2128; 主要威胁是侧信道攻击(能量侧信道, 电磁侧信道, 故障注入).
SM4
- 国密, ISO/IEC 国际标准; 128bit 密钥 32 轮非平衡 Feistel 网络(滑动窗口).
- 密钥更新: SSS盒置换 →\to→ LLL 线性变换.
初始密钥 (MK0,MK1,MK2,MK3)(MK_0,MK_1,MK_2,MK_3)(MK0,MK1,MK2,MK3), Ki=MKi⊕FKiK_i=MK_i\oplus FK_iKi=MKi⊕FKi ,rki=Ki+4=Ki⊕T(Ki+1⊕Ki+2⊕Ki+3⊕CKi)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);
FKiFK_iFKi 为系统参数, CKiCK_iCKi 为固定参数, T(B)=L(S(B0)∣S(B1)∣S(B2)∣S(B3))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盒置换输入字节 b1b2b3b4b5b6b7b8b_1b_2b_3b_4b_5b_6b_7b_8b1b2b3b4b5b6b7b8, 输出字节 sb1b2b3b4,b5b6b7b8s_{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→ SSS盒置换 →\to→ L′L'L′ 线性变换.
Xi+4=Xi⊕T′(Xi+1⊕Xi+2⊕Xi+3⊕rKi)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(B0)∣S(B1)∣S(B2)∣S(B3))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). - 反序输出: 输入 (X1,X2,X3,X4)(X_1,X_2,X_3,X_4)(X1,X2,X3,X4), 输出 (Y1,Y2,Y3,Y4)=(X35,X34,X33,X32)(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网络.
超级轻量级, 适用于资源受限环境. - 密钥更新:
初始密钥 k79k78...k0k_{79}k_{78}...k_{0}k79k78...k0.
循环左移 61bit; 高 4bit S盒置换;
轮数加 k19k18k17k16k15←k19k18k17k16k15⊕roundk_{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 k79k78...k16k_{79}k_{78}...k_{16}k79k78...k16 为子密钥. - 轮函数: 轮密钥加 →\to→ SSS 盒置换 →\to→ PPP 置换.
S盒输入 4bit b1b2b3b4b_1b_2b_3b_4b1b2b3b4, 输出4bit sb1b2b3b4s_{b_1b_2b_3b_4}sb1b2b3b4;
P置换对 64bit 重新排列.
公钥密码
- 对称加密问题
- 密钥管理困难: nnn 个实体的网络需要 (n−1)n2\frac{(n-1)n}{2}2(n−1)n 个密钥及同等数量的保密信道.
- 难以解决签名和认证问题: 接收方可以伪造原文; 发送方可以否认行为.
- 非对称加密基本条件
- 安全: ke≠kdk_e\ne k_dke=kd 且由 kek_eke 不能得到 kdk_dkd;
- 保密: D(E(m))=mD(E(m))=mD(E(m))=m;
- EEE 和 DDD 高效;
- 保真: E(D(m))=mE(D(m))=mE(D(m))=m.
单向陷门函数: y=f(x)y=f(x)y=f(x) 满足: (1)给定 xxx, 计算 yyy 很容易; (2)给定yyy, 不掌握陷门, 计算 x=f−1(y)x=f^{-1}(y)x=f−1(y) 很困难; (3)给定yyy, 掌握陷门, 计算 xf−1(y)xf^{-1}(y)xf−1(y) 很容易.
- 数学难题
- 大合数分解难题: 大素数乘积容易 p×q=np\times q=np×q=n, 大合数分解困难 n=p×qn=p\times qn=p×q.
- 离散对数难题(DLP): 有限域 GF(p)GF(p)GF(p) 上生成元幂乘容易 ab=ca^b=cab=c, 求对数困难 logac=b\log_a c=blogac=b.
- 椭圆曲线离散对数难题(ECDLP): 椭圆曲线群 Ep(a,b)E_p(a,b)Ep(a,b) 中基点倍乘容易 dP=QdP=QdP=Q, 求倍数困难 d=QPd=\frac{Q}{P}d=PQ.
- 误差还原难题(LWE): 有限域 GF(p)GF(p)GF(p) 上矩阵乘法加误差容易 v=As+ev=As+ev=As+e, 解带噪音的线性方程组困难 s=A−1(v−e)s=A^{-1}(v-e)s=A−1(v−e).
- 大合数分解难题: 大素数乘积容易 p×q=np\times q=np×q=n, 大合数分解困难 n=p×qn=p\times qn=p×q.
- 工作方式
- 发送方 AAA: 先用发送方私钥 kAdk_{Ad}kAd 签名 s=D(m,kAd)s=D(m,k_{Ad})s=D(m,kAd), 再用接收方公钥 kBek_{Be}kBe 加密 c=E(s,kBe)c=E(s,k_{Be})c=E(s,kBe).
- 接收方 BBB: 先用接收方私钥 kBdk_{Bd}kBd 解密 s=E(c,kBd)s=E(c,k_{Bd})s=E(c,kBd), 再用发送方公钥 kAek_{Ae}kAe 验证 m=D(s,kAe)m=D(s,k_{Ae})m=D(s,kAe).
- 机密性: 公钥加密, 私钥解密.
- 真实性: 私钥签名, 公钥验证.
RSA
- RSA: 素数p,qp,qp,q, n=pqn=pqn=pq, gcd(e,φ(n))=1{\rm gcd}(e,\varphi(n))=1gcd(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=Ee,n(m)≡me(mod n)c=E_{e,n}(m)\equiv m^e({\rm mod}\ n)c=Ee,n(m)≡me(mod n).
- 私钥d≡e−1(mod φ(n))d\equiv e^{-1}({\rm mod}\ \varphi(n))d≡e−1(mod φ(n)), 解密 m=Dd,n(m)≡md(mod n)m=D_{d,n}(m)\equiv m^d({\rm mod}\ n)m=Dd,n(m)≡md(mod n).
- RSA参数选取
p,qp,qp,q 足够大, 一般场景使 nnn 达到1024bit, 重要场景2048bit.
p,qp,qp,q 为强素数, p−1,p+1,q−1,q+1p-1,p+1,q-1,q+1p−1,p+1,q−1,q+1 中均无除 222 外的小因子.
p,qp,qp,q 位数不能相差过大或过小.
私钥 d≠ed\ne ed=e.
gcd(p−1,q−1){\rm gcd}(p-1,q-1)gcd(p−1,q−1) 尽可能小, 最好为2; 以避免密文迭代攻击.
eee 应保证 me≪nm^e\ll nme≪n; 有人建议为素数 216+1=655372^{16}+1=65537216+1=65537, 二进制表示中仅含两位 111, 加密速度较快.
ddd 应较小以保证解密速度, 但确保d≪n4d\ll \frac{n}{4}d≪4n.
多个用户不得共用同一个模 nnn; 以避免共模攻击. - RSA算法
- 大素数验证: Miller-Rabin测试.
- 加密优化算法: 快速模幂, Montgomery.
- 解密优化算法: CRT, 快速模幂, Montgomery.
ElGamal型
- D-H协议: 大素数 ppp 和模 ppp 原根 ggg, 任选 2≤x,y≤p−22\leq x,y\leq p-22≤x,y≤p−2.
- 公钥 (p,g)(p,g)(p,g), 私钥 x,yx,yx,y.
- 握手: kX→Y≡gx(mod p)k_{X\to Y}\equiv g^x({\rm mod}\ p)kX→Y≡gx(mod p), kY→X≡gy(mod p)k_{Y\to X}\equiv g^y({\rm mod}\ p)kY→X≡gy(mod p).
- 密钥: k≡kY→Xx≡kX→Yy≡gxy(mod 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: 椭圆曲线群 EpE_pEp, G∈EpG\in E_pG∈Ep, ∣G∣=q|G|=q∣G∣=q 为大素数, 任选 2≤a,b≤q−22\leq a,b\leq q-22≤a,b≤q−2.
- 公钥 (p,G)(p,G)(p,G), 私钥 x,yx,yx,y.
- 握手: kA→B=aGk_{A\to B}=aGkA→B=aG, kB→A=bGk_{B\to A}=bGkB→A=bG.
- 密钥: k=akB→A=bkA→B=(ab)Gk=ak_{B\to A}=bk_{A\to B}=(ab)Gk=akB→A=bkA→B=(ab)G.
- ElGamal: 大素数 ppp 和模 ppp 原根 ggg, 任选 2≤a≤p−22\leq a\leq p-22≤a≤p−2, Ya≡ga(mod p)Y_a\equiv g^a({\rm mod}\ p)Ya≡ga(mod p).
- 公钥 (p,g,Ya)(p,g,Y_a)(p,g,Ya), 加密 u≡gk(mod p)u\equiv g^k({\rm mod}\ p)u≡gk(mod p), v≡mYak(mod p)v\equiv mY_a^k({\rm mod}\ p)v≡mYak(mod p), c=Ep,g,Ya,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−22\leq k\leq p-22≤k≤p−2, k≠ak\ne ak=a.
- 私钥 aaa, 解密 m≡Da(c)≡vua(mod p)m\equiv D_a(c)\equiv \frac{v}{u^a}({\rm mod}\ p)m≡Da(c)≡uav(mod p).
- 参数选取: ppp 足够大, 一般场景512bit, 重要场景1024bit.
- ECEG: 椭圆曲线群 EpE_pEp, G∈EpG\in E_pG∈Ep, ∣G∣=q|G|=q∣G∣=q 为大素数, 任选 2≤d≤q−22\leq d\leq q-22≤d≤q−2, P=dGP=dGP=dG.
- 公钥 (P,G,E,q)(P,G,E,q)(P,G,E,q), 加密 C1=rGC_1=rGC1=rG, C2=M+rPC_2=M+rPC2=M+rP, c=EEp,P,G,r(M)=C1,C2c=E_{E_p,P,G,r}(M)=\\{C_1,C_2\\}c=EEp,P,G,r(M)=C1,C2, 任选 2≤r≤q−22\leq r\leq q-22≤r≤q−2, r≠dr\ne dr=d.
- 私钥 ddd, 解密 M=DEp,d(C)=C2−dC1M=D_{E_p,d}(C)=C_2-dC_1M=DEp,d(C)=C2−dC1.
- 参数选取: ppp 足够大, 一般为160bit; 余因子 h=∣Ep∣∣G∣≤4h=\frac{|E_p|}{|G|}\leq 4h=∣G∣∣Ep∣≤4; 避免选用超奇异和反常椭圆曲线.
SM2
- 本质为ECEG.
- 初始化: 椭圆曲线群 EpE_pEp, G∈EpG\in E_pG∈Ep, ∣G∣=q|G|=q∣G∣=q 为大素数, 任选 2≤d≤q−22\leq d\leq q-22≤d≤q−2, P=dGP=dGP=dG, h=∣Ep∣∣G∣≤4h=\frac{|E_p|}{|G|}\leq 4h=∣G∣∣Ep∣≤4.
避免选取非超奇异和反常椭圆曲线, ppp 达到 160bit, h≤4h\leq 4h≤4, S=hP≠OS=hP\neq OS=hP=O.
公钥 (P,G,E,q)(P,G,E,q)(P,G,E,q), 私钥 ddd. - 加密: 生成 2≤r≤q−12\leq r\leq q-12≤r≤q−1, r≠dr\ne dr=d.
(x1,y1)=rG(x_1,y_1)=rG(x1,y1)=rG, (x2,y2)=rP(x_2,y_2)=rP(x2,y2)=rP, t=k(x2∣y2)t=k(x_2 | y_2)t=k(x2∣y2).
密钥派生函数 kkk: 32bit计数器 ct=0x01{\rm ct}={\rm 0x01}ct=0x01, 得到 ⌊lenv⌋\lfloor\frac{{\rm len}}{v}\rfloor⌊vlen⌋ 个hash值 h=H(x2∣y2∣ct)h=H(x_2 | y_2 | {\rm ct})h=H(x2∣y2∣ct), 并截断为 len{\rm len}len; 其中 len{\rm len}len 为 mmm 长度, vvv 为hash值长度, 一般采用SM3.
C1=x1∣y1C_1=x_1 | y_1C1=x1∣y1, C2=m⊕tC_2=m\oplus tC2=m⊕t, C3=h(x2∣m∣y2)C_3=h(x_2 | m | y_2)C3=h(x2∣m∣y2), c=C1∣C2∣C3c=C_1 | C_2 | C_3c=C1∣C2∣C3 - 解密: (x2,y2)=dC1(x_2,y_2)=dC_1(x2,y2)=dC1, t=k(x2∣y2)t=k(x_2 | y_2)t=k(x2∣y2), m=C2⊕tm=C_2\oplus tm=C2⊕t.
u=H(x2∣m∣y2)u=H(x_2 | m | y_2)u=H(x2∣m∣y2), 验证 u=C3u=C_3u=C3.
Hash函数
- Hash/杂凑/散列: 将任意长度消息变为固定长度的信息摘要/数字指纹/Hash值/杂凑值/散列值, 记 h=H(m)h=H(m)h=H(m).
- Hash函数性质
- 单向性(抗原像攻击): 给定 hhh, 找到 m′m'm′ 有 h(m′)=hh(m')=hh(m′)=h 在计算上不可行.
- 抗弱碰撞性(抗第二原像攻击): 给定 mmm, 找到另一 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); 辅助公钥加密, 数字签名, 密钥交换.
- 消息填充: 加密分组为 lll bit, 最后 mmm bit 小端序/大端序存放消息长度, 原消息填充 1bit “1” 和 sssbit “0”, 有 l∣1+s+ml|1+s+ml∣1+s+m.
SHA-1/SM3: m+1+s≡448(mod 512)m+1+s\equiv 448({\rm mod}\ 512)m+1+s≡448(mod 512). - 迭代型结构(Merkle-Damgard): 每轮 lll bit和上一轮输出一同加密得到下一轮输出.
SHA-1/SM3: 每 512bit 为一组; CV0=IVCV_0=IVCV0=IV, CVi=f(CVi−1,Mi−1)CV_i=f(CV_{i-1},M_{i-1})CVi=f(CVi−1,Mi−1), i=1,2,...,ni=1,2,...,ni=1,2,...,n, H(M)=CVnH(M)=CV_nH(M)=CVn.
| Hash函数 | 摘要长度(bit) | 消息长度(2n2^n2n bit) | 分组长度(bit) | 字长度(bit) | 寄存器数量 | 迭代步骤 | 安全强度(2n2^n2n) |
|---|---|---|---|---|---|---|---|
| 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, 消息认证码/密码校验和): 验证消息真实性.
共享密钥 kkk, 发送方发送 (MAC=Ck(m),m)({\rm MAC}=C_k(m),m)(MAC=Ck(m),m), 接收方比较 Ck(m′)=MAC′C_k(m')={\rm MAC}'Ck(m′)=MAC′. - HMAC: 基于Hash函数的MAC.
HMACk=H[(k+⊕opad)∣∣H[(k+⊕ipad)∣∣M]]{\rm HMAC}_k=H[(k^+\oplus {\rm opad}) || H[(k^+\oplus {\rm ipad}) || M]]HMACk=H[(k+⊕opad)∣∣H[(k+⊕ipad)∣∣M]].
Hash分组大小为 lll bit:k+: k^+:k+ 为左侧填充0至 lll bit; opad{\rm opad}opad 为 (01011010)2(01011010)_2(01011010)2 循环填充到 lll bit; ipad{\rm ipad}ipad 为 (00110110)2(00110110)_2(00110110)2 循环填充到 lll bit.
数字签名
- 数字签名: 验证消息真实性和身份合法性.
特点: 签名与文件绑定; 不可抵赖性; 不可伪造性; 第三方可验证性.
发送方签名 δ=sgn(m,kd)\delta={\rm sgn}(m,k_d)δ=sgn(m,kd), 接收方比较 vrf(m′,ke)=δ′{\rm vrf}(m',k_e)=\delta'vrf(m′,ke)=δ′.
RSA
- RSA: 素数p,qp,qp,q, n=pqn=pqn=pq, gcd(e,φ(n))=1{\rm gcd}(e,\varphi(n))=1gcd(e,φ(n))=1, φ(n)=(p−1)(q−1)\varphi(n)=(p-1)(q-1)φ(n)=(p−1)(q−1).
- 私钥 d≡e−1(mod φ(n))d\equiv e^{-1}({\rm mod}\ \varphi(n))d≡e−1(mod φ(n)), 签名 δ=sgn(m,d)≡md(mod n)\delta={\rm sgn}(m,d)\equiv m^d({\rm mod}\ n)δ=sgn(m,d)≡md(mod n).
- 公钥 eee, 验证 m′=vrf(m′,e)≡δe(mod n)m'={\rm vrf}(m',e)\equiv \delta^e({\rm mod}\ n)m′=vrf(m′,e)≡δe(mod n).
- 安全问题
- 共模伪造: δ1≡m1d(mod n)\delta_1\equiv m_1^d({\rm mod}\ n)δ1≡m1d(mod n), δ2≡m2d(mod n)\delta_2\equiv m_2^d({\rm mod}\ n)δ2≡m2d(mod n), 可得 δ1δ2≡(m1m2)d(mod n)\delta_1\delta_2\equiv (m_1m_2)^d({\rm mod}\ n)δ1δ2≡(m1m2)d(mod n).
- 中间人攻击: 加密信息 c≡me(mod n)c\equiv m^e({\rm mod}\ n)c≡me(mod n), 伪造信息 c′≡reme(mod n)c'\equiv r^em^e({\rm mod}\ n)c′≡reme(mod n), 签名 (c′)d≡rm(mod n)(c')^d\equiv rm({\rm mod}\ n)(c′)d≡rm(mod n), 造成 mmm 泄漏.
- 一般不对消息直接签名, 而对消息的hash值签名; 加密密钥对和签名密钥对分离; 先签名再加密.
ElGamal型
- ElGamal: 大素数 ppp, 有循环群 Fp∗=⟨g⟩F_p^*=\langle g\rangleFp∗=⟨g⟩.
- 私钥 2≤x≤p−22\leq x\leq p-22≤x≤p−2, 签名 (m,δ=(r,s))(m,\delta=(r,s))(m,δ=(r,s)), 其中 r≡gk(mod p)r\equiv g^k({\rm mod}\ p)r≡gk(mod p), s≡k−1(m−rx)(mod p−1)s\equiv k^{-1}(m-rx)({\rm mod}\ p-1)s≡k−1(m−rx)(mod p−1), 选取 2≤k≤p−22\leq k\leq p-22≤k≤p−2 且 gcd(k,p−1)=1{\rm gcd}(k,p-1)=1gcd(k,p−1)=1.
- 公钥 y≡gx(mod p)y\equiv g^x({\rm mod}\ p)y≡gx(mod p), 验证 gm≡rsyr(mod p)g^m\equiv r^sy^r({\rm mod}\ p)gm≡rsyr(mod p).
- 安全问题
kkk 一次性, 否则联立 δ1≡k−1(m1−rx)(mod 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(m2−rx)(mod p−1)\delta_1 \equiv k^{-1}(m_2-rx)({\rm mod}\ p-1)δ1≡k−1(m2−rx)(mod p−1), 造成私钥 xxx 泄漏. - DSA: 大素数 ppp 且大素因子 q∣p−1q|p-1q∣p−1, qqq 至少160bit, 生成元 g≡hp−1q(mod p)>1g\equiv h^{\frac{p-1}{q}}({\rm mod}\ p)>1g≡hqp−1(mod p)>1, 即 ∣g∣=q|g|=q∣g∣=q.
- 私钥 2≤x≤p−22\leq x\leq p-22≤x≤p−2, 签名 (m,δ=(r,s))(m,\delta=(r,s))(m,δ=(r,s)), 其中 r≡(gk(mod p))(mod q)r\equiv (g^k({\rm mod}\ p))({\rm mod}\ q)r≡(gk(mod p))(mod q), s=k−1(H(m)+rx)(mod q)s=k^{-1}(H(m)+rx)({\rm mod}\ q)s=k−1(H(m)+rx)(mod q), 选取 2≤k≤q−22\leq k\leq q-22≤k≤q−2.
- 公钥 y=gx(mod p)y=g^x({\rm mod}\ p)y=gx(mod p), 验证 r≡guyv(mod q)r\equiv g^uy^v({\rm mod}\ q)r≡guyv(mod q), 其中 u≡H(m)s−1(mod q)u\equiv H(m)s^{-1}({\rm mod}\ q)u≡H(m)s−1(mod q), v≡rs−1(mod q)v\equiv rs^{-1}({\rm mod}\ q)v≡rs−1(mod q).
- ECDSA: 椭圆曲线群 Ep(a,b)E_p(a,b)Ep(a,b), 基点 ∣G∣=n|G|=n∣G∣=n, 余因子 h=∣Ep∣ph=\frac{|E_p|}{p}h=p∣Ep∣.
- 私钥 2≤d≤n−22\leq d\leq n-22≤d≤n−2, 签名 (m,δ=(r,s))(m,\delta=(r,s))(m,δ=(r,s)), 其中 kG=(x1,y1)kG=(x_1,y_1)kG=(x1,y1), r≡x1(mod n)r\equiv x_1({\rm mod}\ n)r≡x1(mod n), s≡k−1(H(m)+rd)(mod n)s\equiv k^{-1}(H(m)+rd)({\rm mod}\ n)s≡k−1(H(m)+rd)(mod n), 选取 2≤k≤n−22\leq k\leq n-22≤k≤n−2.
- 公钥 P=dGP=dGP=dG, 验证 r≡x2(mod n)r\equiv x_2({\rm mod}\ n)r≡x2(mod n), 其中 u≡H(m)s−1(mod n)u\equiv H(m)s^{-1}({\rm mod}\ n)u≡H(m)s−1(mod n), v≡rs−1(mod n)v\equiv rs^{-1}({\rm mod}\ n)v≡rs−1(mod n), uG+vP=(x2,y2)uG+vP=(x_2,y_2)uG+vP=(x2,y2).
SM2
- 在SM2加密算法的基础上, 本质为ECEG.
- 初始化: 椭圆曲线群 EpE_pEp, G∈EpG\in E_pG∈Ep, ∣G∣=q|G|=q∣G∣=q 为大素数, 任选 2≤d≤q−22\leq d\leq q-22≤d≤q−2, P=dGP=dGP=dG, h=∣Ep∣∣G∣≤4h=\frac{|E_p|}{|G|}\leq 4h=∣G∣∣Ep∣≤4.
避免超奇异和反常椭圆曲线, ppp 达到 160bit, h≤4h\leq 4h≤4, S=hP≠OS=hP\neq OS=hP=O.
公钥 (P,G,E,q)(P,G,E,q)(P,G,E,q), 私钥 ddd. - 签名: (m,δ=(r,s))(m,\delta=(r,s))(m,δ=(r,s)), 其中 kG=(x1,y1)kG=(x_1,y_1)kG=(x1,y1), r≡H(Z∣M)+x1(mod q)r\equiv H(Z|M)+x_1({\rm mod}\ q)r≡H(Z∣M)+x1(mod q) 且 r≠0r\ne 0r=0 及 r+k≠qr+k\ne qr+k=q, s≡(1+d)−1(k−rd)(mod q)s\equiv (1+d)^{-1}(k-rd)({\rm mod}\ q)s≡(1+d)−1(k−rd)(mod q) 且 s≠0s\ne 0s=0, 选取 2≤k≤q−22\leq k\leq q-22≤k≤q−2.
- 验证: r+s≢0(mod q)r+s\not\equiv 0({\rm mod}\ q)r+s≡0(mod q) 且 r≡x2(mod q)r\equiv x_2({\rm mod}\ q)r≡x2(mod q), 其中 sG+(r+s)P=(x2,y2)sG+(r+s)P=(x_2, y_2)sG+(r+s)P=(x2,y2).
身份认证
- 口令
- 安全问题: 弱口令易被暴力破解和字典攻击; 口令明文传输和明文保存易导致泄漏.
- 解决办法: 口令加盐Hash存储; 通过TSL传输.
- 挑战-应答
- 实现方案: 数字签名.
- 安全问题: 依赖于密钥管理; 需确保用户公钥的真实性和完整性以避免中间人攻击.
- ZKP(零知识证明): 使验证者(V)确信证明者§能够证明某一信息, 但无法获得其他任何信息.
- 基于DLP的认证协议: P向V证明知道私钥 xxx, 而不泄露 xxx; ppp 为大素数, 公钥 y≡gx(mod p)y\equiv g^x({\rm mod}\ p)y≡gx(mod p).
- 承诺: P随机选取 2≤k≤p−22\leq k\leq p-22≤k≤p−2 并发送 r≡gk(mod p)r\equiv g^k({\rm mod}\ p)r≡gk(mod p).
- 挑战: V随机发送 b∈{0,1}b\in\{0,1\}b∈{0,1}.
- 应答: P发送 sgn≡k+bx(mod p−1){\rm sgn}\equiv k+bx({\rm mod}\ p-1)sgn≡k+bx(mod p−1).
- 验证: V验证 gs≡ryb(mod p)g^s\equiv ry^b({\rm mod}\ p)gs≡ryb(mod p).
- 重复 ttt 次, P欺骗成功概率为 12t\frac{1}{2^t}2t1.
- Schnorr协议: P向V证明知道私钥 xxx, 而不泄露 xxx; ppp 为大素数, 大素数 q∣p−qq|p-qq∣p−q, ggg 为模 qqq 原根, 公钥 y≡gx(mod p)y\equiv g^x({\rm mod}\ p)y≡gx(mod p).
- 承诺: P随机选取 2≤k≤q−22\leq k\leq q-22≤k≤q−2 并发送 r≡gk(mod p)r\equiv g^k({\rm mod}\ p)r≡gk(mod p).
- 挑战: V随机发送 1≤e≤2t<q1\leq e\leq 2^t<q1≤e≤2t<q.
- 应答: P发送 s≡k−ex(mod q)s\equiv k-ex({\rm mod}\ q)s≡k−ex(mod q).
- 验证: V验证 r≡gsye(mod p)r\equiv g^sy^e({\rm mod}\ p)r≡gsye(mod p).
- 无需重复, P欺骗成功概率为 12t\frac{1}{2^t}2t1.
密钥管理
- 密钥管理原则
- 区分密钥管理的策略和机制
- 全程安全原则
- 最小权利原则
- 责任分离原则: 加密密钥不能用于签名
- 密钥分级原则: 高级密钥保护低级密钥
- 密钥按时更换原则
- 密钥满足特定安全性指标: 密钥长度足够; 避免弱密钥
- 密钥分级
- 初级密钥: 具体业务中直接使用.
- 中级(二级)密钥: 保护初级密钥, 生存周期较长.
- 高级(主)密钥:保护中级密钥, 应由硬件产生.
- 公钥数字证书管理
- 产生原因: 公钥密码体制中(加密或签名)公钥可以公开, 但完整性和真实性必须严格保护.
- 公钥数字证书(ITU 国际电信联盟 X.509 v3): 主体身份信息, 主体公钥, CA(可信签证机构)信息, CA签名, 有效期.
- PKI(公钥基础设施): 签发证书机构(CA), 注册登记证书机构(RA), 管理服务(存储和发布证书目录, 密钥管理, 时间戳), 证书管理及应用的法律法规.
密码学新方向
侧信道攻击
- 类别: 时间侧信道, 电磁侧信道, 能量侧信道(DPA, CPA, SPA), 光学侧信道, 声学侧信道.
- 时间侧信道攻击: Kocher发现并提出, 开启侧信道分析时代.
- 选择明文攻击; 利用不同明文的加密运算时间不同猜测密钥.
- 假设: Tm→∞∼N(μ,σ2)T_{m\to\infty}\sim N(\mu, \sigma^2)Tm→∞∼N(μ,σ2), T1,T2,...,TNT_1,T_2,...,T_NT1,T2,...,TN 相互独立, 统计量 t1,...,tMt_1,...,t_Mt1,...,tM 相互独立; 样本方差即为总体方差.
- 指标: 方差 var(x)=E([(X−E(X)]2)=σ2var(x)=E([(X-E(X)]^2)=\sigma^2var(x)=E([(X−E(X)]2)=σ2; 信息熵 H(x)=−∫−∞+∞p(x)ln(p(x))dx=12ln(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 各有一向量, 均希望计算两向量内积而不发送彼此信息.
- 安全数据库: 云端存放并计算数据, 但不希望数据暴露给云端.
- 安全聚合: 联邦学习场景, 仅在参与方较多时才能起到保护作用.

1749

被折叠的 条评论
为什么被折叠?



