@@ -28,11 +28,30 @@ advantages:
28
28
address stored content.
29
29
30
30
Over time some flaws in SHA-1 have been discovered by security
31
- researchers. https://shattered.io demonstrated a practical SHA-1 hash
32
- collision. As a result, SHA-1 cannot be considered cryptographically
33
- secure any more. This impacts the communication of hash values because
34
- we cannot trust that a given hash value represents the known good
35
- version of content that the speaker intended.
31
+ researchers. On 23 February 2017 the SHAttered attack
32
+ (https://shattered.io) demonstrated a practical SHA-1 hash collision.
33
+
34
+ Git v2.13.0 and later subsequently moved to a hardened SHA-1
35
+ implementation by default, which isn't vulnerable to the SHAttered
36
+ attack.
37
+
38
+ Thus Git has in effect already migrated to a new hash that isn't SHA-1
39
+ and doesn't share its vulnerabilities, its new hash function just
40
+ happens to produce exactly the same output for all known inputs,
41
+ except two PDFs published by the SHAttered researchers, and the new
42
+ implementation (written by those researchers) claims to detect future
43
+ cryptanalytic collision attacks.
44
+
45
+ Regardless, it's considered prudent to move past any variant of SHA-1
46
+ to a new hash. There's no guarantee that future attacks on SHA-1 won't
47
+ be published in the future, and those attacks may not have viable
48
+ mitigations.
49
+
50
+ If SHA-1 and its variants were to be truly broken, Git's hash function
51
+ could not be considered cryptographically secure any more. This would
52
+ impact the communication of hash values because we could not trust
53
+ that a given hash value represented the known good version of content
54
+ that the speaker intended.
36
55
37
56
SHA-1 still possesses the other properties such as fast object lookup
38
57
and safe error checking, but other hash functions are equally suitable
@@ -116,10 +135,15 @@ Documentation/technical/repository-version.txt) with extensions
116
135
objectFormat = newhash
117
136
compatObjectFormat = sha1
118
137
119
- Specifying a repository format extension ensures that versions of Git
120
- not aware of NewHash do not try to operate on these repositories,
121
- instead producing an error message:
138
+ The combination of setting `core.repositoryFormatVersion=1` and
139
+ populating `extensions.*` ensures that all versions of Git later than
140
+ `v0.99.9l` will die instead of trying to operate on the NewHash
141
+ repository, instead producing an error message.
122
142
143
+ # Between v0.99.9l and v2.7.0
144
+ $ git status
145
+ fatal: Expected git repo version <= 0, found 1
146
+ # After v2.7.0
123
147
$ git status
124
148
fatal: unknown repository extensions found:
125
149
objectformat
0 commit comments