mis*_*256 34 security hashing sha1
根据这篇文章和许多其他文章,SHA-1 并不安全。
就我而言,我不关心密码或数字证书。我担心文件完整性。
文件(例如 ISO 映像或可执行文件)是否有可能以以下方式被恶意更改:
在我看来,以产生 SHA-1 冲突的方式更改文件会使文件完全无用。ISO 会完全损坏,或者可执行文件会被完全打乱,甚至不再是可执行文件。
但是,我的看法很可能是错误的。到目前为止,我在 Google 搜索中没有发现任何关于 SHA-1 持续适用于文件验证的信息。任何见解?
Dav*_*rtz 41
还没有人为 SHA-1 做到这一点。理论上是可以的,但仍然不实用。关于 SHA-1 不安全的报告只是意味着安全级别没有我们希望的那么高,这意味着我们不必像我们想象的那样担心这么多年。
生成与给定文件具有相同 SHA-1 哈希值的文件比自己制作具有相同 SHA-1 哈希值的两个文件更难。据我们所知,世界上任何地方都没有人完成过这项更简单的任务。但这并不意味着它不能在明天发生。
Cor*_*mon 26
理论上是可行的,但目前还没有实现。
您要查找的内容称为“散列冲突”:具有相同散列的两个文件。像 SHA-1 这样的加密哈希码通常旨在使这变得困难。由于 SHA-1 是 160 位代码,因此平均需要 2^159 次蛮力尝试才能找到重复项。如果发现一种算法比针对加密散列的算法可靠地做得更好,则该散列被认为是“损坏的”。
MD-5 是一个非常破散的例子。它应该具有 128 位的强度,平均需要 2^127 次尝试。按原样,滥用已知漏洞,实际所需的尝试次数可能低至 2^47。这比 2^127 小很多。事实上,它已经在现代计算集群上在不到一天的时间内完成。
我举这个例子是因为这最接近您希望使用 SHA-1 的方式。然而,这并不是密码分析用于确保散列不被破坏的最常用方法。它们通常允许攻击者选择的两个文件之间发生冲突,而不是让您选择一个文件,而攻击者则试图匹配它。这种攻击的优点是更容易进行基准测试。如果我发现破解你的文件“很难”,这是否意味着另一个文件也同样强大?这种攻击者可以选择两个文件的攻击确保我们抓住最坏的情况。
这种攻击允许一个有趣的技巧,称为“生日攻击”。长话短说,使用生日攻击会使算法的强度减半,因此 SHA-1 需要 2^80 次尝试(平均),而 MD5 需要 2^64 次尝试(平均)。它们分别是 160 和 128 的一半。
SHA-1 已知的攻击将其强度从 2^80 降低到 2^69。这对你来说并不重要。2^69 次尝试是很长时间。
然而,从历史中我们发现散列算法不是自发破坏的,而是随着时间的推移而破坏的。没有人破解像 MD-5 这样的算法,一夜之间从 2^64 到 2^47。它会随着时间的推移而发生,因为许多人发表了关于他们正在使用的数学的论文。人们通常可以看到攻击的复杂性从算法一开始就慢慢下降(最好的攻击通常是生日攻击)。
我们看到碰撞发生了一些变化,这一事实表明 SHA-1 看到了隧道尽头的曙光。它仍然很强大,但可能希望升级到目前更安全的最新 SHA-3。
你真的应该从威胁模型的角度做出这样的决定。如果攻击者遇到这些碰撞之一,他们可以造成多少损害。您的攻击者是可以使用几台笔记本电脑的脚本小子,还是拥有整个超级计算集群的政府。攻击者需要多大的时间窗口才能在散列无效之前破坏它(密码学的许多用途都涉及“换岗”,例如密码轮换)。所有这些都会影响您对碰撞的重视程度。
那篇文章中讨论的 SHA-1 缺陷非常具体:它们允许攻击者创建两个哈希值相同的事物(这称为“碰撞攻击”)。但是,碰撞攻击要求攻击者控制所涉及的两个文件。如果攻击者不控制原始文件,碰撞攻击不会让他们找到具有相同哈希值的另一个文件。
这对 TLS/SSL(以及一般的签名)很重要的原因是,攻击者通常可以控制这两个文件。TLS 证书主要由请求它的人创建(他们无法控制的位通常是可预测的),因此冲突让他们制作合法证书和非法证书,让合法证书签名,然后传输签名。
对于文件,同样的情况并不总是适用。如果您担心制作文件的人是攻击者(例如,他们会独立验证一件事是好的,然后使用相同的哈希向您发送邪恶的有效负载),则适用 SHA-1 攻击,您应该查看逐步淘汰它(尽管它并不重要,正如大卫施瓦茨提到的那样)。如果原始文件是可信的,那么攻击者就不能应用当前已知的 SHA-1 攻击,尽管如果可以,您仍然应该考虑逐步淘汰它(如果可以选择,请使用没有已知攻击的哈希,例如 SHA- 2)。
回应“碰撞将没有用”——虽然攻击不需要攻击者能够获得有用的碰撞,但将“碰撞”变成“有用的碰撞”通常并不难。许多文件格式都有相当大的空间,您可以在其中拥有所需的任何内容,而不会影响文件的功能;攻击者通常可以修改它以获得碰撞(如果碰撞实际上是可发现的),同时保持功能部分为他们想要的任何东西。“学术攻击”和“实践攻击”的差距可能很大;“任何碰撞”和“有用碰撞”之间的差距通常要小得多。
与算法选择无关的更严重的问题是您如何获得散列。哈希所做的只是将问题从“获取真实文件”转移到“获取真实哈希值”;从与文件相同的服务器和通过相同连接类型发送的哈希值对于恶意修改完全没有价值(任何可以篡改文件的攻击者都可以篡改哈希)。哈希值仅在您信任哈希值多于信任文件时才有用;虽然有时是这种情况(种子、镜像),但它们通常在不是这种情况时使用。因此,无论何时使用哈希进行完整性验证,您都应该非常小心。
您必须区分碰撞攻击和原像攻击。找到散列为相同值的任何两条消息是碰撞攻击。
用具有相同散列的另一条消息替换一个特定的给定消息(此处:可执行文件)是(第二次)原像攻击。
SHA-1 已被破坏,因为根据维基百科文章中没有提供该数字引用的碰撞攻击可以在 2 52 次操作中完成(我所知道的最好的攻击实际上是可信的,这是 Marc Stevens 的攻击) ,这需要 2 60 次操作)。但让我们假设2 52的悲观情况。
这是令人担忧的,因为这种规模的攻击不仅在理论上是可以想象的,而且在多 GPU 设备上一天之内完全可以做到。对于“任意两个”消息都可以的应用程序来说,这当然是一个问题。如果您的攻击者愿意为这个问题投入一些额外的钱,或者愿意花一年的时间,那么即使是Stevens 给出的 2 60数字(这是工作量的 256 倍)也是完全可行的。
这正是那种不会阻止参与间谍活动或网络犯罪的人伪造证书的事情。
现在,原像攻击的指数是两倍大,因此假设碰撞攻击为2 52,这将是 2 104 次操作,这是完全不同的情况。
这不仅不切实际(一台比上一段提到的机器快 10 亿倍的机器仍然需要大约 600 万年左右的时间),而且考虑到我们产生能量的微不足道的方法,这完全不可能。
进行如此大规模的计算需要的能源比我们为单个操作所能提供的任何能源都要大得多。不,不是太阳那么大的能源,但仍然是一个相当大的能源。
您实际上可以期望从 1 瓦特中获得 10 到 50 GFLOPS 的任何东西。假设某种奇迹发生了,处理器在一夜之间的能效提高了大约几千倍,人们可以假设 1 SHA ?1 FLOP(相当乐观!)。这意味着为了在 10 年内执行 2 104 次哈希计算,您需要一个 10 12 W 的发电厂。为了在 1 年内运行攻击,您需要一个 10 13 W 的发电厂。这大约是美国、法国和日本的整个核电站共同生产的数量的 50 倍,仅用于伪造一个哈希值。
这不会发生,有更简单的方法可以实现相同的目标(利用存储原始哈希的服务器并替换该服务器,勒索某人等)。
| 归档时间: |
|
| 查看次数: |
12035 次 |
| 最近记录: |