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

简介:

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问题进行了完整的说明。他表达了三个观点:

在git中,SHA-1更多是“内容标识符”,而不涉及“信任”;针对目前发布的这种攻击很好规避,而且已经有两组补丁;有方案切换到其他算法,不会影响老的库。
前两点是他一直坚持的观点,但是他在文中给出了更多的细节说明。

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最后证明足以胜任,那么具有硬件加速支持是它的一大优势。

本文转自d1net(转载)

目录
相关文章
|
算法 安全 开发工具
微软:SHA-1 算法签名的.NET 框架 4 月 26 日将不再支持
微软:SHA-1 算法签名的.NET 框架 4 月 26 日将不再支持
148 0
微软:SHA-1 算法签名的.NET 框架 4 月 26 日将不再支持
|
安全 算法 C语言
|
算法 C语言
SHA-1算法c语言实现
安全哈希算法(Secure Hash Algorithm)主要适用于数字签名标准 (Digital Signature Standard DSS)里面定义的数字签名算法(Digital Signature Algorithm DSA)。
1875 0
|
1天前
|
机器学习/深度学习 算法
基于改进遗传优化的BP神经网络金融序列预测算法matlab仿真
本项目基于改进遗传优化的BP神经网络进行金融序列预测,使用MATLAB2022A实现。通过对比BP神经网络、遗传优化BP神经网络及改进遗传优化BP神经网络,展示了三者的误差和预测曲线差异。核心程序结合遗传算法(GA)与BP神经网络,利用GA优化BP网络的初始权重和阈值,提高预测精度。GA通过选择、交叉、变异操作迭代优化,防止局部收敛,增强模型对金融市场复杂性和不确定性的适应能力。
102 80
|
20天前
|
算法
基于WOA算法的SVDD参数寻优matlab仿真
该程序利用鲸鱼优化算法(WOA)对支持向量数据描述(SVDD)模型的参数进行优化,以提高数据分类的准确性。通过MATLAB2022A实现,展示了不同信噪比(SNR)下模型的分类误差。WOA通过模拟鲸鱼捕食行为,动态调整SVDD参数,如惩罚因子C和核函数参数γ,以寻找最优参数组合,增强模型的鲁棒性和泛化能力。
|
26天前
|
机器学习/深度学习 算法 Serverless
基于WOA-SVM的乳腺癌数据分类识别算法matlab仿真,对比BP神经网络和SVM
本项目利用鲸鱼优化算法(WOA)优化支持向量机(SVM)参数,针对乳腺癌早期诊断问题,通过MATLAB 2022a实现。核心代码包括参数初始化、目标函数计算、位置更新等步骤,并附有详细中文注释及操作视频。实验结果显示,WOA-SVM在提高分类精度和泛化能力方面表现出色,为乳腺癌的早期诊断提供了有效的技术支持。
|
6天前
|
供应链 算法 调度
排队算法的matlab仿真,带GUI界面
该程序使用MATLAB 2022A版本实现排队算法的仿真,并带有GUI界面。程序支持单队列单服务台、单队列多服务台和多队列多服务台三种排队方式。核心函数`func_mms2`通过模拟到达时间和服务时间,计算阻塞率和利用率。排队论研究系统中顾客和服务台的交互行为,广泛应用于通信网络、生产调度和服务行业等领域,旨在优化系统性能,减少等待时间,提高资源利用率。
|
14天前
|
存储 算法
基于HMM隐马尔可夫模型的金融数据预测算法matlab仿真
本项目基于HMM模型实现金融数据预测,包括模型训练与预测两部分。在MATLAB2022A上运行,通过计算状态转移和观测概率预测未来值,并绘制了预测值、真实值及预测误差的对比图。HMM模型适用于金融市场的时间序列分析,能够有效捕捉隐藏状态及其转换规律,为金融预测提供有力工具。