2009-03-03 6 views
2

При написании среднего нового приложения в 2009 году, какая самая разумная функция дайджеста для использования с точки зрения безопасности и производительности? (И как я могу определить это в будущем, по мере изменения условий?)Лучшая универсальная функция дайджеста?

Когда similarquestionswereasked ранее, ответы включены SHA1, SHA2, SHA-256, SHA-512, MD5, Bcrypt и Blowfish.

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

ответ

7

Я бы за NIST/FIPS guidelines:

15 марта 2006: SHA-2 семейство хэш-функций (например, SHA-224, SHA- 256, SHA-384 и SHA-512) может быть , используемым федеральными агентствами для всех приложений с использованием защищенного хэша алгоритмов. Федеральные органы должны прекратить использование SHA-1 для цифровых подписей, цифровое времени штамповки и других приложений, требующих сопротивления столкновений, как только практических, и должны использовать SHA-2 семейства хеша-функции для этих приложений после 2010 года После 2010 года Федеральные агентства могут использовать только SHA-1 для следующих приложений: аутентификация сообщений на основе хэш-кода кодов (HMAC); вывод ключей функции (KDF); и случайным числом генераторов (ГСЧ). Независимо от использования, NIST рекомендует разработчикам протоколов и использовать семейство хэш-функций SHA-2 для всех новых приложений и протоколов .

3

Вы говорите «функция дайджеста»; предположительно это означает, что вы хотите использовать его для вычисления дайджестов «длинных» сообщений (а не просто хеширование «коротких» «сообщений», таких как пароли). Это означает, что bCrypt и подобные варианты недоступны; они предназначены для медленного подавления грубой атаки на базы паролей. MD5 полностью сломан, а SHA-0 и SHA-1 слишком ослаблены, чтобы быть хорошим выбором. Blowfish - это потоковый шифр (хотя вы можете запускать его в режиме, который создает дайджесты), так что это не такой хороший выбор.

Это оставляет несколько семейств хэш-функций, включая SHA-2, HAVAL, RIPEMD, WHIRLPOOL и другие. Из них семья SHA-2 является наиболее тщательно криптоаналитической, и поэтому это будет моя рекомендация для общего использования. Я бы рекомендовал SHA2-256 или SHA2-512 для типичных приложений, поскольку эти два размера являются наиболее распространенными и, вероятно, будут поддерживаться в будущем SHA-3.

+0

Да, это то, что я имел в виду (должен был быть более понятным). Благодарю. – Anirvan

2

Это действительно зависит от того, для чего вам это нужно.

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

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

Было показано, что MD4, MD5 и SHA-1 более легко разрушаются в смысле обнаружения столкновения с помощью метода атаки на день рождения, чем ожидалось. RIPEMD-160 хорошо расценен, но всего за 160 бит атака на день рождения требует всего 2^80 операций, поэтому она не будет длиться вечно. Whirlpool обладает отличными характеристиками и является самой сильной из них, хотя у нее нет той же поддержки, что и SHA-256 или SHA-512 - в том смысле, что если возникла проблема с SHA-256 или SHA-512, d более вероятно, узнайте об этом через соответствующие каналы.

+1

Не используйте MD5 для чего-либо удаленного криптографического. Сейчас это антикоррупционная контрольная сумма, * ничего больше. Он очень сильно сломан. Просто забудь об этом; нет ничего такого, что любая другая хэш-функция не улучшилась бы. – kquinn

+0

Подтверждено. Когда безопасность является фактором, не используйте MD5 или SHA-1. – thomasrutter

+0

SHA1 по-прежнему приличный. Но MD5 *** полностью *** сломан. Нет никакого оправдания для его дальнейшего использования. Никто. Не используйте MD5! Если вы хотите защитить от случайных проблем с передачей, просто используйте CRC32; это быстрее и криптографически безопасно. Вот так сломан MD5! Избегай это! – kquinn