Подтвердить что ты не робот

Зачем использовать SHA1 для секретов хэширования, когда SHA-512 более безопасен?

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

Помимо очевидного большего размера (128 символов против 40) или небольших разностей скорости, есть ли другая причина, почему люди используют первый?

Кроме того, SHA-1, я считаю, был впервые взломан процессором видеомагнитофона несколько лет назад. Кто-нибудь еще треснул 512 (возможно, с лифтером), или он все еще безопасен для использования без соления?

4b9b3361

Ответ 1

Большинство применений SHA-1 предназначены для взаимодействия: мы используем SHA-1, когда мы реализуем протоколы, в которых SHA-1 является обязательным. Также учитывается простота разработки: реализации SHA-1 на разных языках и среда программирования более распространены, чем реализации SHA-512.

Кроме того, даже при этом большинство применений хеш-функций не имеют проблем с производительностью (по крайней мере, отсутствие производительности, когда хэш-функция является узким местом), существуют некоторые архитектуры, где SHA-1 значительно эффективнее SHA-512. Рассмотрим базовый маршрутизатор Linksys: он использует процессор Mips-производных, работающий на частоте 200 МГц. Такая машина может быть перепрограммирована, например. с OpenWRT (небольшой Linux для встроенных систем). Как маршрутизатор, он имеет быструю сеть (100 Мбит/с). Предположим, что вы хотите хешировать некоторые данные (например, как часть некоторого программного обеспечения VPN - маршрутизатор выглядит как хороший кандидат для работы в VPN). С SHA-1 вы получите около 6 МБ/с, используя полный процессор. Это уже значительно ниже пропускной способности сети. SHA-512 предоставит вам не более 1,5 МБ/с на одном компьютере. В такой системе разница в производительности не является незначительной. Кроме того, если я использую SHA-1 на моем маршрутизаторе Linksys для какого-либо протокола связи, то машине на другом конце ссылки также придется использовать SHA-1.

Хорошей новостью является то, что существует постоянная конкуренция по выбору новой стандартной хэш-функции под кодовым названием SHA-3. Некоторые из конкурирующих кандидатов обеспечивают производительность, аналогичную SHA-1, или даже немного лучше, при этом все же приводя к 512-битовому выходу и, вероятно, безопасному, как SHA-512.

Ответ 2

Оба SHA1 и SHA512 являются хэш-функциями. Если вы используете их как криптографический хеш, то, возможно, это хорошая причина использовать SHA512; однако есть приложения, которые используют эту функцию просто для идентификации объектов. Например, Git использует SHA1 для дешевого разграничения объектов. В этом случае, поскольку вероятность столкновения между двумя документами невероятно мала с SHA1, на самом деле нет оправдания для дополнительного требования к пространству SHA512, когда SHA1 более чем подходит для задачи.

В терминах криптографических хэшей и выбора использования соли или нет, вам может быть интересно прочитать "Не секреты хэша" . Даже с SHA512 использование соли - хорошая идея (и это тоже дешево, так почему бы не сделать это?), Потому что вы можете угадать верхние пароли и посмотреть, есть ли у них одинаковый хэш, но автор указывает, что HMAC - более безопасный механизм. В любом случае вам нужно будет определить затраты, связанные с дополнительным временем + пространство, а также расходы, связанные с возможностью нарушения, и определить, насколько вы должны быть параноиками. Как недавно было обнаружено Microsoft, постоянно меняющиеся пароли - это пустая трата денег и не окупается, поэтому, в то время как паранойя обычно хороша, когда она приходит к безопасности, вам действительно нужно сделать математику, чтобы определить, имеет ли смысл... делают ли выигрыши в безопасности перевешивают время и затраты на хранение?

Ответ 3

Если вам нужно что-то хэшировать быстро или нужно только 160-битный хеш, вы должны использовать SHA-1.

Чтобы быстро сравнивать записи базы данных друг с другом, вы можете взять 100 полей и сделать из них хэш SHA-1, давая 160 бит. Эти 160 бит имеют значения 10 ^ 50ish.

Если у меня вряд ли будет больше, чем крошечная доля 10 ^ 50-го значения, это быстрее, чем просто хэш, что у меня есть с более простым и быстрым алгоритмом.