DSA签名算法简介
DSA算法是Schnorr和ElGamal签名算法的变种,被美国NIST作为DSS(Digital Signature Standard)。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为例进行说明:
密钥生成
签名生成
对数据x散列后做签名,签名结果为一对整数(r, s)。
签名验证
正确性验证
‘签名生成’时的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时,即使不知道私钥,也能确认它们是否是随机产生的,还是作了手脚。
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)