Дают ли криптографические хеши действительно уникальные результаты? - PullRequest
8 голосов
/ 17 июня 2010

Мне было интересно, возвращают ли md5, sha1 и другие уникальные значения.

Например, sha1() для test возвращает a94a8fe5ccb19ba61c4c0873d391e987982fbbd3 длиной 40 символов. Таким образом, sha1 для строк больше 40 символов должен быть одинаковым (конечно, он зашифрован, потому что данный ввод может содержать пробелы и специальные символы и т. Д.).

Из-за этого, когда мы храним пароли пользователей, они могут вводить либо свой оригинальный пароль, либо какой-нибудь сверхдлинный, который никто не знает.

Правильно ли это, или эти алгоритмы хеширования дают действительно уникальные результаты - я совершенно уверен, что это вряд ли возможно.

Ответы [ 5 ]

13 голосов
/ 17 июня 2010

(Примечание: вы спрашиваете о хэшировании функций, а не шифровании ).

Для них невозможно быть уникальными по определению. Они принимают большой вклад и уменьшают его размер. Следовательно, из этого следует, что они не могут представлять всю информацию, которую они сжали. Так что нет, они не дают «действительно уникальных» результатов.

Что они делают , тем не менее, являются «устойчивыми к столкновениям» результатами. То есть они пытаются показать, что два слегка отличающихся друг от друга данных дают существенно различный хэш.

10 голосов
/ 17 июня 2010

Алгоритмы хеширования (на что вы ссылаетесь) не дают уникальных результатов.То, на что вы ссылаетесь, называется принципом голубиной дыры .Количество входов превышает количество выходов, поэтому несколько входов должны быть сопоставлены с одним и тем же выходом.Вот почему чем длиннее хэш вывода, тем лучше, потому что на выход выводится меньше входных данных.

Шифрование что-то должно обеспечивать уникальные результаты, потому что вы можете зашифровать сообщение ирасшифруйте его и получите то же сообщение.

4 голосов
/ 17 июня 2010

SHA1 - это не алгоритм шифрования, а криптографическая хеш-функция .

Вы правы - поскольку он отображает произвольный длинный ввод в фиксированный размер хэша, могут возникать коллизии. Но идея криптографической хеш-функции состоит в том, чтобы сделать невозможным создание таких коллизий "по требованию". Вот почему мы называем их односторонними хеш-функциями .

Цитата (источник) :

Идеальная криптографическая хеш-функция обладает четырьмя основными или значимыми свойствами:
* легко вычислить значение хеша для любого данного сообщения,
* невозможно найти сообщение с данным хешем
* невозможно изменить сообщение, не меняя его хеш,
* невозможно найти два разных сообщения с одним и тем же хешем.

1 голос
/ 17 июня 2010

Это не функции шифрования, а функции хеширования.

Хеширование, по определению, может привести к столкновению двух разных строк (отображать одно и то же значение) по тем же причинам, о которых вы упомянули.Но это обычно не имеет значения, потому что:

  1. Криптографические хэши (такие как SHA1) изо всех сил стараются сделать вероятность столкновения для похожих строк (очень, очень) низкой
  2. Вы не можете вывестиисходная строка из хеша.

Эти два означают, что вы не можете взять хеш и легко сгенерировать одну из строк, отображающих его.

1 голос
/ 17 июня 2010

Алгоритмы хеширования никогда не гарантируют другой результат для другого входа. Вот почему хеширование всегда используется как одностороннее «шифрование».

Но вы должны быть реалистами, 160-битный алгоритм хеширования может иметь 2 ^ 160 возможных комбинаций, что ... много! (1 с 48 нулями)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...