【密码学】8. 密码协议

目录

密码协议

中国剩余定理(数论基础)

  1. 核心用途
    • 重构数:已知一个数关于若干两两互素数的同余类,可唯一确定该数。
    • 大数运算简化:将大数用其关于小互素数的同余类表示,通过小数运算实现大数运算。
  2. 直观例子
    • 例 1:已知某数模 2 余 0、模 5 余 3,可确定该数为 8(1~10 范围内唯一解)。
    • 例 2:15 以内的数可通过模 3(行号)和模 5(列号)的同余类表示(如 12 mod 3=0、mod 5=2,对应第 0 行第 2 列),通过行号和列号的运算(如 12+13 对应行号 0+1=1、列号 2+3=5≡0 mod5,对应第 1 行第 0 列的 10)实现大数运算。
    • 物不知数问题:求解方程组 x a ^ ‰¡ 2 m o d    3 x≡2\mod3 xa^‰¡2mod3, x a ^ ‰¡ 3 m o d    5 x≡3\mod5 xa^‰¡3mod5, x a ^ ‰¡ 2 m o d    7 x≡2\mod7 xa^‰¡2mod7,通过构造法得解 23(小于 105 的唯一解)。
  3. 定理内容
    设 m 1 , m 2 , . . . , m k m_1,m_2,...,m_k m1,m2,...,mk是两两互素的正整数, M = m 1 m 2 . . . m k M=m_1m_2...m_k M=m1m2...mk,则同余方程组 { x a ^ ‰¡ a 1 m o d    m 1 x a ^ ‰¡ a 2 m o d    m 2 . . . x a ^ ‰¡ a k m o d    m k \begin{cases}x≡a_1\mod m_1\\x≡a_2\mod m_2\\...\\x≡a_k\mod m_k\end{cases} ⎩ ⎨ ⎧xa^‰¡a1modm1xa^‰¡a2modm2...xa^‰¡akmodmk对模 M M M有唯一解: x = ( a 1 M 1 e 1 + a 2 M 2 e 2 + . . . + a k M k e k ) m o d    M x=(a_1M_1e_1 + a_2M_2e_2 + ... + a_kM_ke_k)\mod M x=(a1M1e1+a2M2e2+...+akMkek)modM
    其中, M i = M / m i M_i=M/m_i Mi=M/mi, e i e_i ei满足 M i e i a ^ ‰¡ 1 m o d    m i M_ie_i≡1\mod m_i Mieia^‰¡1modmi(即 e i e_i ei是 M i M_i Mi模 m i m_i mi的逆元)。
  4. 推论(模运算性质)
    若 A = ( a 1 , a 2 , . . . , a k ) A=(a_1,a_2,...,a_k) A=(a1,a2,...,ak), B = ( b 1 , b 2 , . . . , b k ) B=(b_1,b_2,...,b_k) B=(b1,b2,...,bk)(其中 a i , b i a_i,b_i ai,bi分别为 A , B A,B A,B模 m i m_i mi的同余类),则:
    • ( A + B ) m o d    M = ( ( a 1 + b 1 ) m o d    m 1 , . . . , ( a k + b k ) m o d    m k ) (A+B)\mod M=( (a_1+b_1)\mod m_1, ..., (a_k+b_k)\mod m_k ) (A+B)modM=((a1+b1)modm1,...,(ak+bk)modmk)
    • ( A − B ) m o d    M = ( ( a 1 − b 1 ) m o d    m 1 , . . . , ( a k − b k ) m o d    m k ) (A-B)\mod M=( (a_1-b_1)\mod m_1, ..., (a_k-b_k)\mod m_k ) (A−B)modM=((a1−b1)modm1,...,(ak−bk)modmk)
    • ( A A ~ --- B ) m o d    M = ( ( a 1 A ~ --- b 1 ) m o d    m 1 , . . . , ( a k A ~ --- b k ) m o d    m k ) (AÃ---B)\mod M=( (a_1Ã---b_1)\mod m_1, ..., (a_kÃ---b_k)\mod m_k ) (AA~---B)modM=((a1A~---b1)modm1,...,(akA~---bk)modmk)

零知识证明

零知识证明指证明者(P)能向验证者(V)证明自己知道某秘密,且不泄露任何与秘密相关的信息。

  1. 零知识洞穴协议(直观例子)
    • 场景:洞穴深处 C、D 间有一扇需秘密咒语打开的门,P 知道咒语,需向 V 证明但不泄露咒语。
    • 步骤:
      ① P 进入洞穴,随机选择 C 或 D;
      ② V 随机要求 P 从 A 或 B 出来;
      ③ 若 P 知道咒语,可根据 V 的要求从指定出口出来(若在 C 则直接从 A 出,若在 D 则开门到 C 再从 A 出,反之亦然);
      ④ 重复多次,若 P 均能满足要求,V 可相信 P 知道咒语。
  2. 破译 RSA 能力的零知识证明协议
    • 场景:Alice 知道 Carol 的 RSA 私钥 d d d,需向 Bob 证明但不泄露 d d d。
    • 步骤:
      ① Alice 与 Bob 商定随机数 k , m k,m k,m,满足 k m a ^ ‰¡ e m o d    I ¨ † ( n ) km≡e\mod φ(n) kma^‰¡emodI¨†(n)( e e e为 Carol 的公钥, n n n为模数);
      ② 共同生成随机密文 C C C;
      ③ Alice 用 d d d计算 M = C d m o d    n M=C^d\mod n M=Cdmodn,再计算 X = M m m o d    n X=M^m\mod n X=Mmmodn并发送给 Bob;
      ④ Bob 验证 X k m o d    n = C X^k\mod n = C Xkmodn=C(因 X k = ( M m ) k = M k m = M e = ( C d ) e = C d e = C m o d    n X^k=(M^m)^k=M^{km}=M^e=(C^d)^e=C^{de}=C\mod n Xk=(Mm)k=Mkm=Me=(Cd)e=Cde=Cmodn),若成立则相信 Alice 知道 d d d。

不经意传输

指发送者(A)以特定概率向接收者(B)传递秘密,B 知道是否收到秘密,但 A 不知道 B 是否收到。

  1. 基于大数分解问题的不经意传输协议
    • 场景:A 传递秘密为大整数 n = p q n=pq n=pq(两素数积)的因数分解。
    • 原理:已知某数模 n n n的两个不同平方根,可分解 n n n。
    • 步骤:
      ① B 随机选 x x x,发送 x 2 m o d    n x^2\mod n x2modn给 A;
      ② A 计算 x 2 m o d    n x^2\mod n x2modn的 4 个平方根 A ^ ± x , A ^ ± y ±x,±y A^±x,A^±y,随机发送一个给 B;
      ③ B 检查收到的数是否与 A ^ ± x ±x A^±x同余:若同余,未获新信息;否则,获得两个不同平方根,可分解 n n n(概率 1/2)。
  2. 基于离散对数问题的不经意传输协议(非交互)
    • 系统参数:大素数 p p p, G F ( p ) − { 0 } GF(p)-\{0\} GF(p)−{0}的生成元 g g g,大素数 c c c(离散对数未知)。
    • B 的密钥生成:随机选比特 i i i和 x x x,计算 y i = g x y_i=g^x yi=gx, y 1 − i = c A ^ ⋅ ( g x ) − 1 y_{1-i}=c·(g^x)^{-1} y1−i=cA^⋅(gx)−1;公钥为 ( y 0 , y 1 ) (y_0,y_1) (y0,y1),私钥为 ( i , x ) (i,x) (i,x)(B 仅知 y i y_i yi的离散对数)。
    • 协议(二传一):
      ① A 随机选 k 0 , k 1 a ^ ˆˆ [ 0 , p − 2 ] k_0,k_1∈[0,p-2] k0,k1a^ˆˆ[0,p−2],计算 c j = g k j c_j=g^{k_j} cj=gkj, d j = y j k j d_j=y_j^{k_j} dj=yjkj, m j = s j a ^ S ˇ • d j m_j=s_j⊕d_j mj=sja^Sˇ•dj( s 0 , s 1 s_0,s_1 s0,s1为 A 的两个秘密,⊕为异或),发送 c 0 , c 1 , m 0 , m 1 c_0,c_1,m_0,m_1 c0,c1,m0,m1给 B;
      ② B 用私钥 ( i , x ) (i,x) (i,x)计算 d i = y i k i = g x A ^ ⋅ k i = c i x d_i=y_i^{k_i}=g^{x·k_i}=c_i^x di=yiki=gxA^⋅ki=cix,再得 s i = m i a ^ S ˇ • d i s_i=m_i⊕d_i si=mia^Sˇ•di(无法获取 s 1 − i s_{1-i} s1−i,因不知 y 1 − i y_{1-i} y1−i的离散对数)。
  3. "多传一" 不经意传输协议
    • 基于单向函数:
      ① A 告知 B 单向函数 f f f,保密 f − 1 f^{-1} f−1;
      ② B 想获取秘密 s i s_i si,选 x 1 , . . . , x k x_1,...,x_k x1,...,xk,发送 ( y 1 , . . . , y k ) (y_1,...,y_k) (y1,...,yk)(其中 y i = f ( x i ) y_i=f(x_i) yi=f(xi), y j y_j yj为随机数 j a ^ ‰ i j≠i ja^‰i);
      ③ A 计算 z j = f − 1 ( y j ) z_j=f^{-1}(y_j) zj=f−1(yj),发送 z j a ^ S ˇ • s j z_j⊕s_j zja^Sˇ•sj给 B;
      ④ B 用 z i = x i z_i=x_i zi=xi得 s i = z i a ^ S ˇ • ( z i a ^ S ˇ • s i ) s_i=z_i⊕(z_i⊕s_i) si=zia^Sˇ•(zia^Sˇ•si),A 不知 B 获取的是哪个秘密。
    • 基于大数分解:
      ① A 构造 k k k个 RSA 体制( n j = p j q j n_j=p_jq_j nj=pjqj, p j a ^ ‰¡ q j a ^ ‰¡ 3 m o d    4 p_j≡q_j≡3\mod4 pja^‰¡qja^‰¡3mod4),发送加密密钥 ( e j , n j ) (e_j,n_j) (ej,nj)及加密秘密 s j e j m o d    n j s_j^{e_j}\mod n_j sjejmodnj;
      ② B 选 x j x_j xj,计算 x j 2 m o d    n j x_j^2\mod n_j xj2modnj及 Jacobi 符号:若想获取 s i s_i si,发送 ( x i 2 m o d    n i , J ( x i , n i ) ) (x_i^2\mod n_i, J(x_i,n_i)) (xi2modni,J(xi,ni))和 ( x j 2 m o d    n j , − J ( x j , n j ) ) (x_j^2\mod n_j, -J(x_j,n_j)) (xj2modnj,−J(xj,nj))( j a ^ ‰ i j≠i ja^‰i);
      ③ A 返回与接收的 Jacobi 符号一致的平方根;
      ④ B 通过 x i x_i xi和收到的平方根分解 n i n_i ni,得 s i s_i si( j a ^ ‰ i j≠i ja^‰i无法分解)。
  4. 改进的 "多传一" 不经意传输(保护双方隐私)
    • 系统参数: q q q为大素数, G q G_q Gq为 q q q阶群,生成元 g , h g,h g,h;A 的秘密 m 1 , . . . , m n a ^ ˆˆ G q m_1,...,m_n∈G_q m1,...,mna^ˆˆGq,B 的选择 I ^ ± α I^±。
    • 步骤:
      ① B 发送 y = g r h I ^ ± ′ y=g^r h^{α'} y=grhI^±′, y ′ = g r ′ h I ^ ± y'=g^{r'} h^{α} y′=gr′hI^±( r , r ′ , I ^ ± ′ a ^ ˆˆ Z q r,r',α'∈Z_q r,r′,I^±′a^ˆˆZq随机);
      ② A 发送随机 c a ^ ˆˆ Z q c∈Z_q ca^ˆˆZq;
      ③ B 发送 z 1 = ( r + r ′ c ) m o d    q z_1=(r + r'c)\mod q z1=(r+r′c)modq, z 2 = ( I ^ ± + I ^ ± ′ c ) m o d    q z_2=(α + α'c)\mod q z2=(I^±+I^±′c)modq;
      ④ A 验证 y A ^ ⋅ y ′ c = g z 1 h z 2 y·y'^c = g^{z_1}h^{z_2} yA^⋅y′c=gz1hz2,若通过,发送 c i = ( g k i , m i A ^ ⋅ ( y / h i ) k i ) c_i=(g^{k_i}, m_i·(y/h^i)^{k_i}) ci=(gki,miA^⋅(y/hi)ki)( k i a ^ ˆˆ Z q k_i∈Z_q kia^ˆˆZq随机);
      ⑤ B 用 c I ^ ± = ( a , b ) c_α=(a,b) cI^±=(a,b)计算 m I ^ ± = b / a r m_α = b/a^r mI^±=b/ar(因 a = g k I ^ ± a=g^{k_α} a=gkI^±, b = m I ^ ± A ^ ⋅ ( y / h I ^ ± ) k I ^ ± = m I ^ ± A ^ ⋅ g r k I ^ ± b=m_α·(y/h^α)^{k_α}=m_α·g^{r k_α} b=mI^±A^⋅(y/hI^±)kI^±=mI^±A^⋅grkI^±,故 b / a r = m I ^ ± b/a^r=m_α b/ar=mI^±)。

比特承诺

承诺者(A)向验证者(B)承诺一个比特 / 消息,承诺后不可篡改,公开时可验证真实性。

  1. 基于对称加密的比特承诺协议
    • 步骤:
      ① B 生成随机比特串 r r r,发送给 A;
      ② A 选密钥 k k k和承诺比特 b b b,用对称加密 E E E计算 c = E k ( r , b ) c=E_k(r,b) c=Ek(r,b),发送 c c c给 B;
      ③ 公开时,A 发送 k k k和 b b b;B 用 k k k解密,验证 r r r和 b b b的一致性。
  2. 基于单向函数的比特承诺协议
    • 步骤:
      ① A 生成随机数 r 1 , r 2 r_1,r_2 r1,r2,计算 h = H ( r 1 , r 2 , M ) h=H(r_1,r_2,M) h=H(r1,r2,M)( H H H为单向函数 / Hash 函数),发送 h h h和 r 1 r_1 r1给 B;
      ② 公开时,A 发送 r 2 r_2 r2和消息 M M M;B 计算 H ( r 1 , r 2 , M ) H(r_1,r_2,M) H(r1,r2,M),与 h h h比对验证。
  3. 基于离散对数的 Pedersen 承诺(消息承诺)
    • 系统参数:大素数 p = 2 q + 1 p=2q+1 p=2q+1( q q q为大素数), G q G_q Gq为 Z p ∗ Z_p^* Zp∗的 q q q阶子群,生成元 g g g。
    • 步骤:
      ① B 发送 G q G_q Gq中随机元素 h h h给 A;
      ② A 选承诺密钥 r a ^ ˆˆ Z q ∗ r∈Z_q^* ra^ˆˆZq∗,计算承诺值 C = g x h r m o d    p C=g^x h^r \mod p C=gxhrmodp( x x x为消息),发送 C C C给 B;
      ③ 公开时,A 发送 x x x和 r r r;B 验证 C = g x h r m o d    p C=g^x h^r \mod p C=gxhrmodp。
    • 性质:隐藏性(无法从 C C C推出 x x x)、约束性(基于离散对数难题,A 无法篡改 x x x)。

其他协议相关概念

  1. 防止重放攻击:通过时间戳、随机数等机制,避免攻击者重复发送截获的协议消息以欺骗合法方。
  2. 密钥确证:协议参与方验证对方是否真正掌握协商的密钥,确保密钥一致性和安全性。
  3. 证书与可信第三方(TA):TA 负责初始化发放证书(含用户公钥及验证签名算法),仅在纠纷时参与,密钥协商过程无需 TA 在线;证书确保用户身份真实性(发放时 TA 验明身份)。
相关推荐
hrrrrb7 小时前
【密码学】6. 消息认证和哈希函数
算法·密码学·哈希算法
景彡先生1 天前
密码学侧信道攻击(Side-channel Attack):从物理泄露中窃取密钥
密码学
小明的小名叫小明3 天前
区块链技术原理(1) -密码学
区块链·密码学·哈希算法
景彡先生4 天前
基于编码的密码学与Classic McEliece:后量子时代的稳健之选
密码学
白帽程序员猫哥4 天前
漏洞全讲解之中间件与框架漏洞(数字基础设施的“阿喀琉斯之踵“)
网络·安全·web安全·中间件·密码学·渗透
景彡先生4 天前
密码学分组模式详解:从ECB到GCM的进化之路
网络·密码学
做题不NG5 天前
密码学系列文(4)--公钥密码
密码学
景彡先生5 天前
古典密码学:凯撒密码与维吉尼亚密码的原理与实现
密码学
牧天白衣.5 天前
可验证随机函数-VRF
学习·密码学