dsa算法为什么只能用于签名不能用于加密?

李二射大雕
  • 3
新手上路,请多包涵

rsa算法既能签名又能加密,为什么dsa只能签名?dsa和rsa签名时必须依赖哈希算法吗?

回复
阅读 2.7k
3 个回答
iceberg
  • 18
✓ 已被采纳

我没办法从数学的角度分析原因,但是提供一个思考角度:
对于非对称的加密算法,加密功能的实现=公钥加密+私钥解密,签名功能的实现=私钥加密+公钥解密。
换言之,在DSA算法中,私钥不能解密使用公钥加密的数据,因此具有加密功能,而RSA可以。

别看都带个 SA,可这是完全两个不同的算法。

RSA 之所以叫 RSA,是因为发明这个算法的三个人姓氏首字母分别的 R(ivest)、S(hamir)、A(dleman)。

而 DSA 是 Digital Signature Algorithm(数字签名算法)的缩写,从名字上也能看出来这个是专门为了签名而存在的算法。

抛开具体的数学运算不谈,就只说结果,签名是一个定长的字符(也即有限位的集合),用初一数学映射与函数这一章节的知识也不难得出,它是不可能用来表示不定长的密文的。

签名过程中要用到哈希算法的原因也是因为此——要得到一个长度比较小的结果,否则签名比原文还长,传输起来费时费力还没啥卵用。

首先,这些算法本质都是加密算法,没有说不能对原文加密;其次,实际上签名和验签就是加密解密的过程,但是不用这些来对原文加密主要是性能原因,非对称加密比较慢,所以最好是用来加密比较短的内容。

因此,在签名场景中,我们是为了确定数据是谁的数据,并不是为了对数据进行加密保护,所以并不需要对整个原文数据进行加密解密,结合性能考虑,把不定长的原文数据通过哈希算法唯一映射到一个定长的短的字符串,再用非对称加密就可以达到签名的目的,同时哈希算法还能保证原数据没被篡改,所以签名算法结合哈希算法是比较好的做法。

至于签名和验签的流程,在这里就不说了。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏