Многие современные программы упаковки данных (архиваторы) имеют встроенную поддержку шифрования. Если пользователь пожелает защитить от чужих глаз информацию, находящуюся в архиве, ему надо при упаковке ввести пароль, а архиватор сам выполнит все остальные действия. При попытке извлечения зашифрованного файла архиватор запросит у пользователя пароль и распакует файл только в том случае, если пароль верен. Стоит отметить, что зашифрование всегда выполняется после компрессии, т. к. зашифрованные данные должны быть неотличимы от случайной последовательности, и, следовательно, архиватор не сможет найти в них избыточность, за счет удаления которой и происходит упаковка.
15.1.1. ZIP Свойства алгоритма шифрования, использованного в архивном формате ZIP, уже многократно обсуждались в этой книге. Не повторяя детали, вспомним, что алгоритм шифрования уязвим к атаке на основе открытого текста и достаточно знать 12 незашифрованных байт (после компрессии), чтобы расшифровать весь файл за приемлемое время. Для архивов, содержащих 5 и более файлов и созданных архиваторами, основанными на библиотеке InfoZIP, возможна атака, использующая в качестве открытого текста данные из заголовков зашифрованных файлов. Этой атаке были подвержены файлы, созданные при помощи WinZIP, но в последних версиях этого архиватора проблема была исправлена. Еще в июле 2002 года компания PKWARE, Inc. выпустила версию архиватора PKZIP, поддерживающего более стойкие алгоритмы шифрования. Но, видимо, по той причине, что PKZIP позиционируется как продукт для корпоративных пользователей, новое шифрование не получило широкого распространения.
15.1.2. ARJ Популярный во времена DOS, но довольно редко используемый в настоящее время архиватор, разработанный Робертом Янгом (Robert Jung), исполь- зовал следующий алгоритм шифрования. Из пароля по очень простому обратимому алгоритму получалась гамма, равная по длине паролю. Эта гамма накладывалась на шифруемые данные путем сложения по модулю 2 (операция хсж). Таким образом, наличие открытого текста, равного по длине паролю, позволяло моментально определить гамму и использованный пароль. Более того, в самом начале упакованных данных содержалась информация компрессора, такая как таблицы Хаффмана (Huffman tables), и часть этой информации могла быть предсказана, что позволяло значительно повысить скорость поиска пароля перебором. Начиная с версии 2.60 (ноябрь 1997 года) ARJ поддерживает шифрование по алгоритму ГОСТ 28147-89.
15.1.3. RAR Архиватор, разработанный Евгением Рошалем (Eugene Roshal), является неплохим примером того, как можно подходить к шифрованию данных. В алгоритме шифрования, используемом в RAR версии 1.5, есть некоторые недочеты. Так эффективная длина ключа шифрования составляет всего 64 бита, т. е. перебором 264 вариантов ключа можно гарантированно расшифровать пароль. Более того, наличие открытого текста позволяет уменьшить множество перебираемых вариантов до 240. Следовательно, атака может быть успешно выполнена даже на одном компьютере. Скорость перебора на компьютере с процессором Intel Pentium ИГ 333 МГц составляет примерно 600 000 паролей в секунду. При переходе к версии 2.0, видимо, была проведена серьезная работа над ошибками. Во всяком случае, взлом нового алгоритма шифрования перебором требует примерно 21023 операций, что намного больше, чем может быть выполнено на современной технике. Об эффективных атаках, использующих открытый текст, ничего не известно. Скорость перебора паролей сни- зилась примерно до 2000 штук в секунду (в 300 раз). Но разработчики RAR решили не останавливаться на достигнутом. В версии 3.0, появившейся в мае 2002 года, для шифрования стал использоваться алгоритм AES (Rijndael) с ключом длиной 128 бит. Такое решение выглядит вполне разумным как минимум по двум причинам. Во-первых, безопаснее использовать проверенный и хорошо зарекомендовавший себя алгоритм, чем нечто самодельное, и у AES здесь нет конкурентов. А во-вторых, у AES скорость шифрования выше, чем у алгоритма, использованного в RAR 2.O. Кроме замены алгоритма шифрования, в RAR 3.0 используется и другая процедура получения ключа шифрования из пароля. Эта процедура требует вычисления хэш-функции SHA1 262 144 раза, что позволяет перебирать около 3-х паролей в секунду, т. е. в 600 раз меньше, чем для RAR 2.O.