Предупреждение: С тех пор, как этот пост был написан в 2010 году, графические процессоры широко использовались для хэширования паролей. Умеренные цены на GPU
может работать десять миллиардов MD5s в секунду. Это означает, что даже
полностью произвольный 8-значный буквенно-цифровой пароль (возможно 62)
персонажи) могут быть грубо вынуждены за 6 часов. SHA-1 только слегка
медленнее, это заняло бы один день. Пароли вашего пользователя намного слабее, и
(даже с засолкой) будет падать со скоростью тысяч паролей за
второй. Хэш-функции предназначены для быстрой . Ты не хочешь этого
для паролей. Используйте scrypt, bcrypt или PBKDF-2.
MD5 был признан слабым еще в 1996 году, и больше не должен использоваться для криптографических целей. SHA-1 является широко используемой заменой, но имеет аналогичные проблемы . Семейство SHA-2 хеш-функций является текущей заменой SHA-1. Члены SHA-2 в отдельности называются SHA-224, SHA-256, SHA-384 и SHA-512.
На данный момент несколько хеш-функций конкурируют, чтобы стать SHA-3 , следующим стандартизированным алгоритмом криптографического хеширования. Победитель будет выбран в 2012 году. Ни один из них еще не должен использоваться!
Для хеширования пароля вы также можете использовать что-то вроде bcrypt . Он разработан так, чтобы быть достаточно медленным, чтобы сделать крупномасштабные атаки грубой силой невозможными. Вы можете настроить медленность самостоятельно, поэтому она может быть сделана медленнее, когда компьютеры становятся быстрее.
Предупреждение: bcrypt основан на более старом алгоритме двустороннего шифрования Blowfish, для которого сегодня существуют лучшие альтернативы. Я не думаю, что криптографические свойства хеширования bcrypt полностью понятны. Кто-то поправит меня, если я ошибаюсь; Я никогда не нашел надежного источника, который обсуждает свойства bcrypt (кроме его медленности) с криптографической точки зрения.
Может быть несколько обнадеживает то, что риск коллизий менее важен для хеширования пароля, чем для криптографии с открытым ключом или цифровых подписей. Использование MD5 сегодня - это ужасная идея для SSL, но не менее пагубно для хеширования паролей. Но если у вас есть выбор, просто выберите более сильный.
Использование хорошей хэш-функции недостаточно для защиты ваших паролей. Вы должны хешировать пароли вместе с солями , которые являются длинными и криптографически случайными . Вы также должны помочь своим пользователям выбрать более надежные пароли или, по возможности, передавать фразы. Дольше всегда лучше.