写点什么

Linus 宣布将替换 git 中的 SHA-1 算法

  • 2017 年 3 月 16 日
  • 本文字数:1843 字

    阅读完需:约 6 分钟

SHA-1 是曾被广泛使用一种 hash 算法,由美国国家安全局设计(NSA),并由美国标准技术研究院(NIST)发布成为标准。hash 算法的一种基本用途是确认数据的可信性,即一组数据对应一条唯一的 hash 值,且无法找出具有相同 hash 值的两组不同数据。基于这种属性,git 在设计之初也选择了 SHA-1 作为其内部数据块的唯一标识符。

当可以找到两组数据具有相同 hash 值时,这种 hash 算法就被认为不再安全。2005 年,山东大学的王小云教授及其同事提出了破解 SHA-1 的理论方法,安全分析家们随即发出了警告,呼吁认真对待这个成果。当时有人通过邮件就此事可能对git 造成何种影响,向git 的作者Linus Torvalds 表达了忧虑。

Linus 当时对此并不以为然,因为首先他认为 git 使用 SHA-1 更多是给数据对象一个标识符,而不是处于安全原因。从这一点上来说,甚至 MD5 也能胜任,只不过 SHA-1 的结果空间更大而已。同时,他认为 git 的分布式属性,会缓解攻击的可传播性。因为如果一个人的代码树中的内容被偷偷篡改,那么这个有问题的数据并不会“传染”给其他库,因为 git 认为具有相同 SHA-1 值的两个对象是一样的,本地库里面已经有的对象自然不需要从别人那里拉。Linus 甚至还开玩笑说:

想篡改代码根本不必这么费事,还不如花一千万美元买通个程序员帮你植入后门。

John Gilmore ,一名企业家及 GNU 的资深贡献者,为 git 未来的发展提出了建议。他认为目前没有一种 hash 算法能保证长久用下去,所以 git 需要检视其以前所做的安全假设,必须要考虑当两个不同对象具有同一 hash 值时,应该如何处理。同时 git 库和 git 本身应该尽量少耦合,库不应该依赖于使用何种 hash 算法,或者至少能简单地做一种 hash 算法切换到另一种。而增加对 SHA-256 的支持也应该提上日程。他呼吁 Linus 重视这个问题。他形象地说道:

火警已经响了,但你还没看到烟。现在逃的话,靠走就行,晚了就要狂奔了。

但 12 年过去了,git 依然在使用 SHA-1。近日, Google 宣布攻破 SHA-1 ,并发布了具有相同 hash 值的两份不同 pdf 文档,使整个事情再次成为焦点。Gilmore 适时挖出了 2005 年的邮件并再次回复:

我曾经想修复这个,问题尚小时并不难,但 Linus 拒绝了,他好像并不明白威胁在哪。他对 SHA-1 的假设已经深深植根于整个 git。未来几年中,那些难缠的人们将教会他如何攻击,同时破坏他和其他很多人的代码库。

Linus 在他的 Google+ 主页发文对 SHA-1 问题进行了完整的说明。他表达了三个观点:

  1. 在 git 中,SHA-1 更多是“内容标识符”,而不涉及“信任”;
  2. 针对目前发布的这种攻击很好规避,而且已经有两组补丁;
  3. 有方案切换到其他算法,不会影响老的库。

前两点是他一直坚持的观点,但是他在文中给出了更多的细节说明。

git 使用 SHA-1 主要是为了做错误检测,保证数据的完整性,对于信任问题,他说,他们的信任是基于人的,他不会因为某个特定的 hash 值就去信任某组数据。当然他也承认,在相当程度上,git 也受益于 SHA-1 作为“信任工具”带来益处,所以攻破 SHA-1 对 git 确实有不良影响。

接下来,他对规避攻击的问题也做了详细解释。Linus 认为攻击更可能发生在像 pdf 这样的“黑盒”数据中,因为 pdf 呈现的是打印效果,而不是文件的编码细节。而代码是一种“透明”的媒介,直接给人阅读的,如果有人往“好”代码中插入了一些垃圾,就会被注意到。而 git 内部的数据结构也是“透明”,尽管大部分人不这么认为。这就使得攻击 git 数据变得难以入手,一有动作就很容易被发现。当然还有一种可能是使用 git 管理 pdf 文件,Linus 认为这是值得关注的场景,在 git 社区已经有人提交了针对这个问题的补丁,但尚未被合入。代码托管在 github 或 kernel.org 上的人则不需要担心这个问题,因为站方会定时运行这个检查,并在发现问题的时候通知用户。

总体来说,十二年过去了,Linus 的观点未发生大的变化。但他也在不断听取社区的意见。他承诺会替换 SHA-1,他说:

已经有计划了,看起来也不是很难,你甚至不需要转换你的库。但这涉及大量细节,需要时间来完成。

至于切换到哪种算法,目前尚未有定论,Linus 在评论中答复一位读者说:

恐怕我们要切换到一种 256 位的算法了,具体哪种我要问问密码学专家,如果 SHA-256 最后证明足以胜任,那么具有硬件加速支持是它的一大优势。

感兴趣的读者可以从这里阅读Linus 的原文。


感谢郭蕾对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ @丁晓昀),微信(微信号: InfoQChina )关注我们。

2017 年 3 月 16 日 19:004897
用户头像

发布了 77 篇内容, 共 32.4 次阅读, 收获喜欢 20 次。

关注

评论

发布
暂无评论
发现更多内容

智能化转型将加速数字经济变革

CECBC

人工智能 数字经济

一起学MySQL性能优化

xcbeyond

MySQL 性能优化 MySQL性能优化

跨过语言银河,构筑智能鹊桥:百度NLP的十年、今夕与未来

脑极体

架构师训练营 -- 第11周作业

stardust20

架构师训练营第十一周总结

张明森

游戏夜读 | 什么才值得纪念?

game1night

week11 小结

Geek_196d0f

银行热衷拿区块链专利 背后有何意图

CECBC

区块链 银行

一次开零售店的经历(2)

石云升

零售店

微服务编程范式

看山

微服务 范式 签约计划第二季

安全系列之——主流Hash散列算法介绍和使用

诸葛小猿

hash 散列函数 md5 sha1 murmurhash

薪水真的不是工作的全部

escray

学习 面试

一次开零售店的经历(1)

石云升

零售店

ArCall 升级丨新增多项功能,可支持多人在线语音

anyRTC开发者

音视频 WebRTC 直播 RTC

Spring系列篇:Spring容器基本使用及原理

简爱W

微服务的基建工作

看山

微服务 基础设施 签约计划第二季

第二周作业

Vincent

极客时间 作业

架构师训练营第11周作业

Bruce Xiong

开源流数据公司 StreamNative 推出 Pulsar 云服务,推进企业“流优先”进程

Apache Pulsar

Apache Pulsar 消息系统 消息中间件

云算力挖矿平台APP,一站式云算力挖矿系统开发

13530558032

有益思考一则:框架性思维

石君

学习 方法论

Apache 软件基金会顶级项目 Pulsar 达成新里程碑:全球贡献者超 300 位!

Apache Pulsar

Apache Apache Pulsar 消息系统 消息中间件

第11周作业

赵龙

沟通是一门艺术

石云升

情绪控制 沟通艺术

架构师训练营第十一周作业

张明森

week11 作业

Geek_196d0f

第11周学习总结

赵龙

论商品促销代码的优雅性

架构师修行之路

架构师第十一周作业及总结

傻傻的帅

分手快乐 祝你快乐 你可以找到更好的

escray

学习 面试

第二周学习总结

Vincent

极客时间 极客大学 作业

Linus宣布将替换git中的SHA-1算法-InfoQ