公钥密码学_Schnorr数字签名方案

版权声明:转载请附上博客地址 https://blog.csdn.net/weixin_38134491/article/details/84638797

和ElGama数字签名一样,Schnorr数字签名方案也是基于离散对数。

Schnorr数字签名主要工作不依赖于消息,生成签名过程与消息相关的部分需要进行2n位长度的整数与n位长度的整数相乘。

算法参数分析

该方案基于素数模p,且p-1包含大素数因子q,即 p-1≡0(mod q), p一般大约取 p=2^1024, q一般大约取 q=2^160,

p是1024位整数,q是160位整数,正好等于SHA-1中Hash值的长度。

具体算法流程

第一步生成公钥和私钥对,如下:

  1. 选择素数p和q,使得q是p-1的素因子
  2. 选择整数a,使 α^q=1 mod p, 使a,p,q 构成全局公钥参数,在用户组内的每个用户都可以取此值
  3. 选择随机整数s,0<s<q ,作为用户的私钥
  4. 计算 v=a^-s mod p, 作为用户的公钥 

签名

  1. 选择随机整数r,0<r<q, 并计算 x=a^r mod p, 该过程和待签名消息M无关
  2. 将x附在消息后面一起计算Hash值e, e=H(M||x)
  3. 计算 y=(r+ s*e) mod q , 签名包括(e,y)对

其他用户验证签名:

  1. 计算 x'= a^y * v^e mod p
  2. 验证是否 e=H(M||x')

对于该验证过程有:

x'≡a^y * v^e ≡a^y *a^-se ≡a^ y-se ≡ a^r ≡x mod p

所以 H(M||x')=H(M||x)

Reference:《Encryptography and Networking Security》6th William Stalling

猜你喜欢

转载自blog.csdn.net/weixin_38134491/article/details/84638797
今日推荐