2009-03-08 8 views
5

Если кто-то намеренно пытается изменить два файла на один и тот же хеш, каковы способы их остановить? Могут ли md5 и sha1 предотвратить большинство случаев?Целенаправленно создайте два файла, имеющих одинаковый хэш?

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

Каков наилучший способ предотвратить это?

+0

Что вы пытаетесь достичь? –

+0

Вы меня потеряли во втором абзаце, можете ли вы пересмотреть? –

ответ

18

MD5 обычно считается небезопасным, если хеш-коллизии являются серьезной проблемой. SHA1 также более не считается приемлемым правительством США. Там is был competition, чтобы найти альтернативный алгоритм хеширования, но в настоящий момент рекомендуется использовать семейство SHA2 - SHA-256, SHA-384 или SHA-512. [Обновление: 2012-10-02 NIST выбрал SHA-3 быть алгоритмом Keccak.]

Вы можете попытаться создать свой собственный хеш - он, вероятно, не так хорош, как MD5, и «безопасность через безвестность» также не рекомендуется.

Если вы хотите безопасности, хэш с несколькими алгоритмами хеширования. Возможность одновременного создания файлов с хэш-коллизиями с использованием ряда алгоритмов чрезмерно маловероятна. [И, в свете комментариев, позвольте мне пояснить: я имею в виду опубликовать значения SHA-256 и Whirlpool для файла, а не комбинировать хеш-алгоритмы для создания одного значения, но используя отдельные алгоритмы для создания отдельных значений. Как правило, поврежденный файл не будет соответствовать ни одному из алгоритмов; если, возможно, кому-то удалось создать значение столкновений с использованием одного алгоритма, вероятность возникновения второго столкновения в одном из других алгоритмов незначительна.]

Public TimeStamp использует массив алгоритмов. См., Например, sqlcmd-86.00.tgz для иллюстрации.

+0

MD5 полностью сломан. Это барахло и никогда не должно использоваться в новых системах. Объединение нескольких хэш-функций - это хорошая идея ТОЛЬКО, ЕСЛИ вам нужен очень длинный (> 512 бит) хеш. В противном случае один длинный хеш будет сильнее: SHA2-384 имеет более низкую вероятность столкновения, чем, скажем, SHA1 и RIPEMD-160. – kquinn

+2

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

+1

Что я имею в виду и что иллюстрирует веб-сайт Public TimeStamp, публикует одновременно SHA-256, RIPEMD-160, SHA1 и, возможно, Whirlpool хэши; 4 независимых хэша одного и того же файла. Даже если один хеш побежден, шансы одного и того же файла также победить других незначительны. –

2

Почему вы пытаетесь создать свой собственный алгоритм хеширования? Что случилось с SHA1HMAC?

Да, есть повторы для хешей.
Любой хеш, который короче, чем обычный текст, обязательно меньше информации. Это означает, что будут некоторые повторы. Ключ для хэшей заключается в том, что повторы трудно перепроектировать.

Рассмотрите CRC32 - обычно используется как хэш. Это 32-битное количество. Поскольку во Вселенной содержится более 2^32 сообщений, то с CRC32 будут повторяться. Такая же идея относится и к другим хэшам.

+0

На самом деле создание конфликтов с CRC32 намного проще, чем 2^31 оценки хэша. Этот хеш не имеет даже 32-битной безопасности «безопасный» 32-битный хеш (например, 32 бит SHA-512). –

1

Это называется «хеш-столкновение», и лучший способ избежать этого - использовать сильную хэш-функцию. MD5 относительно легко искусственно создавать встречные файлы, как видно here. Точно так же известно, что для вычисления сталкивающихся файлов SH1 существует relatively efficient method, хотя в этом случае «относительно эффективный» по-прежнему берет часовое время вычисления.

Как правило, MD5 и SHA1 по-прежнему дорого взломать, но не невозможно. Если вы действительно беспокоитесь об этом, используйте более сильную хэш-функцию, например, SHA256.

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

Если вы действительно хотите узнать больше об этом, посмотрите на Schneier's Applied Cryptography.

+0

Имейте в виду, что Шнайер выразил оговорки в отношении ценности этой книги для людей. Цитата была связана с большим количеством плохого криптографического кода, написанного людьми, которые прочитали «Прикладная криптография». Но это хорошо читать. – dmckee

+1

Это замечательно, если вы заинтересованы в деталях gory. Оговорки Шнайера в основном касались того факта, что математика за криптографией - это самая безопасная часть современного криптографии, и эта книга не затрагивает человеческие проблемы, в которых лежат реальные проблемы. –

+0

@Bill: Да. Хорошее резюме. – dmckee

0

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

Другая полезная опция Соленая MD5. Например, вход в вашу хеш-функцию MD5 добавляется со строкой «acidzom! @ #» Перед тем, как перейти к функции MD5.

Существует также хорошее чтение на Slashdot.

+3

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

4

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

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

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

+0

День рождения Парадокс? 2^128, я думаю ... Тем не менее, ужасно много ... –

+1

Вы не делите экспонента на 2, вы уменьшите его на единицу, поэтому это 255 вместо 256. –

+2

Следите за разницей между сопоставляя заданную цель и пытаясь создать встречную пару. Взгляд Билла о первом, Джонатан о последнем. – dmckee

2

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

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