Причины, почему SHA512 превосходит MD5

Это ограничение повлияло на меня, когда я пытался перегрузить операторы для общих типов; так как не было ограничений «INumeric», и для множества других причин хорошие люди в stackoverflow с удовольствием предоставляют, операции не могут быть определены на общих типах.

Мне хотелось что-то вроде

public struct Foo<T>
{
    public T Value{ get; private set; }

    public static Foo<T> operator +(Foo<T> LHS, Foo<T> RHS)
    {
        return new Foo<T> { Value = LHS.Value + RHS.Value; };
    }
}

Я работал над этой проблемой с использованием динамического ввода времени .net4.

public struct Foo<T>
{
    public T Value { get; private set; }

    public static Foo<T> operator +(Foo<T> LHS, Foo<T> RHS)
    {
        return new Foo<T> { Value = LHS.Value + (dynamic)RHS.Value };
    }
}

Две вещи об использовании dynamic:

  1. Производительность. Все типы значений получаются в коробке.
  2. Ошибки времени выполнения. Вы «били» компилятор, но теряете безопасность. Если общий тип не имеет определенного оператора, во время выполнения будет выбрано исключение.
28
задан Tom Ritter 22 January 2010 в 21:26
поделиться

7 ответов

Это зависит от вашего варианта использования. Вы не можете широко претендовать на «превосходство». (Я имею в виду, да, вы можете, в некоторых случаях, но если быть строгим, вы не можете на самом деле).

Но есть области, где MD5 был сломан:

  1. Для начала: MD5 старый и распространенный. Есть множество радужных столов против них, и их легко найти. Так что, если вы хэшируете пароли (без малейшего стыда!) - используя md5 - вы можете их не хешировать, их так легко найти. Даже если вы действительно смешиваете с простыми солями.
  2. Во-вторых, MD5 больше не защищен как криптографическая хеш-функция (на самом деле она даже не считается криптографической хеш-функцией, как указывает Forked One). Вы можете генерировать разные сообщения, которые хэшируют одно и то же значение. Поэтому, если у вас есть сертификат SSL с хешем MD5, я могу сгенерировать дубликат сертификата, который говорит, что я хочу, который выдает тот же хеш . Обычно это то, что люди имеют в виду, когда говорят, что MD5 «сломан» - такие вещи.
  3. В-третьих, подобно сообщениям, вы также можете генерировать разные файлы , которые хэшируются с одинаковым значением , поэтому использование MD5 в качестве контрольной суммы файла «нарушено».

Теперь, SHA-512 является алгоритмом хеширования семейства SHA-2 . SHA-1 в наши дни считается «а», я проигнорирую это. SHA-2, однако, имеет относительно мало атак против него. Основная статья, о которой говорится в Википедии, - атака прообразом с уменьшенным количеством раундов , что означает, что если вы используете SHA-512 ужасно неправильным способом, я могу его сломать. Очевидно, что вы вряд ли будете использовать его таким образом, но атаки становятся только лучше, и это хороший трамплин для дальнейших исследований, чтобы сломать SHA-512 таким же образом, как сломан MD5.

Однако из всех доступных хэш-функций семейство SHA-2 в настоящее время является самым сильным и лучшим выбором с точки зрения общности, анализа и безопасности. (Но не обязательно обязательно. Скорость. Если вы находитесь во встроенных системах, вам нужно выполнить целый другой анализ.)

61
ответ дан Tom Ritter 20 November 2019 в 02:16
поделиться

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

SHA-512 (одна из хеш-функций семейства SHA-2) на данный момент достаточно безопасна, но, возможно, не намного дольше в обозримом будущем. Вот почему NIST начал конкурс на SHA-3.

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

Примечание: я говорил только об одном виде атаки здесь. Реальность хоть и гораздо более нюансированная, но и гораздо сложнее понять. Поскольку хэш-функции очень часто используются для проверки целостности файла / сообщения, коллизия, вероятно, самая простая для понимания и отслеживания.

10
ответ дан Joey 20 November 2019 в 02:16
поделиться

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

Математически говоря, MD5 не «сломан», если вы солите попытки хэша и дросселирования (даже на 1 секунду), ваша безопасность будет так же «сломана», как если бы злоумышленник медленно отбрасывал вашу 1-футовую твердую сталь. стена с деревянной ложкой:

Это займет тысячи лет, и к тому времени все участники будут мертвы; есть более важные вещи, о которых нужно беспокоиться.

Если вы заблокируете их аккаунт к 20-й попытке ... проблема решена. 20 ударов на твоей стене = 0.0000000001% вероятности, что они пройдут. Есть буквально лучший статистический шанс, что вы на самом деле Иисус.

You're thinking about it wrong.

Также важно отметить, что абсолютно любая хеш-функция будет уязвима для коллизий в силу того, что хеш-функция: ) уникальный идентификатор чего-то еще ".

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

Давайте проведем небольшой мысленный эксперимент ...

SHA-2, если бы он существовал, имел бы 4 возможных уникальных идентификатора для чего-то еще ... 00, 01, 10 & amp; 11. Очевидно, это приведет к столкновениям. Вы видите проблему здесь? Хеш - это просто сгенерированный идентификатор того, что вы пытаетесь идентифицировать.

MD5 на самом деле действительно очень хорош при случайном выборе числа на основе входных данных. SHA на самом деле не намного лучше; У SHA просто больше места для идентификаторов.

Используемый метод составляет около 0,1% причины, по которой столкновения менее вероятны. Настоящая причина - большее битовое пространство.

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

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

НАСТОЯЩАЯ ПРОБЛЕМА - это как вы реализуете свою безопасность

Если вы позволите автоматическим атакам достигать вашей конечной точки аутентификации 1000 раз в секунду, вы попадете в нее. Если вы дросселируете до 1 попытки за 3 секунды и блокируете учетную запись на 24 часа после 10-й попытки, это не так.

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

Учитывая, что MD5 использует 128 бит (32 байта в HEX, 16 байтов в двоичном), а SHA 512 занимает только 4-кратное пространство, но практически исключает коэффициент коллизий, предоставляя вам 2 ^ 384 возможных идентификатора ... Идите с SHA- 512, каждый раз.

Но если вы беспокоитесь о том, что на самом деле произойдет, если вы используете MD5, и вы не понимаете реальных, реальных различий, вы все равно, вероятно, будете взломаны, имеет смысл?

3
ответ дан Nick Steele 20 November 2019 в 02:16
поделиться

читает это

Тем не менее, было показано, что MD5 не является устойчивым к столкновениям

больше информации о столкновении здесь

2
ответ дан Fredou 20 November 2019 в 02:16
поделиться

Ему нужен намного больший словарь для отображения в обратном направлении, и он имеет меньшую вероятность столкновения.

0
ответ дан Ignacio Vazquez-Abrams 20 November 2019 в 02:16
поделиться

MD5 имеет шанс столкновения ( http://www.mscs.dal.ca/~selening/md5collision/ ) и есть многочисленные радужные кабины MD5 для обратного Просмотр пароля в Интернете и доступен для загрузки.

1
ответ дан 28 November 2019 в 02:36
поделиться
- 4585783-

Это просто, MD5 сломан;) (см. Википедия )

Брюс Шнаеер написал о нападении, что «[W] E уже знал, что MD5 Сломанная хэш-функция "И что" никто не должен использовать MD5. "

0
ответ дан 28 November 2019 в 02:36
поделиться