GitHub不再使用密码:这是未来的迹象吗?

2020-09-16 22:16:08

本月晚些时候,使用GitHub的用户在尝试使用GitHub API进行身份验证或使用用户名和密码对GitHub存储库执行操作时,可能会突然收到一条错误消息。这样做的原因是GitHub取消了这一身份验证选项,并有几个“限电”时段,包括拒绝密码,以向人们发出这一事实的警告。

这一变化最初是由GitHub在2019年11月宣布的,在2020年2月分配了一个弃用时间表,并在7月份进行了另一次博客更新,重复了这一信息。如上所述,目前只有GitHub Enterprise Server不受影响。对于其他所有人,从2020年11月13日起,要使用GitHub服务,需要使用OAuth令牌、个人令牌或SSH密钥。

虽然这可能会影响相当数量的使用GitHub的rest API和存储库的人,但这里更有趣的问题是,这是否仅仅是服务中用户名和密码登录的更大转变的开始。

首先,好消息是,处理这一变化并不是非常复杂,如果阅读GitHub的博客帖子让你充满了困惑和不同程度的存在主义恐惧,如果你习惯于在Git客户端的命令行上敲打你的凭据,这里有一个简单的方法来解决这个问题,只需最少的改动:

就这样。如果您的系统上已经安装了SSH密钥,请确保将公钥复制到您的GitHub配置文件中。在此之后,您可以使用更具SSH风格的方式重新克隆存储库,或者将git远程URL从HTTPS更改为与其等效的SSH。

要做到这一点,需要在您喜欢的文本编辑器(如Vim)中打开本地存储库根文件夹中的.git/config文件,并更改遥控器的URL。只需将‘https’更改为‘ssh’,并在主机名前附加‘git@’,这样例如https://github.com/Foo/Bar.git就变成了ssh://[email protected]/foo/bar.git。

恭喜您,您现在应该可以像以前一样使用SSH密钥在远程存储库中进行推送、拉取、取回、重置、挤压和所有其他恶作剧的操作了。如果您收到奇怪的SSH错误,可能是您在~/.ssh文件夹上设置了错误的权限。否则,请享受不再每次都键入用户名和密码(或访问令牌)的乐趣。

根据GitHub的说法,这一变化的原因是为了提高安全性。在使用rest API或通过HTTPS访问git存储库时,它们提供了个人访问令牌(PATS),而不是密码。这个想法是,可以为特定的服务和个人创建PAT,以限制和授予某些权利。但是,最终得到的令牌是一个长字符串,您不需要记住并键入它,这使得密码管理器必不可少。

很能说明问题的是,所有这些都不适用于登录GitHub网站本身。在那里,您仍然可以像以前一样使用您的用户名和密码,如果您还没有使用它,则可能会使用双因素身份验证(2FA)。在这里,2FA的第二个因素可以是在短信或移动应用程序中发送的代码,或者类似WebAuthentication(FIDO2)的代码,以及使用生物特征识别时的所有潜在陷阱。

对于我们这些已经在GitHub存储库查询中使用SSH的人来说,这意味着基本上没有什么变化。对于任何已经将CI系统或类似系统与GitHub集成的人来说,使用访问令牌也不应该感到意外。然而,这确实让人不禁要问,如果GitHub只让几个DevOps匆忙更新服务(并修复掉的几个DevOps),那么GitHub的改变有什么意义呢?真的有人想摆脱密码吗?

任何在大学或大型企业管理过大型多用户系统的人都知道,用户帐户管理至关重要。理想情况下,您希望将每个用户(无论是个人、shell脚本还是管理员)都保留在他们自己的小权限区域中。这可能是GitHub的声明中最令人费解的地方。正如黑客新闻频道的评论者对这一声明所指出的那样,如果扩大访问令牌,使其成为更细粒度和按项目的角色,会更有意义。

密码是否真的有问题似乎主要取决于你问的是谁。如果这是一项由一家销售密码登录替代品的公司或Windows Hello背后的公司委托进行的研究,这是有史以来最不安全的事情。然而,正如前面提到的,这些替代方案存在重大问题,特别是生物识别技术。

在用户身份验证中,可以使用您拥有的东西、您是的东西和您知道的东西进行身份验证。生物识别是扫描一个人身体的一部分,并将其与之前存储的数据进行比较的实践。这是公共数据,越来越容易复制和复制来愚弄生物识别传感器。当然,如果你的生物特征数据落入坏人手中,你永远无法改变它。

一个人拥有的东西(钱包、信用卡、硬件令牌)很容易被偷或丢失。这就是为什么这样的令牌不可避免地要以个人识别码(PIN)的形式使用密码解锁,尽管作为一种“有人知道”的东西,它完全是一个密码,但它却被笨拙地当作密码跳来跳去。

人们知道的事情是相当令人惊讶的,因为他们可能被攻破的唯一方式是忘记他们,或者让人用键盘记录器、被盗的自动取款机等记录他们。这从美国联邦部门无法强行进入密码保护的iPhone就证明了这一点。使用面部识别,只需将手机举到人的脸上就可以解锁,这对于指纹来说甚至是合法的。在某些情况下,一个人的照片就足够了。

实际上,GitHub更改的好处似乎是,它迫使更多的人最终抛弃或重写那些已被遗忘但仍处于活动状态的Java后端服务,其中包含硬编码的用户名和密码凭据。让他们使用SSH(可以想象使用SSH代理或GPG代理)可以简化维护并提高安全性。即使只从命令行使用git存储库,不用密码管理器,切换到SSH也意味着输入更少。

作为一种身份验证机制,SSH以您拥有的东西(密钥)和您知道的东西(密钥短语)的形式提供双因素身份验证。它的好处也得到了GitLab的认可,从今年8月15日起,GitLab不再为免费用户账户提供多因素重置。如果在帐户中注册了SSH密钥,则在所有其他身份验证方法都不可用的情况下,可以使用SSH身份验证来恢复帐户。

由于将身份验证信息安全地存储在我们柔软、有机的大脑中的能力,所有的身份验证方法似乎都会在某些时候返回到某种形式的密码。即使是“无密码”身份验证令牌也需要密码(PIN),这是必须记住的。信用卡、借记卡、网银账户、SIM卡、密码管理员等也是如此。

根据最后一次统计,我必须记住多张SIM卡、借记卡、信用卡、网上银行应用程序的PIN码,以及总共近12个密码管理器的PIN码。猜猜这些PIN码最后到哪里去了?这是正确的,在密码管理器中,因为记住随机的数字字符串是很棘手的,但是记住其中的12个数字是一个近乎噩梦的场景。那张借记卡是7634还是7643?还是第二张信用卡的钱?即使是埃利奥特·威廉姆斯(Elliot Williams)的基于大脑的个人识别码散列系统也允许他将公钥写在卡上,但它仍然要求他记住私钥(以及如何在脑海中对其进行散列)。

也许这就是生物特征识别的吸引力所在:拥有一些公正的东西,没有什么需要记忆的东西,也没有一些需要跟踪的物理物品。然而,生物识别相当于将SSH私钥打印在额头(或指尖)上的密码学。

归根结底,似乎所有的身份验证路径最终都通向密码管理器和SSH密钥。