Re: SHA1 collisions found
- From
ankostis <ankostis@gmail.com>
- Date
- Feb 25, 2017, 00:31 UTC
- Message-ID
- <CA+dhYEVwLGNZh-hbcJm+kMR4W45VbwvSVY+7YKt0V9jg_b_M4g@mail.gmail.com>
- In-Reply-To
- <xmqqh93j1g9n.fsf@gitster.mtv.corp.google.com>
On 24 February 2017 at 21:32, Junio C Hamano <gitster@pobox.com> wrote:
Show 9 quoted lines
> ankostis <ankostis@gmail.com> writes: > >> Let's assume that git is retroffited to always support the "default" >> SHA-3, but support additionally more hash-funcs. >> If in the future SHA-3 also gets defeated, it would be highly unlikely >> that the same math would also break e.g. Blake. >> So certain high-profile repos might choose for extra security 2 or more hashes. > > I think you are conflating two unrelated things.
I believe the two distinct things you refer to below are these:
a. storing objects in filesystem and accessing them
by name (e.g. from cmdline), andb. cross-referencing inside the objects (trees, tags, notes),
correct?
If not, then please ignore my answers, below.
> * How are these "2 or more hashes" actually used? Are you going to > add three "parent " line to a commit with just one parent, each > line storing the different hashes?
Yes, in all places where references are involved (tags, notes). Based on what what the git-hackers have written so far, this might be doable.
To ensure integrity in the case of crypto-failures, all objects must cross-reference each other with multiple hashes. Of course this extra security would stop as soon as you reach "old" history (unless you re-write it).
Show 5 quoted lines
> How will such a commit object > be named---does it have three names and do you plan to have three > copies of .git/refs/heads/master somehow, each of which have > SHA-1, SHA-3 and Blake, and let any one hash to identify the > object?
Yes, based on Jason Cooper's idea, above, objects would be stored under all names in the filesystem using hard links (although this might not work nice on Windows).
Show 9 quoted lines
> I suspect you are not going to do so; instead, you would use a > very long string that is a concatenation of these three hashes as > if it is an output from a single hash function that produces a > long result. > > So I think the most natural way to do the "2 or more for extra > security" is to allow us to use a very long hash. It does not > help to allow an object to be referred to with any of these 2 or > more hashes at the same time.
If hard-linking all names is doable, then most restrictions above are gone, correct?
Show 7 quoted lines
> * If employing 2 or more hashes by combining into one may enhance > the security, that is wonderful. But we want to discourage > people from inventing their own combinations left and right and > end up fragmenting the world. If a project that begins with > SHA-1 only naming is forked to two (or more) and each fork uses > different hashes, merging them back will become harder than > necessary unless you support all these hashes forks used.
Agree on discouraging people's inventions.
That is why I believe that some HASH (e.g. SHA-3) must be the blessed one. All git >= 3.x.x must support at least this one (for naming and cross-referencing between objects).
Show 5 quoted lines
> Having said all that, the way to figure out the hash used in the way > we spell the object name may not be the best place to discourage > people from using random hashes of their choice. But I think we > want to avoid doing something that would actively encourage > fragmentation.
I guess the "blessed SHA-3 will discourage people using the other names., untill the next crypto-crack.