Recentemente ho trovato un post dal 29-04-2013 in un gruppo di discussione BSD presso
http://openbsd-archive.7691.n7.nabble.com/Why-does-OpenBSD-use-CVS-td226952.html
dove il poster afferma:
Ho incontrato una collisione di hash una volta, usando git rebase.
Sfortunatamente, non fornisce alcuna prova per la sua richiesta. Ma forse ti piacerebbe provare a contattarlo e chiedergli di questo presunto incidente.
Ma a un livello più generale, a causa dell'attacco di compleanno la possibilità di una collisione di hash SHA-1 è 1 in pow (2, 80).
Questo suona molto ed è sicuramente molto più del numero totale di versioni di singoli file presenti in tutti i repository Git del mondo messi insieme.
Tuttavia, questo vale solo per le versioni che rimangono effettivamente nella cronologia delle versioni.
Se uno sviluppatore si basa molto sul rebasing, ogni volta che viene eseguito un rebase per un ramo, tutti i commit in tutte le versioni di quel ramo (o parte del ramo rinnovata) ottengono nuovi hash. Lo stesso vale per ogni file modificato con "git filter-branch". Pertanto, "rebase" e "filtro-ramo" potrebbero essere grandi moltiplicatori per il numero di hash generati nel tempo, anche se non tutti vengono effettivamente mantenuti: frequentemente, dopo il rebasing (specialmente allo scopo di "ripulire" un ramo ), il ramo originale viene gettato via.
Ma se la collisione si verifica durante il rebase o il ramo del filtro, può comunque avere effetti negativi.
Un'altra cosa sarebbe stimare il numero totale di entità con hash nei repository git e vedere quanto sono lontani da pow (2, 80).
Diciamo che abbiamo circa 8 miliardi di persone, e tutti eseguiranno git e manterrebbero la versione dei propri contenuti in 100 repository git a persona. Supponiamo inoltre che il repository medio abbia 100 commit e 10 file e che solo uno di questi file cambi per commit.
Per ogni revisione abbiamo almeno un hash per l'oggetto tree e l'oggetto commit stesso. Insieme al file modificato abbiamo 3 hash per revisione e quindi 300 hash per repository.
Per 100 repository di 8 miliardi di persone questo dà pow (2, 47) che è ancora lontano da pow (2, 80).
Tuttavia, ciò non include il presunto effetto moltiplicativo di cui sopra, perché non sono sicuro di come includerlo in questa stima. Forse potrebbe aumentare notevolmente le possibilità di una collisione. Soprattutto se repository molto grandi che hanno una lunga cronologia di commit (come il kernel Linux) vengono ripassati da molte persone per piccoli cambiamenti, che tuttavia creano hash diversi per tutti i commit interessati.
I've been informed by the git Gods that the chances of a SHA1 collision is the same as the Earth being sucked up into the black hole created by the CERN accelerator. If this is indeed true, then there's no need for that extra memcmp.
, fonte: lwn.net/Articles/307281