作为一个对加密技术了解甚少的人,我想知道我在创建ssh密钥时所做出的选择。

ssh-keygen -t type,其中type是dsa,rsa和ecdsa之一。

谷歌搜索可以提供有关类型之间差异的一些信息,但不能提供任何结论性信息。所以我的问题是,对于什么密码学知识很少的开发人员/系统管理员,有什么“简单”的答案,何时选择哪种密钥类型?

我希望以“使用”的方式来回答“针对X和Y的DSA,针对Z的RSA和针对其他所有内容的ECDSA”,但我也意识到,很可能没有这样的简单答案。

评论

只有RSA是加密算法。 DSA和ECDSA均用于数字签名-后者是DSA(数字签名算法)的椭圆曲线实现。椭圆曲线密码术能够以较小的密钥提供与RSA相同的安全级别,并且在工作量方面是“更轻松的计算”。因此,在移动设备上使用RSA进行加密,使用DSA进行签名,使用ECDSA进行签名。

相关:ECDSA vs ECDH vs Ed25519 vs Curve25519

@HenningKlevjer:尽管RSA可以进行加密和签名,但SSH2仅将其用于签名。

仅供参考:如果要确定现有密钥的类型:ssh-keygen -l -f key_file

wiki.archlinux.org/index.php/…

#1 楼

实际上,RSA密钥可在任何地方使用。 ECDSA支持较新,因此某些旧客户端或服务器可能无法使用ECDSA密钥。根据SSH标准(RFC 4251及更高版本),DSA密钥曾经在任何地方都可以使用,但是最近发生了变化:默认情况下,OpenSSH 7.0及更高版本不再接受DSA密钥。

ECDSA在计算上更轻巧,但是您需要一个非常小的客户端或服务器(例如50 MHz嵌入式ARM处理器)来注意到它们之间的区别。

目前,没有任何与安全性相关的理由偏爱一种类型,假设密钥足够大(RSA或DSA为2048位,ECDSA为256位);密钥大小由-b参数指定。但是,某些ssh-keygen版本可能会拒绝大小为1024位的DSA密钥,该密钥目前没有中断,但可以说不像期望的那样健壮。因此,如果您沉迷于轻微的偏执狂,您可能更喜欢RSA。

总而言之,请执行ssh-keygen -t rsa -b 2048,您会很高兴的。

评论


DSA总是让我感到不安,因为使用损坏的RNG生成的签名可能会破坏密钥。 RSA密钥具有更易于理解和更少令人担忧的故障模式:生成具有损坏的RNG的密钥会损害密钥,运行具有损坏的RNG的会话最多会损害会话。

–吉尔斯'所以-不再是邪恶的'
2012年10月30日13:26

否。实际上,该事件中揭示的所有内容仅证实了已知的信息,即,当大型政府机构监视人员时,不要通过试图打破密码学来做到这一点。他们宁愿解决它。在SSH的情况下,无论服务器密钥算法或大小如何,他们都将收集不受SSH协议保护的元数据(此客户端计算机连接到该服务器)。

–托马斯·波宁(Thomas Pornin)
2014年9月5日在11:28

“按照SSH标准(RFC 4251及更高版本),DSA密钥将在任何地方都有效”-实际上,这不再是事实。 OpenSSH静默禁用了7.0或7.1左右的DSA。

–user29925
2015年10月3日,18:26

更正“政府如何对人进行间谍”:有时他们会攻击加密货币。 softdh.org提到对VPN的一次NSA攻击可能会利用其所披露的漏洞。所以不要沾沾自喜。 :-P

–善待您的Mod
17年2月13日在18:18

@ Evi1M4chine“ RSA中的NSA后门”是RSA Corporation在随机数生成器中的后门,不是吗?与也称为RSA的算法无关。

–user253751
17年3月24日在1:19

#2 楼

正如吉勒斯(Gilles)所说,DSA具有风险,因为如果在RNG较差的盒子上进行签名(并且使用ssh客户端登录使用密钥有效地进行了签名),则密钥可能会受到损害。 AIUI使得Debian基本上根据Debian OpenSSL随机数生成器的失败而放弃了DSA用于其基础架构的密钥。

http://meyering.net/nuke-your-DSA-keys/

ECDSA是相对较新的,通过快速搜索,它似乎是在5.7中引入的。这些系统大多数都已脱离支持,可能应该迁移了,但是我们都知道这种情况不会在somtime发生。例如,Debian压缩和ubuntu lucid。 ECDSA的优点在于,对于相同级别的(假定)安全性,密钥可以比RSA或DSA密钥小得多。不幸的是,它具有DSA的缺点,即它对不良的随机数生成器敏感。人们还担心传统上使用的椭圆曲线可能是后门式的。

ED25519是由opensh 6.5引入的更新版本。它是ECDSA算法的一种变体,但它解决了随机数生成器问题,并使用了“无所适从”的曲线。从长远来看,这可能是最好的选择,但是现在仍然有支持的系统没有足够新的openssh。

因此IMO制作了RSA(具有2048或4096位)键(取决于您的偏执程度)仍然是一般用途的最合理选择。

编辑:更新至2017年3月的当前状况。

评论


在这方面,ECDSA与DSA具有相同的弱点。而且在OpenSSH中,它是一团糟,因为OpenSSH仅实现了怀疑被NSA借壳的NIST曲线。此处提供更多信息:security.stackexchange.com/a/46781/15087

–纳纳特尔
2013年12月27日21:35



在没有良好随机性的情况下创建签名的一种缓解措施是RFC 6979 [数字签名算法(DSA)和椭圆曲线数字签名算法(ECDSA)的确定性用法]。我不知道OpenSSH是否使用它。

–布赖恩·明顿(Brian Minton)
19年8月20日在16:41

#3 楼

DSA和ECDSA具有固定长度的密钥,它们是美国政府的标准,这意味着它们比公众更了解这些标准。 RSA是众所周知的,您可以使用它生成更长的密钥(默认为2048,而不是DSA的1024位固定长度),因此(可以说)更好地使用它。

评论


根据ssh-keygen手册页,对于ECDSA密钥长度,您有三个选择:对于ECDSA密钥,-b标志通过从三种椭圆曲线大小(256、384或521位)中选择一种来确定密钥长度。尝试对ECDSA密钥使用这三个值以外的其他位长度将失败。

– jfmercer
13年11月23日在2:31



@jfmercer 521还是512?

– Linuxhackerman
2014年8月6日在18:01

@Anonymouse确实是521。另请参阅crypto.stackexchange.com/questions/2482/…

– nodakai
2014年8月21日上午10:10

@Anonymouse请参见为什么NIST推荐的椭圆曲线使用521位而不是512位?简而言之,P521使用此质数,因为2 ^ 521-1是梅森素数。

– CodesInChaos
14-10-21在11:51

ssh-keygen只能为DSA生成1024,但可以使用由OpenSSL(在OpenSSH的“新”格式之前具有更好的PBE)生成的2048。

–dave_thompson_085
17 Mar 24 '17 at 13:11

#4 楼

使用RSA。不是出于安全原因,而是出于兼容性原因。
我不建议使用DSA密钥。从OpenSSH 7.0开始,默认情况下SSH不再支持DSA密钥。正如OpenSSH 7.0的发行说明所述,“默认情况下在运行时禁用对ssh-dss主机和用户密钥的支持”。因此,使用DSA密钥(ssh-dss)只会引起头痛。

ECDSA密钥可能会更好,但可悲的是,ECDSA密钥在某些平台上也会引起兼容性问题。在Fedora上,gnome-keyring-daemon不会自动获取ECDSA SSH密钥,因此当您尝试在Fedora上使用它时,不会自动提示您输入密码来解锁SSH密钥。

RSA密钥完全摆脱了这些兼容性难题。它们是使用最广泛的,因此似乎得到了最好的支持。因此,我建议您生成RSA密钥,以免日后烦恼。


作为社论,OpenSSH决定禁用DSA支持有点令人费解:1024位DSA密钥的安全性与1024位RSA密钥的安全性大致相同,因此尚不清楚为什么OpenSSH禁用了对1024位DSA密钥的支持,而保留了对1024位RSA密钥的支持。 (OpenSSH仍支持RSA;它具有特殊检查以禁用768位或更短的RSA密钥,但对于DSA,它仅禁用所有DSA密钥,而不管其长度如何。)此外,OpenSSH用于支持长于长度为1024位;尚不清楚为什么对它们的支持已被禁用。哦,就这样。

评论


禁用DSA支持的决定并不令人困惑。 security.stackexchange.com/questions/5096/…

–悬崖
17年1月12日,0:57

@Cliff链接不支持您的说法,即不令人困惑。

–巴里·凯利(Barry Kelly)
19年11月18日在20:14