Schnorr数字签名方案
Schnorr签名算法最初由德国密码学家claus schnorr于2008年提出,在密码学中,它是一种数字签名方案,以其简单著称
Schnorr数字签名方案也是基于离散对数的(基于离散对数的还有ElGamal数字签名方案、DSA数字签名方案)。Schnorr方案将生成签名所需的消息计算量最小化。生成签名的主要工作不依赖于消息,可以在处理器空闲时执行。
该方案的第一部分是生成私钥/公钥对,它由以下步骤组成:
- 选择素数p和q,使得q是p-1的素因子。即 p-1 ≡ 0 (mod q)
- 选择一整数a,使得a^q = 1 mod p , a,p和q组成全局公钥参数,在用户组内的每一个用户都可以取此值
- 选择随机整数s,0<s<q,作为用户的私钥
- 计算v=a^(-s) mod p ,作为用户的公钥
对于私钥为s,公钥为v的用户,可以通过以下步骤产生签名:
- 选择随机整数r,0<r<q,并且计算x=a^r mod p
- 将x附在消息M的后面一起计算hash值e , e=H(M||x)
- 计算y=(r+se) mod q .签名由(e,y)对组成
任何其他用户能够通过以下步骤验证签名:
- 计算
- 验证是否
对于该验证过程有,
因此,有