SSH Git操作现在支持安全密钥

凯文·琼斯的照片

多年来,GitHub一直走在采用安全密钥的前沿。我们是早期的使用者通用第二因子(“U2F”)也是第一批过渡到Webauthn。我们一直在寻找既能提高安全性又能提高可用性的新标准。今天,我们正在采取的下一步是提供支持使用Git over SSH时的安全密钥

什么是安全密钥,它们是如何工作的?

安全密钥,如YubiKey,便于携带和在机器之间转移,以方便的形式因素。大多数安全密钥通过USB、NFC或蓝牙连接。当在启用双因素身份验证的web浏览器中使用时,安全密钥提供了一种强大、方便、防钓鱼的替代方案,而不是应用程序或短信提供的一次性密码。密钥上的很多数据都受到保护,不受外部访问和修改,从而确保机密不能从安全密钥中获取。安全密钥应该作为凭证加以保护,因此要跟踪它们,这样您就可以确信您拥有可用的、强大的身份验证。只要您保留对安全密钥的访问权,您就可以确信它不会被任何人用于任何其他目的。

带有安全密钥选项的GitHub身份验证屏幕截图

为Git操作使用现有的安全密钥

当用于SSH操作时,安全密钥将SSH密钥的敏感部分从计算机转移到安全的外部安全密钥。与安全密钥绑定的SSH密钥可以保护您免受意外的私钥暴露和恶意软件的侵害。您可以执行一个手势,例如轻按安全密钥,以指示您打算何时使用安全密钥进行身份验证。这个动作提供了以下概念:用户存在。”

安全密钥并不局限于单个应用程序,因此web和SSH身份验证都可以使用相同的个人安全密钥。您不需要为每个用例获取单独的安全密钥。与web身份验证不同的是,在使用安全密钥对Git进行身份验证时,不需要双重身份验证。一如既往,我们推荐使用强密码,登记双因素身份验证,并设置帐户恢复机制。方便的是,安全密钥本身恰好是一个很好的恢复选项,在您失去访问您的手机和备份代码时,安全地保留访问您的双因素启用帐户。

相同的SSH密钥您已经知道和喜欢,只是略有不同

为SSH生成和使用安全密钥与您过去生成和使用SSH密钥的方式非常相似。您可以对密钥进行密码保护需要安全钥匙!根据我们的数据,您可能使用RSA或ed25519密钥。现在您可以使用另外两种密钥类型:ecdsa-sk和ed25519-sk,其中“sk”后缀是“安全密钥”的缩写。

$ ssh-keygen -t ecdsa-sk -C 生成ecdsa-sk公私密钥对。您可能需要接触您的身份验证器来授权密钥生成。

一旦生成,你将这些新密钥添加到您的帐户中就像任何其他SSH密钥一样。您仍然将创建公共密钥和私有密钥对,但是将生成秘密位并存储在安全密钥中,公共部分存储在您的机器上,就像任何其他SSH公共密钥一样。在那里一个存储在你机器上的私钥文件,但是您的私有SSH密钥是对安全密钥设备本身的引用。如果你电脑上的私钥文件被盗,没有安全密钥就没用了。当使用带有安全密钥的SSH时,任何敏感信息都不会离开物理安全密钥设备。如果你是唯一一个能接触到你的安全钥匙的人,那么让它一直插着是安全的。

与GitHub用户帐户相关联的SSH密钥的截图

更安全的Git访问和密钥管理

使用安全密钥,您可以实现更高级别的帐户安全性和防止帐户接管。您可以进一步删除以前注册的SSH密钥,只使用由安全密钥支持的SSH密钥。只使用由安全密钥支持的SSH密钥可以为您提供强大的保证,即您是唯一通过SSH提取Git数据的人,只要您像任何其他私钥一样保证安全密钥的安全性。

即使您只在可信的、一致的系统上访问Git,安全密钥也提供了有意义的安全保证。另一方面,您可能会发现自己工作在许多不熟悉的环境中,需要执行Git操作。安全密钥极大地减少了意外暴露的影响,而不需要仔细管理帐户上的每个SSH密钥。您可以放心地在任何系统上生成SSH密钥并将其保留任何时间长度,而不必担心稍后删除访问。我们将从您的帐户中删除未使用的钥匙,使密钥管理更加容易。记住要定期使用你想要保留一段时间的密钥,这样我们就不会为你删除它们。

防止意外操作

每个远程Git操作都需要一个额外的按键,以确保恶意软件不会在未经您批准的情况下发起请求。您仍然可以执行本地操作,如签出、分支和合并,而不需要中断。当您对代码感到满意或准备接收更新时,像push、fetch和pull这样的远程操作将要求您在继续之前点击安全密钥。与往常一样,必须为所有Git操作提供SSH密钥,并可以选择使用密码解锁。与密码保护的SSH密钥不同,客户端不会为多个操作缓存安全密钥。

$ git clone git@github.com:github/secure_headers.git clone into 'secure_headers'…Confirm user presence for key ECDSA-SK SHA256:xzg6NAJDyJB1ptnbRNy8UxD6mdm7J/ ybdu255 +fCUa0用户presence确认

已经熟悉使用安全密钥支持的SSH密钥了吗?在这种情况下,您可能想知道为什么我们需要验证(通过安全密钥“tap”),当您可以配置安全密钥,允许操作继续,只要安全密钥存在。虽然我们理解去除水龙头的吸引力,但我们认为目前的方法需要存在和意图是可用性和安全性之间的最佳平衡。

迈向更少密码的未来

现在,您可以使用密码、个人访问令牌(PAT)或SSH密钥访问GitHub上的Git。今年晚些时候,随着我们继续向更安全的身份验证模式迭代,Git操作将不再支持密码。我们知道密码很方便,但是他们是一个一致的帐户安全挑战。我们认为密码代表现在和过去,而不是未来。我们宁愿投资于替代品,比如我们的个人访问令牌添加细粒度访问和对过期的更多控制等功能。这是一个漫长的过程,但每一次减少密码使用的努力都提高了整个GitHub生态系统的安全性。

通过删除对Git的密码支持,如我们已经成功地为我们的API做了,我们将提高每一个用户和组织的安全卫生基线,以及由此产生的软件供应链。通过添加SSH安全密钥支持,我们提供了一种新的、更安全、更易于使用的方法来使用Git进行强身份验证,同时防止意外的和潜在的恶意访问。如果您准备进行切换,登录您的帐户,并按照我们的文档中的说明创建一个新密钥把它记在你的账户里

我们想向Yubico表达我们的感激之情,在过去的几年里,我们和Yubico合作过好几次早期的合作者与我们一起讨论这个特性,并为我们提供有价值的反馈,以确保我们继续提高开发人员的安全性。