DSA

DSA算法简介

DSA(Digital Signature Algorithm)是Schnorr和ElGamal签名算法的变种,被美国NIST作DSS(DigitalSignature Standard)数字签名的标准

DSA是一种更高级的验证方式,它是一种非对称公开密钥算法,不能用来加密数据,一般用于数字签名和认证;DSA不单单只有公钥,私钥,还有数字签名,私钥加密生成数字签名,公钥验证数据及签名,在DSA数字签名和认证中,发送者使用自己的私钥对文件或消息进行签名,接受者收到消息后使用发送者的公钥来验证签名的真实性,包括数据的完整性以及数据发送者的身份;如果数据和签名不匹配则认为验证失败!数字签名的作用就是校验数据在传输过程中不被修改

DSA数字签名可以理解为是单向加密的升级,不仅校验数据完整性,还校验发送者身份,同时还由于使用了非对称的密钥来保证密钥的安全,所以相比消息摘要算法更安全

DSA只是一种算法,和RSA不同之处在于它不能用作加密和解密,也不能进行密钥交换,只用于签名,它比RSA要快很多

DSA算法签名的过程

  1. 使用消息摘要算法(例如sha-256/md5)将要发送数据加密生成信息摘要
  2. 发送方用自己的DSA私钥对信息摘要再加密,形成数字签名
  3. 将原报文和加密后的数字签名一并通过互联网传给接收方
  4. 接收方用发送方的公钥对数字签名进行解密,同时对收到的数据用消息摘要算法产生同一信息摘要
  5. 将解密后的信息摘要和收到的数据在接收方重新加密产生的摘要进行比对校验,如果两者一致,则说明在传送

过程中信息没有破坏和篡改;否则,则说明信息已经失去安全性和保密性

算法原理

DSA是证书基于有限域离散对数的难题

密钥生成

  1. 选择一个合适的哈希函数,一般选择SHA1
  2. 选择密钥的长度LN
  3. 选择N比特的素数q
  4. 选择L比特的素数p,使得p−1q的倍数
  5. 选择满足g<sup>k</sup> ≡ 1 mod p的最小正整数kqg,就是在模p的前提下,ord(g)=qg
  6. 选择私钥x∈(0,q),计算y ≡ g<sup>x</sup> mod p
  7. 公钥为(p,q,g,y),私钥为x

签名过程

  1. 选择随机整数k(0,q)作为临时密钥
  2. 计算r ≡ (g<sup>k </sup>mod p) mod q
  3. 计算s ≡ k<sup>−1 </sup>(H(m)+xr) mod q

公开(r,s),H(m)指明文m的哈希值

验证过程

  1. 计算ω ≡ s<sup>−1 </sup>mod q
  2. 计算μ1 ≡ H(m)×ω mod q
  3. 计算μ2 ≡ r×ω mod q
  4. 计算v ≡ (g<sup>μ1</sup>y<sup>μ2</sup> mod p) mod q
  5. 如果v = r则验证成功

证明:

posted @ 2025-03-12 10:49  sevensnight  阅读(38)  评论(0)    收藏  举报