Выбрать главу

В самом первом продукте, MS Office 95, уже имелись средства шифрования документов. Но реально шифрование сводилось к применению побитовой операции XOR к паролю пользователя и тексту документа. С точки зрения криптоанализа защиты это не обеспечивало. Создавалась лишь ее видимость - превращение читаемого текста в нечитаемый.

Применение шифров из арсенала бойскаутов в тот период, когда миру уже была прекрасно известна программа PGP - символ общедоступного и очень сильного крипто, конечно, не злой умысел (или невежество) Microsoft. Просто все предыдущие десятилетия американские законы считали стойкие криптосредства столь же опасным военным товаром, как наступательные виды оружия, и они подлежали строжайшим экспортным ограничениям. В течение 1990-х годов, впрочем, эти драконовские законы были заметно ослаблены, а вместе с ними менялась и стойкость криптографии в Windows и MS Office.

В частности, в последующих версиях программ начали применять вполне качественный поточный шифр RC4. Правда, в ранних экспортных версиях ПО длина ключа ограничивалась всего лишь 40 битами. При такой длине шифры, как известно, без проблем вскрываются на ПК лобовым (тотальным) перебором всех возможных ключевых комбинаций. Но после коррекции экспортных законов к концу 1990-х пользователям новых версий Microsoft Office, в принципе, стали доступны теоретически стойкие шифрсредства - в частности, RC4 с длиной ключа 128 бит. Вот только на практике шифр оказался реализован так, что надежной защиты данных с его помощью все равно не получалось.

Среди фундаментальных основ криптографии имеется очень важное правило: если для засекречивания используется поточный шифр (наложение на открытый текст постоянно изменяющейся шифрпоследовательности), то никогда одну и ту же шифрпоследовательность не накладывают на два разных документа (разными в данном случае считаются любые модификации файла, включая вставку или изъятие единственного знака). Если же это сделано, то всего по двум одноключевым документам шифрование можно развалить и прочитать оба текста - причем сам ключ и его длина никакой роли не играют. В годы Второй мировой войны английские криптоаналитики из-за такого рода ошибок германских шифровальщиков смогли полностью вскрыть криптосхему шифратора "Шлюссельцузатц". Позже это позволило им с помощью "суперкомпьютера" Colossus вскрывать ключи и читать всю переписку противника.

В программных же продуктах Microsoft шифр RC4 был реализован таким образом, чтобы одноключевые комплекты порождались ВСЕГДА. Ключ без затей генерировался на основе пароля доступа к документу, поэтому разные версии документа шифровались одним и тем же ключом. Как известно, разные версии одних и тех же файлов присутствуют в системе очень часто - в резервных кэшах, как архивные копии, как совместно подготавливаемые документы и т. д. Для таких случаев в криптографии есть элементарнейший способ недопущения одноключевых комплектов - подмешивание в ключ наряду с паролем уникального, одноразового "вектора инициализации" (IV, initialization vector), который не является секретом, но всякий раз делает шифрпоследовательность иной.

То, что в Microsoft почему-то уклоняются от использования IV в поточном шифре, впервые стало известно в 1999 году еще для Windows NT - когда хакеры обнаружили слабости в системе защиты криптоключей Syskey. Серьезные оплошности в реализации криптографии допускаются регулярно и почти всеми разработчиками (см. врезку о WEP), однако в Microsoft не только проигнорировали тревожные сигналы, но и перенесли ту же самую слабость в последующие версии системы. В частности, в 2005 году, когда уже вышли Windows XP и Office 2003, стало известно, что все та же по сути уязвимость - отсутствие IV и систематическое порождение одноключевых комплектов - выявлена в документах, подготовленных и зашифрованных программами MS Word и MS Excel с помощью RC4.

В принципе, в качестве вектора инициализации можно использовать самую разную информацию - хоть системный штамп о текущих дате-времени. Но с точки зрения криптографии наиболее грамотное решение - вырабатывать IV с помощью генератора псевдослучайных чисел. И если на протяжении многих лет наличие PRNG в системе игнорировалось, причем с очевидным ущербом для безопасности, то крайне сложно поверить, будто сделано это неумышленно.

Впрочем, и в тех ситуациях, когда PRNG используется для генерации секретных ключей или других криптопоследовательностей, делается это весьма небезопасным образом.