Вероятность коллизии на MD5 для 15-символьных буквенно-цифровых строк

Я генерирую 15-символьные буквенно-цифровые коды и сохраняю их как хэш MD5 для защиты. Однако у меня не может быть неуникальных или конфликтующих хэшей, и если они возникают, я их не вставляю. Поскольку у меня есть большое количество кодов, которые я буду вставлять в базу данных в течение срока службы приложения, и чтобы обеспечить лучшую производительность моего приложения, я хочу, чтобы количество коллизий было меньше.

Вопрос: Какова вероятность столкновений при условии, что входное пространство увеличено с 36 до 15? (36, потому что я использую 26 строчных алфавитов и 10 цифр и 15, потому что я генерирую код с 15 из них).

Вы можете обратиться сюда, чтобы понять, как я генерирую коды в первую очередь.

Использование: использовать их в кодах купонов, и я хочу их хэшировать, чтобы защитить себя от взлома базы данных.


person FBP    schedule 06.04.2017    source источник
comment
if they occur I do not insert them довольно просто сделать столбец уникальным.   -  person chris85    schedule 06.04.2017
comment
Зачем вообще создавать хэш? Просто используйте исходную строку из 15 символов в качестве уникального ключа.   -  person Alex Howansky    schedule 06.04.2017
comment
Если вы генерируете случайную строку из 15 символов, то хеш-это вы не вычитаете безопасность, потому что, если вы используете результирующее значение в строковой форме, у вас будет гораздо меньшее пространство для алфавита (0-9A-F)?   -  person Alex K.    schedule 06.04.2017
comment
Из Википедии: В 1996 году были обнаружены коллизии в функции сжатия MD5, и Ханс Доббертин написал в техническом бюллетене RSA Laboratories: «Представленная атака еще не угрожает практическому применению MD5, но она будет довольно близка ... в будущем» MD5 больше не следует реализовывать ... там, где требуется хеш-функция, устойчивая к коллизиям. Так что вы можете подумать об использовании чего-то другого.   -  person NAMS    schedule 06.04.2017
comment
Кажется уместным stackoverflow.com/a/2088983 и, возможно, тем, что вы ищете.   -  person Funk Forty Niner    schedule 06.04.2017
comment
1-й пункт, который предлагает меньшую защиту, чем вы думаете. Обратить md5 15-символьного сообщения в настоящее время довольно быстро, потому что Google в основном проиндексировал множество md5 коротких строк.   -  person apokryfos    schedule 06.04.2017
comment
Можете ли вы использовать функцию uniqid? (php.net/manual/en/function.uniqid.php) это использует отметку времени, чтобы идентификаторы были уникальными в зависимости от того, когда они были созданы.   -  person MEmerson    schedule 06.04.2017
comment
@AlexHowansky Использование: использовать их в кодах купонов, и я хочу их хэшировать, чтобы защитить себя от взлома базы данных.   -  person FBP    schedule 06.04.2017
comment
MD5 подходит для обнаружения изменений и снятия отпечатков пальцев, но недостаточен для использования в целях безопасности. Лично я думаю, что если ваша база данных скомпрометирована, то утечка кодов купонов - меньшая из ваших проблем, но если вы действительно настаиваете на их запутывании, используйте password_hash() и относитесь к ним как к паролям.   -  person Alex Howansky    schedule 06.04.2017


Ответы (1)


Вероятность возникновения коллизии любой коллизии безопасного хэша незначительна, т.е. близка к нулю. Это верно даже для MD5, который является сломанным безопасным хешем. Даже при очень большом вводе (например, 2 ^ 64) хешей шансы генерации коллизии по-прежнему составляют примерно 1 / (2 ^ 64).

Вероятность столкновения вашего ввода, конечно, намного выше (при условии, что он генерируется случайным образом), поскольку 36 ^ 15 намного меньше, чем 2 ^ 128, выходной размер MD5 (36 ^ 15 ‹(2 ^ 6) ^ 15 = 2 ^ 90 ‹** 2 ^ 128). Таким образом, входных значений меньше, чем хеш-значений.

person Maarten Bodewes    schedule 06.04.2017
comment
После прочтения сломанного безопасного хеша мне пришлось немного посмеяться. Возможно, вы имели в виду сломанный криптографический хеш. - person Artjom B.; 06.04.2017
comment
Да, в этом случае безопасный хеш - это просто тип алгоритма, который может быть взломан. Это противоречие, но жизнь полна противоречий. Лучше всего действительно посмеяться над ними :) - person Maarten Bodewes; 06.04.2017
comment
@MaartenBodewes, вы имели в виду, что вероятность столкновения вашего ввода, конечно, намного ниже? - person FBP; 07.04.2017