Насколько небезопасен соленый SHA1 по сравнению с соленым SHA512

SHA1 полностью небезопасен и должен быть заменен.

Этому вопросу более 8 лет, и времена изменились: https://arstechnica.com/information-technology/2017/02/at-deaths-door-for-years-widely-used-sha1-function-is-now-dead/

Для паролей: https://en.wikipedia.org/wiki/PBKDF2

Для данных: SHA3


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


person jblue    schedule 18.09.2010    source источник
comment
это все мыслимая разница. единственное, о чем вам следует позаботиться, это соль.   -  person Your Common Sense    schedule 19.09.2010
comment
Разница между SHA512 и SHA1 немыслима. Тоже пока никто не ломает (даже md5 по-моему). Так что в реальной жизни это маловероятно. Хотя без соли все одинаково уязвимо для поиска по предварительно вычисленной радужной таблице (строка = хэш). Таким образом, ленивый пароль будет получен за считанные секунды, независимо от алгоритма хеширования. Таким образом, соление гораздо важнее конкретного алгоритма хеширования.   -  person Your Common Sense    schedule 19.09.2010


Ответы (4)


Известные в настоящее время недостатки SHA-1 не влияют на безопасность того, что вы пытаетесь сделать. Невозможность восстановить пароль из его хешированной версии зависит от «сопротивления прообразу», которое, насколько нам известно, все еще полностью невозможно с SHA-1. Это также полностью невозможно с SHA-512, SHA-256 или даже MD4 или MD5. Ум, ориентированный на научную фантастику, может представить себе, что компьютеры обретут способность находить прообразы для MD4 или MD5 примерно в 2050 году; для SHA-1 потребуется гораздо больше времени.

Теперь так получилось, что, хотя не существует известного способа вычисления прообразов на SHA-1, доказательств безопасности также мало. Говоря математическими словами, если функция сжатия, используемая в SHA-1, неотличима от "случайного оракула", то она защищена от прообразов. Но известные недостатки SHA-1, которые (теоретически) приводят к коллизиям, также показывают, что его функция сжатия не является случайным оракулом. Следовательно, безопасность SHA-1 против прообразов больше не связана с убеждением «есть веская математическая причина, по которой он не ломается». Это больше из разряда "блин, пока не нашел, как его сломать".

Говоря более приземленными словами, если вы используете SHA-1, вам, вероятно, придется оправдываться. Даже если вы не сделаете ничего плохого, ваш выбор SHA-1 будет поставлен под сомнение. Принимая во внимание, что никто не будет сомневаться в использовании SHA-256 или SHA-512, даже если это подразумевает некоторые накладные расходы на разработку. Короче говоря, использование SHA-1 — это плохие отношения с общественностью.

Обратите внимание, что соление полностью ортогонально этому вопросу. Посол предназначен для предотвращения распределения затрат между атаками на отдельные экземпляры паролей. Предварительно вычисленные таблицы (в том числе так называемые «радужные таблицы») представляют собой своего рода совместное использование (построение таблицы стоит дорого, но может использоваться для атаки на 2, 10, 10000 паролей с незначительной доплатой за атакуемый пароль). Соление побеждает деление. Солить хорошо. Победа над общим доступом важна, потому что возможна атака на один пароль: не из-за хеш-функции, а потому, что пароль умещается в человеческом мозгу и, следовательно, поддается грубой силе («атака по словарю»). Со всем, что связано с паролями, у вас возникнут проблемы не из-за слабости хеш-функций, а из-за того, что вы в первую очередь используете пароли.

person Thomas Pornin    schedule 20.09.2010

Имеются доказательства наличия уязвимостей в алгоритме SHA1, которые могут привести к атаке. Я бы рекомендовал использовать вариант SHA2 (SHA 256 или SHA 512).

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

(Источник и дополнительная информация: http://en.wikipedia.org/wiki/SHA-1< /а>)

person Dan D.    schedule 18.09.2010

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

Если вы решите использовать другой алгоритм хеширования, вам следует взглянуть на файл BCrypt. Это адаптируемый алгоритм хеширования стоимости, разработанный так, чтобы быть «настолько медленным, насколько это необходимо». Это обеспечило бы большее увеличение требуемого времени взлома, чем SHA512. SHA512 разработан как криптографический хэш общего назначения, одной из целей которого является скорость.

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

Сказав это, конечно, лучше использовать наилучший доступный алгоритм.

person Jacco    schedule 18.09.2010
comment
Хэш BCrypt включен в ядро ​​PHP ›= 5.3.0, вы можете использовать его через PHP crypt();, используя правильный формат соли. - person Jacco; 19.09.2010

SHA1 и SH512 — это дайджесты сообщений, они никогда не предназначались для функций хеширования паролей (или получения ключей). (Хотя дайджест сообщения может использоваться как строительный блок для KDF, например, в PBKDF2 с HMAC-SHA1.)

Функция хеширования паролей должна защищать от атак по словарю и радужных таблиц.

В настоящее время единственной стандартной (согласно санкционированной NIST) функции хэширования паролей или получения ключей является PBKDF2. Лучшим выбором, если использование стандарта не требуется, являются bcrypt и более новый scrypt. В Википедии есть страницы для всех трех функций:

Страница по адресу https://crackstation.net/hashing-security.htm содержит подробное обсуждение безопасность пароля.

person Erwan Legrand    schedule 18.12.2013