ccache是一种流行的工具,用于加速使用 GCC 和其他编译器进行重新编译。它通过缓存以前的编译并检测何时再次完成相同的编译来工作。检测是使用 MD4 哈希完成的。
我很好奇(a)为什么这样的缓存工具会使用任何加密散列函数,以及(b)在所有可用的加密散列函数中,为什么要特别使用 MD4。
关于(a),使用加密哈希函数有什么好处,而不是一些没有考虑加密设计的哈希函数?例如,Java 的内置散列函数似乎与密码学中使用(或以前使用)的已知散列函数不对应。为什么不使用这些非加密哈希函数之一呢?鉴于 MD4 的已知弱点,我无法想象选择它是出于对更高安全性的渴望。
关于(b),假设使用加密哈希有一些基础,为什么特别是 MD4?我知道使用现代加密哈希函数是没有意义的,因为它们通常是计算密集型的,这违背了缓存工具加快访问时间的目的。因此,必须至少部分使用 MD4 以提高速度。但它绝对是最快的加密哈希函数,还是有其他更快的?如果它不是最快的,MD4 在缓存中还有哪些其他优势(例如,超过 MD5)?