使用公用/专用密钥对非常方便地登录到频繁访问的主机,但是如果我使用的是没有密码的密钥对,那么比密码更安全(或更不安全)吗?我的私钥文件周围的安全性至关重要,但是说我神奇的私钥文件只是各种主机的密码列表,有什么区别吗?

评论

ssh密钥的易破解位可能远高于您用于密码的任何位。

为什么没有密码的密钥对?为什么不使用私钥上的密码,而使用ssh-agent来获得更好的安全性和更多便利呢?

您也可以考虑使用S / KEY身份验证。

另请参阅security.stackexchange.com/questions/69407/…

关于security.stackexchange.com/questions/69407/…的答案是更容易理解的IMO。但是@john的答案可能更全面,还应该阅读以得到全面理解。

#1 楼

我的回答是,使用公钥对比使用密码或密码列表要明智得多。我将重点介绍关于不同形式的SSH身份验证尚不为人所知的事情,并且没有其他答案提及它们。安全通道。用通俗易懂的术语讲,这意味着首先,通过启用对称密钥的协商来使用服务器的公共密钥(如果被接受!)来构建安全的SSH通道,该对称密钥将用于保护剩余的会话,启用通道机密性,完整性保护和服务器身份验证。
在通道正常工作并变得安全之后,便对用户进行身份验证。
两种常见的实现方式是使用密码或公钥对。 br />基于密码的身份验证就像您可以想象的那样工作:客户端通过安全通道发送密码,服务器验证该密码确实是特定用户的密码并允许访问。我们有一个非常不同的情况。在这种情况下,服务器将存储用户的公共密钥。接下来发生的事情是服务器创建一个随机值(即刻),用公共密钥对其进行加密并将其发送给用户。如果用户是真实的用户,则他可以解密质询并将其发送回服务器,服务器再确认用户的身份。这是经典的挑战响应模型。 (在SSHv2中,实际使用的有些不同,但实际上在概念上是接近的)
可以想象,在第一种情况下,密码实际上是发送到服务器的(除非SSH使用密码质询响应),在第二种情况下,私钥永远不会离开客户端。在假想的情况下,有人拦截了SSH流量并能够对其进行解密(使用受损的服务器私钥,或者如果您在连接到服务器时接受了错误的公钥),或者可以访问服务器或客户端,则您的密码将是众所周知的-通过公私钥身份验证和质询响应模型,您的私人详细信息永远不会落入攻击者的手。
因此,即使您连接的一台服务器受到威胁,其他服务器也使用相同的密钥
使用公钥对还有其他优点:私钥不应按照您的建议以明文形式存储在客户端PC中。当然,这会像未加密的密码文件那样使私钥文件处于打开状态,以进行折衷,但是解密(登录时)和使用私钥更容易。它应该以加密方式存储,并且每次使用时都需要提供一个通常较长的密码来解密。
当然,这意味着每次连接服务器时,都必须提供较长的密码。解锁您的私钥–有一些解决方法。您可以通过使用身份验证代理来提高系统的可用性:这是一款软件,可以在例如登录gnome或第一次SSH进入客户端时为当前会话解锁密钥。键入ssh remote-system-ip并在不提供密码的情况下登录,然后执行多次,直到退出会话。
因此,总而言之,使用公钥对比使用密码或密码列表(如果客户端,服务器或安全会话受到威胁时可以捕获)提供的保护要大得多。在不使用密码短语的情况下(这种情况不应该发生),公共密钥对仍可提供保护,防止会话和服务器受到损害。

评论


嗯,我只是重新阅读了一个问题,看到专门询问关于私钥没有密码短语的问题-在编写答案时没有注意到这一点。当然,仍然可以选择使用代理,因此不使用密码短语不是很明智。

–约翰
2011年5月17日下午16:47

编辑答案以反映正确的问题(不使用密码短语)。

–约翰
2011年5月17日17:10

如果“不使用密码短语不明智”,那么OpenSSL文档为什么专门说“避免使用密码保护它可能是一件好事”? (我应该作为一个独立的问题来问吗?)

– David Cary
13年8月5日在16:07

该答案的某些部分过于详尽,因此误入歧途。在这种情况下,公钥身份验证的显着特征是客户端使用其私钥进行签名,并且不需要在此过程中透露秘密。 SSH-2公共密钥身份验证实际上并未使用此答案中所述的质询-响应协议。客户签署一个值,该值是对称密钥协商过程的一部分,由双方独立地得出;请参阅RFC-4252,第7节(尤其是“会话标识符”)。双方都做出了贡献,任何一方都无法确定。

–理查德·西尔弗曼(Richard E. Silverman)
15年8月26日在1:41

在公共密钥身份验证中使用会话标识符具有有趣的效果,通常不会被提及:它提供了针对中间人攻击的额外保护。如果攻击者在每一端分别执行密钥交换,则会话标识符(ID)将不同。服务器要求在ID上签名以与攻击者建立连接-但是客户端只会在ID上产生签名。攻击者无法强迫它们相同,也无法诱使客户端执行其他操作。质询-响应协议不会这样做。

–理查德·西尔弗曼(Richard E. Silverman)
15年8月26日在1:52

#2 楼

与存储的(长密码和随机密码)列表相比,存储的SSH私钥提供了相同的安全性:只要您的私钥文件保持私密,事情就很安全。但是,私钥是实际上(实际上,SSH客户端支持现成的SSH客户端,这与自定义的密码文件相反,您必须在手动复制和粘贴时使用该密码)更加方便,并且从理论上来说,您也可以更加方便。您要连接的主机,但是密码列表会随着所联系主机的数量线性增长,除非您对多个主机重复使用相同的密码(这很不好)。

评论


我担心某些读者会错过“长而随机的密码”的含义。私钥比实际的密码具有更多的熵(假设RNG不错,假设至少有128位熵;一个10 ASCII字符的密码大约只有一半,如果让人难以忘怀,则少得多)。同样,人们比私钥更频繁地重复使用密码。因此在实践中,私钥具有安全优势。

–吉尔斯'所以-不再是邪恶的'
2011年5月17日下午16:59

@Gilles的非对称密钥(如SSH中使用的密钥)都至少具有1024位的熵,而不是128位。但是,非对称加密也需要更多的熵。 1024位非对称弱于128位对称加密。当有人试图强行使用SSH服务器时,他们必须“缓慢”地进行操作,以避免造成拒绝服务攻击。这意味着具有约50位熵的密码将花费数亿年的时间才能猜测出来。走得更快,在攻击持续时间内,服务器将被炸断互联网,系统管理员将注意到/调查。

–阿比·贝克特(Abhi Beckert)
16-2-21在6:48



要有效地暴力破解10个字符的密码,您每秒需要数百万亿的猜测,而且仍然需要数周的时间。没有任何服务器能够远程接收到许多次如此多的SSH登录尝试。每秒几百次尝试是更实际的,除非密码很糟糕,否则它太慢了,无法生效。任何阅读此网站的人都足够聪明,可以选择一个好的密码。

–阿比·贝克特(Abhi Beckert)
16-2-21在6:50



@AbhiBeckert我认为您将密钥大小与熵混淆了。同样,破解密钥或密码并不一定总是在线攻击:攻击者可能可以访问公用密钥。无论如何,我认为您完全错过了我的意思:密钥对中的错误(除非存在错误)总是远大于任何令人难忘的密码。

–吉尔斯'所以-不再是邪恶的'
16-2-21在13:09

@Gilles,我认为您没有抓住我的观点,那就是没有人应该在生产服务器上使用令人难忘的密码。密码应为完全随机数,并使用可以在键盘上键入的字符进行编码。

–阿比·贝克特(Abhi Beckert)
16-2-22在0:49

#3 楼

这取决于您考虑的威胁。

公钥/私钥身份验证的主要目的是不要泄露您的秘密,即使是要向其进行身份验证的一方也不要泄露。因此,使用密钥会更好,因为您永远不会将机密信息发送到您的机器之外。 ,以明文形式存储密码列表与存储私钥而不进行保护的操作大致相同。为了方便)。在OSX上,它也可以与KeyChain集成在一起,因此,您甚至不需要解锁私钥(在应用程序级别,仅在安全守护程序级别)即可通过SSH(本质上是KeyChain)使用和安全守护程序负责ssh-agent)。

评论


>公钥/私钥身份验证的主要目的是不要泄露您的秘密,即使是向要进行身份验证的一方也是如此。因此,使用密钥更好,因为您永远不会将秘密发送到计算机外部。 SSH不支持质询密码身份验证吗?

–校正器
2011-09-22 15:40

欢迎来到Security.SE。您可能已经注意到,社区的各个成员都对您的答案不满意。如果您对FAQ(页面顶部的链接)有很好的阅读,您将更好地了解如何在此社区中发帖。您可能还想将更多的精力放在新问题上,而不是用投票率高,可接受的答案来挖掘旧问题。

–Rory Alsop♦
2011年9月22日在16:09

...此外,您在此处添加的答案将更适合作为评论。关于您的澄清问题,SSH不支持密码质询身份验证。

– Jeff Ferland♦
2011-09-22 16:16

#4 楼

使用不带密码的私钥和使用纯文本密码进行SSH授权之间的主要区别是通过您拥有的东西(您的私钥)或您所知道的东西(您的存储密码)进行授权。它们是不同的品种,但是很难说一个人最终会更好或更安全。 -force /猜测比复制密钥更简单的密码。但这有一个主要缺点-现在,真正保密您的私钥变得至关重要。如果仅使用您知道的内容(存储的密码),则应该更轻松地保持这种方式(至少在理论上如此)。但是,如果您必须记住它,那么您可能会使用不太复杂的东西。

因此,您可能要决定的是,更有可能-您的强私有密钥被盗还是没有这么强的密码被猜测(或

这里有一个例外-如果您的问题是要在机密文件中存储非常长,复杂和随机的密码,而不是使用私钥,那么两者之间可能几乎没有什么区别,但还是有一些区别(我已经错过了该部分,有关此内容的详尽介绍,请参见@john的回答)。在这种情况下,您都拥有这两种东西,请将其保留为秘密类型,然后问自己-如果那是专用于私钥的,为什么要首先这样做呢?在这种情况下,您应该使用私钥。

评论


还请注意,可以通过用密码保护私钥来简单地将这两者组合在一起。现在,您需要知道的东西(密码)才能获得拥有的东西(私钥)。

– Piskvor离开了建筑物
2011年5月17日15:55



#5 楼

参考文件正在讨论在ssh会话中键入的密码。我认为它以及Richard的评论值得保留,但不再相信答案本身。 (我仍然更喜欢公用密钥。)Song,Wagner和Tian表示,通过使用ssh会话中的计时信息,可以将暴力密码搜索速度大约加快50倍。 Noack重新研究了他们的研究,发现SSH2也容易受到时序分析的影响。

攻击有两个假设:


密码哈希可用于暴力破解
攻击者可以获得在主机之间发送的数据包的准确时间戳,或者获取时序信息。

公钥不仅更方便,而且对于某些威胁更安全。

评论


此评论具有误导性,并且作者可能对Song等人的作品有误解。仅在通过交互方式通过SSH连接键入密码时才适用:例如,如果使用SSH登录到远程主机,然后使用sudo运行命令,则必须为通过连接进行sudo验证键入密码。当您执行此操作时,您在键入密码时的击键间时间间隔将显示有关密码的信息。 [继续…]

–理查德·西尔弗曼(Richard E. Silverman)
15年8月26日在1:22



但是,问题不在于“通过SSH键入密码”,而是与“ SSH密码认证”完全无关。当您通过密码对SSH服务器进行身份验证(使用“密码”或“键盘交互” userauth方法)时,您将在本地键入密码-而不是通过SSH。密码以单个数据包的形式发送到服务器。定时攻击与此处无关。参见:archive.oreilly.com/pub/a/linux/2001/11/08/ssh_keystroke.html

–理查德·西尔弗曼(Richard E. Silverman)
15年8月26日在1:26

@ RichardE.Silverman,谢谢。我已经对答案进行了编辑,以反映出我对这篇论文有误读或记错了。 (我不记得了,那是很久以前的事了。)

– sarnold
15年8月28日在8:29

#6 楼

如果您使用的是“软件”密钥(意味着密钥存储在.ssh目录或等效目录中),则基本上与存储密码处于同一级别。

OpenSSH现在几乎具有不错的PKCS#11支持,KiTTY(一个PuTTY分支)中也提供了同样的支持,因此,为真正利用pubkey身份验证,请使用智能卡。然后,与密码有真正的区别。受密码保护的软件密钥文件可以与普通密码相同的方式进行复制,而智能卡则不能。

评论


正如其他答案所指出的那样,在许多情况下,pk auth是一种非常有效的保护措施,因此您至少应阐明您要解决的威胁情况。

–nealmcb
2011年6月12日17:47

如果您的主机遭到了攻击者的破坏(不是丢失/被盗,这意味着您被黑客入侵/植根/记录了密钥等),那么受密码保护的私钥与被嗅探的简单普通密码一样好-无需复制即可使用您的同意。另一方面,对于像我们这样的凡人,克隆智能卡已被证明“足够困难”。同样,销毁智能卡通常会销毁私钥,删除您拥有的文件的副本并不意味着“在某处”还有其他副本。

–马丁
2011年6月14日上午8:08

当然。但是您忽略了保护,即使软件pk auth也可以防止您将密码丢失到远程主机(以便像许多人一样在其他已重用的主机上重用)或MITM,就像其他人一样指出了。

–nealmcb
2011-6-14 14:15



也许。但是我希望我也引起对基于密钥的身份验证(仅受密码保护)问题的关注。

–马丁
2011年6月14日18:16