Leí sobre que Git usa SHA-1 digest como ID para una revisión. ¿Por qué no usa una versión más moderna de SHA?
git
cryptography
sha
qazwsx
fuente
fuente
Respuestas:
Diciembre de 2017: lo hará. Y Git 2.16 (Q1 2018) es la primera versión para ilustrar e implementar esa intención.
Nota: consulte Git 2.19 a continuación: será SHA-256 .
Git 2.16 propondrá una infraestructura para definir qué función hash se usa en Git y comenzará un esfuerzo para sondear eso a través de varias rutas de código.
Consulte la confirmación c250e02 (28 de noviembre de 2017) de Ramsay Jones (``) .
Consulte commit eb0ccfd , commit 78a6766 , commit f50e766 , commit abade65 (12 de noviembre de 2017) por brian m. carlson (
bk2204
) .(Combinado por Junio C Hamano -
gitster
- en el compromiso 721cc43 , 13 de diciembre de 2017)Actualización de agosto de 2018, para Git 2.19 (Q3 2018), Git parece elegir SHA-256 como NewHash.
Consulte la confirmación 0ed8d8d (4 de agosto de 2018) de Jonathan Nieder (
artagnon
) .Consulte la confirmación 13f5e09 (25 de julio de 2018) de Ævar Arnfjörð Bjarmason (
avar
) .(Combinado por Junio C Hamano -
gitster
- en el compromiso 34f2297 , 20 de agosto de 2018)Puede ver esta transición a SHA 256 en progreso con Git 2.20 (Q4 2018):
Ver cometer 0d7c419 , cometer dda6346 , cometer eccb5a5 , cometer 93eb00f , cometer d8a3a69 , cometer fbd0e37 , cometer f690b6b , cometer 49d1660 , cometer 268babd , cometer fa13080 , cometer 7b5e614 , cometer 58ce21b , cometer 2f0c9e9 , cometer 825544a (15 Oct 2018) por Brian m . carlson (
bk2204
) .Véase el compromiso 6afedba (15 de octubre de 2018) de SZEDER Gábor (
szeder
) .(Fusionada porJunio C Hamano -
gitster
- en el compromiso d829d49 , 30 de octubre de 2018)GIT_SHA1_HEXSZ
se elimina / reemplaza con Git 2.22 (Q2 2019) y confirma d4e568b .Esa transición continúa con Git 2.21 (Q1 2019), que agrega hash sha-256 y lo conecta a través del código para permitir la construcción de Git con el "NewHash".
Ver cometer 4b4e291 , cometer 27dc04c , cometer 13eeedb , cometer c166599 , cometer 37649b7 , cometer a2ce0a7 , cometer 50c817e , cometer 9a3a0ff , cometer 0dab712 , cometer 47edb64 (14 Nov 2018), y comprometerse 2f90b9d , cometer 1ccf07c (22 Oct 2018) por Brian m . carlson (
bk2204
) .(Combinado por Junio C Hamano -
gitster
- en el compromiso 33e4ae9 , 29 de enero de 2019)El esfuerzo de actualización continúa con Git 2.24 (Q4 2019)
Ver cometer aaa95df , comprometerse be8e172 , comprometerse 3f34d70 , comprometerse fc06be3 , comprometerse 69fa337 , comprometerse 3a4d7aa , comprometerse e0cb7cd , comprometerse 8d4d86b , comprometerse f6ca67d , comprometerse dd336a5 , cometen 894c0f6 , comprometerse 4439c7a , comprometerse 95518fa , comprometerse e84f357 , comprometerse fe9fec4 , comprometerse 976ff7e , cometen 703d2d4 , cometer 9d958cc , cometer 7962e04 , cometer fee4930(18 de ago de 2019) de brian m. carlson (
bk2204
) .(Combinado por Junio C Hamano -
gitster
- en el compromiso 676278f , 11 de octubre de 2019)Con Git 2.26 (Q1 2020), los scripts de prueba están listos para el día en que los nombres de los objetos usen SHA-256.
Ver cometer 277eb5a , comprometerse 44b6c05 , comprometerse 7a868c5 , comprometerse 1b8f39f , comprometerse a8c17e3 , comprometerse 8.320.722 , comprometerse 74ad99b , comprometerse ba1be1a , comprometerse cba472d , comprometerse 82d5aeb , comprometerse 3c5e65c , comprometerse 235d3cd , comprometerse 1d86c8f , comprometerse 525a7f1 , comprometerse 7a1bcb2 , comprometerse cb78f4f , cometen 717c939 , confirma 08a9dd8 , confirma 215b60b , confirma 194264c(21 de diciembre de 2019) de brian m. carlson (
bk2204
) .(Combinado por Junio C Hamano -
gitster
- en el compromiso f52ab33 , 05 de febrero de 2020)Ejemplo:
Entonces, en lugar de usar:
Las pruebas están usando
Y
OID_REGEX
proviene de commit bdee9cd (13 de mayo de 2018) de brian m. carlson (bk2204
) .(Combinado por Junio C Hamano -
gitster
- en el compromiso 9472b13 , 30 de mayo de 2018, Git v2.18.0-rc0)Y, todavía para las pruebas:
Ver cometer f303765 , comprometerse edf0424 , comprometerse 5db24dc , cometen d341e08 , comprometerse 88ed241 , comprometerse 48c10cc , comprometerse f7ae8e6 , cometen e70649b , cometen a30f93b , cometen a79eec2 , comprometerse 796d138 , comprometerse 417e45e , comprometerse dfa5f53 , comprometerse f743e8f , cometen 72f936b , comprometerse 5df0f11 , cometen 07877f3 , confirma 6025e89 , confirma 7b1a182 , confirma 94db7e3 ,commit db12505 (07 de febrero de 2020) por brian m. carlson (
bk2204
) .(Combinado por Junio C Hamano -
gitster
- en el compromiso 5af345a , 17 de febrero de 2020)Algunas rutas de código recibieron una instancia de repositorio como parámetro para trabajar en el repositorio, pero pasaron la
the_repository
instancia a sus destinatarios, que se ha limpiado (algo) con Git 2.26 (Q1 2020).Consulte confirmar b98d188 , confirmar 2dcde20 , confirmar 7ad5c44 , confirmar c8123e7 , confirmar 5ec9b8a , confirmar a651946 , confirmar eb999b3 (30 de enero de 2020) por Matheus Tavares (
matheustavares
) .(Combinado por Junio C Hamano -
gitster
- en el compromiso 78e67cd , 14 de febrero de 2020)Residencia en:
fuente
git rev-parse
ahora puede imprimir qué hash se utilizará: stackoverflow.com/a/58862319/6309 . Y el árbol vacío tiene una nueva identificación SHA2: stackoverflow.com/a/9766506/6309ACTUALIZACIÓN : La pregunta anterior y esta respuesta son de 2015. Desde entonces, Google ha anunciado la primera colisión SHA-1: https://security.googleblog.com/2017/02/announcing-first-sha1-collision.html
Obviamente, solo puedo especular desde afuera mirando hacia adentro sobre por qué Git continúa usando SHA-1, pero estas pueden ser algunas de las razones:
unsigned char[20]
búferes codificados por todas partes ;-), es mucho más fácil programar para agilidad criptográfica al principio, en lugar de actualizarlo más tarde.Algunos enlaces:
Mi opinión personal sería que, si bien los ataques prácticos probablemente están fuera de su alcance, e incluso cuando ocurren, las personas probablemente inicialmente los mitigarán con otros medios que no sean cambiar el algoritmo hash en sí, que si a usted le importa la seguridad, debería estar errando. por el lado de la precaución con sus elecciones de algoritmos, y revisando continuamente hacia arriba sus fortalezas de seguridad, porque las capacidades de los atacantes también van solo en una dirección, por lo que no sería prudente tomar a Git como un modelo a seguir, especialmente como su propósito en el uso de SHA-1 no pretende ser seguridad criptográfica.
fuente
Esta es una discusión sobre la urgencia de migrar desde SHA1 para Mercurial, pero también se aplica a Git: https://www.mercurial-scm.org/wiki/mpm/SHA1
En resumen: si no eres extremadamente diligente hoy, tienes vulnerabilidades mucho peores que sha1. Pero a pesar de eso, Mercurial comenzó hace más de 10 años a prepararse para migrar desde sha1.
Si git no migra de sha1 antes que Mercurial, siempre puede agregar otro nivel de seguridad manteniendo un espejo Mercurial local con hg-git .
fuente
Ahora hay un plan de transición a un hash más fuerte, por lo que parece que en el futuro utilizará un hash más moderno que SHA-1. Del plan de transición actual :
fuente