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

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

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

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

Ответы [ 3 ]

42 голосов
/ 15 апреля 2010

В большинстве случаев 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.

24 голосов
/ 15 апреля 2010

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

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

3 голосов
/ 15 апреля 2010

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

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

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

...