On 8/1/2014 11:39 AM, Marko Rauhamaa wrote:
Chris Angelico <ros...@gmail.com>:

but hash(x) == hash(y) does NOT imply that x == y.

Hello, pigeonhole principle :) If this were false - that is, if equal
hashes DID imply equal objects - it would be necessary to completely
encode an object's state in its hash, and hashes would be impossibly
large. This would, in fact, destroy their value completely.

Well, modern computing assumes precisely:

    hash(x) == hash(y) => x == y

Assuming that a false statement is true does not make it true, and can and has gotten 'computing' into trouble.

That principle is at play with strong authentication (HTTPS et al),
version control (git et al),

The principle for these applications is

stronghash(x) == stronghash(y) => x == y with probability 1 (or indistinguishable from 1).

For mercurial, with no treat model, a 160 bit hash is used. Internet applications need more bits and carefully vetted algorithms to hopefully make the actual principle true.

--
Terry Jan Reedy

--
https://mail.python.org/mailman/listinfo/python-list

Reply via email to