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

Когда следует использовать SHA-1 и когда следует использовать SHA-2?

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

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

4b9b3361

Ответ 1

Используйте 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.

Ответ 2

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

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

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

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

Ответ 3

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

Ответ 4

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