dsa算法为什么只能用于签名不能用于加密?
rsa算法既能签名又能加密,为什么dsa只能签名?dsa和rsa签名时必须依赖哈希算法吗?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
rsa算法既能签名又能加密,为什么dsa只能签名?dsa和rsa签名时必须依赖哈希算法吗?
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(3)
我没办法从数学的角度分析原因,但是提供一个思考角度:
对于非对称的加密算法,加密功能的实现=公钥加密+私钥解密,签名功能的实现=私钥加密+公钥解密。
换言之,在DSA算法中,私钥不能解密使用公钥加密的数据,因此具有加密功能,而RSA可以。
别看都带个 SA,可这是完全两个不同的算法。
RSA 之所以叫 RSA,是因为发明这个算法的三个人姓氏首字母分别的 R(ivest)、S(hamir)、A(dleman)。
而 DSA 是 Digital Signature Algorithm(数字签名算法)的缩写,从名字上也能看出来这个是专门为了签名而存在的算法。
抛开具体的数学运算不谈,就只说结果,签名是一个定长的字符(也即有限位的集合),用初一数学映射与函数这一章节的知识也不难得出,它是不可能用来表示不定长的密文的。
签名过程中要用到哈希算法的原因也是因为此——要得到一个长度比较小的结果,否则签名比原文还长,传输起来费时费力还没啥卵用。
首先,这些算法本质都是加密算法,没有说不能对原文加密;其次,实际上签名和验签就是加密解密的过程,但是不用这些来对原文加密主要是性能原因,非对称加密比较慢,所以最好是用来加密比较短的内容。
因此,在签名场景中,我们是为了确定数据是谁的数据,并不是为了对数据进行加密保护,所以并不需要对整个原文数据进行加密解密,结合性能考虑,把不定长的原文数据通过哈希算法唯一映射到一个定长的短的字符串,再用非对称加密就可以达到签名的目的,同时哈希算法还能保证原数据没被篡改,所以签名算法结合哈希算法是比较好的做法。
至于签名和验签的流程,在这里就不说了。