密码学|密码协议

密码协议

密码学协议(cryptographic protocol)
利用加密、签名、杂凑函数、随机数产生器等基本工具完成某些特定密码功能的过程、算法或程序。
协议一般涉及多个参与者,参与者之间有较多交互信息。
协议在完成密码学目的中起着主要作用,种类繁多:
认证协议、密钥管理(建立)协议、附加功能的加密和签名、各种电子政务/电子商务协议等等。

密钥协商协议

建立和维护用户密钥关系
(1) 系统用户初始化
(2) 产生、分配和安装密钥
(3) 控制密钥的使用
(4) 刷新、撤销和毁掉密钥
(5) 存储、备份 /恢复和存档密钥文件

DH密钥交换协议

Diffle-Hellman
公开参数\(p,g\)
A选择x,生成\(g^xmodp\)发送给B
B选择y,生成\(g^ymodp\)发送给A
协商得到\(g^{xy}modp\)
\(g^x,g^y,g^{x+y},g^{xy}\)的DH问题
中间人攻击
中间人C对A假冒B,对B假冒A
改进方案为增加签名
公钥证书

秘密共享协议

将密钥分成多份,秘密分配给一些成员,使得一部分成员共同恢复原密钥

  • 门限值(Threshold):设定一个阈值 $ t $,表示至少需要 $ t $ 个份额才能恢复秘密。
  • 参与者数量(n):将秘密分成 $ n $ 个份额,分发给 $ n $ 个参与者。
  • 安全性:任意少于 $ t $ 个份额无法提供关于原始秘密的任何信息。
    常用的(t, n)门限方案: 将份额分为n份,其中 t 份可以恢复原密钥。

Shamir门限秘密交换方案

算法原理
基于拉格朗日插值多项式

秘密分割

  1. 秘密值 $ S $ 是需要共享的数据,通常是一个密钥或重要信息
  2. 构造多项式:
    • 选择一个素数 $ p $,使得 $ p > S $ 且 $ p > n $。
    • 构造一个 $ t-1 $ 次多项式 \(f(x)\),其形式为:
      \(f(x) = S +\) \(a_1x + a_2x^2 + \cdots + a_{t-1}x^{t-1}\)
      其中,$ S $ 是多项式的常数项(即 \(f(0) = S\)),$ a_1, a_2, \ldots, a_{t-1} $ 是随机生成的系数,且所有运算均在模 $ p $ 下进行。

生成份额

  1. 选择 $ n $ 个不同的整数 $ x_1, x_2, \ldots, x_n $(通常取 $ 1, 2, \ldots, n $)
  2. 对每个 $ x_i $,计算 $ y_i = f(x_i) $
  3. 将 $ (x_i, y_i) $ 分发给第 $ i $ 个参与者。每个参与者只保存自己的 $ (x_i, y_i) $ 对,且 $ x_i $ 是公开的,只有 $ y_i $ 是保密的

秘密恢复

  1. 至少 $ t $ 个参与者提供他们的份额 $ (x_i, y_i) $。
  2. 拉格朗日插值:利用这些点,通过拉格朗日插值法恢复多项式 \(f(x)\)
    \(f(x) = \sum_{j=1}^{t} y_j \cdot \prod_{\substack{i=1 \\ i \neq j}}^{t} \frac{x - x_i}{x_j - x_i}\)
  3. 提取秘密:计算 $ f(0) $,即可得到原始秘密 $ S $。

身份认证协议

证实通信双方的真实身份
防冒充、伪造、实现访问控制
密码学中的身份认证方式有:
口令(弱认证) --验证者可以获得秘密
挑战应答(强认证)--不泄露核心秘密
零知识的认证 --不泄露任何秘密

挑战应答

对称共享密钥

A\(\to\)B:\(A,R_A\)
B\(\to\)A:\(R_B,K_{AB}(R_A)\)
A\(\to\)B:\(K_{AB}(R_B)\)
存在反射攻击
敌手发起第二个挑战来回应第一个挑战

单向函数

B\(\to\)A:\(r_B\)
A\(\to\)B:\(r_A,h_K(r_A,r_B,B)\)
B\(\to\)A:\(h_K(r_A,r_B,A)\)

公钥加密和签名

B\(\to\)A:\(h(r),B,P_A(r,B)\)
A\(\to\)B:\(r\)
B\(\to\)A:\(r_B\)
A\(\to\)B:\(C_A,r_A,S_A(r_A,r_B,B)\)
B\(\to\)A:\(C_B,A,S_B(r_A,r_B,A)\)

Kerberos协议

在一个分布式的Client/Server体系的机构中,引入一个可信任的第三方(Kerberos服务器),使用共享密钥加密技术,让其提供认证服务
具体 https://www.cnblogs.com/luminescence/p/18929307

零知识证明

Zero Knowledge Proof
即证明拥有秘密,又不泄露秘密信息的证明系统。 在计算复杂性理论中,任何NP问题都存在ZKP。

基于大数分解

设p、q是两个大素数,\(n=pq\),假设P知道n的因子,
P向V零知识地证明这一点:
V选择大数\(x,y=x^2modn\)
P计算\(z = sqrt(y)modn\)
V验证\(y=z^2modn\)
大数分解问题与计算平方根问题等价:
如果 P 不知道 n 的分解,也不能求平方根。
现在 P 知道 n 的分解,则能够求平方根。

Schnorr身份认证方案

A有私钥x使得\(y = g^x(modp)\)
公开参数\((p,g,y)\)
A生成承诺数\(r\)并计算\(R = g^r (mod p)\)
B生成挑战值\(c\)
A计算对挑战的响应\(z = (r + c\times s)mod (p-1)\)
B验证\(g^z ≡ R \times y^c (mod p)\)是否成立

posted @ 2025-06-22 14:56  lumiere_cloud  阅读(112)  评论(0)    收藏  举报