Когда я должен использовать SHA-1 и когда я должен использовать SHA-2? - PullRequest
23 голосов
/ 15 февраля 2011

В моем приложении на c # я использую RSA для подписи файлов перед загрузкой в ​​базу данных моей компании человеком, который загружает данные, и здесь я должен выбрать SHA-1 или SHA-2 для вычисления хэша.
Как и любой другой компонент в программировании, я знаю, что должно быть «использовать это здесь» и «использовать это там» для двух из них.
Итак, когда это? а когда что?

EDIT:
Мой вопрос: в чем разница в производительности? и не касается безопасности, поскольку я уже знаю, что SHA-2 более надежно защищен, чем SHA-1.
В этом Ссылка сравнение между различными типами SHA-2, отмечая, когда использовать SHA-512, а когда нет в конце. Мне нужен похожий аргумент в отношении SHA-1 и SHA-2.

Ответы [ 4 ]

64 голосов
/ 15 февраля 2011

Используйте SHA-2.Всегда.SHA-1 должен быть зарезервирован для ситуаций, когда SHA-2 не может использоваться из-за проблем совместимости с унаследованным кодом.

Нет проблем с производительностью, пока не будут выполнены фактические меры.Хэш-функции работают быстро.В большинстве ситуаций производительность хэш-функции оказывает лишь незначительное влияние;даже обнаружение этого может оказаться трудным.Безопасность на первом месте.Поскольку в SHA-1 обнаружены слабые места, его использование, тем не менее, требует некоторого обоснованного обоснования.Использование SHA-256 не будет подвергнуто сомнению;это «выбор по умолчанию».Но если вы используете SHA-1, подготовьтесь к критике.

Обратите внимание, что есть четыре функций, известных как "SHA-2": SHA-224, SHA-256, SHA-384и SHA-512.SHA-224 и SHA-256 - это одна и та же функция, за исключением внутреннего параметра («начальное значение») и выходного размера (выходной размер SHA-224 составляет 28 байтов, тогда как SHA-256 предлагает 32 байта);они имеют одинаковые характеристики производительности.Точно так же SHA-384 и SHA-512 одинаковы по производительности.SHA-512 использует 64-битные арифметические операции и работает быстрее, чем SHA-256 на платформах, которые предлагают 64-битные коды операций;на 32-битных платформах SHA-256 будет быстрее (примечание: на 32-битных x86 с собственным кодом можно использовать коды операций SSE2 и их 64-битные вычислительные возможности, следовательно, некоторый собственный кодРеализация SHA-512 будет быстрее, чем SHA-256 в 32-битном режиме; это делает код OpenSSL; но, насколько мне известно, реализация SHA-512 в .NET - это «управляемый код»).Кроме того, все функции SHA- * имеют некоторую базовую степень детализации, поскольку они обрабатывают данные по блокам: для SHA-256 блоки имеют длину 64 байта, тогда как SHA-512 использует 128-байтные блоки;при хэшировании очень коротких элементов данных более высокая степень детализации SHA-512 соответственно снижает его производительность.Наконец, SHA-256 (на 32-разрядной платформе), вероятно, даст меньший код (т. Е. Использует меньше кэш-памяти L1 на ЦП).

Поэтому, если есть сомнения, используйте SHA-256.Если вы планируете использовать SHA-1, тогда вы должны сомневаться.

Если вы хотите использовать хеш-функцию для некриптографического использования (т. Е. Недостатки не являются для вас проблемой), тогда вместо SHA-1, рассмотрим MD4 .

3 голосов
/ 15 февраля 2011

SHA-2 сильнее и лучше подходит для чувствительных к безопасности приложений, таких как цифровая подпись.

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

Редактирование: алгоритм SHA-1 работает быстрее (до 10 раз быстрее, чем SHA-2 с 256 битами, и в 20 раз быстрее, чем SHA-2 с 512 битами - по крайней мере, в реализации .NET).

Тем не менее, ни один из них на самом деле не такой медленный: если смотреть в перспективе, вы можете ожидать хэширования файла размером 100 КБ с SHA-2 (256 бит) за несколько миллисекунд на современном компьютере (или файла 1 МБ за несколько десятков) миллисекунд).

1 голос
/ 15 февраля 2011

На самом деле это не так, это зависит от уровня безопасности и / или желаемой паранойи.Я бы использовал SHA256 для любого нового приложения, однако для этого требуется достаточно большие ключи RSA, которые могут обрабатывать весь отпечаток SHA256 в качестве полезной нагрузки.

0 голосов
/ 15 февраля 2011

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

...