DSA和RSA之间有什么区别?

116

看起来它们都是需要公钥和私钥的加密算法。为什么我要在客户端服务器应用程序中选择其中一种提供加密?


3
正如 henri 所提到的,DSA 不是用于加密,而仅用于签名。 - Samveen
可能是What's the difference between id_rsa.pub and id_dsa.pub?的重复问题。 - Adam Katz
6个回答

82

请查看下面AVA的答案

我的旧回答似乎是错误的。


那么这是否意味着,如果要加密的数据量很大,使用RSA会更快? - WilliamKF
2
不,相反。DSA在签名方面更快(在数学上与加密几乎相等),因此如果您需要大量加密和频繁解密,则DSA更快。 - Henri
客户端有大量数据需要加密,但只在服务器端解密一次,那么 DSA 算法仍然胜出吗? - WilliamKF
30
DSA不会加密。重申一遍,DSA不会加密。这里是一个问答:DSA中的“S”代表什么? - President James K. Polk
5
RSA可以进行加密,而DSA不能进行加密,这主要是一个术语问题。我们称多种不同的算法为RSA,其中一些算法用于签名(例如RSA-PSS),另一些算法用于加密(例如RSA-OAEP)。但是,在基于群的加密中,我们为每个算法赋予了不同的名称,将其中一种加密算法称为ElGamal加密,将其中一种签名算法称为DSA。 - CodesInChaos
请引用邮件列表中的“参考资料”,而不是邮件列表本身。 “互联网上的某个人”不是一个好的来源。 - mikemaccana

28

参考,https://web.archive.org/web/20140212143556/http://courses.cs.tamu.edu:80/pooch/665_spring2008/Australian-sec-2006/less19.html

RSA
RSA加密和解密是可交换的
因此它可以直接用作数字签名方案
给定一个RSA方案{(e, R),(d,p,q)}
为了签署消息M,计算:
S = M的d次方(mod R)
要验证签名,请计算:
M = S的e次方(mod R) = M的e.d次方(mod R) = M(mod R)

RSA既可用于加密也可用于数字签名, 只需颠倒使用指数的顺序: 使用秘密指数(d)创建签名,使用公共指数(e) 供任何人验证签名。其他所有内容都相同。

DSA(数字签名算法)
DSA是ElGamal和Schnorr算法的变体。 它创建一个320位签名,但具有512-1024位的安全性 再次依赖于计算离散对数的难度 已经被广泛接受。

DSA密钥生成
首先选择共享的全局公共密钥值(p,q,g):
选择一个大素数p = 2的L次方
其中L= 512到1024位,是64的倍数
选择q,是p-1的160位质因子
选择g = h的(p-1)/ q次方
对于任何h < p-1,h(p-1)/q(mod p)>1
然后每个用户选择一个私钥并计算其公钥:
选择x < q
计算y = g的x次方(mod p)

DSA密钥生成与El Gamal类似,但更为复杂。主要是因为使用辅助的160位模数q来加速计算并减小签名结果的大小。

DSA签名创建和验证

对于签署消息M:
生成随机签名密钥k,其中0 < k < q
计算
r = (g的k次方(mod p)) (mod q)
s = k-1.SHA(M) +x.r (mod q)
发送带有消息的签名(r,s)

要验证签名,请计算:
w = s-1(mod q)
u1= (SHA(M).w)(mod q)
u2= r.w(mod q)
v = (g的u1次方.y的u2次方(mod p))(mod q)
如果v=r,则签名已验证

签名创建与ElGamal类似,使用每个消息的临时签名密钥k,但首先进行mod p,然后进行mod q以减小结果的大小。请注意,在此处显式使用哈希函数SHA。验证还包括比较两个计算,与El Gamal有关但稍微复杂一些。
请注意,几乎所有的计算都是mod q,因此速度更快。
与RSA相比,DSA仅用于数字签名。

DSA安全性
潜在通道存在于许多方案中(任何需要选择随机数的方案),而不仅仅是DSA。这强调了需要“系统安全”,而不仅仅是一个好的算法。


你好,很抱歉链接无法打开。请提供正确的链接以便我们查看。谢谢! - Paul Wintz

24

顺便说一句,你不能使用DSA进行加密,只能进行签名。虽然从数学上讲它们是等价的(或多或少),但你不能将DSA作为加密方案在实践中使用,只能将其用作数字签名方案。


20
参考man ssh-keygen,DSA密钥的长度被限制为1024位,以保持符合NIST的FIPS 186-2标准。然而,理论上更长的DSA密钥是可能的;FIPS 186-3明确允许它们。此外,使用1024位长的RSA或DSA密钥不再能保证安全。
总之,使用2048位RSA密钥是当前最佳选择。
需要采取更多预防措施才能建立安全的SSH连接,这不仅涉及选择安全的加密密钥技术。鉴于爱德华·斯诺登关于NSA的披露,人们必须比以前认为足够的更加警惕。
举一个例子,使用安全的密钥交换算法同样重要。以下是当前最佳SSH加固实践的概述。

一些旧版本的 ssh-keygen 也允许使用其他位数的密钥(我自己在 RHEL 上使用 ssh-keygen 生成了一个 2048 位的 DSA 密钥)。 - Samveen

6

除了上面的好回答之外。

  • DSA使用离散对数。
  • RSA使用整数分解。

RSA代表Ron Rivest,Adi Shamir和Leonard Adleman的名字的首字母。


0
RSA和DSA是不同的东西,尽管它们都与加密有关。令人难以置信的是,这个问题没有被驳回,而其他合理的问题却被驳回了。它要求写一篇关于RSA的论文和一篇关于DSA的不同论文,因此可以得出结论它们不同。它们之间的相似性不足以询问它们的区别是什么。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接