为什么要用BLAKE2替换SHA-1?| 密码学分析

当哈希碰撞成为现实

如果你在过去的十二年里不是生活在原始森林的话,那么你一定知道密码学哈希函数SHA-1是存在问题的,简而言之,SHA-1没有我们想象中的那么安全。SHA-1会生成160位的摘要,这意味着我们需要进行大约2^80次操作才能出现一次哈希碰撞(多亏了Birthday攻击)。但是在2005年密码学专家通过研究发现,发生一次哈希碰撞其实并不需要这么多次的操作,大概只需要2^65次操作就可以实现了。

这就非常糟糕了,如果现实生活中可以实现哈希碰撞的话,那么这就会让很多使用SHA-1的应用程序变得更加的不安全。而这个操作次数,即2^65次,是一个比较接近实际情况的数字。如果你想用自己的笔记本电脑来进行计算的话,可能需要好几年的时间,但是对于那些手头上有资金有技术的大型组织而言,计算出一次哈希碰撞可能只需要一两周的时间。

Google就是具备上述条件的一个组织,Google根据CWI的安全研究人员Marc Stevens和Pierre Karpman的最新研究成果,并使用了大量的计算资源(CPU集群和GPU集群)实现了最优分布式碰撞搜索。碰撞信息如下图所示:

既然现在已经是2017年了,所以哈希碰撞也有自己的“昵称”和logo了:http://shattered.io/。Marc Stevens和其他密码学研究人员的多年努力以及Google工程产品的高性能让哈希碰撞成为了现实,而这其实也并不会让我们感到惊讶,因为我们知道这是迟早会发生的事情

但是,这次哈希碰撞的实现让很多安全威胁变得离我们更加近了,很多目前正在使用SHA-1的服务也正在寻找替代方案。如果要代替SHA-1的话,我推荐BLAKE2,这是一个哈希算法,它是由安全研究专家Samuel Neves、Zooko和CodesInChaos共同设计开发的。接下来我会告诉大家,我为何要推荐用BLAKE2来代替SHA-1。

因为SHA-1存在严重的安全问题

当然了,没人会愿意使用存在安全问题的哈希算法。不过这也得看情况,这一次破解的只是SHA-1的抗碰撞性,而某些网络应用其实对抗碰撞性并没有太高的要求。比如说,类似HMAC-SHA-1(使用HMAC伪随机函数和SHA-1共同作为哈希函数)或PBKDF2-HMAC-SHA1(使用HMAC-SHA-1作为伪随机函数的PBKDF2密码哈希)这样的哈希函数仍然是安全的,但是我们仍然建议大家放弃使用SHA-1。

因为BLAKE2是安全的

我们给BLAKE2的定位是目前安全系数最高的哈希函数,从2012年BLAKE2的发布之日至今,我们还没有发现针对BLAKE2的攻击。实际上,BLAKE2是基于BLAKE实现的,BLAKE是2008年被提交至SHA-3竞赛的一种哈希函数,而且全世界最优秀的密码学分析专家对这个哈希函数进行了长达四年的审查,然而并没有发现任何的不安全因素。

除此之外,BLAKE2的内部基于的是ChaCha,而ChaCha是高度可信任的,它不太可能被破解。(注:ChaCha是一种由Daniel J.Bernstein设计的流密码,它是TLS1.3所使用的三大密码之一,并且符合新的TLS标准。)

因为BLAKE2的速度比SHA-1更快

由于在设计之初就考虑到了安全和性能方面的优化,BLAKE2在速度方面是要优于SHA-1的。下图显示的是各种不同的哈希函数在一块英特尔CPU(Skylake架构)上的吞吐量测试信息:

因为BLAKE2非常简单

你会发现,我们可以方便地用各种不同的编程语言来实现BLAKE2,例如C、Go、Java、JavaScript、Python或Rust。比如说,BLAKE2默认就是Go语言“/x/crypto”包中的一部分。除此之外,目前很多流行的加密代码库都包含有BLAKE2,例如OpenSSL和Sodium等等。如果你想使用其他语言来实现BLAKE2的话,可参考Sodium给出的资料【点击文末的阅读原文查看】。

因为BLAKE2就是你所需要的东西

BLAKE2不仅仅只是一个简单的哈希函数而已!首先,BLAKE2有两大主要版本:BLAKE2b和BLAKE2s。BLAKE2b是BLAKE的64位版本,它可以生成最高512位的任意长度哈希。BLAKE2s是BLAKE的32位版本,它可以生成最高256位的任意长度哈希。

为了进一步提升哈希计算的速度,BLAKE的并行版本BLAKE2bp和BLAKE2sp可以在多个计算核心上并行运行,而此时的运行效率将是串行运行的八倍。如果你想在BLAKE2的哈希计算中使用密钥的话,例如伪随机函数(PRF)或消息认证码(MAC),你不需要像使用HMAC一样还要专门去实现这些计算,因为BLAKE2可以接受一个密钥作为可选输入参数,计算完成之后你就可以得到一个跟HMAC一样安全的哈希了。

如果你需要长度高于512位的哈希值,例如实现一个密钥导出函数(KDF)或确定性随机比特生成器(DRBG),我们创建了BLAKE2x,BLAKE2x是对BLAKE2的简单扩展,它可以生成任意长度的哈希值(长度不受限制)。

为什么不用SHA-2或SHA-3代替SHA-1呢?

SHA-2其实是一个哈希函数家族,其中包括SHA-256、SHA-384和SHA-512,而且还提供了SHA-224和SHA-384这两个变种版本。SHA-2哈希函数可以看作是安全系数更高的SHA-1,而SHA-2目前还没有被破解。但是跟BLAKE2相比,SHA-2哈希函数在性能和速度方面明显要处于劣势。除此之外,它不支持额外的功能,而且也无法抵御哈希长度扩展攻击。

SHA-3同样是一个哈希函数家族,2015年发布的美国联邦标准FIPS 202还对其进行了标准化规范。SHA-3是基于Keccak(SHA-3竞赛中的胜者)实现的,SHA-3哈希函数跟BLAKE2一样的安全,但是同样在速度方面处于下风。很多人选择使用SHA-3而不选择BLAKE2的理由可能是BLAKE2并不是一种规范标准(虽然BLAKE也有自己的标准化文档RFC),而且BLAKE2也没有得到FIPS的许可认证。

我们应该怎么做?

当我尝试通过审查源代码来发现加密算法中的漏洞时,我通常会使用类似grep–Hnri md5或rg–i md5这样的命令来查看代码中MD5的使用信息,这样就可以迅速地找出算法中的潜在漏洞。我建议各位安全从业人员也采用这样的方法来检查系统中MD5和SHA-1应用的安全性,如果有需要的话,最好将哈希算法替换成更加安全的BLAKE2。

如果你使用的是X.509证书,那么请确保使用SHA-256作为你的签名算法,而不要再使用SHA-1了。除此之外,类似Chrome这样的Web浏览器会将那些使用SHA-1的域名证书标记为“Inscure”(不安全)。

总结

实际上,安全研究人员早在2005年就已经对外宣称MD5和SHA-1从理论上来说是可以被破解的,但是很多开发者仍然没有将SHA-1升级为SHA-2,并且还在继续使用这种不安全的哈希算法,因为他们不愿意牺牲网络服务的速度和效率来换取更高的安全性。但是现在他们就没有任何理由继续使用SHA-1了,因为BLAKE2的速度比SHA-1更快。当然了,你也可以选择SHA-3,但无论如何你都应该将SHA-1从你的系统中永久移除。

本文分享自微信公众号 - FreeBuf(freebuf)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2017-03-26

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏小樱的经验随笔

1022: [SHOI2008]小约翰的游戏John【Nim博弈,新生必做的水题】

1022: [SHOI2008]小约翰的游戏John Time Limit: 1 Sec  Memory Limit: 162 MB Submit: 2709 ...

33880
来自专栏CSDN技术头条

黑客与C语言

“黑客”这个词想必我们已经如雷贯耳了。我们一听到黑客通常在大脑中的印象就是一群穿着黑衣,躲在小屋里偷偷用着数台电脑针对某组计算机,神不知鬼不觉地进行攻击。他们通...

1.3K80
来自专栏抠抠空间

haslib 模块

一、模块简介 Python的hashlib提供了常见的摘要算法,如MD5,SHA1等等。 什么是摘要算法呢?摘要算法又称哈希算法、散列算法。它通过一个函数,把任...

32680
来自专栏乐享123

加密技术发展

37260
来自专栏Debian社区

FFmpeg 3.4 发布,多媒体处理工具合集

FFmpeg 3.4 已发布。FFmpeg 是用于处理音频、视频、字幕和相关元数据的多媒体内容的库和工具的合集。

19030
来自专栏大数据文摘

UK DN AS NN WG UX AA:这是一条加密推送!

15240
来自专栏安智客

密码发展史之古典密码

密码(Cryptology)是一种用来混淆的技术,它希望将正常的、可识别的信息转变为无法识别的信息。密码学是一个即古老又新兴的学科,密码学一词源自希腊文“kry...

35170
来自专栏落影的专栏

OpenGL ES实践教程(九)OpenGL与视频混合

前言 前面的实践教程: OpenGL ES实践教程1-Demo01-AVPlayer OpenGL ES实践教程2-Demo02-摄像头采集数据和渲染 O...

65250
来自专栏性能与架构

通俗易懂的HTTPS解释

我们在网络的行为(例如看文章、购物、上传图片),简单来说都是向服务器发送消息、接收服务器的消息,这个过程很像信鸽传书。

20320
来自专栏数据小魔方

这么牛X的包,一般人我不告诉他!!!

本文将给大家介绍一个ggplot2灰常牛X的可视化扩展包,我将该包主页的包用法介绍整理成中文,分享给大家。 包名叫geofacet,有经验的charter大概...

36150

扫码关注云+社区

领取腾讯云代金券