DSA和RSA有什么区别?

看来他们都是需要公钥和私钥的encryptionalgorithm。 为什么我会select一个与另一个在我的客户端服务器应用程序中提供encryption?

从Linux组中 ; )

DSA 签名速度更快,但validation速度更慢。 与RSA(1024位)相同强度的DSA密钥生成较小的签名。 一个RSA 512位密钥已被破解,但只有一个280 DSA密钥。

请参阅“哪些GPG密钥更好 – RSA或DSA? @超级用户:)

另请注意,DSA只能用于签名/validation,而RSA也可用于encryption/解密。

顺便说一句,你不能用DSAencryption,只有签名。 尽pipe它们在math上是等价的(或多或less),但是在实践中不能将DSA用作encryptionscheme,而只能用作数字签名scheme。

参考man ssh-keygen ,DSA密钥的长度限制在1024位,以符合NIST的FIPS 186-2。 尽pipe如此,更长的DSA密钥在理论上是可能的; FIPS 186-3明确允许它们。 而且,使用1024位长的RSA或DSA密钥不再保证安全性。

总之, 一个2048位的RSA密钥是当前最好的select。

更多的预防措施

build立安全的SSH连接不仅仅是select安全的encryption密钥对技术。 鉴于爱德华·斯诺登(Edward Snowden)的国家安全局(NSA)的启示,人们必须比以前认为充分的更加警惕。

仅举一个例子,使用安全的密钥交换algorithm同样重要。 这里有一个很好的概述当前最好的SSH硬化实践

参考http://courses.cs.tamu.edu/pooch/665_spring2008/Australian-sec-2006/less19.html

RSA
RSAencryption和解密是可交换的
因此可以直接用作数字签名scheme
给定RSAscheme{(e,R),(d,p,q)}
签署消息M,计算:
S = M幂d(mod R)
validation签名,计算:
M = S power e(mod R)= M power ed(mod R)= M(mod R)

RSA可以用于encryption和数字签名,只需要颠倒指数的使用顺序:秘密指数(d)创build签名,公开指数(e)让任何人validation签名。 其他一切都是一样的。

DSA(数字签名algorithm)
DSA是ElGamal和Schnorralgorithm的一个变体,创build了一个320位的签名,但是具有512-1024位安全性的安全性依赖于计算离散对数的难度,这已经被相当广泛地接受

DSA密钥生成
首先共享全局公钥值(p,q,g)被select:
select一个大的素数p = 2的功率L
其中L = 512到1024位,是64的倍数
selectq,一个160位素数因子p-1
selectg = h power(p-1)/ q
对于任何h1
那么每个用户select一个私钥并计算他们的公钥:
selectx compute y = g power x(mod p)

DSA密钥生成与El Gamal相关,但稍微复杂一些。 主要是因为使用辅助的160位模数q来帮助加速计算并减小所得签名的大小。

DSA签名创build和validation

签署消息M
生成随机签名密钥k,k计算
r =(g power k(mod p))(mod q)
s = k-1.SHA(M)+ xr(mod q)
用消息发送签名(r,s)

validation签名,计算:
w = s-1(mod q)
u1 =(SHA(M).w)(mod q)
u2 = rw(mod q)
v =(g功率u1.y功率u2(mod p))(mod q)
如果v = r,那么签名被validation

签名创build再次类似于ElGamal,使用每个消息临时签名密钥k,但是先计算第一mod p,然后mod q以减小结果的大小。 请注意,这里使用哈希函数SHA是明确的。 validation也包括比较两个计算,再次比El Gamal更复杂一点。
请注意几乎所有的计算都是mod q,因此速度要快得多。
但是,与RSA相反,DSA只能用于数字签名

DSA安全
潜在渠道的存在存在于许多scheme中(任何需要随机select的scheme),而不仅仅是DSA。 它强调“系统安全”的需要,而不仅仅是一个好的algorithm。

除了上面的好的答案。

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

RSA代表Ron R ivest,Adi S hamir和Leonard A dleman。