MD5 работает принципиально иначе, чем CRC.
Я не знаком с алгоритмами CRC, за исключением того, что знаю, что они обеспечивают базовую защиту целостности с высокой пропускной способностью.
MD5 (наряду с другими в семействе криптографических хеш-функций Меркла-Даамгарда, такими как SHA-1, SHA-256 и т. д.) имеет примерно 4 уровня:
Конструкция Меркле-Даамгарда: состоит из
MD-совместимое заполнение сообщений - для того, чтобы сообщения разной длины приводили к разным последовательностям блоков сообщений. Различные сообщения одинаковой длины не являются основной проблемой для заполнения, совместимого с MD.
Серия итераций функции сжатия $С(ч,м)$, куда $ч$ — дайджест предыдущей итерации функции сжатия (или вектор инициализации, если это начальная итерация); и $м$ блок сообщений для текущей итерации.
Построение функции сжатия из блочных шифров.
Конструкция Дэвиса-Мейерса используется в семействах MD5, SHA-1 и SHA-2. Он шифрует дайджест с помощью блока сообщений в качестве ключа, а затем добавляет или удаляет дайджест в новый выходной блок, чтобы выполнить функцию сжатия. в одну сторону.
Построение блочного шифра.
Есть 2 основные парадигмы - а) Сеть замещения-перестановки (SPN), б) Сеть Фейстеля. Семейство MD5, SHA-1 и SHA-2 использует последний вариант.
Сеть Feistal итеративно изменяет одну половину блока блочного шифра со значением, рассчитанным с использованием функции раунда из другой половины блока - вычисление функции раунда включает в себя подключа, полученный из основного ключа, который в случае хеш-функций является текущий блок сообщений.
Построение круглой функции.
Основная задача сети Feistal состоит в том, чтобы увеличить путаницу и распространение путем итеративного применения функции раунда, а функция раунда должна обеспечивать некоторую необходимую минимальную случайность.
- Парадигма ARX (арифметическое сложение, поворот/сдвиг и операции xor) является популярным выбором.
- Бинарный многочлен — это другое.