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