Ответ 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.