ccache es una herramienta popular para acelerar la recompilación con GCC y otros compiladores. Funciona almacenando en caché las compilaciones anteriores y detectando cuándo se vuelve a realizar la misma compilación. La detección se realiza mediante hashes MD4.
Tengo curiosidad por saber (a) por qué una herramienta de almacenamiento en caché de este tipo usaría cualquier función hash criptográfica , y (b) de todas las funciones de hash criptográficas disponibles, por qué se usaría MD4 en particular.
Con respecto a (a), ¿cuál es el beneficio de usar una función criptográfica de hash, en lugar de alguna función de hash no diseñada teniendo en cuenta la criptografía? Por ejemplo, funciones hash integradas de Java no parecen corresponder a los conocidos utilizados (o anteriormente utilizados) en la criptografía. ¿Por qué no usar una de estas funciones hash no criptográficas en su lugar? Dadas las debilidades conocidas de MD4, no puedo imaginar que sea elegido por un deseo de mayor seguridad.
Con respecto a (b), suponiendo que haya alguna base para usar un hash criptográfico, ¿por qué MD4 en particular? Entiendo que no tendría sentido utilizar una función criptográfica moderna de hash, ya que generalmente son computacionalmente intensivas, lo que anula el propósito de una herramienta de almacenamiento en caché de acelerar los tiempos de acceso. Por lo tanto, MD4 debe usarse al menos en parte para la velocidad. Pero, ¿es absolutamente la función criptográfica hash más rápida , o hay otras que son más rápidas? Si no es el más rápido, ¿qué otras ventajas tendría MD4 (sobre, por ejemplo, MD5) para usar en el almacenamiento en caché?