从SSH库中删除了危险的SHA-1算法


对SHA-1的攻击的复杂性。价格是根据一台GTX 1060每月35美元的租赁价格计算得出的,

比其他所有版本都要晚很多,但是SSH库的开发人员决定默认情况下最终禁用过时的SHA-1加密功能。如今,如上表所示,在租用的GPU集群上选择服务器身份验证密钥SHA-1(即与所选前缀冲突)将花费$ 45,000。这使得该攻击不仅可用于状态情报服务,而且可用于商业客户端。

OpenSSH openSSH(发行说明)和libssh(代码更改库的开发人员同时宣布了默认情况下禁用SHA-1的功能

国家安全局(NSA)与NIST合作开发了安全哈希算法(SHA)。 SHA-0的第一个版本是在1993年推出的,但美国国家安全局(NSA)很快撤回了该版本,理由是他们发现了一个从未公开的错误。

NSA的固定版本于1995年发布,称为SHA-1。

SHA-1(安全哈希算法1)加密哈希函数生成一个160位的字符串,称为哈希摘要。从理论上讲,摘要对于该功能的每个文件,消息或其他输入都应该是唯一的。作为输入值,SHA-1接受的消息不超过2641位,即大约2艾字节。

显然,摘要值的范围小于输入值的范围。但实际上,考虑到现有计算资源的性能,摘要冲突不应该可行。不幸的是,SHA-1不再符合该标准。

2017年,谷歌和阿姆斯特丹数学与计算机科学中心的员工介绍了第一种生成SHA-1碰撞的方法

他们发表了一份证明:两个PDF文件,它们的内容不同但具有相同的数字签名SHA-1。


  $ls -l sha*.pdf 
  -rw-r--r--@ 1 amichal  staff  422435 Feb 23 10:01 shattered-1.pdf
  -rw-r--r--@ 1 amichal  staff  422435 Feb 23 10:14 shattered-2.pdf
  $shasum -a 1 sha*.pdf
  38762cf7f55934b34d179ae6a4c80cadccbb7f0a  shattered-1.pdf
  38762cf7f55934b34d179ae6a4c80cadccbb7f0a  shattered-2.pdf



shattered.it网站上,您可以检查任何文件是否包含在可能发生冲突的地方。也就是说,是否有可能用相同的哈希值拾取另一个数据集(文件)。攻击媒介很明显:攻击者可以用书签,恶意宏或特洛伊木马下载程序将其“好”文件替换为其副本。并且此“不良”文件将具有相同的哈希或数字签名。

近年来,在研究人员展示了使用SHA-1伪造数字签名的实用方法之后,许多程序和服务已停止使用SHA-1。专家的一致意见是,该算法现在在几乎所有安全环境中都不安全。

Google长期以来一直表示不信任SHA-1,尤其是使用此功能来签署TLS证书时。早在2014年,Chrome开发团队就宣布逐步淘汰SHA-1。

在2017年,研究人员使用Google基础架构进行了计算并检查了碰撞搜索将花费多少的理论计算。开发人员说,这是Google有史以来最大的计算之一。总共执行了9百万个SHA-1计算(9,223,372,036,854,775,808),在攻击的第一阶段需要6500个处理器年,在攻击的第二阶段需要110年的GPU。

具有相同SHA-1哈希的消息块


在2019年,研究人员Gaetan Laurent和Thomas Peyrin演示了对与所选前缀发生冲突的攻击,这对于选择特定的PGP / GnuPG加密密钥具有实际意义。最终,在2020年1月,作者设法将攻击优化了一个数量级,并将其理论成本降低到商业上可接受的价格(请参见上表和pdf)。为了演示,他们使用相同的SHA-1证书创建了一对不同的PGP / GnuPG密钥。

为了抵御发现SHA-1冲突的攻击,建议切换到更好的加密哈希函数SHA-256和SHA-3。

OpenSSH开发人员在最新版本的注释中写道,他引用了2020年1月的这项研究:“现在,您可以使用SHA-1算法以低于5万美元的价格使用选定的前缀执行攻击。因此,在不久的将来,我们将禁用默认的ssh-rsa公钥签名算法。不幸的是,该算法仍被广泛使用。尽管存在更好的选择,但它长期以来一直是原始SSH RFC定义的唯一公钥签名算法。”

在最佳选择中,OpenSSH开发人员将调用RFC8332 RSA SHA-2算法(从OpenSSH 7.2开始支持,如果服务器和客户端支持它,则默认情况下已使用它),ssh-ed25519(从6.5开始支持)和RFC5656 ECDSA(从5.7版开始) 。

要验证服务器在生成用于认证的公共密钥时是否使用弱SHA-1算法,请从ssh(1)的允许列表中删除ssh-rsa算法后,尝试连接到该服务器

ssh -oHostKeyAlgorithms=-ssh-rsa user@host

如果验证失败并且其他类型的密钥不可用,则应更新服务器软件。

在OpenSSH的将来版本中,默认情况下将启用UpdateHostKeys选项,在该选项中,客户端将自动切换到最佳算法。可以手动激活。

显然,SHA-1的完全关闭将需要很多时间。一月份研究的合著者之一,法国国家计算机科学与自动化研究所的Gaetan Laurent并不期望OpenSSH开发人员能够迅速做到这一点:“当他们完全禁用SHA-1时,将无法从新版本的OpenSSH连接到具有旧版本的设备。 SSH服务器- 写入他。-在此之前,他们可能会采取一系列循序渐进的步骤(带有响亮的警告)。另一方面,在已经多年未更新的带有SSH的嵌入式系统中,可能存在许多安全问题,因此中断它们的工作可能并不算太糟糕……无论如何,我对此举措感到非常满意,正是我们想要实现的目标:-)”。

在OpenSSH和libssh宣布计划禁用SHA-1之后,SHA-1用户列表变短了,但并没有消失。最新版本的OpenSSL库仍支持该功能,许多网站和Internet服务都使用该功能来实现HTTPS和其他加密协议。本月初发布的最新版本的GNU Collection编译器使用SHA-1哈希进行了数字签名。

莱纳斯·托瓦尔兹说过在Git存储库中,哈希冲突不会带来安全风险。他解释说,在加密系统中为数字签名使用加密哈希与在Git等系统中生成“内容标识”之间存在很大的区别。当所有数据都在公共领域时,真正的攻击几乎是不可能的。科学著作的作者给出了一个攻击具有相同前缀的文档的例子。这种攻击是成功的,因为前缀本身像“斑点”一样被“封闭”在文档内部。如果我们在资源库中有开源,那么这是完全不同的事情。从源代码(仅从blob)创建这样的前缀几乎是不可能的。换句话说,要创建相同的前缀然后生成具有相同SHA-1散列的代码分支,您将不得不向代码中注入一些随机数据,这将立即引起注意。莱纳斯说在某些地方可以隐藏数据,但是git fsck已经抓住了这些技巧。但是,Linus计划放弃使用SHA-1,这样甚至没有人需要转换其存储库。

All Articles