Умышленно создавать два файла, чтобы иметь одинаковый хэш?

StackOverflow https://stackoverflow.com/questions/622930

Вопрос

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

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

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

Это было полезно?

Решение

MD5, как правило, считается небезопасным, если коллизия хешей является серьезной проблемой SHA1 также больше не считается приемлемым правительством США. is проводился конкурс , чтобы найти заменяющий хеш алгоритм, но на данный момент рекомендуется использовать семейство SHA2 - SHA-256, SHA-384 или SHA-512. [ Обновление: 2012-10-02 NIST выбрал < a href = "http://en.wikipedia.org/wiki/Keccak" rel = "noreferrer"> SHA-3 в качестве алгоритма Keccak . ]

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

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

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

Другие советы

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

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

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

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

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

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

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

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

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

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

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

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

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

Еще один хороший вариант - Соленый MD5 . Например, к входу в вашу хэш-функцию MD5 добавляется строка " acidzom! @ # & Quot; до перехода к функции MD5.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top