当前位置: 首页 > 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.dtcms.com/a/324511.html

相关文章:

  • 金融机构在元宇宙中的业务开展与创新路径
  • 【教学类-29-06】20250809灰色门牌号-黏贴版(6层*5间层2间)题目和答案(剪贴卡片)
  • 使用Python调用OpenAI的function calling源码
  • Pytorch深度学习框架实战教程-番外篇02-Pytorch池化层概念定义、工作原理和作用
  • ROS2 QT 多线程功能包设计
  • PHP项目运行
  • (LeetCode 每日一题) 869. 重新排序得到 2 的幂 (哈希表+枚举)
  • Framework开发之Zygote进程2(基于开源的AOSP15)--init.rc在start zygote之后的事情(详细完整版逐行代码走读)
  • springboot骚操作
  • 【论文阅读】Deep Adversarial Multi-view Clustering Network
  • 视觉障碍物后处理
  • Java开发异步编程中常用的接口和类
  • 人工智能之数学基础:如何理解n个事件的独立?
  • [C/C++线程安全]_[中级]_[避免使用的C线程不安全函数]
  • Android APK 使用OpenGl 绘制三角形源码
  • Word XML 批注范围克隆处理器
  • 绕过文件上传漏洞并利用文件包含漏洞获取系统信息的技术分析
  • 使用MongoDB存储和计算距离
  • Spring Boot 2 升级 Spring Boot 3 的全方位深度指南
  • Leetcode 3644. Maximum K to Sort a Permutation
  • 9_基于深度学习的车型检测识别系统(yolo11、yolov8、yolov5+UI界面+Python项目源码+模型+标注好的数据集)
  • Error: error:0308010C:digital envelope routines::unsupported at new Hash
  • 【Python 小脚本·大用途 · 第 3 篇】
  • 编译xformers
  • 【深度学习新浪潮】遥感图像风格化迁移研究工作介绍
  • 学习记录(十九)-Overleaf如何插入图片(单,多)
  • 学习模板元编程(3)enable_if
  • CART算法:Gini指数
  • 25.机器学习入门:让机器变聪明的魔法课
  • 串口通信初始化过程是怎样的???