当前位置: 首页 > news >正文

【密码学】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)实现大数运算。
    • 物不知数问题:求解方程组xa^‰¡2mod3x≡2\mod3xa^‰¡2mod3xa^‰¡3mod5x≡3\mod5xa^‰¡3mod5xa^‰¡2mod7x≡2\mod7xa^‰¡2mod7,通过构造法得解 23(小于 105 的唯一解)。
  3. 定理内容
    m1,m2,...,mkm_1,m_2,...,m_km1,m2,...,mk是两两互素的正整数,M=m1m2...mkM=m_1m_2...m_kM=m1m2...mk,则同余方程组{xa^‰¡a1modm1xa^‰¡a2modm2...xa^‰¡akmodmk\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对模MMM有唯一解:x=(a1M1e1+a2M2e2+...+akMkek)modMx=(a_1M_1e_1 + a_2M_2e_2 + ... + a_kM_ke_k)\mod Mx=(a1M1e1+a2M2e2+...+akMkek)modM
    其中,Mi=M/miM_i=M/m_iMi=M/mieie_iei满足Mieia^‰¡1modmiM_ie_i≡1\mod m_iMieia^‰¡1modmi(即eie_ieiMiM_iMimim_imi的逆元)。
  4. 推论(模运算性质)
    A=(a1,a2,...,ak)A=(a_1,a_2,...,a_k)A=(a1,a2,...,ak)B=(b1,b2,...,bk)B=(b_1,b_2,...,b_k)B=(b1,b2,...,bk)(其中ai,bia_i,b_iai,bi分别为A,BA,BA,Bmim_imi的同余类),则:
    • (A+B)modM=((a1+b1)modm1,...,(ak+bk)modmk)(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)modM=((a1−b1)modm1,...,(ak−bk)modmk)(A-B)\mod M=( (a_1-b_1)\mod m_1, ..., (a_k-b_k)\mod m_k )(AB)modM=((a1b1)modm1,...,(akbk)modmk)
    • (AA~—B)modM=((a1A~—b1)modm1,...,(akA~—bk)modmk)(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 私钥ddd,需向 Bob 证明但不泄露ddd
    • 步骤:
      ① Alice 与 Bob 商定随机数k,mk,mk,m,满足kma^‰¡emodI¨†(n)km≡e\mod φ(n)kma^‰¡emodI¨(n)eee为 Carol 的公钥,nnn为模数);
      ② 共同生成随机密文CCC
      ③ Alice 用ddd计算M=CdmodnM=C^d\mod nM=Cdmodn,再计算X=MmmodnX=M^m\mod nX=Mmmodn并发送给 Bob;
      ④ Bob 验证Xkmodn=CX^k\mod n = CXkmodn=C(因Xk=(Mm)k=Mkm=Me=(Cd)e=Cde=CmodnX^k=(M^m)^k=M^{km}=M^e=(C^d)^e=C^{de}=C\mod nXk=(Mm)k=Mkm=Me=(Cd)e=Cde=Cmodn),若成立则相信 Alice 知道ddd

不经意传输

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

  1. 基于大数分解问题的不经意传输协议
    • 场景:A 传递秘密为大整数n=pqn=pqn=pq(两素数积)的因数分解。
    • 原理:已知某数模nnn的两个不同平方根,可分解nnn
    • 步骤:
      ① B 随机选xxx,发送x2modnx^2\mod nx2modn给 A;
      ② A 计算x2modnx^2\mod nx2modn的 4 个平方根A^±x,A^±y±x,±yA^±x,A^±y,随机发送一个给 B;
      ③ B 检查收到的数是否与A^±x±xA^±x同余:若同余,未获新信息;否则,获得两个不同平方根,可分解nnn(概率 1/2)。
  2. 基于离散对数问题的不经意传输协议(非交互)
    • 系统参数:大素数pppGF(p)−{0}GF(p)-\{0\}GF(p){0}的生成元ggg,大素数ccc(离散对数未知)。
    • B 的密钥生成:随机选比特iiixxx,计算yi=gxy_i=g^xyi=gxy1−i=cA^⋅(gx)−1y_{1-i}=c·(g^x)^{-1}y1i=cA^(gx)1;公钥为(y0,y1)(y_0,y_1)(y0,y1),私钥为(i,x)(i,x)(i,x)(B 仅知yiy_iyi的离散对数)。
    • 协议(二传一):
      ① A 随机选k0,k1a^ˆˆ[0,p−2]k_0,k_1∈[0,p-2]k0,k1a^ˆˆ[0,p2],计算cj=gkjc_j=g^{k_j}cj=gkjdj=yjkjd_j=y_j^{k_j}dj=yjkjmj=sja^Sˇ•djm_j=s_j⊕d_jmj=sja^Sˇdjs0,s1s_0,s_1s0,s1为 A 的两个秘密,⊕为异或),发送c0,c1,m0,m1c_0,c_1,m_0,m_1c0,c1,m0,m1给 B;
      ② B 用私钥(i,x)(i,x)(i,x)计算di=yiki=gxA^⋅ki=cixd_i=y_i^{k_i}=g^{x·k_i}=c_i^xdi=yiki=gxA^ki=cix,再得si=mia^Sˇ•dis_i=m_i⊕d_isi=mia^Sˇdi(无法获取s1−is_{1-i}s1i,因不知y1−iy_{1-i}y1i的离散对数)。
  3. “多传一” 不经意传输协议
    • 基于单向函数:
      ① A 告知 B 单向函数fff,保密f−1f^{-1}f1
      ② B 想获取秘密sis_isi,选x1,...,xkx_1,...,x_kx1,...,xk,发送(y1,...,yk)(y_1,...,y_k)(y1,...,yk)(其中yi=f(xi)y_i=f(x_i)yi=f(xi)yjy_jyj为随机数ja^‰ij≠ija^i);
      ③ A 计算zj=f−1(yj)z_j=f^{-1}(y_j)zj=f1(yj),发送zja^Sˇ•sjz_j⊕s_jzja^Sˇsj给 B;
      ④ B 用zi=xiz_i=x_izi=xisi=zia^Sˇ•(zia^Sˇ•si)s_i=z_i⊕(z_i⊕s_i)si=zia^Sˇ(zia^Sˇsi),A 不知 B 获取的是哪个秘密。
    • 基于大数分解:
      ① A 构造kkk个 RSA 体制(nj=pjqjn_j=p_jq_jnj=pjqjpja^‰¡qja^‰¡3mod4p_j≡q_j≡3\mod4pja^‰¡qja^‰¡3mod4),发送加密密钥(ej,nj)(e_j,n_j)(ej,nj)及加密秘密sjejmodnjs_j^{e_j}\mod n_jsjejmodnj
      ② B 选xjx_jxj,计算xj2modnjx_j^2\mod n_jxj2modnj及 Jacobi 符号:若想获取sis_isi,发送(xi2modni,J(xi,ni))(x_i^2\mod n_i, J(x_i,n_i))(xi2modni,J(xi,ni))(xj2modnj,−J(xj,nj))(x_j^2\mod n_j, -J(x_j,n_j))(xj2modnj,J(xj,nj))ja^‰ij≠ija^i);
      ③ A 返回与接收的 Jacobi 符号一致的平方根;
      ④ B 通过xix_ixi和收到的平方根分解nin_ini,得sis_isija^‰ij≠ija^i无法分解)。
  4. 改进的 “多传一” 不经意传输(保护双方隐私)
    • 系统参数:qqq为大素数,GqG_qGqqqq阶群,生成元g,hg,hg,h;A 的秘密m1,...,mna^ˆˆGqm_1,...,m_n∈G_qm1,...,mna^ˆˆGq,B 的选择I^±Î±I^±
    • 步骤:
      ① B 发送y=grhI^±′y=g^r h^{α'}y=grhI^±y′=gr′hI^±y'=g^{r'} h^{α}y=grhI^±r,r′,I^±′a^ˆˆZqr,r',α'∈Z_qr,r,I^±a^ˆˆZq随机);
      ② A 发送随机ca^ˆˆZqc∈Z_qca^ˆˆZq
      ③ B 发送z1=(r+r′c)modqz_1=(r + r'c)\mod qz1=(r+rc)modqz2=(I^±+I^±′c)modqz_2=(α + α'c)\mod qz2=(I^±+I^±c)modq
      ④ A 验证yA^⋅y′c=gz1hz2y·y'^c = g^{z_1}h^{z_2}yA^yc=gz1hz2,若通过,发送ci=(gki,miA^⋅(y/hi)ki)c_i=(g^{k_i}, m_i·(y/h^i)^{k_i})ci=(gki,miA^(y/hi)ki)kia^ˆˆZqk_i∈Z_qkia^ˆˆZq随机);
      ⑤ B 用cI^±=(a,b)c_α=(a,b)cI^±=(a,b)计算mI^±=b/arm_α = b/a^rmI^±=b/ar(因a=gkI^±a=g^{k_α}a=gkI^±b=mI^±A^⋅(y/hI^±)kI^±=mI^±A^⋅grkI^±b=m_α·(y/h^α)^{k_α}=m_α·g^{r k_α}b=mI^±A^(y/hI^±)kI^±=mI^±A^grkI^±,故b/ar=mI^±b/a^r=m_αb/ar=mI^±)。

比特承诺

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

  1. 基于对称加密的比特承诺协议
    • 步骤:
      ① B 生成随机比特串rrr,发送给 A;
      ② A 选密钥kkk和承诺比特bbb,用对称加密EEE计算c=Ek(r,b)c=E_k(r,b)c=Ek(r,b),发送ccc给 B;
      ③ 公开时,A 发送kkkbbb;B 用kkk解密,验证rrrbbb的一致性。
  2. 基于单向函数的比特承诺协议
    • 步骤:
      ① A 生成随机数r1,r2r_1,r_2r1,r2,计算h=H(r1,r2,M)h=H(r_1,r_2,M)h=H(r1,r2,M)HHH为单向函数 / Hash 函数),发送hhhr1r_1r1给 B;
      ② 公开时,A 发送r2r_2r2和消息MMM;B 计算H(r1,r2,M)H(r_1,r_2,M)H(r1,r2,M),与hhh比对验证。
  3. 基于离散对数的 Pedersen 承诺(消息承诺)
    • 系统参数:大素数p=2q+1p=2q+1p=2q+1qqq为大素数),GqG_qGqZp∗Z_p^*Zpqqq阶子群,生成元ggg
    • 步骤:
      ① B 发送GqG_qGq中随机元素hhh给 A;
      ② A 选承诺密钥ra^ˆˆZq∗r∈Z_q^*ra^ˆˆZq,计算承诺值C=gxhrmodpC=g^x h^r \mod pC=gxhrmodpxxx为消息),发送CCC给 B;
      ③ 公开时,A 发送xxxrrr;B 验证C=gxhrmodpC=g^x h^r \mod pC=gxhrmodp
    • 性质:隐藏性(无法从CCC推出xxx)、约束性(基于离散对数难题,A 无法篡改xxx)。

其他协议相关概念

  1. 防止重放攻击:通过时间戳、随机数等机制,避免攻击者重复发送截获的协议消息以欺骗合法方。
  2. 密钥确证:协议参与方验证对方是否真正掌握协商的密钥,确保密钥一致性和安全性。
  3. 证书与可信第三方(TA):TA 负责初始化发放证书(含用户公钥及验证签名算法),仅在纠纷时参与,密钥协商过程无需 TA 在线;证书确保用户身份真实性(发放时 TA 验明身份)。
http://www.lryc.cn/news/616006.html

相关文章:

  • Mysql系列--5、表的基本查询(下)
  • Agent在游戏行业的应用:NPC智能化与游戏体验提升
  • 【数据结构入门】栈和队列的OJ题
  • Shell脚本-其他变量定义
  • vue和react和uniapp的状态管理分别是什么,并且介绍和怎么使用
  • How Websites Work 网站如何运作
  • Vue 事件冒泡处理指南:从入门到精通
  • 五种Excel表格导出方案
  • sqllabs——Less1
  • 前端学习日记 - 前端函数防抖详解
  • 遇到前端导出 Excel 文件出现乱码或文件损坏的问题
  • 打靶日常-upload-labs(21关)
  • Spring Boot配置文件加密详解
  • crc32算法php版----crc32.php
  • 【redis初阶】--------Set 集合类型
  • 如何通过API接口实现批量获取淘宝商品数据?(官方与非官方渠道分享)
  • Linux 路由子系统深度分析:框架、实现与代码路径
  • [Python 基础课程]常用函数
  • X265性能分析开源代码
  • 【高等数学】第八章 向量代数与空间解析几何——第六节 空间曲线及其方程
  • Video Lecture 8 Page Fault
  • 使用 Python 进行图片识别的项目开发
  • git merge和git rebase的区别
  • MIRO中文本如何传入FI凭证的
  • 基于Spring SSE构建实时监控系统
  • SpringCloud详细笔记
  • es-drager-blog
  • Java 日常开发笔记(小程序页面交互传参-id)
  • 震动马达实现库函数版(STC8)
  • 升级 JDK 17 碰到的请求 https 问题