假设我有一个分成多个部分的视频文件。每块是 2 兆字节。我还有一个 *insert hash name here* 的列表,用于每个片段和完整文件。
现在假设我放错了/丢失/fubar其中一件。
我可以在人类一生的时间内使用蛮力或任何其他方法从散列中找回丢失的部分吗?
我认为彩虹式的桌子是不可行的。
额外的数字问题 - 以消费 PC 为主的中型分布式计算网络需要多少费用?(例如:4 GHz CPU + 入门级 GPU + 8 GB RAM)
假设我有一个分成多个部分的视频文件。每块是 2 兆字节。我还有一个 *insert hash name here* 的列表,用于每个片段和完整文件。
现在假设我放错了/丢失/fubar其中一件。
我可以在人类一生的时间内使用蛮力或任何其他方法从散列中找回丢失的部分吗?
我认为彩虹式的桌子是不可行的。
额外的数字问题 - 以消费 PC 为主的中型分布式计算网络需要多少费用?(例如:4 GHz CPU + 入门级 GPU + 8 GB RAM)
一个简单的答案,NO。
这就像问,如果我知道 ,x%4 = 3
是否有可能找到 的值x
?不。当然,满足这个等式会有无限的价值x
,但你不会简单地知道哪个是正确的。
类似地,许多(或无限)视频剪辑可能会导致给定的哈希值(显然,无限视频剪辑必须映射到特定数量的哈希值,因此必然会发生冲突)。你不会知道哪个剪辑是正确的。
在人类时代也是如此?不。
编辑:正如评论中所指出的,由于文件被分成 2 MB 的块,不会有无限的可能性,但它会非常大(大约 2 提高到 1670 万次方)。在人类的时间里,暴力破解如此大量的可能性仍然几乎是不可能的。但是,是的,它不是无限的。
无论您的计算机有多快,这都是不可能的,因为您几乎无法凭空重建正确的信息。
您实际上是要求从 32 字节(SHA-256 的大小)或最多 64 字节(块和总文件的 SHA-256)恢复 2 MB。这将是 1:65536 或 1:32768 的比率。鉴于视频已经被高度压缩,您可以从这几个信息中恢复原始数据的机会几乎为零。可能您可以创建一个 2 MB 的块,从而产生特定的 SHA-256 哈希值,但这是原始块的可能性非常低。
您无法在任何合理的时间内复制该文件。原因是“反转”哈希的唯一方法是通过蛮力,考虑到原始文件有多大,它会占用你确切的字节数来蛮力。
假设您有一个精确的 100MB 大的视频文件。
这意味着您需要暴力破解这个原始文件并验证它的哈希值,您需要尝试 n^r 排列。假设视频文件每字节仅使用 256 个字符(ascii),我们将查看:
256 100,000,000 ≈ 10 240,823,997 ≈ ∞
这基本上是无限的——无论 CPU 资源如何,基本上都需要 FOREVER 来计算它。
更新:当然,还有我在这里遗漏的哈希冲突问题——使用 Sha256 哈希,您可能会遇到与我们示例一样大的文件的几乎无限量的冲突。为了简单起见,我之前忽略了这一点。
假设您有一台具有无限处理能力的计算机,并且可以在短时间内可靠地检查每个可能的消息与每个可能的哈希值。这是您现在面临的问题:collisions
.
什么是碰撞?许多不同的文件可以匹配完全相同的签名。许多不同的消息可以匹配完全相同的签名。
哈希是one-way
. 您将一系列字符转换为哈希。当您验证您的哈希时,您只是检查消息是否与计算的哈希值匹配。问题是许多不同的消息可能匹配这个相同的哈希。它被称为collision
。
然而,由于你也有无限的计算能力,你也可以通过超大规模的反复试验最终重建文件。然而,一旦你有了这个哈希值的所有可能的例子,你将如何判断哪个是哪个?
以今天的技术,由于我们永远不会拥有无限的计算能力,这将是完全不可能的。即使将整个世界的综合计算能力乘以十亿,你也无法做到这一点。即使你以某种方式做到了这一点,你怎么能分辨出哪条消息是正确的?
您的想法将适用于加密,而不是散列。通过加密,如果你有密钥,你可以得到文件的解密内容。