什么是文件的完整性检查(校验和)检测损坏的最合适的散列函数?

我需要考虑以下几点:

宽范围的文件大小(1 kb至10GB +),点击 许多不同的文件类型的点击 文件的大集合(+/- 100 TB和生长)

做较大的文件需要更高的消化尺寸(SHA-1对SHA 512)?

我看到,SHA-家族如加密散列函数参照。难道他们不适合的“通用”使用如检测文件损坏?会不会像MD5或老虎会更好?

如果恶意篡改也是一个问题,将你的答案改变w.r.t最合适的散列函数?

外部库是不是一种选择,在Win XP SP3 +仅最新可用的。

自然地表现也值得关注。

(请原谅我的术语,如果它是不正确,我对这个问题的知识是非常有限的)。

有帮助吗?

解决方案

任何密码散列函数,甚至折断一个,将用于检测意外损坏精细。一个给定的散列函数可以仅针对输入到一些限制来限定,但对于所有的标准散列函数,其限制是至少2 64 位,即约2个百万TB的。这是相当大的。

文件类型没有发生任何。散列函数在比特(或字节),无论什么那些比特表示的顺序进行操作。

Hash函数性能不太可能是一个问题。即使是“慢”的散列函数(例如SHA-256)将运行一个典型的PC比硬盘上快:读取文件将成为瓶颈,而不是哈希处理(2.4 GHz的PC可以散列与SHA-512的速度数据接近200 MB /秒,使用单核)。如果哈希函数的性能是一个问题,那么无论你的CPU是非常微弱的,或者你的磁盘速度快的SSD(如果你有100 TB高速SSD的话,我也有点嫉妒)。在这种情况下,一些散列函数稍快外,MD5存在的“快”的功能之一(但 MD4 是更快,并且它是足够简单,它的代码可被包括在没有什么麻烦任何应用程序)。

如果恶意篡改是一个问题,那么这将成为一个安全问题,这是比较复杂的。首先,你会喜欢使用加密不间断的散列函数之一,因此,SHA-256和SHA-512,不MD4,MD5或SHA-1(弱点MD4,MD5和SHA-1的发现可能不适用于特定的的情况,但是这是一个微妙的问题,也是更好地发挥安全)。然后,散列可能会或可能不会是足够的,这取决于攻击者是否有权访问哈希结果。可能的话,你可能需要使用 MAC ,这可以被看作是一种加密哈希的。 HMAC 是构建MAC出来的哈希函数的的标准方法。还有其他非基于哈希MAC。此外,MAC使用一个秘密的“对称”键,这是不,如果你想一些人能够验证文件完整性,而不能够进行无声的变化为宜;在这种情况下,你将不得不求助于数字签名。简言之,在安全情况下,你需要一个明确的攻击模式进行彻底安全分析。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top