几种数字签名方案


前言

签名技术分为仲裁和非仲裁
仲裁:签名者,签名接受者和仲裁者之间
     非仲裁:签名者和签名接收者之间

签名属于公钥体制(非对称体制)

完整的数字签名方案包括:秘钥生成算法、签名算法、验证算法






基于RSA的签名方案

一、基于RSA的签名方案简介

RSA的秘钥生成算法与RSA的加密方案完全相同。



二、使用步骤






1.生成秘钥

选择两个大素数 p、q,计算 n = p * q ,及其欧拉函数 φ(n) = (p-1)(q-1) , 选择 e,1<e< φ(n) , gcd(e, φ(n)) = 1 , d = e^(-1)(mod φ(n)) , 则签名者A的公钥为(n,e),私钥为 d ,需要保密的参数有 p、q

2.加密

设待签名消息为 m,利用 Hash函数 h(m)生成消息摘要,然后签名者计算 S=h(m)^d(mod n),则 S是m的签名,(s,m)发送给接收方

 3.验证

B收到 (s,m)后,利用 hash计算消息摘要 h(m) (mod n) = s (mod n)





 

基于离散对数的签名方案

一、基于离散对数的签名方案简介

基于离散对数的签名的签名方案包括EIGamal签名体制、DSA签名方案、DSA签名方案等



二、使用步骤



2.1 ELGaml签名方案

非确定性的签名方案,对给定的一个消息,由于选择的随机数不同而产生不同的数字签名,并且验证算法均会判断为有效

2.1.1 秘钥生成算法

选择一个满足安全要求的大素数 p,然后选择生成元 g,g∈有限域 Zp*,计算 y=g^x(mod p) 则签名者A的公钥为(p,g,y),私钥为 x

2.1.2 签名算法

设待验证消息为 m,签名者选择随机数 k∈有限域 RZp*,计算:

                                                r = g^k(mod p)

                                             s = [h(m)-xr] * k^(-1) (mod(p-1))

则 m的数字签名为(r,s),其中 h为安全的 Hash函数

2.1.3 验证

签收者收到m和签名(r,s)后,首先计算h(m),然后验证 : y^r * r^s = g^h(m) (mod p)

2.2 Schnorr签名方案

速度较快,签名长度较短

2.2.1 秘钥生成算法

选择大素数 p和q,q是 p-1的大素因子,然后选择生成元 g,g∈有限域 Zp*,且 g^q=1(mod p), g!=1,最后选择随机数 x,x∈(1,q).计算 y=g^x(mod p) 则签名者A的公钥为(p,q,g,y),私钥为 x

2.2.2 签名算法

设待验证消息为 m,签名者选择随机数 k,1<=k<=q-1计算:

                                                r = g^k(mod p)

                                                e=h(m,r)

                                             s = (xe+k) (mod(q))

则 m的数字签名为(e,s),其中 h为安全的 Hash函数

2.2.3 验证

签收者收到m和签名(e,s)后,首先计算 r1=g^s * y^(-e) (mod p),然后验证 : e=h(m,r1)


基于椭圆曲线的签名方案

一、基于椭圆曲线的签名方案简介

在椭圆有限域上实现DSA算法。



二、使用步骤






1.生成秘钥

设 FG(p)为有限域,E是有限域GF(p)上得椭圆曲线,选择E上一点G,G∈E,G的阶为满足安全的素数 n,即 nG = O (O为无穷远点),选择一个随机数 d,d∈[1,n-1],计算Q=dG,公钥为(n,Q),私钥为 d

2.签名算法

  1. 选择随机数 k,k∈[1,n-1],计算 kG =(x,y),r = x(mod n)
  2. 计算 e=h(m),h为安全的散列函数
  3. 计算S=(e+rd) * k^(-1) (mod n)如果 r = 0 或者s = 0则另选择随机数 k,重新执行m的签名为(r,s)

 3.验证

  1. 计算e = h(m)
  2. 计算u =s^(-1) * e(mod n), v=s^(-1) * r (mod n), (x1,y1) = uG+vQ   r1 = x1(mod n)  
  3. 判断 r和 r1的关系,如果 r = r1 则有效

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值