我与同事们进行了很长的讨论,即基于密钥的SSH身份验证(尤其是针对OpenSSH)是否比使用密码的身份验证更安全。我的同事们总是使用密码连接服务器,而我更喜欢每次都不必输入密码即可登录系统。

他们担心没有密码的连接并不安全。我应该告诉他们什么?对我来说,密码很不好,因为它们可能是暴力破解的或可以使用键盘记录器捕获的。

我使用ssh-copy-id工具将我的公钥复制到服务器上。然后,我只需与ssh servername连接。实际上,每次系统启动时,我只需输入一次私钥的密码。如果我的工作站运行了3天,则无需再输入密码,他们说密码不安全。真的吗?我知道键更好,但是我不知道如何向他们解释。

评论

可能感兴趣的是:gnome-keyring ssh代理超时-启动屏幕保护程序时,使密钥环“忘记”您的密码。您还可以执行ssh-add -t3600,以使ssh-agent在一小时后删除密钥。

抱歉,必须扮演魔鬼的拥护者:如果您无法解释它,那么您将不知道。您确定您不只是对听到的内容反省吗?也许您应该让自己对无钥匙登录的奇迹有所了解。两种方法都有优点和缺点。

您遗漏了一点-即使您使用密钥,您的帐户也有一个密码。并且为您的同事启用了密码登录。无论是否使用密码,都可以强制使用密码。

这个问题应该引起关注(几乎是重复的):security.stackexchange.com/q/3887/2435

如果有人尝试从代理中转储密钥,则无需等待用户离开键盘即可完成操作。

#1 楼

从蛮力尝试从第三方系统获取访问的角度来看,基于密钥的登录被认为比基于密码的登录更加安全:破解密钥的机会实际上为零,而错误的密码则非常常见。

从受威胁的客户端系统(您的工作站)的角度来看,这没有什么区别,因为如果攻击者可以获取您的私钥和/或劫持会话,他们可能还会安装一些键盘记录器的一种,使密码的感知优势无用。

评论


尽管如果将系统配置为同时允许密码和密钥(如OP所允许的那样),那么攻击者是否也可以强行使用密码?

– Zlatko
2011-12-20 10:58

是。这就是为什么我将完全禁用基于密码的登录的原因。

–Sven
2011-12-20 11:09

#2 楼

它和您的计算机一样安全。密钥位于未加密的RAM中。对您的计算机具有物理访问权或远程root用户访问权限的攻击者可以获取它。

以相同的方式来考虑它,就像您的同事使用密码安全程序并将其留在屏幕上无需输入密码即可使用的数据库;如果您在走开时锁定了工作站并使其免受恶意远程活动的影响,那么它是相当安全的,但是从理论上讲,冻结的RAM攻击仍然可以获取密钥。

但是处于这些位置的人可以轻松地获得该密钥。正如您所指出的,也要安装键盘记录器。只要您对工作站的安全性保持谨慎,我会说它的安全性不比密码低。但是基于密钥的登录的真正好处是可以保护自己免受诸如服务器暴力破解密码的攻击(因为密钥几乎不可能被暴力破解)。

#3 楼

实际上您的同事是正确的。考虑一下。您的工作站被破解了,已经花了几天的时间,现在黑客把您的整个网络都塞满了,因为您不使用ssh密码短语。

话虽如此,共享密码永远都不是好习惯,而是系统的主要弱点。我假设您正在谈论根访问。

我要说的重点是它们都有缺点,并且安全性应该放在哪里。

对于我管理的所有服务器,我都使用密码SSH密钥。这使我两全其美。我只知道一个密码,并且不为其他用户使用共享密码。

(是的,我知道在哪里使用了无密码的ssh密钥来破坏整个网络。

评论


为什么我被否决?


2011-12-19 21:43

我没有对你乌贼投下反对票。别人必须有。

–丹尼尔(Daniel)
2011-12-19 21:52

有人提出要补偿-这里的所有答案基本上都是相同的观点,所以我不确定你为什么要减去。顺便说一句:欢迎光临!感谢您贡献自己的专业知识,不要时不时强调随机降票-升票远远超过了他们。

– Shane Madden
2011-12-19 22:01

这取决于您使用的系统。我个人没有安装gnome-keyring之类的东西。我也同意我讨厌密码列表。我记不清那里的密码的1/8了。 @谢恩谢谢:)


2011-12-19 22:04

当您的工作站被破解并输入密码时,会发生什么?与使用密钥相比,使用密码如何提供更高的安全性?

–布拉德利·克雷德(Bradley Kreider)
2012年6月4日18:42

#4 楼

您只有最薄弱的一环才有安全感。如果您的远程服务器同时允许基于密码和基于密钥的身份验证,则与仅允许使用基于密钥的密钥相比,您的安全性较低。

基于密码验证(PA)的基于密钥的系统的其他漏洞是:


攻击者说可以物理访问任何系统上的未加密磁盘(例如,引导到单用户模式),然后运行基于GPU的保护,从而获得密码保护的私钥的副本。离线暴力破解您的密钥,然后在您的密码短语适当弱点(例如4个diceware单词)时访问所有系统。
您使用诸如ssh-agent之类的东西将密码短语或私钥保留在内存中以备后用,并且攻击者能够以某种方式将其从系统中删除(例如,另一个root用户在您输入密码的同时登录了)记忆)。
您的密钥比您想象的要安全得多。例如,OpenSSH密钥弱点;其中唯一的随机性来自进程ID,因此仅生成了65536个密钥。这些问题希望很快就会发现并解决,但作为最终用户,我们无法说出用来制作密钥的随机数生成器没有重大缺陷。

您的额外产品-使用基于密钥的身份验证的安全性:



在整个宇宙的生命周期内,强行攻击是不可行的,并且不会窃取您的私钥(并且如果它是受密码保护的;则破坏密码) )。
MITM攻击将不起作用(恶意远程主机无法找出您的私钥/密码);尽管ssh已经通过使用主机密钥和known_hosts文件来警告MITM攻击,以警告管理员。

实际上,两者同样安全。任何可以从RAM窃取ssh私钥的人,都可以安装键盘记录器,以获取您的密码/密码/私钥。

就个人而言,我喜欢您的解决方案,因为密码短语更方便(存储在RAM中;在5分钟后锁定的一台用户计算机上);尽管我仍然只将密码保护的私钥放在我是唯一用户的本地计算机上。

评论


“实际上,两者同样安全”-主要反对意见:工作站破解和服务器暴力破解的可能性相差几个数量级。我没有看到忍者试图闯入我的工作站(当然不是忍者; o)); OTOH,我从服务器上看到很多denyhosts报告。

– Piskvor离开了建筑物
2011-12-20 19:29



@Piskvor-我同意较弱的一方(例如四个单词骰子或8个随机小写字母)的合理密码〜2 ^ 36比典型的私钥空间〜2 ^ 1000小得多。但是,如果fail2ban将每个IP地址的错误尝试次数限制为〜100 / hr,则您的密码可以从一个IP地址保留大约40亿年的历史(或者在您不注意的情况下,需要大约4000万个IP地址进行100年的攻击)。因此,它们在实践中大致上一样安全,因为在实践中您所面临的风险不是被暴力破解,而是另一种途径(对计算机的物理访问;安装恶意软件;等等)。

– jimbob博士
2011-12-20在20:09

有道理;但是,在大多数情况下,“合理的密码”可能是一个过大的假设。 “那么,为什么不能只将其设置为password123?”实际上是我的牛or牛们的战斗口号(经过一阵抱怨之后,他们自己将其设置为PassWord123(或略有不同的东西,采用了me脚的密码过滤器))。

– Piskvor离开了建筑物
2011年12月20日20:18在

@Piskvor-如果您强迫使用“ PassWord123”的白痴使用ssh密钥;他们会找到一种不安全的方法。例如,为什么我需要在ssh密钥上使用密码短语-这很不方便(或者使用诸如“ this is fun”这样的琐碎短语),然后将该密钥保留在多root用户系统上,或者将其ssh密钥备份在公共位置( gmail / dropbox / etc。)。至少在目前,我还没有遇到过那些需要root特权的白痴。

– jimbob博士
2011-12-20 22:27

使用私钥的另一点是,如果您连接到受感染的服务器,则攻击者获取密码的纯文本非常简单,因为SSH在加密隧道内发送密码。但是,私钥永远不会发送到服务器。如果您在多台计算机上重复使用相同的密码,则攻击者将能够重用他们在另一台计算机上窃取的密码。

– Lie Ryan
16年1月19日在14:56

#5 楼

我认为使基于密钥的身份验证具有一点安全优势的原因之一是,有时我会看到两个最终用户,甚至有时我有时会在用户名字段而不是在密码对话框中输入密码(取决于SSH客户端)。或太快地按下Enter键,ssh客户端退出,我的密码进入了我的终端历史记录。

如果每次输入密码时都不小心,那么很有可能密码是可能会清楚地添加到几个日志文件,可能的外壳历史记录甚至是某种特洛伊木马中。如果使用无密码密钥或在会话开始时使用SSH代理加载的密钥,则永远不要重新输入密码,因此您不太可能在错误的位置键入凭据并透露您的密码某人或您不想要的东西的密码。

#6 楼

好吧,它是6。基于密码的登录的第一个直接安全风险是未经授权的用户(通过任何方式)获取服务器的密码。同样,基于密钥的登录也存在一些未经授权的用户访问您的计算机的安全风险。如果在服务器上使用复杂的密码,则存在密码用户必须将其写下来以记住密码的风险。使用关键用户,您将面临风险,即他们在未锁定计算机的情况下会离开办公桌。

很多风险归结为风险与可用性之比。当然,您可能需要在密钥上输入密码,每个密钥仅允许使用某些IP地址,以及任何其他数量的锁定安全措施,但这会使您的员工感到不满。

回答您的问题:如果我们谈论的是OpenSSH的Vanilla配置,则基于密码的登录和基于密钥的登录都有各自不同的安全弱点。

评论


当然,您可能需要在密钥上要求输入密码(我假设您是指密钥的密码短语),但是如何对用户实施该密码呢?

–光束贝尔
2011-12-19 21:51

是的,我的意思是密码短语。您可以通过说“在生成密钥时使用密码,否则密钥不会在服务器上挂起”来实施。

– Safado
2011-12-19 21:55

将密钥放在服务器上后,请不要忘记有人可以删除密码。


2011-12-19 21:57

哈。我的意思是,您如何验证他们在密钥上使用了密码?我的印象是你做不到。使其成为一项策略很酷,并且几乎没有办法强制执行A​​FAIK。

–光束贝尔
2011-12-19 21:58

你是对的。我看完了。

– Safado
2011-12-19 22:05

#7 楼

我总是在我的系统上通过ssh关闭root的密码登录。这样,攻击者就无法尝试强行使用密码。

您仍然应该警惕客户端系统的安全性。您可能希望使ssh代理在锁定屏幕打开时忘记您的密钥凭据。这将有助于防止对客户端计算机的攻击破坏您的密钥。

#8 楼

这里有一些不错的答案,但在我看来似乎所有人都没有想到。

使用密钥对进行身份验证会将基于密码的系统的“您知道的东西”替换为“您拥有的东西”。 ”。再过一遍。

键要复杂得多。我认为大多数SSH实现默认为2048个RSA密钥。将此密码与8个字符的密码进行比较。即使将密码散列为256位,由于缺乏密钥的随机性,也可以强制使用密码。施耐尔对此有一些很好的观察。即使是所谓的“好”密码也往往只是可破解数据的组合(一个带有数字的单词,也许还有一些简单的替代词);

关于密钥与登录密码一样安全,这并不完全正确。通过将密钥与另一个密码包装在一起,可以大大提高安全性,因为您实际上是在使用两因素身份验证。为了访问您拥有的东西(密钥),您必须使用您知道的东西(密码)。是的,使用您的登录密码来包装密钥会破坏这一点。

所以对于原始张贴者,我想说您和您的同事都错了。您可能比他们少了,但是正确的答案是您应该同时使用密钥和密码。

评论


你错过了重点。讨论不是要使用密码对SSH密钥进行加密(您显然应该这样做!),但是如果仅使用基于密码的登录或多或少地安全,则仅基于密钥的登录是安全的。从没有获得密钥的外部攻击者的角度来看,密钥是否受密码保护是无关紧要的。注意:再次要求输入密钥和密码(链接)才能登录。

–Sven
16-09-19在18:47

问题有点像询问我使用普通的门锁还是锁舌。正确答案是唐

–JoePete
16-09-21在21:09

错过了5分钟的限制,但是我认为应该使用密码还是密钥显示出对身份验证的误解。这些是苹果和橙子的因素。对于外部攻击,请记住,对于基于密钥的系统,破坏客户端主机将授予对SSH服务器的访问权限。而使用密码,则必须强行进行访问(通过锁定来缓解)。还要记住,系统管理员也无法控制用户使用其私钥进行的操作。同样,苹果和橘子。

–JoePete
16-09-21在21:41