Почему наличие кода для функции MD5 не помогает хакерам взломать его? - PullRequest
6 голосов
/ 28 апреля 2011

Я полагаю, что могу загрузить код в PHP или Linux или что-то еще и посмотреть непосредственно на исходный код функции MD5.Разве я не смогу затем реконструировать шифрование?

Вот код - http://dollar.ecom.cmu.edu/sec/cryptosource.htm

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

Ответы [ 3 ]

9 голосов
/ 28 апреля 2011

Это на самом деле хороший вопрос.

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

MD5 является публичным с 1992 года . Не существует никакого секрета и никогда не было никакого секрета в дизайне MD5.

MD5 считается криптографически взломанным с 2004 года, года публикации первого столкновения (два разных входных сообщения, которые дают одинаковый вывод); он считался «слабым» с 1996 года (когда были обнаружены некоторые структурные свойства, которые, как считалось, в конечном итоге помогут при столкновениях зданий). Однако есть и другие хеш-функции, которые так же общедоступны, как и MD5, и для которых еще не известно ни одной слабости: семейство SHA-2 . Новые хэш-функции в настоящее время оцениваются в рамках конкурса SHA-3 .

Действительно тревожная часть заключается в том, что нет известных математических доказательств того, что хеш-функция действительно может существовать. Хеш-функция - это публично описанный эффективный алгоритм, который может быть встроен в виде логической схемы конечного, фиксированного и небольшого размера. Для практиков вычислительной сложности несколько удивительно, что можно показать схему, которая не может быть инвертирована. Поэтому сейчас у нас есть только кандидатов : функции, для которых еще никто не нашел слабых мест, а не функция, для которой нет слабых мест. С другой стороны, случай MD5 показывает, что, по-видимому, переход от известных структурных недостатков к фактическим столкновениям с атаками занимает значительное время (недостатки в 1996 г., столкновения в 2004 г., примененные столкновения - к паре X.509 сертификатов - в 2008 году), поэтому в настоящее время существует тенденция использовать алгоритм agility : когда мы используем хеш-функцию в протоколе, мы также думаем о том, как мы можем перейти к другой, если хеш-функция окажется быть слабым.

8 голосов
/ 28 апреля 2011

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

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

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

8 голосов
/ 28 апреля 2011

Это не шифрование, а односторонний механизм хеширования .Он переваривает строку и создает (, мы надеемся, ) уникальный хеш.

Если бы это было обратимое шифрование, форматы zip и tar.gz были бы довольно многословными,:)

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

Кроме того, многие разработчики переходят на bcrypt , который включает в себя коэффициент работы, если хеширование занимает 1 секунду, а не 0,01 секунды, это значительно замедляет генерацию радужной таблицы для вашего приложения и тех старых сайтов PHP, использующих md5() становятся только низко висящими фруктами.

Дополнительная информация о bcrypt .

...