Могу ли я предотвратить дублирование контента с помощью md5? - PullRequest
3 голосов
/ 13 июля 2009

Я бы хотел предотвратить дублирование контента. Я не хочу хранить копии контента, поэтому я решил оставить только подписи md5.

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

Как вы думаете, достаточно md5?

Должен ли я использовать md5 и sh1 вместе?

Ответы [ 8 ]

5 голосов
/ 13 июля 2009

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

Сказав это, если вы можете использовать SHA-1 (или SHA-2), вы должны - вы будете немного, но в значительной степени защищены от столкновений.

3 голосов
/ 13 июля 2009

MD5 должно быть в порядке, столкновения очень редки, но если вы действительно беспокоитесь, вы также можете использовать sha-1.

Хотя я полагаю, что подписи на самом деле не такие большие, поэтому, если у вас есть свободные циклы обработки и дисковое пространство, вы можете сделать и то, и другое. Но если пространство или скорость ограничены, я бы просто пошел с одним.

2 голосов
/ 14 июля 2009

Почему бы просто не сравнить байты контента с байтами, если есть коллизия хешей? коллизии хэшей очень редки, и поэтому вам придется делать байты только для проверки байтов очень редко. Таким образом, дубликаты будут обнаружены только в том случае, если элементы действительно дублируются

1 голос
/ 14 июля 2009

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

MD5 слишком сломан, чтобы использовать в любом случае, ИМХО. Подделка хешей MD5 доказана исследователями, которые продемонстрировали способность подделывать контент, который генерирует коллизию MD5, открывая тем самым возможность для создания поддельного CSR для покупки сертификата у RapidSSL для доменного имени, которое им не принадлежит. Безопасность сейчас! эпизод 179 объясняет процесс .

Для меня хэши на основе SHA сильнее, и большинство платформ поддержки поддерживают их, поэтому выбор прост. Тогда оставшимся решающим фактором является размер блока.

1 голос
/ 14 июля 2009

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

1 голос
/ 13 июля 2009

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

0 голосов
/ 13 июля 2009

Отметка времени + md5 вместе достаточно безопасны.

0 голосов
/ 13 июля 2009

MD5 сломан и SHA1 близок к нему. Используйте SHA2.

редактировать

Основываясь на обновлении от OP, не кажется, что преднамеренные столкновения являются серьезной проблемой здесь. Для непреднамеренных будет вполне приемлем любой приличный хеш с хотя бы 64-битным выводом.

В общем, я бы по-прежнему избегал MD5 и даже SHA1, но нет никаких оснований для догматизма. Если инструмент подходит здесь, то обязательно используйте его.

...