Алиса и Боб должны договориться о секретном ключе перед тем, как получат возможность обменяться тайными сообщениями. Если они достаточно сообразительны, то будут регулярно менять ключ, скажем, раз в день. Им необходимо как-то тайно уславливаться об этих ежедневно изменяющихся ключах, так как, перехватив ключ, кто угодно сможет читать все сообщения, зашифрованные с его помощью. Кроме того, поскольку необходима попарная секретность, количество ключей будет возрастать пропорционально квадрату количества пользователей. Двум пользователям нужен только один ключ, но сеть из десяти пользователей требует 45 ключей[19], чтобы предоставить каждой паре возможность секретного общения. А сеть из 100 пользователей потребует 4950 различных ключей. В 80-х годах корабли Военно-Морского флота США отправлялись в плавание с полным набором ключей, предоставляемых Агентством национальной безопасности – каждый ключ был напечатан на бумажной ленте, перфокарте или на чем-нибудь еще; этого было достаточно для всех сеансов связи на все время выполнения задания. Но недостаточно только распространять ключи секретно: их нужно секретно хранить, секретно использовать, а затем секретно уничтожать. Алиса и Боб обязаны хранить свои ключи в тайне в течение всего времени, пока им необходимо общаться друг с другом и быть уверенными, что ни у кого больше нет их ключей. Секретность должна соблюдаться как до и во время использования ключа, так и впоследствии.
Это означает, что уничтожение ключей имеет большое значение. Алиса и Боб не могут просто выбросить свой ключ в корзину в конце работы и надеяться, что его никто не найдет. Перехватчики не пренебрегают хранением зашифрованных посланий, которых не способны прочесть, в надежде, что найдут к ним ключ через несколько дней. Агентство национальной безопасности получило возможность расшифровать русский трафик VENONA (вспомните эту историю; это действительно поучительно) только благодаря тому, что СССР повторно использовал ключ, который, должно быть, ранее выбросил, и тому, что АНБ хранило все эти советские шифрованные сообщения более 10 лет[20].
Есть множество исторических примеров, когда недостаточное внимание к обращению с ключами приводило к разгадке безупречного шифрования. Джон Уокер служил в военно-морском флоте США и был офицером безопасности, ответственным за обеспечение безопасности ключей, но одновременно он делал и другую карьеру, фотографируя ключи флота и отсылая фотографии русским. Японская секта поклонников смерти Аум Синрике зашифровала свои компьютерные записи, но она была настолько неосторожна, что оставили копии ключей на дискете, обнаруженной полицией. Это произошло в 1995 году: не кажется ли вам, что приверженцы культа смерти могли бы к тому времени кое-что знать о ключах.
Что означает «взломать» алгоритм? На первый взгляд очевидно – кто-то сможет прочитать сообщение, не имея ключа. Но на самом деле все сложнее.
Если злоумышленник просто берет зашифрованное сообщение и восстанавливает открытый текст, то такую атаку называют
С большей вероятностью можно встретить
Еще более действенной является
Все эти атаки объединяет то, что аналитикам известны детали алгоритма. (Единственным исключением, которое мне известно, сегодня является японский код PURPLE.) Это не просто ученый ярлык, а очень хороший механизм. Если в программах будут использовать какой-то алгоритм, то его «раскрутят» и в обратную сторону. Среди секретных когда-то алгоритмов, которые уже «раскрутили» – RC4, все алгоритмы шифрования цифровой сотовой связи, DVD– и DIVX-алгоритмы шифрования видеоизображений и алгоритм Firewire. Захватят и расшифруют даже алгоритмы, глубоко запрятанные в военном оборудовании. Примерами могут служить «Энигма» во Второй мировой войне[21] или почти все алгоритмы НАТО и Варшавского договора во времена холодной войны. (Мы их не знаем, но весьма компетентные военные занимались их расшифровкой.) Полезно предполагать, что врагу известны подробности вашего алгоритма, потому что в конечном итоге они все равно станут ему известны. Август Керхкофф первым сформулировал это положение в 1883 году: «В алгоритме нет никакой тайны, вся тайна в ключе».
В разговоре об атаках всегда возникает один вопрос: как криптоаналитик распознает открытый текст? Ответ прост: его легко узнать, потому что он выглядит как открытый текст. Это сообщение на английском языке или файл компьютерного приложения, изображение в формате JPEG или база данных в каком-нибудь приемлемом формате. Когда вы смотрите на расшифрованный файл, он похож на что-нибудь вам известное. Когда вы смотрите на зашифрованный файл или файл, расшифрованный с применением неправильного ключа, он выглядит как полная тарабарщина. Человек или компьютер могут понимать эту разницу.
В 1940-х годах Клод Шеннон ввел понятие
Например, алгоритм RC4 зашифровывает данные в байтах. Представьте себе одну единственную букву в ASCII-кодировке в качестве открытого текста. На 26 букв приходится 256 возможных вариантов кодирования. Любой случайный ключ, если использовать его для расшифровки этого текста (буквы), с вероятностью 26/256 даст верный открытый текст. У аналитика нет никакого средства, позволяющего отличить ошибочный открытый текст от правильного.
Представьте теперь сообщение электронной почты размером 1 Кбайт. Аналитик пытается применять случайные ключи, и в конечном счете возникает открытый текст, который выглядит как сообщение электронной почты: слова, фразы, предложения, грамматика. Вероятность того, что это неправильный открытый текст, бесконечно мала.
Для стандартного англоязычного сообщения расстояние уникальности равно К/6,8, где К – это длина ключа в битах. (6,8 – степень естественной избыточности английского языка. Для других открытых текстов она будет больше или меньше, но незначительно.) Для ASCII-кода, применяемого согласно стандарту DES, расстояние уникальности составляет 8,2 байт. Для 128-битового шифра это примерно 19 байт. Таким образом, для англоязычных сообщений, длина которых превышает 19 байт, расшифрованный текст, похожий на английский, с большой вероятностью будет истинным открытым текстом. Почти такое же