Умышленно создавать два файла, чтобы иметь одинаковый хэш? - PullRequest
5 голосов
/ 08 марта 2009

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

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

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

Ответы [ 6 ]

18 голосов
/ 08 марта 2009

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

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

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

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

4 голосов
/ 08 марта 2009

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

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

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

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

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

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

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

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

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

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

1 голос
/ 08 марта 2009

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

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

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

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

0 голосов
/ 08 марта 2009

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

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

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

...