云服务器价格_云数据库_云主机【优惠】最新活动-搜集站云资讯

数据库_高平网站建设_哪家好

小七 141 0

为什么伪造SHA-1证书比发现SHA-1碰撞更难

众所周知,SHA-1不再被认为是安全的加密哈希函数。研究人员现在认为,发现哈希冲突(两个值在应用SHA-1时产生相同的值)是不可避免的,而且可能在几个月内发生。这对网络上的信任构成了潜在的威胁,因为许多网站使用的证书是用依赖SHA-1的算法进行数字签名的。幸运的是,找到哈希冲突并不足以伪造数字证书和破坏互联网的信任模型。我们将探讨过去如何使用哈希冲突来伪造数字签名。我们还将讨论证书颁发机构如何通过在证书序列号中包含随机性,使攻击者在将来更难做到这一点。数字签名是信任的基石互联网依赖于信任。无论是登录到您的银行还是阅读Reddit,HTTPS都通过加密您与站点交换的数据并使用数字证书验证站点的身份来保护您。浏览器在地址栏中以挂锁的形式直观地显示HTTPS的附加安全性。当站点拥有声明所有者身份和主机名的数字证书时,HTTPS可以向浏览器证明站点的真实性。证书是由称为证书颁发机构(CA)的受信任的第三方数字签名的小文件。对于浏览器来说,数字签名是信任的最终来源。如果浏览器信任CA并且证书上的数字签名正确,则浏览器信任证书。这种身份系统被称为公钥基础设施(PKI),我们在前一篇文章中已经详细介绍过。如果数字签名不再可信,这个系统就会崩溃。如果有人可以为cloudflare.com网站使用来自可信CA的签名,他们可以使用它来模拟cloudflare.com网站网站给访问者(如果他们可以修改DNS)。数字签名是一个用公钥加密的数字。每个数字签名都需要一个公私密钥对和一个哈希函数。哈希函数用于获取消息并将其替换为唯一摘要,私钥用于签名,公钥用于验证签名。例如,要创建RSA签名,需要获取消息的哈希值并用私钥加密该哈希值。任何人都可以验证签名是否都属于您,并且对关联的消息有效。获取公钥,解密哈希并将其与消息的哈希进行比较。如果匹配,则签名是正确的。ECDSA是一种较新的算法,可以完成相同的任务。有几种方法可以为网站获取数字签名证书。标准方法是从GlobalSign或Comodo等证书颁发机构购买证书。CA遵循一组关于证书颁发的规则,这些规则由CA/Browser Forum的基线要求控制。获取证书的另一种方法是窃取CA的私钥。除了可能是非法的,它也很难做到:CA私钥通常保存在专用的安全机器中,称为硬件安全模块(HSM),旨在防止密钥提取。获取证书的第三种更有趣的方法是创建一个与现有可信证书具有相同哈希的证书。可将可信证书中的签名添加到不受信任的证书中,使其看起来可信。如果您可以找到与已签名邮件具有相同哈希值的邮件,则可以交换邮件,签名将正确验证。这可以用来欺骗任何人,让他们认为有人签署了他们没有签署的消息。加密散列函数是用来抵抗这种情况的。他们并不总是成功的。散列函数的安全性加密哈希函数的设计满足三个安全属性:抗碰撞性第二预成像电阻预成像电阻这里的抗冲突性意味着没有比暴力更快的算法来找到两个散列到同一个值的值。这是最强烈的安全要求,通常是第一个被破坏的。当给定一个值及其哈希值时,在计算上不可能找到哈希为相同值的第二个值时,哈希函数具有第二个预图像阻力。从表面上看,这似乎是保护证书上数字签名的安全属性。但是,正如我们将在下一节中探讨的那样,仍然可以伪造使用第二个防预映像哈希签名的证书。Pre-image-resistance意味着给定一个哈希值,攻击者在计算上不可能找到一个哈希值。如果你能找到一个预图像,你就可以很容易地找到第二个预图像或碰撞。在下一节中,我们将描述上一次在数字签名中使用没有抗冲突性的加密哈希函数时发生了什么。断开MD5MD5是一个非常流行的加密散列函数;它在抗冲突性方面也碰巧被完全破坏了。MD5仍然被广泛使用,只是不用于数字签名。2004年,一群中国研究人员(PDF)发现了MD5的第一次碰撞,它使用了大量的数学运算,并用一台超级计算机进行了大约一个小时的计算。今天,在笔记本电脑上计算MD5碰撞只需几秒钟。Nat McHugh巧妙地证明了这一点,他在MD5中使用了一个选择前缀哈希冲突(稍后将对此进行详细介绍),在本例中,Barry White和James Brown(他后来与Jack Black创建了一个三向碰撞)。三个具有相同MD5哈希的图像:您可以通过curl和md5自己验证:$卷曲-shttps://blog.cloudflare.com/content/images/2015/08/white.jpg|md5型b69dd1fd1254868b6e0bb8ed9fe7ecad$卷曲-shttps://blog.cloudflare.com/content/images/2015/08/brown.jpg|md5型b69dd1fd1254868b6e0bb8ed9fe7ecad$卷曲-shttps://blog.cloudflare.com/content/images/2015/08/black.jpg|md5型b69dd1fd1254868b6e0bb8ed9fe7ecad尽管发现MD5冲突相对来说很简单,但仍然不知道如何对MD5执行第二次预映像攻击。例如,给定一个数字签名的证书,没有人能够用相同的哈希创建第二个证书。尽管如此,研究人员创建了一个与浏览器信任的证书具有相同签名的证书。他们使用的技术,选择前缀攻击,最初是由马克·史蒂文斯在他的硕士论文中提出的。它可以用于创建伪造的证书,只要您可以让证书颁发机构颁发以可预测值开头的证书。选择前缀攻击如果可以找到冲突,可以取两个不同的值,并将数据附加到每个值,使它们散列为相同的值。在最初的MD5碰撞攻击中,研究人员计算了两条消息M1和M2,使得H(M1)=H(M2)。Stevens扩展了这项研究,找到了一种通过附加字节使两个已知值P1和P2发生冲突的方法。通过前缀P1和P2,他能够演示如何找到S1和S2,从而使H(P1 | S1)=H(P2 | S2)。这足以让攻击者使用相同的哈希创建两个证书。让我们看看证书的大致结构:序列号有效期域名公钥十、 509分机签名如果攻击者知道域之前的每个值,那么他们可以P1=序列号|有效期|真实域名和P2=流水号|有效期|伪造域名并应用该攻击来获得符合公钥部分的S1和S2。如果可以预测序列号和有效期,则可以使用以下步骤找到冲突:猜测证书何时颁发;预测在该时间段内颁发的证书的序列号;以及计算包含预期序列号和发行日期的多个猜测的匹配前缀攻击者为每个值的选择预先计算所选前缀冲突,其中一个前缀有一个域名在请求者的控制之下(例如攻击者网站)一个用于目标域(例如。谷歌). 导致两个证书发生冲突的"冲突位"最终与证书公钥的前几个字节对齐。一旦计算出冲突,攻击者就必须说服CA在正确的时间为可验证域颁发具有正确序列号的证书,以及与冲突位对应的公钥。如果幸运的话,CA返回的证书将与恶意证书具有相同的哈希值。然后,它们可以将有效签名转置到恶意证书上,使其可信。域名冲突是最简单的选择前缀冲突攻击类型。还可以通过这样一种方式来准备冲突:来自可信证书的RSA公钥与伪造证书的X.509扩展相一致。这更危险,因为它允许伪造的证书设置"isca"位。只要签名CA的路径长度约束足够大,这个伪造的CA就能够为任何域颁发可信证书。实践中伪造MD5证书2008年,一些研究人员(包括marcstevens和alexsotirov)使用选择的前缀冲突技术来伪造浏览器信任的证书颁发机构。这个概念的证明是在2008年的混沌通信大会上提出的,只需要几天的计算。2012年,一个名为Flame的恶意软件被发现。Flame可以通过劫持微软的Windows更新机制感染计算机。当时,Windows Update通过使用Microsoft使用基于MD5的签名签署的证书检查代码签名来验证更新。Flame的作者使用了伪造的微软证书。根据对该证书的分析,很可能是使用了所选的前缀技术来创建Flame伪造的证书。福布斯称这是最令人担忧的