(1) 执行过程如下:

  • 密钥产生:选择两个大素数p和q,计算g=α^((p-1)/q) mod p,其中α是p的原根。选择私钥x∈Zq,计算公钥y=g^x mod p。
  • 签名产生:对于消息m,计算h=hash(m) mod q,其中hash是一个密码学哈希函数。选择随机数k∈Zq,计算r=g^k mod p,然后计算s=(h+x*r)*k^(-1) mod q。
  • 签名验证:接收到消息m和签名(r,s),计算h=hash(m) mod q,计算u1=s^(-1)*h mod q,u2=s^(-1)r mod q,计算v=(g^u1y^u2 mod p) mod q。如果v=r,则签名合法。

要证明y'=y,我们需要计算: y' = s^h mod p = (g^z)^h mod p = g^(x*h^(-1)*h) mod p = g^x mod p = y

因此,如果签名合法,y'=y。

(2) 窃听者可以伪造签名如下:

  • 窃听者截获Alice发送的消息m和签名(r,s)。
  • 窃听者可以选择任意的随机数k∈Zq,计算r=g^k mod p,然后计算s'=(h+x*r)*k^(-1) mod q。
  • 窃听者将(r,s')作为伪造的签名发送给Bob。
  • Bob计算v=(g^u1*y^u2 mod p) mod q,其中u1=s'^(-1)*h mod q,u2=s'^(-1)*r mod q。由于r=g^k mod p,u2=s'^(-1)*g^k mod q,窃听者可以选择一个合适的s'使得u2等于窃听者想要的值。这样,v=r,Bob会接受伪造的签名。

因此,该签名方案不是安全的,容易受到伪造攻击

1、考虑下面的数宇签名方案。 1密钥产生p、q是两个大素数g属于Zpordg= q私钥x属于 Zq公钥 y = g^x mod p。2签名产生Alice 对消息m进行签名时她计算 h = hashm mod qz = xh^-1 mod qs=g^z mod p即为m的签名。 3签名验证 Bob 对签名验证他计算 h = hashm mod qy = s^h mod p验证等式y = y是否成立。

原文地址: http://www.cveoy.top/t/topic/cr2Z 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录