目录

DSA算法

密钥生成

签名生成

签名验证

正确性验证

DSA安全性说明


DSA算法是Schnorr和ElGamal签名算法的变种,被美国NIST作为DSS(Digital Signature Standard)。DSA使用公开密钥,为接受者验证数据的完整性和数据发送者的身份,也可用于由第三方去确定签名和所签数据的真实性。

信息交流中,接收方希望收到的信息未被窜改(信息完整性),还希望接收到的信息确由自己认定的发送方所发(信息来源有效性),那么接收方和发送方就可以约定,共同使用DSA加密算法来实现。

DSA算法

常见DSA参数(p、q、签名)长度为:

  • 1024  160       320
  • 2048  224       448
  • 3072  256       512

下面以1024位的DSA为例进行说明:

密钥生成

https://mmbiz.qpic.cn/mmbiz_png/3moQhp5COwbSEWI2Hzu8ujlibd4O9IK4wI8nJ85JGfaORIO5boDicNSqsic7oI2KPSDDWVTCf1vo7awGHBDpG2nCQ/640?wx_fmt=png

 

签名生成

https://mmbiz.qpic.cn/mmbiz_png/3moQhp5COwbSEWI2Hzu8ujlibd4O9IK4wgvSptwPO2ia6vDnapU9gw4Sg0LuP06dYZeic07f2rjRoS4EJNOl7UlgQ/640?wx_fmt=png

对数据x散列后做签名,签名结果为一对整数(r, s)。

签名验证

https://mmbiz.qpic.cn/mmbiz_png/3moQhp5COwbSEWI2Hzu8ujlibd4O9IK4wRGeQVXVJga2b3EWxSUHRMbey3iaZcMfnW0Qb479Foq3sKm4uwdrUkBg/640?wx_fmt=png

 

正确性验证

‘签名生成’时的s为:

两边同乘s与k的逆,得到

由‘签名验证’时的2、3步替换得到:

两边同时做模p的指数运算得到:

有‘密钥生成’时的步5替换得到:

两边分别模q得到:

由‘签名生成’时的步2中r与‘签名验证’时的步4中v替换得到:

 

DSA安全性说明

DSA加密算法的安全性

DSA加密算法主要依赖于整数有限域离散对数难题,素数P必须足够大,且p-1至少包含一个大素数因子以抵抗Pohlig &Hellman算法的攻击。

DSA加密算法的安全性主要依赖于p和d,若选取不当则签名容易伪造,应保证d对于p-1的大素数因子不可约。

重要特点:两个素数公开

DSA是基于整数有限域离散对数难题的,其安全性与RSA相比差不多。DSA的一个重要特点是两个素数公开,这样,当使用别人的p和q时,即使不知道私钥,也能确认它们是否是随机产生的,还是作了手脚。

 

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐