Является ли MD5 хорошим способом создания кода подтверждения учетной записи - PullRequest
7 голосов
/ 09 сентября 2010

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

Вот так я генерирую код подтверждения.

md5(rand(0,1000)

Является ли использование описанного ниже способа плохим выбором?Генерирует случайное число от 0 до 1000.Поскольку существует всего 1000 вариантов, и их хэши MD5 известны, злоумышленнику потребуется всего 1000 попыток, чтобы подтвердить учетную запись без ее подлинной принадлежности

Ответы [ 3 ]

5 голосов
/ 09 сентября 2010

Эта тема Как сгенерировать проверочный код / ​​номер? есть хорошие мысли по этому вопросу.Хэши, обратимые хэши, контрольные цифры ... множество вариантов в зависимости от ваших потребностей.

2 голосов
/ 10 июня 2014

ранд (1,1000) - это 10 бит энтропии.MD5ing это не добавляет ни одного.В среднем злоумышленнику потребуется 500 попыток для подтверждения учетной записи.Никакое ограничение скорости не поможет вам, так как опытные злоумышленники арендуют или уже владеют ботнетом, который будет использоваться для проверки учетных записей.

Будьте осторожны и используйте 128 бит энтропии в ссылках для проверки.В PHP openssl_random_pseudo_bytes (16, true) - это переносимый способ получения криптографически сильных случайных байтов, но если вы используете хост под некоторым дистрибутивом Linux или одной из ОС BSD, чтение / dev / urandom также является приемлемым выбором..

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

2 голосов
/ 09 сентября 2010

Просто посеять то, что атакующий не мог знать:

md5(rand(0,1000).'helloworld234');

Нет предела тому, как вы можете потерпеть крах

md5(md5(time().'helloguys'.rand(0,9999)));

Слишком много, но вы поняли.

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