¿Por qué Git usa SHA-1 , una función hash criptográfica, en lugar de una función hash no criptográfica más rápida?
Pregunta relacionada:
Pregunta de desbordamiento de pila ¿Por qué Git usa SHA-1 como números de versión? pregunta por qué Git usa SHA-1 en lugar de números secuenciales para confirmaciones.
git
hash-function
Praxeolítico
fuente
fuente
Respuestas:
TLDR;
Puede comprobarlo del propio Linus Torvalds, cuando presentó Git a Google en 2007 :
(énfasis mío)
Actualización de diciembre de 2017 con Git 2.16 (Q1 2018): este esfuerzo para admitir un SHA alternativo está en marcha: consulte " ¿Por qué Git no usa SHA más moderno? ".
Mencioné en " ¿Cómo manejaría git una colisión SHA-1 en un blob? " Que podría diseñar un commit con un prefijo SHA1 en particular (aún un esfuerzo extremadamente costoso).
Pero el punto permanece, como Eric Sink menciona en el libro " Git: Cryptographic Hashes " ( Version Control by Example (2011) :
Es más difícil encontrar un buen hash no criptográfico con baja tasa de colisión, a menos que considere una investigación como "Cómo encontrar hashes no criptográficos de vanguardia con programación genética ".
También puede leer " Considere el uso del algoritmo de hash no criptográfico para acelerar el hash ", que menciona, por ejemplo, " xxhash ", un algoritmo de hash no criptográfico extremadamente rápido, que funciona a velocidades cercanas a los límites de RAM.
Las discusiones sobre cambiar el hash en Git no son nuevas:
(Linus Torvalds)
Y debe tener cuidado sobre cómo medir la ganancia de optimización real
(Linus Torvalds)
(por ejemplo a SHA-3, pero eso se aplicaría a cualquier otro hash):
(John Tapsell -
johnflux
)En resumen, cambiar a cualquier hash no es fácil.
Actualización de febrero de 2017: sí, en teoría es posible calcular un SHA1 en colisión: shattered.io
Pero:
Así que no entremos en pánico todavía.
Ver más en " ¿Cómo manejaría Git una colisión SHA-1 en una gota? ".
fuente