lin*_*s77 11 hash checksum file corruption data-integrity
什么是用于检测损坏的文件完整性检查(校验和)的最合适的哈希函数?
我需要考虑以下几点:
广泛的文件大小(1 kb到10GB +)
许多不同的文件类型
大量文件(+/- 100 TB和不断增长)
较大的文件是否需要更高的摘要大小(SHA-1与SHA 512)?
我看到SHA系列被称为加密哈希函数.它们是否不适合"通用"用途,例如检测文件损坏?像MD5或Tiger这样的东西会更好吗?
如果恶意篡改也是一个问题,你的答案会改变最合适的哈希函数吗?
外部库不是一个选项,只有Win XP SP3 +上可用.
当然,性能也值得关注.
(请原谅我的术语,如果不正确,我对这个问题的了解非常有限).
Tho*_*nin 16
任何加密哈希函数,即使是破坏的函数,都可以用于检测意外损坏.给定的散列函数可以仅针对某些限制的输入定义,但是对于限制为至少2 64位的所有标准散列函数,即大约2百万兆兆字节.那太大了.
文件类型没有任何发生率.无论这些位代表什么,散列函数都在位(或字节)序列上运行.
散列函数性能不太可能成为问题.即使是"慢"散列函数(例如SHA-256)在典型的PC上运行速度也比硬盘快:读取文件将成为瓶颈,而不是散列(2.4 GHz PC可以使用SHA-512以速度散列数据)接近200 MB/s,使用单核).如果散列函数性能是一个问题,那么你的CPU非常虚弱,或者你的磁盘是快速SSD(如果你有100 TB的快速SSD,那么我有点嫉妒).在这种情况下,一些散列函数比其他散列函数快一些,MD5是"快速"函数之一(但是MD4更快,并且它很简单,其代码可以包含在任何应用程序中而不会有太多麻烦).
如果恶意篡改是一个问题,那么这就成了一个安全问题,而且更加复杂.首先,您将使用加密完整的哈希函数之一,因此SHA-256或SHA-512,而不是MD4,MD5或SHA-1(MD4,MD5和SHA-1中的弱点可能不适用于特定的情况,但这是一个微妙的问题,最好是安全地玩).然后,根据攻击者是否可以访问哈希结果,散列可能会或可能不足.可能,您可能需要使用MAC,这可以被视为一种键控哈希.HMAC是一种从散列函数构建MAC的标准方法.还有其他非基于哈希的MAC.此外,MAC使用秘密的"对称"密钥,如果您希望某些人能够在不能执行静默更改的情况下验证文件完整性,则这是不合适的.在这种情况下,您将不得不求助于数字签名.简而言之,在安全环境中,您需要使用明确定义的攻击模型进行全面的安全性分析.