Чтобы увидеть силу самих хеш-методов, пожалуйста, взгляните на keylength.com website. Вы увидите, что даже SHA-256 имеет довольно большой запас прочности.
Более того, алгоритм HMAC в значительной степени не обращает внимания на атаки на основной алгоритм хеширования. HMAC непроницаем для проблемы с днем рождения, которая уменьшает ключевую силу до половины хэш-выхода. Это не применяется просто потому, что противник не держит секретный ключ и поэтому не может попытаться создать столкновений. Вот почему даже HMAC-SHA1 довольно безопасен.
Теперь скорость хэша зависит от среды выполнения. Но в целом вы можете сделать следующие предположения:
- SHA-1 обычно быстрее, чем любая реализация SHA-2 на той же платформе;
- SHA-512 работает быстрее, чем SHA-256 на 64-битных машинах (поскольку они используют внутреннюю 64-битную арифметику);
- SHA-256 работает быстрее, чем SHA-512 на 8, 16 и 32-битных машинах.
Используйте SHA-1, если вы ожидаете проблем с совместимостью. В противном случае вы можете также перейти на SHA-512 (и сократить результат до разумного количества бит). Внутреннее состояние и более высокая безопасность SHA-512 могут быть небольшим преимуществом. Я столкнулся с проблемами, когда клиенты не принимали какую-либо форму SHA-1 из-за общих проблем с алгоритмом; другими словами, тот факт, что он не защищен вообще может препятствовать принятию.
Обратите внимание, что SHA-384 и менее хорошо известны SHA-512/256 и SHA-512/224 Методы хэш представляют собой особый вид SHA-512, сократить до 384, 256 и 224 выходных битов. Таким образом, скорость этих алгоритмов одинакова. Единственное различие, кроме размера вывода, заключается в том, что эти специальные формы используют внутренние значения. В противном случае SHA-512 разрезается до 384 бит так же безопасно и так же быстро, как SHA-512/384. Однако вы должны использовать SHA-384 для совместимости.
Размер входного ключа не зависит от основной хэш-функции. Ключ сначала XOR-masked, а затем хэшируется базовой хэш-функцией; хэш-алгоритмы могут принимать практически неограниченное количество данных в качестве входных данных.
Рекомендуется использовать размер ключа, который, по крайней мере, имеет размер используемого метода хеширования, в противном случае вы можете снизить маржу безопасности, предоставляемую методом HMAC. Может быть незначительное снижение производительности, если размер ключа заставляет хэш-алгоритм хешировать несколько блоков.
Вы также можете использовать (предстоящий) стандарт SHA-3 в том смысле, что он будет безопасным. HMAC-SHA-3 в настоящее время не имеет особого смысла. HMAC на самом деле переполнена для SHA-3 (Keccak); SHA-3 должен быть безопасным даже без конструкции HMAC. [Редактировать] К настоящему времени KMAC стандартизирован как конструкция MAC для SHA-3.
Кроме того, конструкции SHA-2 - несколько удивительно - продемонстрировали довольно хорошую устойчивость против криптоанализа во время соревнований SHA-3. Поэтому нет необходимости в обновлении до SHA-3.
[страница wikipedia] (http://en.wikipedia.org/wiki/SHA-2#Comparison_of_SHA_functions) имеет некоторые контрольные показатели производительности для них. – jbabey