Freestart collisions for SHA-1
sites.google.com
sites.google.com
From the start it has listed the suggestion to set up >SHA256 keys.
If you want to test your site for a SHA 1 cert, you can try my other side project: https://ssldecoder.org/ - you can also use the SSL labs test but mine is faster for just testing certificate type. (And it's open source, so you can use it internally as well).
Mozilla also has a good wiki page for SSL recommended settings: https://wiki.mozilla.org/Security/Server_Side_TLS
It doesn't seem so. They still require that the SHA-1 is given different initialization vectors (if you look closely you'll notice IV1 and IV2 are different) so I'm thinking this is what freestart means. Git objects tend to have a stricter format so injecting an initial state may be a bit further out of reach.
What it does mean is that the triviality of a full collision is greatly increased. I'd not trust arbitrary git DAGs anyway... I'd double check but I bet you could forge a pack with some objects that are given invalid content addresses. An integrity check would pick it up but I would also expect most git code to not check that on every operation.
> Even though freestart collisions do not directly lead to actual collisions for SHA-1, in our case, the experimental data we obtained in the process enable significantly more accurate projections on the real-world cost of actual collisions for SHA-1, compared to previous projections. Concretely, we estimate the SHA-1 collision cost today (i.e., Fall 2015) between 75K$ and 120K$ renting Amazon EC2 cloud computing over a few months.
So if I understand their estimates correctly, it would cost around $100,000 and several months to create your circular data structure. (Or, somewhat less trivially, compromise Git's SHA1 integrity promise in a still-probably-useless way.)
Exploiting the result will involve some social engineering. Starting with getting one of the colliding objects accepted into the repo you want to attack.
At this point, it's cheaper to generate a SHA1 collision than it will be to fix git not to use SHA1. Which is deeply worrying.
Basic hygiene at this point probably includes only merging git commits from others that are gpg signed (as well as gpg signing as many commits yourself as you can without going mad at the password prompts). Unfortunately, tooling doesn't make this easy, and some things like git format-patch are actively unhelpful by not preserving gpg signatures.
Edit: this is only true of tag signing - with commit signing you GPG-sign the whole commit object.
Edit: Actually, looking at the code (do_sign_commit), git appears to gpg sign the whole commit object.
I think it's in signed tags where git only signs the sha1 being tagged.
So you're correct that GPG-signing commits (but not tags) prevents collisions in commit objects. The problem though is that a commit ultimately contains a SHA-1 hash of a tree object, so now the concern is someone generating colliding tree objects.
Edit: fortunately, the format of tree objects looks pretty rigid. I feel somewhat reassured, but only somewhat.
There are different attack scenarios for each attack type, one isn't strictly a subset of another.
The paper given here describes a collision attack, so they chose both messages that result in the same hash. Further, they also generated different IV values for each SHA1 algorithm, while in practice the IV value is fixed. This is what "freestart" means.
I found this useful reference:
http://cstheory.stackexchange.com/questions/585/what-is-the-...
I hope this answers your question.
I assume that the second problem would be harder to solve - but I'm not sure by what order of magnitude. If it's the former, what are the practical applications of the attack?
https://en.wikipedia.org/wiki/Cryptographic_hash_function#Pr...
The two messages from OP have many bytes in common. I would expect a hashing function like SHA-1 to give wildly different outputs given similar inputs due to the avalanche effect.
SHA-1 uses a Merkle-Damgard construction, which means the input is split into fixed-size blocks and the output from one block becomes the IV for the next. This is because SHA-1 operates on a fixed-size, so if you have more than 1 block of data, it's chained together like this:
char *SHA1(char *IV, char *block);
Digest = SHA1(SHA1(SHA1(StartIV, block1), block2), block3);
A freestart collision is a collision if you can choose the IV. That's not much use, because we don't know how to find a block (or chain of blocks) that produce the IV we want.Suppose I had the magical ability to find a special value that would equal the IV listed in the link (i.e. 506b0178ff6d1890....) when that special value was applied to SHA-1. I could then use the results from this research to compute a collision using input that is prefixed with that special value?
SHA1(P1 + padding(P1) + M1) = SHA1(P2 + padding(P2) + M2) = f020486f071bf11053547a86f4a7153b3c950f4b
where padding(M) is the padding appended to message M as the first step of computing SHA1.(edit: clarified padding)
http://crypto.stackexchange.com/questions/29695/what-is-a-fr...
67452301EFCDAB8998BADCFE10325476C3D2E1F0
The function of SHA1 is to transform this ur-hash into the hash of a specific stream of data.In a freestart collision, attackers start from something other than the initialization vector. Think of it as if they're starting from the hash of some piece of data and then hashing more data into it (that's essentially what they'd be doing).
Also: I think it's pretty surprising to generalists (it certainly was to me!) that the SHA1 hash is literally the transformation of the IV, and that you can pick up the results of a SHA1 hash and keep hashing with it. If you grok this, length extension attacks are obvious, as is the benefit of the truncated SHA-2 variants.
I suppose the next steps are to find two inputs that produce favourable IV's, then repeat this process for those, and that seems like it's getting really close. Stevens actually already has the best near-collision in non-reduced SHA-1 I know about from this paper:
http://marc-stevens.nl/research/papers/EC13-S.pdf
I made a quick visualization of it here, it looks pretty cool:
https://lock.cmpxchg8b.com/shatter/visualize.html?stevens=1
I also added the Shappening vectors:
https://lock.cmpxchg8b.com/shatter/visualize.html?shappening...
It's funny that they actually collide around R74, then he has to diverge again so that when you add the IV (part of the process of creating the IV for the next block) they collide.
This was suggested by John Kelsey way back in 2001 for SHA-2, but never took off: http://www.cs.utsa.edu/~wagner/CS4363/SHS/dfips-180-2-commen...