Криптографические алгоритмы сами по себе проходят многократную экспертную проверку, прежде чем начинают массово применяться на практике. Бывают, конечно, редкие исключения, но они скорее только подтверждают правило. Одна из криптографических хэш-функций, разработанных Роном Ривестом (Ronald Rivest), называется MD4. Аббревиатура MD расшифровывается как Message Digest (дайджест сообщения). В течение примерно 2-х лет после опубликования спецификации MD4 было представлено как минимум 3 серьезных независимых работы, посвященных криптоанализу хэшфункции MD4. В одной из этих работ описывался взлом последних двух из трех раундов алгоритма обработки данных, а в остальных работах — взлом первых двух раундов. И хотя алгоритм в целом устойчив ко всем этим методам взлома, MD4 не рекомендуется использовать в реальных приложениях. Не лишен недостатков и потоковый алгоритм шифрования, используемый в архивах формата ZIP. Этот алгоритм был разработан Роджером Шлафлай (Roger Schlafly). Внутреннее состояние шифра определяется тремя 32-битовыми регистрами, инициализируемыми следующими значениями: keyO = 0x12345678; keyl = 0x23456789; key2 = 0x34567890;
Алгоритм изменения внутреннего состояния может быть представлен следующей функцией на языке С: unsigned char PKZIP_stream_byte (unsigned char pt) { unsigned short temp; keyO = crc32 (keyO, pt) ; keyl = (keyl + (keyO & OxFF)) * 0x08088405 + 1; key2 = crc32 (key2, keyl » 24); temp = (key2 & OxPFFC) | 2; return ((temp * (temp Л D ) » 8) & OxFF; }
Здесь pt (от "plaintext") содержит следующий байт открытого текста, возвращаемое функцией значение представляет собой следующий байт шифртекста, а сгсзг — макрос или функция, принимающая предыдущее значение CRC32 и очередной байт и вычисляющая следующее значение многочлена CRC32, образованного "магическим числом" 0xEDB88320. Загрузка ключа шифрования (установка состояния внутренних регистров) происходит путем передачи функции PKZip_stream_byte последовательно всех байтов пароля. Возвращаемые значения при этом игнорируются. 8 1994 году Эли Бихэм (Eli Biham) и Пол Кошер (Paul Kocher) опубликовали статью, посвященную атаке на алгоритм шифрования ZIP. Для нахождения ключа шифрования (состояния внутренних регистров после загрузки пароля) достаточно знать 13 последовательных байт открытого текста и примерно 238 раз выполнить действия, предсташтенные в функции PKZIP_ streamjoyte.
Если же объем доступного открытого текста превышает 13 байт, трудоемкость атаки значительно снижается. Так, например, наличие 40 байт открытого текста позволяет найти ключ шифрования всего за 234 операций, 110 байт — за 232 операций, а 1000 байт — за 229. Несмотря на то, что недостатки этого алгоритма были опубликованы почти 9 лет назад, он до сих пор остается самым часто используемым в архивах формата ZIP. Некоторое время назад в архиваторах PKZIP и WinZip появилась поддержка других, более стойких алгоритмов шифрования, но пока новое шифрование не слишком популярно по нескольким причинам. Вопервых, новые форматы зашифрованных данных в PKZIP и WinZip не совместимы между собой — то, что создано одним архиватором, не может быть прочитано другим (и похоже вообще никаким другим архиватором, в то время как старый формат шифрования поддерживали практически все программы, умеющие работать с архивами ZIP). А во-вторых, компания PKWARE, создавшая PKZIP, обвиняет авторов WinZip в том, что, реализовав свое шифрование, они нарушают патенты, принадлежащие PKWARE.