Лучшая универсальная функция дайджеста? - PullRequest
2 голосов
/ 03 марта 2009

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

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

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

Ответы [ 3 ]

7 голосов
/ 03 марта 2009

Я бы следовал рекомендациям 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 семейство хеш-функций для всего нового приложения и протоколы.

3 голосов
/ 03 марта 2009

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

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

2 голосов
/ 03 марта 2009

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

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

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

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

...