带有密码短语的 SSH 密钥是 2FA 吗?

信息安全 SSH 多因素 理论
2021-08-19 14:36:43

这是一个非常理论上的问题,但是如果我使用带有密码的 SSH 密钥登录服务器,这是否可以被视为双因素身份验证 (2FA)?

实际上,我需要 SSH(私有)密钥,它可以被视为第一个因素,以及密码,它可以是第二个因素。

如果我们将登录与单个密码进行比较,我会看到两个带有密码短语的 SSH 密钥的“元素”。

4个回答

第二个因素被定义为独立于第一个因素。这意味着您的系统应该保持安全,即使其中一个因素受到损害(并且您知道受到损害)。

例如,门牌和指纹是相互独立的,仅仅拥有门牌或指纹是不够的。这通常称为“多步骤身份验证”而不是“多因素身份验证”。


现在想象一下你的场景:你有一个用强密码加密的私钥。是这两个因素吗?不,因为私钥也可以在没有密码的情况下存在。因此,泄露私钥的攻击者可以登录您的系统,即使不知道该密码。事实上,服务器完全不知道您的私钥是否受密码保护。

如果您想要真正的多因素身份验证,那么有 SSH 模块可以做到这一点。话虽如此,使用强密码加密的私钥通常就足够了。


注意:最初的问题是关于“带有密码短语的 SSH 密钥登录服务器”,我将其解释为使用密码短语加密的私钥。

是的

2FA 需要两种不同的因素或类别的身份验证。(它们必须是不同的类别;密码和 PIN 不会被视为 2FA。)

维基百科提供了一个很好的因素列表:

  • 知识因素:密码、PIN、秘密问题
  • 占有因素:
    • 断开连接的令牌(人类可读):Google Authenticator
    • 连接令牌(机器可读):YubiKey
    • 软件令牌:X.509 证书、SSH 私钥
  • 内在因素:
    • 生物识别:指纹、声音、虹膜
    • 行为:击键、签名
  • 位置:物理安全网络

您的密码是一个知识因素;您的 SSH 密钥是占有因素。

请注意,易于复制并不排除SSH 密钥成为拥有因素。物理按键可以用相机、打印机、汽水罐复制;他们仍然是一个占有因素。


多因素身份验证的目的是利用多种身份验证的优势,降低泄露风险。

您的密码足够短,以至于永远不会被写入,因此难以获得。您的 SSH 密钥很长,因此很难猜到。

它们共同降低了成功攻击的可能性。


编辑:有几个人认为,因为密钥可以在未加密的情况下使用,它不再是 2FA。

这简直是​​荒谬的。

如果您可以在不影响两个因素的情况下使未加密的 SSH 密钥存在,然后使用该信息声称这就是所需要的,为什么不为自己节省一些工作并建立服务器文件的副本呢?

陈述

访问服务器文件只需要一个未加密的 SSH 密钥

与陈述无异

访问服务器文件所需的只是服务器文件的 ZIP。

但是您是如何获得该密钥/ZIP 的?你不得不妥协多个因素。(或者您正在添加一些后门,例如访问服务器机房。)

确实,它不是服务器强制使用的 2FA。在组织环境中,2FA 通常需要集中执行。

  1. 那不是问题。

  2. 无论如何,服务器执行从来都不是安全系统的最终决定。

    1. 如果一扇门需要物理钥匙和键盘 PIN,则该门将尽可能多地“强制执行”2FA。但是,当您在所有钥匙上打印 PIN 码时,您就拥有了 1FA 系统。

    2. 同样,您可以增加因子。带有物理钥匙的门后受密码保护的笔记本电脑是 2FA,尽管事实上没有一个组件可以执行这两个因素。您可以将笔记本电脑从房间中移出并将安全性降低到 1FA,但在您真正这样做之前,有一个 2FA 系统。


EDIT2:这个答案还解释了为什么单独的受密码保护的加密密钥(即 SSH 密钥是什么)的常见做法是两个因素:密钥(您拥有的东西)和密码(您知道的东西)。必须有人同时获得两者才能生成数据访问所需的裸加密密钥。

没有其他答案非常接近,但错过了重要因素。

我不会详细重复其他人所说的内容,只是总结一下,SSH 密钥+密码在你的情况下是多因素的,它必须是“你知道的东西”+“你拥有的东西”。

我想说的是,如果你只需要知识来有效地复制“你拥有的东西”(所以没有人能分辨出哪个是原创的,哪个是复制品),那么它不是“你拥有的东西”而是“你知道的东西”。

例如,如果我不记得我的密码并将其写在一张纸上,它不会停止成为“我知道的东西”并变成“我拥有的东西”。它仍然只是密码(即使很难记住),一旦有人知道它,他们可以在我不知情的情况下随时冒充我。与 SSH 私钥相同。它只是数据,根据定义,数据是“您(可以)知道的东西(并且毫不费力地制作出精确且难以区分的副本)”。

某物成为“我拥有的东西”的主要特征是被未经授权的第三方复制有多难,因为有效的“我拥有的东西”的主要特征是攻击者可以拥有它的唯一现实方式是如果我不这样做'不再拥有它(因为我一定会注意到我错过了它)。

当然,正如一些帖子中提到的那样,有很多灰色区域。CHIP 银行卡今天将是“我所拥有的东西”,因为不可能(没有大量的努力、人员和金钱)制作一个真实的工作副本。然而,只有磁条授权的银行卡,任何收银员都可以用 25 美元的设备和 1 美元的材料复印,不再有效“我拥有的东西”。

此外,随着技术的进步,定义也会发生变化。曾几何时,MD4是加密哈希。现在它绝对不是——它只是一个哈希,在加密哈希方面并不比简单的Checksum更好。

因此,“SSH 私钥 + 密码”实际上在两个方面都无法成为双重身份验证方法:

  1. SSH 私钥只是信息而不是物理对象,因此根据定义,它是“你知道的东西”而不是“你拥有的东西”。
  2. 如果某些身份验证因素在使攻击者更难成功进行身份验证方面完全无效,那么它仍然可以称为身份验证因素吗?如果您的服务器强制执行最大 1 个字符的密码长度并且对尝试次数没有限制,那么它仍然是身份验证因素吗?在严格的理论中,它可能是,但在实践中它只是安全剧院

请注意,这并不意味着 ssh 私钥 + 密码是不好的:它比普通密码或不受保护的私钥好得多。但这不是2因素。

但是,如果您希望通过 ssh 中的两因素身份验证提供额外的安全性,您可以在 ssh 中设置两因素身份验证,最好使用密码保护它的私钥。

从服务的角度来看:不,受密码保护的 SSH 私钥不是多因素身份验证。

SSH 服务器无法知道私钥是否被加密,也无法知道当前密码在任何情况下可能是什么。服务器能得到的最接近的是,如果密钥对是在服务器上生成的,它可以捕获当时的密码。(这将是非常不寻常的,我会质疑任何这样做的系统的安全性。)然而,一旦私钥离开服务器,它唯一可以断言的是,在某一时刻有人使用密码解密密钥。服务器不知道它是否在几秒钟前作为身份验证的一部分被解密,或者他们的私钥当前是否完全未加密地位于客户端计算机的磁盘上。

因此,虽然使用密码加密私钥是一种很好的做法,但客户端和服务器之间的身份验证握手不使用该密码,因此密码不是身份验证的一部分。

至于私钥是否是您拥有的东西或您知道的东西,我认为它是您拥有的东西,因为您没有将私钥直接传递给服务器,而是证明您拥有私钥:

身份验证握手如下所示:

  1. 客户端选择要使用的密钥并将密钥的 ID 发送到服务器。
  2. 服务器从 获取公钥~/.ssh/authorized_keys,生成随机数,并使用该公钥对其进行加密。
  3. 客户端使用其私钥解密随机数,然后 MD5 将其与共享会话作为盐进行散列。
  4. 如果服务器获得预期的哈希值,则用户通过身份验证。

这是与传递密码不同的过程;您证明的不仅仅是知识,您还证明了您拥有一个能够对使用特定公钥加密的消息执行解密的系统。

在物理安全方面,您知道的事情将通过挑战-响应来实现:警卫喊出一个词,您就做出回应。(这也验证了守卫。不要仅仅因为某人穿着制服就将当天的密码提供给他们。)

同样,在物理安全方面,您拥有的东西就是一把钥匙。是的,密钥包含易于复制甚至可以记住的信息,但除非将数据切割成物理对象,否则数据没有用。使用钥匙,您证明的不仅仅是知识,您还证明了您拥有一个能够将不倒翁的销钉提升到正确高度的物体。正如私钥上的密码不是身份验证的一部分一样,用于转动不倒翁的工具是预期的钥匙、副本还是一组开锁器也不属于身份验证的一部分。