密码学导论

复习自用,仅供参考~

概论

  • 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(MC)=P(M); 可证明安全(破解本质为数学难题); 计算安全(破解代价超过信息价值;破解时间超过信息时效).
  • 分析: 唯密文攻击, 已知明文攻击, 选择明文攻击, 选择密文攻击, 自适应选择明文攻击, 选择密钥攻击.
  • 香农《保密系统的通信原理》建立密码系统理论模型, 信息论为密码学奠定理论基础.
  • 柯克霍夫斯原则(公开设计): 密码体制安全性依赖于密钥保密, 密码算法公开.

古典密码

仿射

  • 仿射密码: 单表代换
    • 加密: c ≡ a m + b ( m o d   n ) c\equiv am+b({\rm mod}\ n) cam+b(mod n).
    • 解密: m ≡ a − 1 ( c − b ) ( m o d   n ) m\equiv a^{-1}(c-b)({\rm mod}\ n) ma1(cb)(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) cm+k(mod n).
    • 解密: m ≡ c − k ( m o d   n ) m\equiv c-k({\rm mod}\ n) mck(mod n).

Vernam

  • Vernam密码: 多表代换, 序列密码基础
    • 加密: c i = m i ⊕ k i c_i=m_i\oplus k_i ci=miki.
    • 解密: m i = c i ⊕ k i m_i=c_i\oplus k_i mi=ciki.
    • 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(pi261)2=i=025pi20.0385. 明文或单表代换时 M . R ≈ 0.027 {\rm M.R}\approx 0.027 M.R0.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 IC0.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,...,sn1) 为状态.
    线性反馈函数: 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 sn1f(s0,s1,...,sn1)=gn1sn1+...+g1s1+g0s0, g i ∈ G F ( 2 )    ⟹    g_i\in GF(2) \implies giGF(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+...+g0GF(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{ pZ+:f(x)xp1}=2n1.
    g ( x ) ∈ G F ( 2 ) [ x ] g(x)\in GF(2)[x] g(x)GF(2)[x] 为本原多项式    ⟺    \iff 输出序列周期达到最大值 2 n − 1 2^n-1 2n1; 此时输出序列称为 m m m-序列.
  • LFSR分析
    截获长度 l ≥ 2 ( 2 n − 1 ) l\geq 2(2^n-1) l2(2n1) 的明密文对 ( c , m ) (c,m) (c,m), 则 k = c ⊕ m k=c\oplus m k=cm, 有状态 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) YHX(mod 2).
    m m m-序列时, X X X满秩, H ≡ Y X − 1 ( m o d   2 ) H\equiv YX^{-1}({\rm mod}\ 2) HYX1(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............001gn1

  • 非线性序列实现
    • 非线性反馈函数: 如引入与运算/模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 0255, j ≡ j + S [ i ] + T [ i ] ( m o d 256 ) j\equiv j+S[i]+T[i]({\rm mod}256) jj+S[i]+T[i](mod256), 交换 S [ i ] S[i] S[i] S [ j ] S[j] S[j].
  • 密钥序列产生: i i i 循环遍历 0 − 255 0-255 0255, j ≡ j + S [ i ] ( m o d 256 ) j\equiv j+S[i]({\rm mod}256) jj+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) tS[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函数(唯一非线性部件, 安全性).
    ZUC图示
    ⊞ \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(2311)[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)=x16215x15217x13221x10220x4281;
      输出 m m m 序列周期 ( 2 31 − 1 ) 16 − 1 (2^{31}-1)^{16}-1 (2311)161; 16个31bit 寄存器 S 0 , . . . , S 15 ∈ [ 1 , 2 31 − 1 ] S_0,...,S_{15}\in [1,2^{31}-1] S0,...,S15[1,2311].
    • BR: X 0 = S 15 H ∣ S 14 L X_0=S_{15H}|S_{14L} X0=S15HS14L, X 1 = S 11 L ∣ S 9 H X_1=S_{11L}|S_{9H} X1=S11LS9H , X 2 = S 7 L ∣ S 5 H X_2=S_{7L}|S_{5H} X2=S7LS5H, X 3 = S 2 L ∣ S 0 H X_3=S_{2L}|S_{0H} X3=S2LS0H.
    • F: W = ( X 0 ⊕ R 1 ) ⊞ R 2 W=(X_0\oplus R_1)\boxplus R_2 W=(X0R1)R2, W 1 = R 1 ⊞ X 1 W_1=R_1\boxplus X_1 W1=R1X1, W 2 = R 2 ⊞ X 2 W_2=R_2\boxplus X_2 W2=R2X2;
      R 1 = S ( L 1 ( W 1 L ∣ W 2 H ) ) R_1=S(L_1(W_{1L}|W_{2H})) R1=S(L1(W1LW2H)), R 2 = S ( L 2 ( W 2 L ∣ W 1 H ) ) R_2=S(L_2(W_{2L}|W_{1H})) R2=S(L2(W2LW1H));
      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=WX3.
  • 运行流程
    • 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.
  • 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=BEARERDIRECTION∣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(Ni1Ki) 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(Ri1,Ki)Li1, L i = R i − 1 L_i=R_{i-1} Li=Ri1, 最后一轮不做对换; 同个算法加解密 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(x001100) 至少2bit发生变化;
    S ( x ) ≠ S ( x ⊕ 11 e f 00 ) S(x)\neq S(x\oplus 11ef00) S(x)=S(x11ef00), 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 degf3 多项式环 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[i1]w[i4], 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[i4]S(w[i1])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} a1(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=MKiFKi , 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=KiT(Ki+1Ki+2Ki+3CKi);
    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=XiT(Xi+1Xi+2Xi+3rKi);
    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} k19k18k17k16k15k19k18k17k16k15round;
    取高 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(n1)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=f1(y) 很困难; (3)给定 y y y, 掌握陷门, 计算 x f − 1 ( y ) xf^{-1}(y) xf1(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=A1(ve).
  • 工作方式
    • 发送方 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)=(p1)(q1).
    • 公钥 ( 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)) de1(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 p1,p+1,q1,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(p1,q1) 尽可能小, 最好为2; 以避免密文迭代攻击.
    e e e 应保证 m e ≪ n m^e\ll n men; 有人建议为素数 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} d4n.
    多个用户不得共用同一个模 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 2x,yp2.
    • 公钥 ( 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) kXYgx(mod p), k Y → X ≡ g y ( m o d   p ) k_{Y\to X}\equiv g^y({\rm mod}\ p) kYXgy(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) kkYXxkXYygxy(mod p).
  • ECDH: 椭圆曲线群 E p E_p Ep, G ∈ E p G\in E_p GEp, ∣ G ∣ = q |G|=q G=q 为大素数, 任选 2 ≤ a , b ≤ q − 2 2\leq a,b\leq q-2 2a,bq2.
    • 公钥 ( p , G ) (p,G) (p,G), 私钥 x , y x,y x,y.
    • 握手: k A → B = a G k_{A\to B}=aG kAB=aG, k B → A = b G k_{B\to A}=bG kBA=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=akBA=bkAB=(ab)G.
  • ElGamal: 大素数 p p p 和模 p p p 原根 g g g, 任选 2 ≤ a ≤ p − 2 2\leq a\leq p-2 2ap2, Y a ≡ g a ( m o d   p ) Y_a\equiv g^a({\rm mod}\ p) Yaga(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) ugk(mod p), v ≡ m Y a k ( m o d   p ) v\equiv mY_a^k({\rm mod}\ p) vmYak(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 2kp2, 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) mDa(c)uav(mod p).
    • 参数选取: p p p 足够大, 一般场景512bit, 重要场景1024bit.
  • ECEG: 椭圆曲线群 E p E_p Ep, G ∈ E p G\in E_p GEp, ∣ G ∣ = q |G|=q G=q 为大素数, 任选 2 ≤ d ≤ q − 2 2\leq d\leq q-2 2dq2, 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 2rq2, 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)=C2dC1.
    • 参数选取: p p p 足够大, 一般为160bit; 余因子 h = ∣ E p ∣ ∣ G ∣ ≤ 4 h=\frac{|E_p|}{|G|}\leq 4 h=GEp4; 避免选用超奇异和反常椭圆曲线.

SM2

  • 本质为ECEG.
  • 初始化: 椭圆曲线群 E p E_p Ep, G ∈ E p G\in E_p GEp, ∣ G ∣ = q |G|=q G=q 为大素数, 任选 2 ≤ d ≤ q − 2 2\leq d\leq q-2 2dq2, P = d G P=dG P=dG, h = ∣ E p ∣ ∣ G ∣ ≤ 4 h=\frac{|E_p|}{|G|}\leq 4 h=GEp4.
    避免选取非超奇异和反常椭圆曲线, p p p 达到 160bit, h ≤ 4 h\leq 4 h4, 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 2rq1, 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(x2y2).
    密钥派生函数 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(x2y2ct), 并截断为 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=x1y1, C 2 = m ⊕ t C_2=m\oplus t C2=mt, C 3 = h ( x 2 ∣ m ∣ y 2 ) C_3=h(x_2 | m | y_2) C3=h(x2my2), c = C 1 ∣ C 2 ∣ C 3 c=C_1 | C_2 | C_3 c=C1C2C3
  • 解密: ( 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(x2y2), m = C 2 ⊕ t m=C_2\oplus t m=C2t.
    u = H ( x 2 ∣ m ∣ y 2 ) u=H(x_2 | m | y_2) u=H(x2my2), 验证 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+s448(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(CVi1,Mi1), 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)=(p1)(q1).
    • 私钥 d ≡ e − 1 ( m o d   φ ( n ) ) d\equiv e^{-1}({\rm mod}\ \varphi(n)) de1(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) δ1m1d(mod n), δ 2 ≡ m 2 d ( m o d   n ) \delta_2\equiv m_2^d({\rm mod}\ n) δ2m2d(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) cme(mod n), 伪造信息 c ′ ≡ r e m e ( m o d   n ) c'\equiv r^em^e({\rm mod}\ n) creme(mod n), 签名 ( c ′ ) d ≡ r m ( m o d   n ) (c')^d\equiv rm({\rm mod}\ n) (c)drm(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 2xp2, 签名 ( m , δ = ( r , s ) ) (m,\delta=(r,s)) (m,δ=(r,s)), 其中 r ≡ g k ( m o d   p ) r\equiv g^k({\rm mod}\ p) rgk(mod p), s ≡ k − 1 ( m − r x ) ( m o d   p − 1 ) s\equiv k^{-1}(m-rx)({\rm mod}\ p-1) sk1(mrx)(mod p1), 选取 2 ≤ k ≤ p − 2 2\leq k\leq p-2 2kp2 g c d ( k , p − 1 ) = 1 {\rm gcd}(k,p-1)=1 gcd(k,p1)=1.
    • 公钥 y ≡ g x ( m o d   p ) y\equiv g^x({\rm mod}\ p) ygx(mod p), 验证 g m ≡ r s y r ( m o d   p ) g^m\equiv r^sy^r({\rm mod}\ p) gmrsyr(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) δ1k1(m1rx)(mod p1) δ 1 ≡ k − 1 ( m 2 − r x ) ( m o d   p − 1 ) \delta_1 \equiv k^{-1}(m_2-rx)({\rm mod}\ p-1) δ1k1(m2rx)(mod p1), 造成私钥 x x x 泄漏.
  • DSA: 大素数 p p p 且大素因子 q ∣ p − 1 q|p-1 qp1, 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 ghqp1(mod p)>1, 即 ∣ g ∣ = q |g|=q g=q.
    • 私钥 2 ≤ x ≤ p − 2 2\leq x\leq p-2 2xp2, 签名 ( 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=k1(H(m)+rx)(mod q), 选取 2 ≤ k ≤ q − 2 2\leq k\leq q-2 2kq2.
    • 公钥 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) rguyv(mod q), 其中 u ≡ H ( m ) s − 1 ( m o d   q ) u\equiv H(m)s^{-1}({\rm mod}\ q) uH(m)s1(mod q), v ≡ r s − 1 ( m o d   q ) v\equiv rs^{-1}({\rm mod}\ q) vrs1(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=pEp.
    • 私钥 2 ≤ d ≤ n − 2 2\leq d\leq n-2 2dn2, 签名 ( 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) rx1(mod n), s ≡ k − 1 ( H ( m ) + r d ) ( m o d   n ) s\equiv k^{-1}(H(m)+rd)({\rm mod}\ n) sk1(H(m)+rd)(mod n), 选取 2 ≤ k ≤ n − 2 2\leq k\leq n-2 2kn2.
    • 公钥 P = d G P=dG P=dG, 验证 r ≡ x 2 ( m o d   n ) r\equiv x_2({\rm mod}\ n) rx2(mod n), 其中 u ≡ H ( m ) s − 1 ( m o d   n ) u\equiv H(m)s^{-1}({\rm mod}\ n) uH(m)s1(mod n), v ≡ r s − 1 ( m o d   n ) v\equiv rs^{-1}({\rm mod}\ n) vrs1(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 GEp, ∣ G ∣ = q |G|=q G=q 为大素数, 任选 2 ≤ d ≤ q − 2 2\leq d\leq q-2 2dq2, P = d G P=dG P=dG, h = ∣ E p ∣ ∣ G ∣ ≤ 4 h=\frac{|E_p|}{|G|}\leq 4 h=GEp4.
    避免超奇异和反常椭圆曲线, p p p 达到 160bit, h ≤ 4 h\leq 4 h4, 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) rH(ZM)+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(krd)(mod q) s ≠ 0 s\ne 0 s=0, 选取 2 ≤ k ≤ q − 2 2\leq k\leq q-2 2kq2.
  • 验证: r + s ≢ 0 ( m o d   q ) r+s\not\equiv 0({\rm mod}\ q) r+s0(mod q) r ≡ x 2 ( m o d   q ) r\equiv x_2({\rm mod}\ q) rx2(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) ygx(mod p).
    • 承诺: P随机选取 2 ≤ k ≤ p − 2 2\leq k\leq p-2 2kp2 并发送 r ≡ g k ( m o d   p ) r\equiv g^k({\rm mod}\ p) rgk(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) sgnk+bx(mod p1).
    • 验证: V验证 g s ≡ r y b ( m o d   p ) g^s\equiv ry^b({\rm mod}\ p) gsryb(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 qpq, g g g 为模 q q q 原根, 公钥 y ≡ g x ( m o d   p ) y\equiv g^x({\rm mod}\ p) ygx(mod p).
    • 承诺: P随机选取 2 ≤ k ≤ q − 2 2\leq k\leq q-2 2kq2 并发送 r ≡ g k ( m o d   p ) r\equiv g^k({\rm mod}\ p) rgk(mod p).
    • 挑战: V随机发送 1 ≤ e ≤ 2 t < q 1\leq e\leq 2^t<q 1e2t<q.
    • 应答: P发送 s ≡ k − e x ( m o d   q ) s\equiv k-ex({\rm mod}\ q) skex(mod q).
    • 验证: V验证 r ≡ g s y e ( m o d   p ) r\equiv g^sy^e({\rm mod}\ p) rgsye(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) TmN(μ,σ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([(XE(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 各有一向量, 均希望计算两向量内积而不发送彼此信息.
    • 安全数据库: 云端存放并计算数据, 但不希望数据暴露给云端.
    • 安全聚合: 联邦学习场景, 仅在参与方较多时才能起到保护作用.

猜你喜欢

转载自blog.csdn.net/annesede/article/details/134828616