MD5 и порядковый номер - PullRequest
       46

MD5 и порядковый номер

1 голос
/ 10 сентября 2009

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

token = md5(secret_key + md5(id))

Достаточно ли хорошо MD5 для этой работы?

Ответы [ 6 ]

5 голосов
/ 10 сентября 2009

Технически даже не нужно md5 идентифицировать перед объединением, чтобы быть достаточно безопасным.

Однако я бы обычно предложил использовать sha-256 или sha-512, если только у кого-то нет серьезных проблем с производительностью (скажем, встроенного программирования).

3 голосов
/ 11 сентября 2009

Предполагая, что это используется для аутентификации, я бы использовал HMAC . См. Например FIPS PUB 198 . Это, например, позволяет вам использовать безопасную хеш-функцию (не MD5), обрезать результат, как описано, и при этом получать безопасные токены.

3 голосов
/ 10 сентября 2009

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

2 голосов
/ 10 сентября 2009

Не используйте MD5. Это сломано. Я не могу поверить, что VeriSign всех людей все еще использует MD5. Доступны тестовые наборы для определения коллизий хешей для MD5 для использования при нарушении хеш-сравнений MD5.

Используйте, как минимум, SHA-1. Я рекомендую использовать SHA-5.

1 голос
/ 10 сентября 2009

Я бы порекомендовал использовать альтернативное решение или (если не приемлемо) добавить больше данных в вашу процедуру генерации md5. Если ваш secret_key является постоянным, и я могу восстановить один хеш, то я могу сгенерировать правильный ключ для любого другого идентификатора.

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

См:

http://www.freerainbowtables.com/

1 голос
/ 10 сентября 2009

Если идентификатор легко угадать, это не очень безопасно, если секретный ключ не очень длинный.

Мой компьютер может перебрать значение секретного ключа на основе MD5 примерно за день для секретного ключа из 6 символов. Люди с доступом к более быстрым / большим компьютерам могут значительно сократить это время. Время прерывания увеличивается в 10 раз для каждой дополнительной цифры в ключе. Поскольку идентификатор может быть легко угадан, и, следовательно, его значение MD5 вычислено, это не сильно увеличивает сложность обращения к секретному ключу.

...