DSA-数据签名算法(理论)

一、历史

  1991年8月,NIST(Nation Institute of Standards and Technology,美国国家标准技术研究所)提出了数字签名算法(DSA)用于他们的数字签名标准(DSS)中。

DSA是算法,DSS是标准。标准采用算法,算法是标准的一部分。

  但是NIST的通告引起了大量谴责,这些谴责的政治性多于学术性。许多已经取得RSA算法专利许可权的大型软件公司也站出来反对DSS,他们已经投入大量的资金来实现RSA算法,他们当然不希望这些资金白白流失。
  1994年5月19日,该标准最终颁布。

二、DSA算法的描述

  DSA是Schnorr和ElGamal签名算法的变形,该算法的安全性依赖于计算模数的离散对数的难度。
DSA签名中的公开密钥


p 512~1024位的素数(可以在一组用户中共享)
q 160位长,并与 p-1 互素的因子(可以在一组用户中共享)
g g=h(p-1)/q mod p,其中 h 小于 p-1 并且 h(p-1)/q mod p > 1
y y=gx mod p (一个p位的数)

在标准最初版本中,p的长度固定为512位,这引起了许多批评,之后NIST改变了它。


DSA签名中的私人密钥


x x<q

DSA签名算法中的签名过程


k选取小于q的随机数
r(签名)= (gk mod p) mod q
s(签名) = (k-1 ( H(m)+xr ))mod q

DSA签名算法中的验证过程


w = s-1 mod q
u1 = (H(m)×w)mod q
u2 = (rw) mod q
v = ((gu1 × yu2) mod p) mod q
如果 v=r ,则签名被验证
对消息m签名时:

(1)Alice产生一个的随机数 k,k<q。
(2)Alice产生:
       r = (gk mod p) mod q
       s = (k-1 ( H(m)+xr ))mod q
其中,r 和 s 就是她的签名,她将它们发给 Bob。
(3)Bob通过计算来验证签名:
       w = s-1 mod q
       u1 = (H(m)×w) mod q
       u2 = (rw) mod q
       v = ((gu1 × yu2) mod p) mod q
如果, v=r,则签名有效。

过程:

在这里插入图片描述

三、 DSA的素数的产生

NIST在【1154】中推荐了一种产生素数 p 和q 的方法,其中 q 能整除 p-1。
素数 p 为 L 位,介于 512~1024 位,是 64 的倍数。
素数 q 为 160 位。
设 L-1=160n+6
(1)选取一个至少 160 位的任意序列,称为 S。设 g 是 S 的位长度。
(2)计算 U=SHA(S)⊕ SHA((S+1)mod 2g),SHA是安全散列算法
(3)将U的 最高位 和 最低位 置为 1 形成 q
(4)检验 q 是否是素数
(5)如果 q 不是素数,则回到(1)
(6)设 C=0,N=2
(7)对 k=0,1,·······,n,令Vk = SHA((S+N+k)mod 2g
(8)令W=V0 + 2160V1+······+2160(n-1)Vn-1 + 2160n(Vn mod 2b),W为整数,且X=W+2L-1。注意 X 是 L 为长的数。
(9)令p=X-((X mod 2q)-1)。注意 p 同余1 模 2q。
(10)若 p<2L-1,转到(13)步
(11)检测 p 是否为素数
(12)如果 p 是素数,转到(15)步
(13)令C=C+1,N=N+n+1
(14)如C=4096,转到第(1)步;否则,转到第(7)步
(15)将用于产生 p 和 q 的 S 和 C 值保存起来
在文献【1154】中,变量S称为“种子”,C称为“计数”,N称为“偏差”
单向散列函数SHA的使用能防止他人在背后做手脚。
这样做的安全性比RSA高,在RSA中,素数是秘密保存的。某人可能产生假素数或容易分解的特殊形式的素数,除非你知道私人密钥,否则你不知道这一点。而这里,即使你不知道私人密钥,你也可以确信 p 和 g 是随机产生的。

四、DSA的安全性

512位的DSA不能提供长期的安全性,但是1024位可以。

五、攻击k

  每个签名都需要一个新值 k,并且该值必须是随机选择的。
  如果 Eve 恢复了 Alice 用来签名消息的 k,她就可以恢复 Alice 的私人密钥 x (目前我还不清楚怎么恢复的ღ,有知道的可以评论我一下哈,Thanks♪(・ω・)ノ)。如果Eve获得了使用同一个 k 签名的两个消息,即使她不知道 k 的任何情况,也可以恢复 x 。拥有了 k ,Eve 就可以产生 Alice 的签名。在DSA实现中,一个好的随机数发生器对系统安全是至关重要的。

补充:可以使用DSA函数进行 ElGamal加密 和 RSA加密。

©️2020 CSDN 皮肤主题: 技术工厂 设计师: CSDN官方博客 返回首页
实付0元
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值