Лучшая функция дайджеста общего назначения?

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

Когда похожий questions были заданы ранее ответы включали SHA1, SHA2, SHA-256, SHA-512, MD5, bCrypt и Blowfish.

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


person Anirvan    schedule 03.03.2009    source источник


Ответы (3)


Я бы следовал рекомендациям NIST / FIPS:

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 для всех новых приложений и протоколов.

person Kevin    schedule 03.03.2009

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

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

person kquinn    schedule 03.03.2009
comment
Ага, это то, что я имел в виду (должно было быть более ясным). Спасибо. - person Anirvan; 03.03.2009

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

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

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

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

person thomasrutter    schedule 03.03.2009
comment
Не используйте MD5 для чего-либо удаленно криптографического. Теперь это контрольная сумма для борьбы с коррупцией, ничего. Он очень основательно сломан. Просто забудь об этом; нет ничего лучше, чем любая другая хеш-функция. - person kquinn; 03.03.2009
comment
Подтвержденный. Когда важна безопасность, не используйте MD5 или SHA-1. - person thomasrutter; 03.03.2009
comment
SHA1 по-прежнему достойный. Но MD5 полностью сломан. Нет оправдания его продолжающемуся использованию. Никто. Не используйте MD5! Если вы хотите защитить себя от случайных проблем с передачей, просто используйте CRC32; это быстрее и примерно так же криптографически безопасно. Вот как ломается MD5! Избегай это! - person kquinn; 03.03.2009