J'ai lu que Git utilise le condensé SHA-1 comme ID pour une révision. Pourquoi n'utilise-t-il pas une version plus moderne de SHA?
git
cryptography
sha
qazwsx
la source
la source
Réponses:
Dec.2017: Ça le fera. Et Git 2.16 (Q1 2018) est la première version à illustrer et implémenter cette intention.
Remarque: voir Git 2.19 ci-dessous: ce sera SHA-256 .
Git 2.16 proposera une infrastructure pour définir quelle fonction de hachage est utilisée dans Git, et commencera un effort pour l'exploiter dans divers codepaths.
Voir commit c250e02 (28 novembre 2017) par Ramsay Jones (``) .
Voir commit eb0ccfd , commit 78a6766 , commit f50e766 , commit abade65 (12 novembre 2017) par brian m. carlson (
bk2204
) .(Fusionné par Junio C Hamano -
gitster
- in commit 721cc43 , 13 déc 2017)Mise à jour d'août 2018, pour Git 2.19 (Q3 2018), Git semble choisir SHA-256 comme NewHash.
Voir commit 0ed8d8d (04 août 2018) par Jonathan Nieder (
artagnon
) .Voir commit 13f5e09 (25 juillet 2018) par Ævar Arnfjörð Bjarmason (
avar
) .(Fusionné par Junio C Hamano -
gitster
- in commit 34f2297 , 20 août 2018)Vous pouvez voir cette transition vers SHA 256 en cours avec Git 2.20 (Q4 2018):
Voir commettre 0d7c419 , engager dda6346 , engager eccb5a5 , engager 93eb00f , engager d8a3a69 , engager fbd0e37 , engager f690b6b , engager 49d1660 , engager 268babd , engager fa13080 , engager 7b5e614 , engager 58ce21b , engager 2f0c9e9 , engager 825544a (15 octobre 2018) par brian m . carlson (
bk2204
) .Voir commit 6afedba (15 octobre 2018) par SZEDER Gábor (
szeder
) .(Fusionné parJunio C Hamano -
gitster
- dans commit d829d49 , 30 octobre 2018)GIT_SHA1_HEXSZ
est en outre supprimé / remplacé par Git 2.22 (Q2 2019) et commit d4e568b .Cette transition se poursuit avec Git 2.21 (Q1 2019), qui ajoute le hachage sha-256 et le branche via le code pour permettre la construction de Git avec le "NewHash".
Voir engager 4b4e291 , engager 27dc04c , engager 13eeedb , engager c166599 , engager 37649b7 , engager a2ce0a7 , engager 50c817e , engager 9a3a0ff , engager 0dab712 , engager 47edb64 (14 novembre 2018), et engager 2f90b9d , engager 1ccf07c (22 octobre 2018) par Brian m . carlson (
bk2204
) .(Fusionné par Junio C Hamano -
gitster
- dans commit 33e4ae9 , 29 janvier 2019)L'effort de mise à niveau se poursuit avec Git 2.24 (T4 2019)
Voir commit aaa95df , commit be8e172 , commit 3f34d70 , commit fc06be3 , commit 69fa337 , commit 3a4d7aa , commit e0cb7cd , commit 8d4d86b , commit f6ca67d , commit dd336a5 , commit 894c0f6 , commit 4439c7a , commit e0cb7cd , commit 8d4d86b , commit f6ca67d , commit dd336a5 , commit 894c0f6 , commit 4439c7a , commit e0cb7cd , commit 8d4d86b , commit f6ca67d , commit dd336a5 , commit 894c0f6 , commit 4439c7a , commit e0cb7cd , commit 8d4d86b , commit f6ca67d , commit dd336a5 , commit 894c0f6 , commit 4439c7a , commit 95518fa , commite 703d2d4 , validation 9d958cc , validation 7962e04 , frais de validation 4930(18 août 2019) par brian m. carlson (
bk2204
) .(Fusionné par Junio C Hamano -
gitster
- dans commit 676278f , 11 octobre 2019)Avec Git 2.26 (Q1 2020), les scripts de test sont prêts pour le jour où les noms d'objets utiliseront SHA-256.
Voir commettre 277eb5a , engager 44b6c05 , engager 7a868c5 , engager 1b8f39f , engager a8c17e3 , engager 8.320.722 , engager 74ad99b , engager ba1be1a , engager cba472d , engager 82d5aeb , engager 3c5e65c , engager 235d3cd , engager 1d86c8f , engager 525a7f1 , engager 7a1bcb2 , engager cb78f4f , commit 717c939 , commit 08a9dd8 , commit 215b60b , commit 194264c(21 décembre 2019) par brian m. carlson (
bk2204
) .(Fusionné par Junio C Hamano -
gitster
- in commit f52ab33 , 05 fév 2020)Exemple:
Donc, au lieu d'utiliser:
Les tests utilisent
Et
OID_REGEX
vient du commit bdee9cd (13 mai 2018) par brian m. carlson (bk2204
) .(Fusionné par Junio C Hamano -
gitster
- dans commit 9472b13 , 30 mai 2018, Git v2.18.0-rc0)Et, toujours pour les tests:
Voir commettre f303765 , engager edf0424 , engager 5db24dc , engager d341e08 , engager 88ed241 , engager 48c10cc , engager f7ae8e6 , commettre e70649b , commettre a30f93b , commettre a79eec2 , engager 796d138 , engager 417e45e , engager dfa5f53 , engager f743e8f , engager 72f936b , engager 5df0f11 , commit 07877f3 , commit 6025e89 , commit 7b1a182 , commit 94db7e3 ,commit db12505 (07 févr.2020 ) par brian m. carlson (
bk2204
) .(Fusionné par Junio C Hamano -
gitster
- in commit 5af345a , 17 fév 2020)Certains codepaths ont reçu une instance de référentiel en tant que paramètre pour fonctionner dans le référentiel, mais ont passé l'
the_repository
instance à ses appelées, qui a été nettoyée (un peu) avec Git 2.26 (Q1 2020).Voir commit b98d188 , commit 2dcde20 , commit 7ad5c44 , commit c8123e7 , commit 5ec9b8a , commit a651946 , commit eb999b3 (30 janvier 2020) par Matheus Tavares (
matheustavares
) .(Fusionné par Junio C Hamano -
gitster
- dans commit 78e67cd , 14 février 2020)Basé sur:
la source
git rev-parse
est maintenant capable d'imprimer quel hachage sera utilisé: stackoverflow.com/a/58862319/6309 . Et l'arbre vide a un nouvel identifiant SHA2: stackoverflow.com/a/9766506/6309MISE À JOUR : La question ci-dessus et cette réponse datent de 2015. Depuis lors, Google a annoncé la première collision SHA-1: https://security.googleblog.com/2017/02/announcing-first-sha1-collision.html
Évidemment, je ne peux que spéculer de l'extérieur en regardant pourquoi Git continue d'utiliser SHA-1, mais cela peut être l'une des raisons:
unsigned char[20]
tampons codés en dur partout ;-), il est beaucoup plus facile de programmer l'agilité cryptographique au début, plutôt que de le moderniser plus tard.Quelques liens:
Mon point de vue personnel serait que, même si les attaques pratiques sont probablement un certain temps, et même lorsqu'elles se produisent, les gens les atténueront probablement au départ avec des moyens autres que de changer l'algorithme de hachage lui-même, que si vous vous souciez de la sécurité, vous devriez vous tromper. du côté de la prudence dans vos choix d'algorithmes, et en révisant continuellement à la hausse vos forces de sécurité, car les capacités des attaquants ne vont également que dans une direction, il serait donc imprudent de prendre Git comme modèle, d'autant plus que son objectif dans l'utilisation de SHA-1 ne prétend pas être une sécurité cryptographique.
la source
Ceci est une discussion sur l'urgence de migrer loin de SHA1 pour Mercurial, mais cela s'applique également à Git: https://www.mercurial-scm.org/wiki/mpm/SHA1
En bref: si vous n'êtes pas extrêmement intelligent aujourd'hui, vous avez des vulnérabilités bien pires que sha1. Mais malgré cela, Mercurial a commencé il y a plus de 10 ans à se préparer à migrer loin de sha1.
Si git ne migre pas de sha1 avant Mercurial, vous pouvez toujours ajouter un autre niveau de sécurité en gardant un miroir Mercurial local avec hg-git .
la source
Il existe maintenant un plan de transition vers un hachage plus fort, il semble donc qu'à l'avenir, il utilisera un hachage plus moderne que SHA-1. À partir du plan de transition actuel :
la source