2015-05-28 2 views
0

У меня есть список уникальных адресов электронной почты - очень простой вопрос. Если электронная почта является уникальным будет выходной всегда быть уникальным,Хеширование уникальных строк с помощью MD2

hash('md2', $email); 
+6

Нет, это то, что [хеш-столкновение или столкновение] (http://en.wikipedia.org/wiki/Collision_ (computer_science)) –

ответ

1

Хэш функции, такие как MD2, как следует из названия, дайджест сообщения алгоритмов, которые они принимают произвольный ввод длины и дать выход фиксированной длины. Существенные столкновения для уникальных входов.

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

Я вижу, что вы хешируете адреса электронной почты. В зависимости от вашей системы это может быть использовано при столкновении. Например, некоторые поставщики электронной почты разрешают использовать виртуальные адреса формы «[email protected]», «[email protected]» и т. Д. Злоумышленник может использовать этот факт, чтобы найти столкновение с известным другим адресом электронной почты, чтобы получить, например, электронное письмо с сбросом пароля или что-то в этом роде.

1

MD2 производит хэш 128 бит. Вы можете гарантировать, по крайней мере, одно столкновение хэшей, хешируя 2^128 + 1 строк.

+2

Ну, удачи в этом. –

2

Ну, лучшая атака, согласно Википедии:

В 2009 год MD2 было показано, что уязвимо для столкновения нападения с временной сложностью вычислений функции 2^63,3 сжатия и требование к памяти 2^52 хэш-значения. Это немного лучше, чем атака на день рождения, которая, как ожидается, займет 265,5 оценок функции сжатия.

Однако было бы непросто найти столкновение для короткого адреса электронной почты.

Если вам действительно нужна дополнительная защита и 128-битное хеш-значение, вам намного лучше использовать первые (самые левые) 128 бит SHA-256, которые считаются безопасными на момент написания. Разумеется, использование полных 256 бит.

Шансы создать столкновение случайно близки к нулю. Поэтому, если вы просто используете это для создания чего-то уникального (т. Е. Без учета целенаправленных атак), то использование MD2 в порядке. Даже тогда, если вы можете изменить протокол, вместо этого используйте SHA-256.

+0

Или первые 32 шестнадцатеричных символа, конечно, если вы используете PHP. –

Смежные вопросы