可以使用元数据、SHA 和几个字节重新创建文件吗?
possible to recreate a file using metadata, SHA, and a few bytes?
我可能是个傻瓜,但我希望如果我们只有:
就可以重新创建文件的精确副本
- 这是准确的长度和类型
- 它的一些开始字节(假设 100)
- 它是 md5 和 sha256 签名。
我不知道这是否可行,但到目前为止我还没有在网上找到与我所描述的内容相似的内容。
旁注:我知道这样的过程在计算上会很昂贵,所以如果可能的话,我打算尝试使用小文件 (1-3mb)
不幸的是,这不切实际,鉴于您的“小文件 (1-3mb)”示例,您在性能方面与当前计算机所能达到的规模相去甚远。
一个简单的Wolfram Alpha查询来计算多长时间
- 128字节的数据文件(256^128种可能的字节序列组合)
- 当你可以每秒计算十亿十亿(10^9 * 10^9 * 10^9 = 10^27)个摘要时
- ...以分钟为单位,然后是小时,然后是天,然后是年
需要,你最终会得到......
10463951242053391806136963369726580181263718864311851635192874886429209483641954321222640418122029864527291727710479949464718215680589004332016189037791576956967351342601788071700268169006221818240189631008834448226154239518944108944497601509840881752510934060240763835605888507473266002770708660224/1835636794567108154296875 years
或缩短为...
5.7004475357125694689539104223396268823502567825415606695024 × 10^273
又名“something something”,末尾有 273 个零...年。
即使在达到正确数字之前考虑运气和平均尝试次数,你也只能达到一半,这仍然......不幸的是比我们宇宙的预期热寂大几个数量级。
您需要对您选择的摘要算法进行有针对性的攻击,利用已知的弱点。 SHA-1 has been "broken" 在发生有针对性的碰撞方面,但相对而言,大多数其他 SHA-x 实现仍然是安全的。
现在,我选择“billion billion billion”作为一个相当慷慨的估计,你可以在一秒钟内计算出多少摘要。我不知道这是否准确,但 273 个零的结果应该告诉你,即使我偏离了一个数量级 或十 ,你仍然很远那里。
根据this answer from 2012, current computers (back then) could compute 100 million hashes per second of SHA512. If we apply Moore's Law,每 18 个月性能翻一番,我认为这是常态,我们今天可以计算出 1 亿 * 2^(6) [=64] 个哈希值,这是每秒大约 64 亿个哈希值。要达到我们的目标(它后面还有 273 个零),我们在速度量级上还有 10 亿十亿哈希。
即使拥有你能想象到的所有神奇计算能力,你所要求的也是不可能的。如果你拿一个 1 MB 的文件并计算它的 MD5 和 SHA256,你剩下 384 位。我将忽略文件的前 100 个字节,你说你知道。你还剩下超过八百万比特。减去384,还有八百万多比特
也就是说大约有28x106, (~102,400,000) 不同 1 MB 文件全部映射到完全相同 MD5 和 SHA256 签名。即使你可以计算所有这些,也无法确定其中哪个是原始文件。
我可能是个傻瓜,但我希望如果我们只有:
就可以重新创建文件的精确副本- 这是准确的长度和类型
- 它的一些开始字节(假设 100)
- 它是 md5 和 sha256 签名。
我不知道这是否可行,但到目前为止我还没有在网上找到与我所描述的内容相似的内容。
旁注:我知道这样的过程在计算上会很昂贵,所以如果可能的话,我打算尝试使用小文件 (1-3mb)
不幸的是,这不切实际,鉴于您的“小文件 (1-3mb)”示例,您在性能方面与当前计算机所能达到的规模相去甚远。
一个简单的Wolfram Alpha查询来计算多长时间
- 128字节的数据文件(256^128种可能的字节序列组合)
- 当你可以每秒计算十亿十亿(10^9 * 10^9 * 10^9 = 10^27)个摘要时
- ...以分钟为单位,然后是小时,然后是天,然后是年
需要,你最终会得到......
10463951242053391806136963369726580181263718864311851635192874886429209483641954321222640418122029864527291727710479949464718215680589004332016189037791576956967351342601788071700268169006221818240189631008834448226154239518944108944497601509840881752510934060240763835605888507473266002770708660224/1835636794567108154296875 years
或缩短为...
5.7004475357125694689539104223396268823502567825415606695024 × 10^273
又名“something something”,末尾有 273 个零...年。
即使在达到正确数字之前考虑运气和平均尝试次数,你也只能达到一半,这仍然......不幸的是比我们宇宙的预期热寂大几个数量级。
您需要对您选择的摘要算法进行有针对性的攻击,利用已知的弱点。 SHA-1 has been "broken" 在发生有针对性的碰撞方面,但相对而言,大多数其他 SHA-x 实现仍然是安全的。
现在,我选择“billion billion billion”作为一个相当慷慨的估计,你可以在一秒钟内计算出多少摘要。我不知道这是否准确,但 273 个零的结果应该告诉你,即使我偏离了一个数量级 或十 ,你仍然很远那里。
根据this answer from 2012, current computers (back then) could compute 100 million hashes per second of SHA512. If we apply Moore's Law,每 18 个月性能翻一番,我认为这是常态,我们今天可以计算出 1 亿 * 2^(6) [=64] 个哈希值,这是每秒大约 64 亿个哈希值。要达到我们的目标(它后面还有 273 个零),我们在速度量级上还有 10 亿十亿哈希。
即使拥有你能想象到的所有神奇计算能力,你所要求的也是不可能的。如果你拿一个 1 MB 的文件并计算它的 MD5 和 SHA256,你剩下 384 位。我将忽略文件的前 100 个字节,你说你知道。你还剩下超过八百万比特。减去384,还有八百万多比特
也就是说大约有28x106, (~102,400,000) 不同 1 MB 文件全部映射到完全相同 MD5 和 SHA256 签名。即使你可以计算所有这些,也无法确定其中哪个是原始文件。