常见的数字签名||Schnorr签名||Elgamal签名||DSA签名

1、Schnorr签名

Schnorr签名点乘形式
(1)交互式

(2)非交互式:关键在于产生R之前无法让Alice预测到c的值。

Schnorr签名指数形式: 参考《现代密码学(第4版) 》第190页

注释1:
在椭圆曲线群上,最有效的已知算法是Pollard的rho算法,其时间复杂度大约为 O ( n ) O(\sqrt{n}) O(n ),其中n是椭圆曲线上群的阶(通常与曲线的基点的阶大致相同)。因此,如果椭圆曲线群的阶为 n n n,破解ECDLP所需的时间复杂度大致为 n \sqrt{n} n 。也就是说,160比特的ECC密钥提供了大约与80比特对称密钥相同的安全性。

注释2:
在非交互式Schnorr签名中用C替换R的原因:
① 发送 ( R , s ) (R,s) (R,s),由于 R = g k   m o d   p R = g^k ~mod ~ p R=gk mod p R R R Z p \mathbb{Z}_p Zp的元素,如果
p 是一个512比特的素数, q 是一个160比特的素数,那么发送 (R,s) 需要512 + 160 = 672比特。

② 由 s = r + c ∗ p k s = r + c * pk s=r+cpk r ∈ [ 1 , q − 1 ] r \in [1, q-1] r[1,q1] p k ∈ [ 1 , q − 1 ] pk \in [1, q-1] pk[1,q1] 可知 s ∈ [ 1 , q − 1 ] s \in [1,q-1] s[1,q1],结合注释1的分析,160 比特椭圆曲线群的安全性只有 80比特。那么,挑战数 c也只需要80 比特就足够了发送 (c,s) 需要512 + 80 = 592比特。

注释3:
Fiat-Shamir 变换 可将双交互式协议转变为单交互式。通过将验证方的挑战值变换为发送方的随机值 + 哈希值。

2、 Elgamal签名

(1) 产生公私钥对:

  • 生成大素数 p p p, p ≥ 2 1024 p \ge 2^{1024} p21024,生成有限域 Z p \mathbb{Z}_p Zp g ∈ Z p ∗ g \in \mathbb{Z}_p^* gZp Z p \mathbb{Z}_p Zp的生成元, 选择大素数q, q ∣ ( p − 1 ) , q ≥ 2 160 q | (p - 1), q \ge 2^{160} q(p1),q2160,
  • 选择 x ← R Z p ∗ x \overset{R}{\leftarrow} \mathbb{Z}_p^* xRZp y = g x   m o d   p y = g^x ~mod~ p y=gx mod p
  • 私钥为 x x x, 公钥为 ( y , g , p ) (y,g,p) (y,g,p)

(2)签名:

  • 对消息 m m m 进行加密;
  • 随机选择整数 k ← R Z p ∗ k \overset{R}{\leftarrow} \mathbb{Z}_p^* kRZp
  • 计算 r r r r ≡ g k ( m o d   p ) r \equiv g^k (mod ~p) rgk(mod p)
  • 计算 s s s s ≡ [ H ( m ) − x r ] k − 1   ( m o d   ( p − 1 ) ) s \equiv [H(m) -xr] k^{-1} ~ (mod ~(p -1)) s[H(m)xr]k1 (mod (p1))

(3)验签:

  • 计算 g H ( m ) ′ g^{H(m)'} gH(m) g H ( m ) ′ = y r r s = ( g x ) r ( g k ) ( H ( m ) − x r ) / k g^{H(m)'} = y^r r^s = (g^x)^r (g^k)^{(H(m) - xr) / k} gH(m)=yrrs=(gx)r(gk)(H(m)xr)/k
  • 验证 g H ( m ) ′ = ? g H ( m ) g^{H(m)'} \overset{?}{=} g^{H(m)} gH(m)=?gH(m),若成立则为真,否则为假。

(4)安全性分析

注释:

3、DSA签名

未完待续

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值