aide作者提供了不止一种哈希算法来进行校验和,这是为什么呢?
不是一个,即sha512足以确定文件更改吗?我相信这些算法都在数学领域得到了证明,在这里应该不是问题,我错了吗?
aide作者提供了不止一种哈希算法来进行校验和,这是为什么呢?
不是一个,即sha512足以确定文件更改吗?我相信这些算法都在数学领域得到了证明,在这里应该不是问题,我错了吗?
几乎没有理由同时使用多个哈希。没有针对 SHA-2 的已知冲突。理论上同时使用多个可以防止对哈希函数的攻击,但我认为这对 AIDE 来说不是一个大问题。
但允许选择可能是有用的。当前的默认设置可能会在某个时候被破坏。一旦发生这种情况,在配置文件中切换哈希比推出新版本的软件更容易。
哈希也有不同的性能特征。例如,SHA-256 在 32 位系统上比 SHA-512 快,但在 64 位系统上慢。因此,您可能需要选择与您的 CPU 架构相匹配的那个。
或者,如果您需要高性能(例如,您使用 SSD RAID),您可以使用未经 NIST 批准的更快的哈希值。
要在@CodesInChaos 的好答案上添加一些信息:
建议同时使用多个散列作为应对散列函数未来弱点的一种方法。例如,您使用 MD5和SHA-1 进行哈希处理,这样即使其中一个坏了(不管哪个坏了),您的系统也能保持健壮。这相当于定义一个新的散列函数(我们称之为 SHAMD-51),它提供SHA-1 和 MD5 分别在输入数据上产生的连接作为输出。
很容易看出,串联将为您提供一个至少与两者中最强的一样抗碰撞的函数。不幸的是,对原像的抵抗力将更接近于这两种功能中最弱的一种。一般而言,连接不是构建散列函数的好方法:考虑到您的计算工作量和必须应对的输出大小,您不会得到您的钱,即没有您可以假装的安全性。有关更多分析和指示,请参阅此答案。
提供多个哈希函数之间的选择要好得多,因为它允许您选择一个与您的架构相匹配的函数,以获得更好的性能。请注意,无论如何散列往往很快;当从磁盘散列文件或从网络中散列数据时,散列函数很少成为瓶颈。对于所有性能问题,首先要做的是测量:除非可靠地检测和量化,否则没有性能问题。
当您必须遵守不灵活的规定(这可能要求使用带有大写字母的“已批准”函数)时,散列函数的选择也很巧妙。
在实践中,许多可以一起使用多个哈希函数的系统这样做是因为一些不合理的信念,即密码学就像牧场酱,只要你添加足够多的东西,就可以让最糟糕的道路杀伤力变得可食用。
注意:没有数学证明任何给定的散列函数是安全的。实际上,没有数学证明可以存在像安全散列函数这样的东西。我们拥有的最好的是哈希函数,它在“野外”部署了很长时间,并且在成群的愤怒密码学家的肆意攻击中幸存下来。SHA-2 函数(SHA-256、SHA-512)就是这样的函数。