Лучше хеширование, чем SHA1 - PullRequest
2 голосов
/ 06 апреля 2009

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

Ответы [ 6 ]

11 голосов
/ 06 апреля 2009

SHA1 - это не шифрование , это криптографическая хеш-функция . И да, он был сломан, что означает, что можно генерировать столкновения быстрее, чем методом грубой силы. Семейство SHA2 не было разрушено.

Но я бы посоветовал использовать пользовательское начальное число для каждой записи, чтобы радужную таблицу нельзя было использовать для опробования паролей. Если вы используете провайдера членства в SQL, формат пароля «Хэшированный» уже использует разные начальные числа для каждого пользователя.

Более подробную информацию о заполнении вашего хэша можно найти в статье Что вам нужно знать о безопасных схемах паролей от Thomas Ptacek.

2 голосов
/ 06 апреля 2009

Как вы говорите в своем комментарии, SHA1 - это алгоритм хеширования, а не шифрования. Это односторонняя функция, которая, даже если она не работает, не позволяет получить пароль.

Если вам нужны более мощные хеш-функции, которые уже есть в .NET, посмотрите на семейство SHA2 - SHA256, SHA384, SHA512. (SHA224 также существует, но не реализован в пространстве имен System.Security.Cryptography.)

Атаки соударений на SHA1 пока практически не применимы, но вы правы, если смотрите в будущее. NIST в настоящее время проводит процесс отбора для SHA3 в свете этих атак, но это несколько лет с момента его завершения и коммерческого принятия. SHA2, с другой стороны, представляет собой существующее семейство алгоритмов, которые стандартизированы NIST и не подвержены атакам, которые были успешными в отношении MD5 и SHA1.

1 голос
/ 06 апреля 2009

Хеш-алгоритмы в последнее время демонстрируют некоторые признаки слабости , поэтому NIST предложил конкурс хэширования так же, как у них был конкурс шифрования, который увенчался Rijndael как новый AES .

Лично мне нравится то, что может предложить MD6 , поскольку его возглавляет Рон Ривест, который находится в криптографическом пространстве более трех десятилетий. MD6 был отозван, поэтому я полагаю, что одними из наиболее сильных кандидатов во 2-м раунде, по моему скромному мнению, являются Кекчак, Blue Midnight Wish и Fugue.

Оттуда, безусловно, используйте такие хорошие практики, как соление.

1 голос
/ 06 апреля 2009

Что вам нужно сделать, это соль ваши пароли. Вот некоторый фактический пример кода в C #, который использует SHA1 и засолку.

Проблема с «взломом» SHA1 заключается в том, что все основные возможные комбинации были предварительно рассчитаны, однако засоление делает ваш пароль неосновным (он все еще уязвим для грубой силы, если он слабый или легко угадываемый, но убивает радужные таблицы)

0 голосов
/ 06 апреля 2009

5 дней с опозданием, но вы можете попробовать эту очень безопасную функцию шифрования:

uint64_t highly_secure_encrypt(char* password) {
  sleep(1);
  return 0;
}

Вы никак не можете получить пароли от этого.

Теперь по серьезным вопросам. Если вы еще не знаете ответ на свой вопрос, вам не следует проектировать системы безопасности.

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

Джефф Этвуд «Взлом хеша Rainbow» описывает хэши и хранение паролей с хорошей детализацией для начинающих, а Томаса Птачека «Достаточно с таблицами радуги: что нужно знать о безопасных схемах паролей» продолжает рассказывать вам, почему вы не должны пытаться делать это обычно самостоятельно.

Выбор хорошей хэш-функции составляет менее 1% битвы. Если злоумышленник может запустить вашу хэш-функцию миллионы раз в секунду, то он (-ы) может проверять миллионы комбинаций в секунду. Что вам нужно, это медленный, настраиваемый безопасный хеш. Это не так просто, и SHA *, MD5 и т. Д. Спроектированы так, чтобы быть чертовски быстрыми, поскольку они обычно используются для файлов и кусков файлов, где скорость король.

Я бы порекомендовал прочитать больше, так как ответы там есть и их очень легко найти.

0 голосов
/ 06 апреля 2009

Да, вы можете использовать SHA512, просто помните, как долго фактический хэш. Вы всегда можете добавить дополнительную безопасность, добавив результаты хэширования.

SHA512("The quick brown fox jumps over the lazy dog") = 
   07e547d9 586f6a73 f73fbac0 435ed769 51218fb7 d0c8d788 a309d785 436bbb64
   2e93a252 a954f239 12547d1e 8a3b5ed6 e1bfd709 7821233f a0538f3d b854fee6

Если вы хотите посмотреть другие алгоритмы хеширования, вот краткий список.

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