Wil*_*mKF 112 encryption rsa key dsa
它们似乎都是需要公钥和私钥的加密算法.为什么我会选择一个与另一个在我的客户端服务器应用程序中提供加密?
AVA*_*AVA 24
参考,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 power e(mod R)= M power ed(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 
任何h1的功率(p-1)/ q 
然后每个用户选择一个私钥并计算他们的公钥:
选择x计算y = g功率x(mod p)
DSA密钥生成与El Gamal相关,但稍微复杂一些.主要是因为使用辅助160位模数q来帮助加速计算并减小所得签名的大小.
DSA签名创建和验证
以签署消息M
 
生成随机签名密钥k,k compute 
r =(g power k(mod p))(mod q)
s = k-1.SHA(M)+ xr(mod q)
send签名(r,s)带消息
来验证签名,计算:
 
w = s-1(mod q)
u1 =(SHA(M).w)(mod q)
u2 = rw(mod q)
v =(g power u1.y power u2(mod p))(mod q)
如果v = r则验证签名
签名创建再次类似于ElGamal,使用每个消息临时签名密钥k,但是首先执行calc第一个mod,然后使用mod q来减小结果的大小.请注意,哈希函数SHA的使用在此处是明确的.验证还包括比较两个计算,再次比El Gamal更复杂.
请注意,几乎所有的计算都是mod q,因此速度要快得多.
但是,与RSA相比,DSA只能用于数字签名
DSA安全性
 
潜意识信道的存在存在于许多方案中(任何需要随机数选择的方案),而不仅仅是DSA.它强调了对"系统安全性"的需求,而不仅仅是一个好的算法.
Ser*_*ndt 20
参考man ssh-keygen,DSA密钥的长度仅限于1024位,以保持与NIST的FIPS 186-2兼容.尽管如此,理论上可以使用更长的DSA密钥; FIPS 186-3明确允许它们.此外,1024位长RSA或DSA密钥不再保证安全性.
总之,2048位RSA密钥是目前最好的选择.
建立安全的SSH连接不仅需要选择安全的加密密钥对技术.鉴于爱德华·斯诺登(Edward Snowden)的国家安全局(NSA)揭露,人们必须比以前认为足够的人更加警惕.
仅举一个例子,使用安全密钥交换算法同样重要.以下是当前最佳SSH强化实践的一个很好的概述.