密码学导论复习笔记

复习自用,仅供参考~

概论

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

古典密码

仿射

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

Vernam

  • Vernam密码: 多表代换, 序列密码基础
    • 加密: ci=mi⊕kic_i=m_i\oplus k_ici=miki.
    • 解密: mi=ci⊕kim_i=c_i\oplus k_imi=ciki.
    • 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(pi261)2=i=025pi20.0385. 明文或单表代换时 M.R≈0.027{\rm M.R}\approx 0.027M.R0.027, 更接近 000 则更可能为多表代换.
  • 重合指数: IC=∑i=025pi2{\rm IC}=\sum_{i=0}^{25}p_i^2IC=i=025pi2. 多表代换时 IC≈0.0655{\rm IC}\approx 0.0655IC0.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,...,sn1) 为状态.
    线性反馈函数: 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_0sn1f(s0,s1,...,sn1)=gn1sn1+...+g1s1+g0s0, gi∈GF(2)  ⟹  g_i\in GF(2) \impliesgiGF(2) 连接多项式 g(x)=gnxn+...+g0∈GF(2)[x]g(x)=g_nx^n+...+g_0\in GF(2)[x]g(x)=gnxn+...+g0GF(2)[x].
  • LFSR
    S0=OS_0=OS0=OSi=OS_i=OSi=O; S0≠OS_0\ne OS0=OSi≠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{pZ+:f(x)xp1}=2n1.
    g(x)∈GF(2)[x]g(x)\in GF(2)[x]g(x)GF(2)[x] 为本原多项式   ⟺  \iff 输出序列周期达到最大值 2n−12^n-12n1; 此时输出序列称为 mmm-序列.
  • LFSR分析
    截获长度 l≥2(2n−1)l\geq 2(2^n-1)l2(2n1) 的明密文对 (c,m)(c,m)(c,m), 则 k=c⊕mk=c\oplus mk=cm, 有状态 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)YHX(mod 2).
    mmm-序列时, XXX满秩, H≡YX−1(mod 2)H\equiv YX^{-1}({\rm mod}\ 2)HYX1(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............001gn1

  • 非线性序列实现
    • 非线性反馈函数: 如引入与运算/模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-2550255, j≡j+S[i]+T[i](mod256)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].
  • 密钥序列产生: iii 循环遍历 0−2550-2550255, j≡j+S[i](mod256)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](mod256)t\equiv S[i]+S[j]({\rm mod}256)tS[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函数(唯一非线性部件, 安全性).
    ZUC图示
    ⊞\boxplusGF(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(2311)[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)=x16215x15217x13221x10220x4281;
      输出 mmm 序列周期 (231−1)16−1(2^{31}-1)^{16}-1(2311)161; 16个31bit 寄存器 S0,...,S15∈[1,231−1]S_0,...,S_{15}\in [1,2^{31}-1]S0,...,S15[1,2311].
    • BR: X0=S15H∣S14LX_0=S_{15H}|S_{14L}X0=S15HS14L, X1=S11L∣S9HX_1=S_{11L}|S_{9H}X1=S11LS9H ,X2=S7L∣S5HX_2=S_{7L}|S_{5H}X2=S7LS5H, X3=S2L∣S0HX_3=S_{2L}|S_{0H}X3=S2LS0H.
    • F: W=(X0⊕R1)⊞R2W=(X_0\oplus R_1)\boxplus R_2W=(X0R1)R2, W1=R1⊞X1W_1=R_1\boxplus X_1W1=R1X1, W2=R2⊞X2W_2=R_2\boxplus X_2W2=R2X2;
      R1=S(L1(W1L∣W2H))R_1=S(L_1(W_{1L}|W_{2H}))R1=S(L1(W1LW2H)), R2=S(L2(W2L∣W1H))R_2=S(L_2(W_{2L}|W_{1H}))R2=S(L2(W2LW1H));
      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=WX3.
  • 运行流程
    • 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→\toW=F(X_0,X_1,X_2)→\toLFSR; 不输出.
    • 工作模式运行1次并舍弃 WWW: BR→\toW=F(X_0,X_1,X_2)→\toLFSR.
    • 密钥序列产生: 工作模式运行, 每时钟节拍输出 32bit.
  • 128-EEA3参数表
输入参数长度(bit)含义
COUNT32计数器
BEARER5承载层标识
DIRECTION1传输方向标志
CK128明文序列bit长度
IBSLENGTH输入序列
输出参数长度(bit)含义
OBSLENGTH输出序列

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=BEARERDIRECTION∣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(Ni1Ki)PRESENT, AES
Feistel网络分为左右两部分, Ri=F(Ri−1,Ki)⊕Li−1R_i=F(R_{i-1},K_i)\oplus L_{i-1}Ri=F(Ri1,Ki)Li1, Li=Ri−1L_i=R_{i-1}Li=Ri1, 最后一轮不做对换; 同个算法加解密DES
Lai-Massey16bit 模 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=16IDEA
滑动窗口广义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 盒规模结构特点
DESFestal网络6456(+8)48166进4出对合
3-DESFestal网络192112(K3=K1K_3=K_1K3=K1)/1684816 ×\times× 36进4出对合
AESS-P网络128128/192/25612810/12/148进8出对称
SM4滑动窗口12812832328进8出对合
PRESENTS-P网络6480/12864314进4出非对称

DES

  • 数据加密标准(Data Encryption Standard): 16 轮 Feistel 网络对合加解密.
    体现香农密码设计思想; 公开密码算法先例; 商用密码典范.

  • 密钥扩展
    初始密钥(64bit)经PC1表置换得到 CiC_iCiDiD_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(x001100) 至少2bit发生变化;
    S(x)≠S(x⊕11ef00)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 密钥).
  • 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 3degf3 多项式环 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[i1]w[i4], 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[i4]S(w[i1])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}a1(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=MKiFKi ,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=KiT(Ki+1Ki+2Ki+3CKi);
    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=XiT(Xi+1Xi+2Xi+3rKi);
    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}k19k18k17k16k15k19k18k17k16k15round;
    取高 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(n1)n 个密钥及同等数量的保密信道.
    • 难以解决签名和认证问题: 接收方可以伪造原文; 发送方可以否认行为.
  • 非对称加密基本条件
    • 安全: ke≠kdk_e\ne k_dke=kd 且由 kek_eke 不能得到 kdk_dkd;
    • 保密: D(E(m))=mD(E(m))=mD(E(m))=m;
    • EEEDDD 高效;
    • 保真: 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=f1(y) 很困难; (3)给定yyy, 掌握陷门, 计算 xf−1(y)xf^{-1}(y)xf1(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, 求对数困难 log⁡ac=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=A1(ve).
  • 工作方式
    • 发送方 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)=(p1)(q1).
    • 公钥 (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))de1(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+1p1,p+1,q1,q+1 中均无除 222 外的小因子.
    p,qp,qp,q 位数不能相差过大或过小.
    私钥 d≠ed\ne ed=e.
    gcd(p−1,q−1){\rm gcd}(p-1,q-1)gcd(p1,q1) 尽可能小, 最好为2; 以避免密文迭代攻击.
    eee 应保证 me≪nm^e\ll nmen; 有人建议为素数 216+1=655372^{16}+1=65537216+1=65537, 二进制表示中仅含两位 111, 加密速度较快.
    ddd 应较小以保证解密速度, 但确保d≪n4d\ll \frac{n}{4}d4n.
    多个用户不得共用同一个模 nnn; 以避免共模攻击.
  • RSA算法
    • 大素数验证: Miller-Rabin测试.
    • 加密优化算法: 快速模幂, Montgomery.
    • 解密优化算法: CRT, 快速模幂, Montgomery.

ElGamal型

  • D-H协议: 大素数 ppp 和模 ppp 原根 ggg, 任选 2≤x,y≤p−22\leq x,y\leq p-22x,yp2.
    • 公钥 (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)kXYgx(mod p), kY→X≡gy(mod p)k_{Y\to X}\equiv g^y({\rm mod}\ p)kYXgy(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)kkYXxkXYygxy(mod p).
  • ECDH: 椭圆曲线群 EpE_pEp, G∈EpG\in E_pGEp, ∣G∣=q|G|=qG=q 为大素数, 任选 2≤a,b≤q−22\leq a,b\leq q-22a,bq2.
    • 公钥 (p,G)(p,G)(p,G), 私钥 x,yx,yx,y.
    • 握手: kA→B=aGk_{A\to B}=aGkAB=aG, kB→A=bGk_{B\to A}=bGkBA=bG.
    • 密钥: k=akB→A=bkA→B=(ab)Gk=ak_{B\to A}=bk_{A\to B}=(ab)Gk=akBA=bkAB=(ab)G.
  • ElGamal: 大素数 ppp 和模 ppp 原根 ggg, 任选 2≤a≤p−22\leq a\leq p-22ap2, Ya≡ga(mod p)Y_a\equiv g^a({\rm mod}\ p)Yaga(mod p).
    • 公钥 (p,g,Ya)(p,g,Y_a)(p,g,Ya), 加密 u≡gk(mod p)u\equiv g^k({\rm mod}\ p)ugk(mod p), v≡mYak(mod p)v\equiv mY_a^k({\rm mod}\ p)vmYak(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-22kp2, 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)mDa(c)uav(mod p).
    • 参数选取: ppp 足够大, 一般场景512bit, 重要场景1024bit.
  • ECEG: 椭圆曲线群 EpE_pEp, G∈EpG\in E_pGEp, ∣G∣=q|G|=qG=q 为大素数, 任选 2≤d≤q−22\leq d\leq q-22dq2, 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-22rq2, r≠dr\ne dr=d.
    • 私钥 ddd, 解密 M=DEp,d(C)=C2−dC1M=D_{E_p,d}(C)=C_2-dC_1M=DEp,d(C)=C2dC1.
    • 参数选取: ppp 足够大, 一般为160bit; 余因子 h=∣Ep∣∣G∣≤4h=\frac{|E_p|}{|G|}\leq 4h=GEp4; 避免选用超奇异和反常椭圆曲线.

SM2

  • 本质为ECEG.
  • 初始化: 椭圆曲线群 EpE_pEp, G∈EpG\in E_pGEp, ∣G∣=q|G|=qG=q 为大素数, 任选 2≤d≤q−22\leq d\leq q-22dq2, P=dGP=dGP=dG, h=∣Ep∣∣G∣≤4h=\frac{|E_p|}{|G|}\leq 4h=GEp4.
    避免选取非超奇异和反常椭圆曲线, ppp 达到 160bit, h≤4h\leq 4h4, 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-12rq1, 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(x2y2).
    密钥派生函数 kkk: 32bit计数器 ct=0x01{\rm ct}={\rm 0x01}ct=0x01, 得到 ⌊lenv⌋\lfloor\frac{{\rm len}}{v}\rfloorvlen 个hash值 h=H(x2∣y2∣ct)h=H(x_2 | y_2 | {\rm ct})h=H(x2y2ct), 并截断为 len{\rm len}len; 其中 len{\rm len}lenmmm 长度, vvv 为hash值长度, 一般采用SM3.
    C1=x1∣y1C_1=x_1 | y_1C1=x1y1, C2=m⊕tC_2=m\oplus tC2=mt, C3=h(x2∣m∣y2)C_3=h(x_2 | m | y_2)C3=h(x2my2), c=C1∣C2∣C3c=C_1 | C_2 | C_3c=C1C2C3
  • 解密: (x2,y2)=dC1(x_2,y_2)=dC_1(x2,y2)=dC1, t=k(x2∣y2)t=k(x_2 | y_2)t=k(x2y2), m=C2⊕tm=C_2\oplus tm=C2t.
    u=H(x2∣m∣y2)u=H(x_2 | m | y_2)u=H(x2my2), 验证 u=C3u=C_3u=C3.

Hash函数

  • Hash/杂凑/散列: 将任意长度消息变为固定长度的信息摘要/数字指纹/Hash值/杂凑值/散列值, 记 h=H(m)h=H(m)h=H(m).
  • Hash函数性质
    • 单向性(抗原像攻击): 给定 hhh, 找到 m′m'mh(m′)=hh(m')=hh(m)=h 在计算上不可行.
    • 抗弱碰撞性(抗第二原像攻击): 给定 mmm, 找到另一 m′m'mH(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+s448(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(CVi1,Mi1), 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-1160<64(大端)5123258080
SHA-256256<64(大端)51232864128
SM3256<64(大端)51232864128
SHA-384384<128102464680192
SHA-512512<128102464880256

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)=(p1)(q1).
    • 私钥 d≡e−1(mod φ(n))d\equiv e^{-1}({\rm mod}\ \varphi(n))de1(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)δ1m1d(mod n), δ2≡m2d(mod n)\delta_2\equiv m_2^d({\rm mod}\ n)δ2m2d(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)cme(mod n), 伪造信息 c′≡reme(mod n)c'\equiv r^em^e({\rm mod}\ n)creme(mod n), 签名 (c′)d≡rm(mod n)(c')^d\equiv rm({\rm mod}\ n)(c)drm(mod n), 造成 mmm 泄漏.
    • 一般不对消息直接签名, 而对消息的hash值签名; 加密密钥对和签名密钥对分离; 先签名再加密.

ElGamal型

  • ElGamal: 大素数 ppp, 有循环群 Fp∗=⟨g⟩F_p^*=\langle g\rangleFp=g.
    • 私钥 2≤x≤p−22\leq x\leq p-22xp2, 签名 (m,δ=(r,s))(m,\delta=(r,s))(m,δ=(r,s)), 其中 r≡gk(mod p)r\equiv g^k({\rm mod}\ p)rgk(mod p), s≡k−1(m−rx)(mod p−1)s\equiv k^{-1}(m-rx)({\rm mod}\ p-1)sk1(mrx)(mod p1), 选取 2≤k≤p−22\leq k\leq p-22kp2gcd(k,p−1)=1{\rm gcd}(k,p-1)=1gcd(k,p1)=1.
    • 公钥 y≡gx(mod p)y\equiv g^x({\rm mod}\ p)ygx(mod p), 验证 gm≡rsyr(mod p)g^m\equiv r^sy^r({\rm mod}\ p)gmrsyr(mod p).
  • 安全问题
    kkk 一次性, 否则联立 δ1≡k−1(m1−rx)(mod p−1)\delta_1 \equiv k^{-1}(m_1-rx)({\rm mod}\ p-1)δ1k1(m1rx)(mod p1)δ1≡k−1(m2−rx)(mod p−1)\delta_1 \equiv k^{-1}(m_2-rx)({\rm mod}\ p-1)δ1k1(m2rx)(mod p1), 造成私钥 xxx 泄漏.
  • DSA: 大素数 ppp 且大素因子 q∣p−1q|p-1qp1, qqq 至少160bit, 生成元 g≡hp−1q(mod p)>1g\equiv h^{\frac{p-1}{q}}({\rm mod}\ p)>1ghqp1(mod p)>1, 即 ∣g∣=q|g|=qg=q.
    • 私钥 2≤x≤p−22\leq x\leq p-22xp2, 签名 (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=k1(H(m)+rx)(mod q), 选取 2≤k≤q−22\leq k\leq q-22kq2.
    • 公钥 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)rguyv(mod q), 其中 u≡H(m)s−1(mod q)u\equiv H(m)s^{-1}({\rm mod}\ q)uH(m)s1(mod q), v≡rs−1(mod q)v\equiv rs^{-1}({\rm mod}\ q)vrs1(mod q).
  • ECDSA: 椭圆曲线群 Ep(a,b)E_p(a,b)Ep(a,b), 基点 ∣G∣=n|G|=nG=n, 余因子 h=∣Ep∣ph=\frac{|E_p|}{p}h=pEp.
    • 私钥 2≤d≤n−22\leq d\leq n-22dn2, 签名 (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)rx1(mod n), s≡k−1(H(m)+rd)(mod n)s\equiv k^{-1}(H(m)+rd)({\rm mod}\ n)sk1(H(m)+rd)(mod n), 选取 2≤k≤n−22\leq k\leq n-22kn2.
    • 公钥 P=dGP=dGP=dG, 验证 r≡x2(mod n)r\equiv x_2({\rm mod}\ n)rx2(mod n), 其中 u≡H(m)s−1(mod n)u\equiv H(m)s^{-1}({\rm mod}\ n)uH(m)s1(mod n), v≡rs−1(mod n)v\equiv rs^{-1}({\rm mod}\ n)vrs1(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_pGEp, ∣G∣=q|G|=qG=q 为大素数, 任选 2≤d≤q−22\leq d\leq q-22dq2, P=dGP=dGP=dG, h=∣Ep∣∣G∣≤4h=\frac{|E_p|}{|G|}\leq 4h=GEp4.
    避免超奇异和反常椭圆曲线, ppp 达到 160bit, h≤4h\leq 4h4, 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)rH(ZM)+x1(mod q)r≠0r\ne 0r=0r+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(krd)(mod q)s≠0s\ne 0s=0, 选取 2≤k≤q−22\leq k\leq q-22kq2.
  • 验证: r+s≢0(mod q)r+s\not\equiv 0({\rm mod}\ q)r+s0(mod q)r≡x2(mod q)r\equiv x_2({\rm mod}\ q)rx2(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)ygx(mod p).
    • 承诺: P随机选取 2≤k≤p−22\leq k\leq p-22kp2 并发送 r≡gk(mod p)r\equiv g^k({\rm mod}\ p)rgk(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)sgnk+bx(mod p1).
    • 验证: V验证 gs≡ryb(mod p)g^s\equiv ry^b({\rm mod}\ p)gsryb(mod p).
    • 重复 ttt 次, P欺骗成功概率为 12t\frac{1}{2^t}2t1.
  • Schnorr协议: P向V证明知道私钥 xxx, 而不泄露 xxx; ppp 为大素数, 大素数 q∣p−qq|p-qqpq, ggg 为模 qqq 原根, 公钥 y≡gx(mod p)y\equiv g^x({\rm mod}\ p)ygx(mod p).
    • 承诺: P随机选取 2≤k≤q−22\leq k\leq q-22kq2 并发送 r≡gk(mod p)r\equiv g^k({\rm mod}\ p)rgk(mod p).
    • 挑战: V随机发送 1≤e≤2t<q1\leq e\leq 2^t<q1e2t<q.
    • 应答: P发送 s≡k−ex(mod q)s\equiv k-ex({\rm mod}\ q)skex(mod q).
    • 验证: V验证 r≡gsye(mod p)r\equiv g^sy^e({\rm mod}\ p)rgsye(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)TmN(μ,σ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([(XE(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加法同态(半同态)∞\infty0大整数因子分解
ElGamal乘法同态(半同态)0∞\inftyDLP(离散对数难题)
BFV部分同态(半同态)∞\infty有限次RLWE(环上误差还原难题)
BFV with Bootstrapping全同态∞\infty∞\inftyRLWE
  • 同态加密应用
    • 安全向量内积: A,B 各有一向量, 均希望计算两向量内积而不发送彼此信息.
    • 安全数据库: 云端存放并计算数据, 但不希望数据暴露给云端.
    • 安全聚合: 联邦学习场景, 仅在参与方较多时才能起到保护作用.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值