数字签名算法之DSA

123 阅读1分钟

简史

graph LR
DSA---suggest["1911年8月NIST提出"]
DSA---publish["1994年5月发布"]
DSA---enemy["它是RSA的对手"]
DSA---condemn["已花钱实现RSA的公司<br>最初排斥它"]

密钥对

公钥

参数说明
pp素数,长度为L位
qqq是p1p-1的素因子,长度为N位
ggg=h(p1)/q mod pg=h^{(p-1)/q} \space mod \space p,其中hh为满足以下条件的数:
h(p1)/q mod p>1h^{(p-1)/q}\space mod \space p > 1
hh的挑选范围:[2,p2][2, p-2]
yyy=gx mod py=g^x\space mod \space p

私钥

参数说明
xxx<qx<q

密钥对生成

  • 选择合适的L和N。

根据FIPS 186-4的建议,L和N的组合包括:(1024, 60),(2048, 224),(2048, 256),(3072, 256)。当然你也可以不遵守此建议。

  • 随机生成qq
  • 随机生成pp,其中pp需要满足该条件:(p1)=nq(p-1)=n* q
  • [2,p2][2,p-2]中选择一个hh,满足该条件:h(p1)/q mod p>1h^{(p-1)/q}\space mod \space p > 1
  • 计算出g=h(p1)/q mod pg=h^{(p-1)/q} \space mod \space p
  • 随机生成xxx<qx<q
  • 计算出y=gx mod py=g^x\space mod \space p

签名与验签

签名

  • 生成随机数k(k<q)k(k<q)
  • r=(gk mod p) mod qr=(g^k\space mod \space p)\space mod \space q
  • s=(k1(H(m)+xr)) mod qs=(k^{-1}(H(m)+x*r))\space mod \space q

其中rrss构成签名值。

验签

  • w=s1 mod qw=s^{-1}\space mod \space q
  • u1=H(m)w mod qu_1=H(m)*w\space mod \space q
  • u2=rw mod qu_2=r*w\space mod \space q
  • v=(gu1yu2 mod p) mod qv=(g^{u_1}*y^{u_2}\space mod \space p)\space mod \space q
  • 如果v=rv=r成立,则验签成功。

其中H(m)H(m)表示对消息mm进行摘要计算。

验签正确性证明

(一)

s=(k1(H(m)+xr)) mod qs=(k^{-1}(H(m)+xr))\space mod \space q

s1s=1 mod qs^{-1}*s=1 \space mod \space q

即:s1k1(H(m)+xr)=1 mod qs^{-1}*k^{-1}(H(m)+xr)=1 \space mod \space q

则有:k=H(m)s1+xrs1 mod qk=H(m)*s^{-1}+x*r*s^{-1} \space mod \space q

即:k=H(m)w+xrw mod qk=H(m)*w+x*r*w \space mod \space q


(二)

根据(一)有:

gk=gH(m)wgxrwg^k=g^{H(m)*w}*g^{x*r*w}

=gH(m)w(gx)rw=g^{H(m)*w}*(g^x)^{r*w}

=gu1yu2 mod p=g^{u_1}*y^{u_2}\space mod\space p


(三)

根据(二)有:

(gk mod p) mod q=(gu1yu2 mod p) mod q(g^k \space mod \space p)\space mod \space q = (g^{u_1}*y^{u_2}\space mod\space p)\space mod \space q

r=vr=v


证毕。


DSA签名特点

  • 引入了随机数,使得即使消息相同,每次签名值都会变化。
  • 安全性和RSA差不多
  • p和q公开,能确认它们是否为随机产生的,还是做了手脚。

DSA的安全性

DSA的安全性建立求解离散对数很难的基础上。

具体来讲就是,已知公钥p,q,g,yp,q, g,y很难求解出对应的离散对数即私钥xx


在实际应用上,L应达到1024,才具有长期的安全性。

参考资料

Digital Signature Algorithm (DSA) in Cryptography: A Complete Guide | Simplilearn

(14条消息) DSA-数据签名算法(理论)_aaqian1的博客-CSDN博客_dsa算法