Книга: Криптография. Как защитить свои данные в цифровом пространстве
Назад: 2. Ключи и алгоритмы
Дальше: 4. Обмен секретной информацией с незнакомцами

3. Хранение секретной информации

Чтобы получить представление о полном спектре защитных механизмов, которые криптография предоставляет нам в киберпространстве, понятие безопасности следует разделить на несколько основных направлений. Первое из них – возможность надежно хранить секретную информацию.

Конфиденциальность

Когда людям предлагают поговорить о «защите» информации, большинству сразу же приходит на ум конфиденциальность – возможность выбрать, кто получит доступ к нашим (конфиденциальным) данным.

Секреты есть у всех. Речь идет не только о крайне деликатной информации, раскрытие которой унизит вас. Любые сведения, которые касаются вас и которые вы бы не хотели увидеть опубликованными в газете, секретны. Это все, чем вы с радостью делитесь с одними людьми, но скрываете от других. Определенно, ваши банковские реквизиты, пароли и PIN-коды относятся к этой категории, как и ваши адрес, дата рождения и семейные фотоальбомы. Представьте, что к вам на улице подошел незнакомец и начал настойчиво выспрашивать имена ваших детей и что вы вчера ели на ужин. Каким бы был ваш ответ? Если бы вы отказались, эти сведения тоже можно было бы считать секретными. У всех нас есть то, чем мы не хотели бы делиться со всеми и каждым.

Конфиденциальную информацию часто ассоциируют с личной, существование которой в более широком смысле объясняется желанием и возможностью скрывать от других те или иные сведения. Как высказался Эрик Хьюз в своем «Манифесте шифропанка»: «Личное дело – это то, чем мы бы не хотели делиться со всем миром, а секрет – то, что мы хотим скрыть ото всех. Приватность – это способность выборочно раскрывать информацию о себе». Механизмы безопасности, направленные на обеспечение конфиденциальности, можно использовать для сохранения приватности, но приватность как таковая не ограничивается хранением секретов.

Конфиденциальность очень важна в материальном мире. Мы обеспечиваем конфиденциальность документов, запечатывая их в конверт, закрывая на ключ в картотеке или пользуясь услугами надежных курьеров. Мы понижаем голос и обсуждаем секреты за закрытыми дверями, чтобы ограничить круг тех, кто нас может услышать.

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

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

Игра в прятки

Ребенок возвращается из школы с плохими отметками и не хочет, чтобы узнали родители. Этой информации срочно требуется механизм конфиденциальности! Ребенок кладет (то есть прячет) табель или дневник под матрас или в один из ящиков с одеждой.

Ключевой элемент успеха здесь состоит в том, чтобы тот, кто находится рядом с тайником, не видел очевидных признаков спрятанного объекта. Даже когда под матрасом спрятан дневник, кровать выглядит как всегда. Выдвижной ящик по-прежнему в полном беспорядке после того, как под груду футболок положили табель.

Цифровая информация тоже может быть спрятана среди обычных, на первый взгляд, цифровых объектов. Примером этого может служить цифровое изображение. Оно состоит из сотен отдельных пикселей, которые человеческий глаз не способен различить ввиду их малого размера. У каждого пикселя есть определенный цвет, который, как и многие другие данные, представлен последовательностью битов. Некоторые из этих битов критически важны, другие используются лишь для тонкого регулирования итогового цвета. Изменение этих менее чувствительных битов пройдет незаметно для наблюдателя; следовательно, их можно с легкостью заменить другими битами с какой-то информацией, которую мы хотим скрыть. Сторонний наблюдатель увидит все то же изображение, но если знать, где искать, можно извлечь скрытую информацию.

Все мы в детстве играли в прятки и знаем, что прятаться – рисковое дело: тебя всегда могут найти. Табель с большой долей вероятности обнаружат во время уборки. А если кто-то заподозрит, что цифровое изображение может содержать скрытую информацию, анализ пикселей раскроет секрет.

Основное преимущество сокрытия по сравнению с механизмами конфиденциальности – то, что вы прячете не только информацию, но и сам факт ее существования. Пока родители провинившегося ребенка не встретят в школьном дворе знакомых и не начнут обсуждать отметки, они не узнают, что табель успеваемости уже выдали. Люди, рассматривающие цифровое изображение, даже не догадываются, что оно содержит какой-то секрет.

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

Во всех этих примерах сокрытие информации оказывается не только лишним, но и нереалистичным. Как бы вы ее скрыли? Когда вы звоните кому-то, вы намерены отправить только данные, кодирующие ваш голос, а не какой-то дополнительный объект, в котором можно спрятать информацию о звонке. Любой цифровой объект, в котором можно было бы что-то скрыть, намного больше данных с конфиденциальным разговором, и это само по себе делает «игру в прятки» чрезвычайно неэффективной.

В целом сокрытие информации – не самый надежный способ обеспечения конфиденциальности. Раздел науки, изучающий механизмы сокрытия информации, называется стеганография (что в переводе с греческого буквально означает «тайнопись»), и у нее есть определенные узкие сферы применения. С ее помощью преступник может скрыть инкриминирующие материалы на своем компьютере так, что никто даже не догадается об их существовании. Стеганография применяется в сфере защиты цифровых прав, когда цифровой контент помечается особым образом без заметного ухудшения качества. Стеганография может пригодиться, если нужно укрыть какую-то информацию от правительства или руководства, объявившего использование механизмов конфиденциальности незаконным. Авторитарному режиму сложно обвинить человека в хранении секретов, если их существование нельзя доказать.

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

Стеганография и криптография – разные вещи. Можно сказать, что стеганография эффективна в качестве механизма конфиденциальности только в том случае, когда сама скрытая информация уже зашифрована. Обычный человек использует стеганографию либо редко, либо вообще никогда, в то время как криптография стала неотъемлемой частью нашей повседневной жизни.

Взлом кодов

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

Как замаскировать информацию? Нам нужно привести ее к такому виду, чтобы она казалась бессмысленной любому постороннему наблюдателю. Следовательно, нам нужен алгоритм.

Давайте рассмотрим очень простой пример такого алгоритма. Допустим, информация, которую мы хотим защитить, состоит из букв, скажем, TOPSECRET. Это обычный (или исходный) текст – информация до того, как ее замаскируют. Чтобы проиллюстрировать этот процесс, я воспользуюсь шифром Атбаш – изменением порядка следования букв алфавита на противоположный. Иными словами, каждая буква исходного текста заменяется буквой в той же позиции, но взятой из алфавита, записанного в обратном порядке: вместо A подставляется Z, вместо B – Y, вместо C–X и т. д. Полный алгоритм представлен в следующей таблице.



Обычный текст A B C D E F G H I J K L M N O P Q R S T U V W X Y Z

Зашифрованный текст Z Y X W V U T S R Q P O N M L K J I H G F E D C B A



Алгоритм шифрования Атбаш заменяет каждую букву в верхнем ряду этой таблицы буквой из нижнего ряда. Таким образом исходный текст TOPSECRET превращается в GLKHVXIVG. Эту вторую последовательность букв, которая может выглядеть бессмысленной, называют зашифрованным текстом или шифротекстом.

Шифротекст – это то, что мы отправляем предполагаемому получателю секретного сообщения. Любой, кто наблюдает со стороны, видит лишь GLKHVXIVG. Но получатель знает, что мы преобразовали простой текст в зашифрованный с помощью шифра Атбаш, поэтому для восстановления оригинала он использует обратный алгоритм: заменяет каждую букву в нижнем ряду соответствующей буквой верхнего ряда. Таким образом получатель успешно избавляется от маскировки и превращает GLKHVXIVG обратно в TOPSECRET.

Насколько эффективен шифр Атбаш в качестве механизма конфиденциальности? Вообще-то он считается очень слабым по многим причинам, самая важная из которых связана с моим предыдущим наблюдением: нельзя полагаться на секретность самого алгоритма. Как утверждал Огюст Керкгоффс (и я с ним согласен), мы всегда должны исходить из того, что используемый нами алгоритм известен всем, даже если в реальности это не так. В примере применяется шифр Атбаш, поэтому следует предполагать, что о замене Z на A, Y на B и т. д. знают все. Следовательно, ни для кого не секрет, что шифротекст GLKHVXIVG соответствует обычному тексту TOPSECRET. Вот вам и конфиденциальность!

Проблема шифра Атбаш проста: любому, кто знает, что мы его используем, известно, как преобразовать зашифрованный текст обратно в обычный, поскольку для этого предусмотрен только один способ. Шифр Атбаш не может обеспечить конфиденциальность, поскольку совершенно лишен вариативности. Говоря иначе, его проблема в том, что это алгоритм без ключа.

Алгоритмы, шифрующие информацию без использования ключа, часто называют кодами. Обычно цель кода состоит в том, чтобы преобразовать информацию каким-то образом, но не для секретности. Наверное, самым известным кодом можно назвать азбуку Морзе, которая заменяет буквы короткими последовательностями точек и тире. Она была разработана для передачи информации по телеграфу. Последовательности точек и тире позволяют превращать алфавитно-цифровые символы в короткие и длинные электромагнитные сигналы. Эта технология не имеет ничего общего с конфиденциальностью. Действительно, если бы международный сигнал бедствия «точка точка точка тире тире тире точка точка точка», переданный тонущим кораблем, не смогли расшифровать на проплывающем поблизости судне, это было бы катастрофой. Это шифротекст, который должен уметь расшифровать кто угодно.

Но иногда коды дают обманчивое ощущение конфиденциальности. Время от времени вам могут предлагать «взломать код» (я уже сбился со счета, сколько раз мне говорили, что это моя работа как криптографа). На протяжении столетий египетские иероглифы представляли собой аналогичную проблему для исследователей Древнего Египта. Их значения удалось восстановить только в начале девятнадцатого века. Однако иероглифическое письмо никогда не предназначалось для обеспечения конфиденциальности. С исчезновением древнеегипетской культуры люди просто забыли подробности алгоритма, который кодировал понятия в иероглифы. Повторного открытия этого алгоритма оказалось достаточно, чтобы наполнить иероглифы смыслом. Древние египтяне точно не стали бы рассматривать это как нарушение их безопасности.

Еще один известный код упоминается в романе Дэна Брауна Код да Винчи, посвященном секретам, загадкам и интригам. Одна из главных героинь этого романа, криптограф Софи Неве, якобы училась в Королевском колледже Холлоуэй при Лондонском университете, где я в настоящий момент работаю. Во времена, когда эта книга лидировала в списках бестселлеров, многие новостные издания обращались ко мне с вопросами о криптографии, которую описывал Дэн Браун.

Тем не менее превосходное знание криптографии совершенно не пригодилось Софи Неве, поскольку в Коде да Винчи нет ничего криптографического. В раскрытии тайн и головоломок, которыми наполнена книга, Софи в основном помогает нестандартное мышление. Ближе всего к настоящей криптографии она оказывается в момент осознания, что одна из головоломок содержит текст, преобразованный шифром Атбаш. Поскольку этот шифр, как вам уже известно, не обеспечивает конфиденциальности, Софи почти моментально «вскрывает» секретное сообщение.

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

Делаем Атбаш конфиденциальным

Давайте «исправим» шифр Атбаш. Чтобы превратить его в нечто более полезное, буквы в исходном тексте должны кодироваться по-разному. В шифре Атбаш единственный способ кодирования переворачивает алфавит задом наперед. Но можно сделать так, чтобы это был лишь один из многих способов кодирования, а в идеале таких способов должно быть неограниченное количество. В результате получится так называемый шифр простой замены.

Шифр простой замены тоже проще всего представить в виде таблицы, только во втором ряду вместо обратного алфавита будет случайная последовательность букв без повторений. Как и Атбаш, этот алгоритм заменяет каждую исходную букву в первом ряду зашифрованной буквой снизу. Например, если шифр простой замены выглядит так:



Обычный текст A B C D E F G H I J K L M N O P Q R S T U V W X Y Z

Зашифрованный текст D I Q M T B Z S Y K V O F E R J A U W P X H L C N G



то строка TOPSECRET превращается в PRJWTQUTP. А если он имеет следующий вид:



Обычный текст A B C D E F G H I J K L M N O P Q R S T U V W X Y Z

Зашифрованный текст N R A W K I L F O C T E Y P V J S D B X H M Z U Q G



текст TOPSECRET будет закодирован в XVJBKADKX.



Можно ли считать это прогрессом? В шифре Атбаш алгоритм кодирования подставляет Z вместо A, Y вместо B и т. д. Конфиденциальность здесь невозможна, потому что алгоритм известен всем, и каждый знает, что буква A заменяется буквой Z и т. д. В шифре простой замены, представленном выше, алгоритм кодирования меняет A на N, B на R, C на A и т. д. Чем же это отличается от шифра Атбаш, учитывая, что алгоритм общеизвестный?

Разница на самом деле огромна! Ключевой ее аспект состоит в том, что алгоритм кодирования в шифре простой замены из нашего последнего примера не звучит как «заменить A на N, B на R, C на A и т. д.». Вместо этого его можно сформулировать так: заменить букву в верхнем ряду таблицы соответствующей буквой из нижнего ряда». Алгоритм знают все, но невозможно сказать, какая именно таблица была использована в конкретном случае. Эта информация отделяет тех, кому предназначено сообщение, от всех остальных. Конкретная таблица становится ключом.

Давайте посмотрим, как это работает. Представьте, что вы отправляете своему другу конфиденциальное сообщение с помощью шифра простой замены.

Сначала вам нужно договориться о секретном ключе, иными словами – условиться о случайной последовательности букв. Предположим, вам это каким-то образом удалось. Например, вы могли выбрать тот же ключ, который показан в нашем последнем примере – последовательность N, R, A, …, U, Q, G. Если вы хотите послать текст TIMEFORCAKE, вам нужно свериться с таблицей и заменить буквы в верхнем ряду соответствующими буквами из нижнего ряда: получится XOYKIVDANTK. Вы отправляете эту строку своему другу, и он, используя ту же таблицу, восстанавливает исходное TIMEFORCAKE.

Теперь посмотрим глазами злоумышленника, который хочет узнать содержание ваших секретных сообщений. Предположим, что ему известен алгоритм, то есть он знает, что вы используете шифр простой замены, и может видеть шифротекст, который вы отправляете. Если бы вы использовали Атбаш, злоумышленник мог бы легко восстановить исходный текст. Но он имеет дело с шифром простой замены и знает лишь то, что буквы исходного текста перемешиваются в соответствии с неизвестной ему последовательностью. Буква X в зашифрованном тексте, равно как O и Y, могла заменить любую другую букву.

Насколько безнадежна ситуация, в которой оказался злоумышленник? Что ж, у него всегда есть крайний вариант: он может попытаться подобрать неизвестный ему ключ. Поскольку ключ был сгенерирован произвольным образом, злоумышленник должен угадать случайную последовательность букв в алфавите, надеясь, что ему повезет. Чтобы вычислить вероятность успеха, необходимо определить, сколько всего возможных комбинаций у последовательности из 26 букв.

Сделать это довольно легко. Первая буква может быть любой из 26, поэтому вариантов 26. В качестве второй буквы можно выбрать любую, кроме первой, поэтому остается 25 вариантов. Следовательно, существует 26 × 25 = 650 возможных комбинаций первых двух букв. Третья буква может быть любой, кроме тех двух, которые мы уже выбрали, поэтому остается 24 варианта. Таким образом для первых трех букв существует 26 × 25 × 24 = 15 600 комбинаций. И так далее.

В итоге получается, что число возможных последовательностей из 26 букв равно 26 × 25 × 24 × 23 × 22 × 21 × 20 × 19 × 18 × 17 × 16 × 15 × 14 × 13 × 12 × 11 × 10 × 9 × 8 × 7 × 6 × 5 × 4 × 3 × 2 × 1 = 403 291 461 126 605 635 584 000 000. Насколько большое это число? Чтобы не вводить все это в калькулятор, наберите «26» и нажмите кнопку с символом «!» (факториал). Если ваш калькулятор не очень мощный, эта операция может свести его с ума, и вместо результата он вернет сообщение об ошибке: ответ слишком большой. Более продвинутый калькулятор сообщит о том, что факториал 26 – это нечто невообразимое. Чего он вам не скажет, так это то, что данный ответ примерно в 40 000 раз превышает количество звезд во вселенной. Проще говоря, угадывание того, какой из возможных ключей выбрали вы с вашим другом – затея совершенно безнадежная, и злоумышленнику не стоит тратить на нее свое время.

Шифр Атбаш – это лишь один из 26! возможных вариантов шифра простой замены. Если ключ выбран случайным образом, вероятность получения шифра Атбаш или любой из двух других таблиц, описанных ранее, крайне низка. И каждый из этих ключей даже менее вероятен, чем выбор одной конкретной звезды, если бы звезд во вселенной было в 40 000 раз больше. Даже если в результате невероятного стечения обстоятельств вам выпадет ключ, соответствующий шифру Атбаш, это будет настолько ошеломляющим совпадением, что вряд ли злоумышленник о нем догадается.

С этой точки зрения шифр простой замены обеспечивает конфиденциальность. Но прежде чем вы приметесь шифровать с его помощью секретную информацию на своем компьютере, примите во внимание следующее: этот шифр действительно имеет 26! возможных ключей, но степень конфиденциальности, которую он предоставляет, серьезно ограничена. Дело в том, что для получения исходного текста из зашифрованного вовсе не обязательно угадывать ключ. Существует куда более простой способ. Пока, впрочем, вам достаточно знать, что, в отличие от стеганографии и таких кодов, как шифр Атбаш, шифр простой замены является примером настоящего (хоть и несовершенного) криптографического механизма безопасности для обеспечения конфиденциальности.

Шифрование

Процесс обеспечения конфиденциальности с помощью криптографического механизма безопасности называется шифрованием. Любой метод шифрования состоит из алгоритма, который описывает основную процедуру кодирования обычного текста, и ключа, с помощью которого эта процедура варьируется. Алгоритм шифрования принимает на вход обычный текст и ключ, определяя процесс, который в итоге выдает зашифрованный результат. В случае с шифром простой замены роль алгоритма шифрования играет процесс замены букв в верхнем ряду таблицы буквами из нижнего ряда, а роль ключа – случайная последовательность, составляющая второй ряд.

Процесс, обратный шифрованию, называется расшифровкой. В ходе расшифровки закодированный текст и ключ передаются алгоритму, который возвращает исходный текст. Алгоритм расшифровки отменяет результат работы алгоритма шифрования. В случае с шифром простой замены он подставляет букву в верхнем ряду таблицы вместо буквы из нижнего ряда. Эти два алгоритма связаны между собой настолько тесно, что их обычно называют просто алгоритмом шифрования, поскольку расшифровка и так подразумевается.

Шифрование – это чрезвычайно важный механизм безопасности, и тому немало причин. Например, это древнейшая часть криптографии. Еще Юлий Цезарь, Мария Стюарт и Наполеон использовали криптографию для обеспечения конфиденциальности средствами шифрования. В двух мировых войнах двадцатого века, как и впоследствии во время холодной войны, на криптографии были основаны системы секретной связи.

Шифрование широко используется и в наши дни. Если вы сегодня звонили по мобильному телефону, сняли деньги в банкомате, подключились к Wi-Fi, купили что-нибудь в Интернете, задействовали VPN для доступа к офисному компьютеру из дома, смотрели платный телеканал или отправили сообщение в WhatsApp, это означает, что ваш день не прошел без шифрования.

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

Чтобы понять, почему шифрование обычного текстового сообщения не гарантирует, что полученный результат совпадет с текстом, который намеревался защитить отправитель, рассмотрим еще раз шифр простой замены. В одном из наших предыдущих примеров исходный текст TOPSECRET был зашифрован в XVJBKADKX. Этот процесс не позволяет злоумышленнику, получившему доступ к строке XVJBKADKX, узнать ее первоначальное значение.

Тем не менее ничто не мешает ему модифицировать шифротекст до того, как тот окажется у получателя. Злоумышленник мог бы, к примеру, поменять одну букву. Если он подставит X вместо J, расшифрованное сообщение будет выглядеть как POPSECRET. Опечатка ли это? Получателю остается только гадать (возможно, POPSECRET – это таинственный ингредиент в рецепте Coca-Cola!). Несмотря на то что злоумышленнику неизвестны конкретные последствия внесенного им изменения, получатель не может быть уверен в том, что расшифрованный текст корректен.

Традиционное шифрование

Если ненадолго вернуться к механизмам безопасности в материальном мире, можно назвать шифрование в некотором смысле цифровым эквивалентом хранения записки с текстом в закрытом ящике. Алгоритм шифрования (и расшифровки) – это цифровой аналог самого замкового механизма, а криптографический ключ можно сравнить с физическим.

Следует отметить, что физические замки бывают разных видов и конструкций. Чаще всего встречаются замки, для открытия и закрытия которых используется один и тот же ключ. Точно так же в стандартном (традиционном) шифровании ключ используется как для превращения исходного текста в зашифрованный, так и наоборот. Именно так работает шифр простой замены: ключ, необходимый и для шифрования, и для дешифровки, представляет собой случайную последовательность букв в нижнем ряду таблицы. Алгоритм, в котором для шифрования и дешифровки используется один и тот же ключ, называется симметричным.

Симметричное шифрование может показаться естественным. Интуиция нам подсказывает, что использование ключа любым другим образом бессмысленно. Как вообще возможно шифровать текст одним ключом, а расшифровывать другим? Однако напомню, что не все физические замки симметричны. В частности, тумблерно-штифтовые модели (которые обычно ассоциируют с компанией Yale) и многие навесные замки обычно запираются вообще без ключа. Ключ необходим только для их отпирания. Интересно, что у тумблерно-штифтовых и навесных замков есть криптографические эквиваленты. Механизмы, в которых для шифрования и расшифровки используются разные ключи, называются асимметричными.

Вплоть до 1970-х годов все механизмы шифрования были симметричными. Что общего у Юлия Цезаря, Марии Стюарт и Наполеона? Все они использовали симметричное шифрование. Даже Алан Тьюринг, один из тех гениев, кого в первую очередь ассоциируют с важной ролью криптографии во Второй мировой войне, мог бы посчитать идею асимметричного шифрования причудливой и нереалистичной.

В наши дни симметричное шифрование по-прежнему обладает наибольшей популярностью. Оно применяется для кодирования всех данных на вашем ноутбуке и при использовании Bluetooth. Оно присутствует во всех повседневных примерах, рассмотренных ранее: Wi-Fi, мобильных телефонах, банковском деле, интернет-торговле и т. д. На самом деле для обеспечения конфиденциальности любых данных, будь то документы, электронные таблицы, веб-формы, электронные письма, голосовой трафик и т. п., неизменно используется симметричное шифрование. Большинство процессов шифрования симметричны. Этот подход так и оставался бы безальтернативным, если бы не одна небольшая проблема, о которой речь пойдет чуть ниже.

Алгоритмы симметричного шифрования эволюционируют по мере расширения наших знаний о том, как их лучше создавать (и взламывать). Прогресс в этой области был далеко непостепенным: и эта наука двигалась вперед резкими скачками.

Алгоритм шифрования, известный как шифр Виженера, был изобретен в середине шестнадцатого века, но применялся еще во время Гражданской войны в США. В конечном счете он оказался неустойчивым к методикам статистического анализа, разработанным во второй половине девятнадцатого века.

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

До недавнего времени симметричной криптографией пользовались в основном те, кому нужно было хранить самые серьезные секреты – правительственные и военные организации. Но с появлением в начале 1970-х годов коммерческих вычислительных устройств все изменилось. Потребность частных компаний в симметричном шифровании стала очевидной, особенно в финансовом секторе. В то время, и в какой-то степени до сих пор, предпочтение отдавалось секретным алгоритмам, поэтому для коммерческой криптографии нужен был новый, открытый вид симметричного шифрования, которым могли бы пользоваться все.

В 1977 году правительство США опубликовало симметричный алгоритм шифрования под названием Data Encryption Standard (стандарт шифрования данных), более известный пользователям как DES. Это был воистину поворотный момент в истории криптографии, ознаменовавший ее превращение из совершенно секретного занятия в предмет всеобщего обозрения. Стандарт – то, что было проанализировано специалистами и одобрено для широкого использования. Создание стандарта шифрования было беспрецедентным и, естественно, способствовало применению DES в коммерческих организациях США, а впоследствии и многих других стран. Это был симметричный алгоритм шифрования, с которым могли взаимодействовать рядовые граждане в повседневной жизни (иногда сами того не осознавая).

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

К концу двадцатого века DES перестал считаться эффективным симметричным алгоритмом шифрования в основном потому, что вычислительные возможности постоянно росли и в какой-то момент достигли уровня, на котором DES больше не мог обеспечить достаточную безопасность. Тем не менее эта технология успела приобрести немалый авторитет, была встроена во множество систем, и полностью избавиться от нее до сих пор не вышло. За последние несколько дней вы с высокой вероятностью использовали, пусть и опосредованно, какую-то разновидность DES для шифрования каких-то данных, особенно если оплачивали что-то банковской картой.

Сделано в Бельгии

В современном симметричном шифровании применяется целый ряд разных алгоритмов. Банковские сети по-прежнему сильно зависят от DES, но ввиду того, что однократное применение DES давно уже не считается достаточно безопасным, данные обычно шифруются три раза с помощью расширенной версии этого алгоритма – Triple DES. Однако в приложениях, требующих симметричного шифрования, все чаще используется блочный шифр AES (Advanced Encryption Standard – улучшенный стандарт шифрования).

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

Между 1970 (когда был изобретен DES) и 1990-ми годами в мире криптографии произошло много важных изменений. Одно из них было связано с развитием Интернета и следствием этого – взрывным ростом деловой и повседневной активности в киберпространстве. Технологий, подключенных к глобальной сети, конечно, тоже стало больше, они стали разнообразнее и сложнее. Когда разрабатывался стандарт DES, симметричное шифрование в основном предназначалось для отдельных компьютеров наподобие банковских станций, поэтому архитектура DES была рассчитана на аппаратную реализацию. Но к 1990-м годам появился спрос на симметричное шифрование, эффективно реализованное на программном уровне, и заметно расширился спектр аппаратных платформ, которым нужно было симметричное шифрование. В 1970-х все компьютеры были похожи между собой. К 1990-м годам криптография применялась как на суперкомпьютерах, так и на крошечных устройствах вроде смарт-карт (пластиковые карты со встроенным чипом, похожие на кредитную карту).

Еще одно важное изменение затронуло общий уровень владения криптографией. В 1970-х большинство криптографов работало в правительственном и военном секторах, и знания концентрировались там же. За помощью в создании DES правительство США обратилось к IBM – одной из немногих коммерческих компаний, которые в то время проявляли интерес к криптографии. К 1990-м годам активное сообщество криптографов сформировалось как в научных кругах, так и в частном секторе. Особенно это касалось телекоммуникационных компаний, чьи коммерческие империи опирались на эффективность криптографии.

Создание нового стандарта симметричного шифрования в духе двадцать первого века было поручено Национальному институту стандартов и технологий США (National Institute of Standards and Technology, NIST). Сотрудники NIST решили воспользоваться помощью сообщества криптографов за пределами правительства и организовали открытый конкурс по разработке нового алгоритма AES. Поскольку ожидалось, что новый симметричный алгоритм будет применяться по всему миру, к конкурсу были допущены не только американские компании, но и участники из других стран.

Это был кардинально новый подход к разработке криптографических алгоритмов. Неудивительно, что он привлек большинство ведущих специалистов в симметричном шифровании. Мой личный вклад в этот процесс состоял в попытке убедить моего коллегу по бельгийскому подразделению Винсента Рэймена переименовать алгоритм, который он разработал для конкурса вместе со своим другом Джоаном Дэеменом. Я не верил, что кто-то мог принять всерьез алгоритм под названием Rijndael (читается как «рейндал»), составленным из фамилий его создателей и вымышленной долины Ривенделл. Меня проигнорировали, в отличие от самого алгоритма. В 2001 году бельгийский алгоритм симметричного шифрования Rijndael стал стандартом AES.

Архитектура стандарта AES обладает элегантной простотой, что делает его реализации эффективными – и это во многом определило победу Rijndael. Возможно, вы думаете, что современные алгоритмы шифрования должны быть математически сложными и доступными для понимания только специалистам. Действительно, конкретные детали реализации неочевидны, и, чтобы в них разобраться, нужен определенный уровень знаний. Тем не менее основная идея, лежащая в основе AES, на удивление понятна и проста. Я попытаюсь приоткрыть завесу тайны, окружающую современное шифрование, и объяснить в самых общих чертах, как работает AES.

Как вы помните, алгоритм шифрования – это рецепт, состоящий из двух основных ингредиентов (исходного текста и ключа), которые смешиваются для получения зашифрованного результата. В AES это смешивание происходит следующим образом.

Форматирование исходного текста. Вначале обычный текст преобразуется в байты. Затем из первых 16 байт формируется матрица размером 4×4 байта. Если после этого остается исходный текст, создается вторая матрица, потом третья и т. д. Если для формирования очередной матрицы размером 4×4 байта текста остается недостаточно, вместо недостающих байтов подставляется резервная информация, известная как дополнение. Теперь исходный текст готов к шифрованию.

Изменение всех байтов. Первый этап перемешивания исходного текста состоит в замене каждого байта матрицы новым байтом в соответствии с правилами алгоритма AES, поэтому все знают, как это делать. По окончании этого этапа получается квадратная матрица из 16 байтов.

Смещение строк. Этот второй этап перемешивания тоже крайне прост. Каждая строка матрицы сдвигается на определенное количество позиций; элементы, выступающие справа, вставляются слева.

Преобразование столбцов. Каждый столбец, состоящий из 4 байтов, преобразуется в соответствии со следующим правилом перемешивания в алгоритме. Все новые столбцы по-прежнему состоят из 4 байтов. В результате получается новая 16-байтная матрица.

Добавление ключа. На каждом из предыдущих этапов исходный текст перемешивается тем или иным образом, вроде того, как раздающий по-разному тасует карты. И только теперь в этот процесс добавляется ключ. Алгоритм AES описывает, как на основе ключа сформировать так называемый раундовый ключ – еще одну отдельную матрицу 4×4 байта. Добавив к нему матрицу исходного текста, мы получим еще одну квадратную матрицу из 16 байтов.

Повторение. Теперь, получив матрицу – смесь исходного текста и ключа, – мы снова включаем миксер, возвращаемся к этапу «изменение всех байтов», и процесс повторяется заново (изменение всех байтов, смещение строк, преобразование столбцов, добавление ключа), пока все не перемешается достаточно хорошо (в соответствии с AES). В самой простой версии (их существует три, с разной длиной ключа) происходят десять повторений. Каждый полный цикл операций перемешивания называется раундом AES.

Вывод зашифрованного текста. Итоговая матрица размером 4×4 байта становится нашим зашифрованным текстом. Чтобы превратить зашифрованный текст обратно в исходный, весь процесс выполняется в обратном порядке.



Такова основная идея. Я опустил несколько тонкостей и не стал вдаваться в некоторые подробности. Моей целью было показать, что, по своей сути, алгоритм шифрования AES состоит из ряда относительно простых операций, совокупность которых позволяет получить зашифрованный текст, сохраняющий конфиденциальность исходной информации. Надеюсь, вы согласитесь с тем, что принцип работы AES прост и даже элегантен. Но не сомневайтесь, что изобрести такой алгоритм очень непросто.

Стандарт AES применяется для обеспечения конфиденциальности во многих современных технологиях. Например, вы, скорее всего, используете его каждый раз, когда устанавливаете защищенное соединение между своим браузером и сайтом (конечно, вы не выбираете AES сами, это делает браузер). Алгоритм AES настолько хорошо изучен и проверен, что по крайней мере в ближайшем будущем он, скорее всего, продолжит смещать строки и преобразовывать столбцы для защиты секретных данных.

Если вас когда-нибудь спросят, чем славится Бельгия, вы будете знать, что ответить. Картофель фри, пиво, шоколад и вымышленные гениальные сыщики – это замечательно, но Бельгия должна быть известна своей криптографией.

Вездесущий AES

Конечно, AES сегодня – далеко не единственный симметричный блочный шифр. С годами было предложено много альтернатив, включая финалистов того самого конкурса, которым лишь немного не хватило, чтобы стать стандартом AES. Существуют блочные шифры, названные в честь животных, скандинавских богов, бельгийских марок пива и даже чего-то малопонятного (вспомню лишь всеми любимый шифр Hasty Pudding – пудинг на скорую руку). Поразительное множество блочных шифров названо в честь рыб. Но лишь немногие из этих алгоритмов применяются в реальных разработках, и среди них AES, пожалуй, действительно важнейший.

Одна из причин, почему блочные шифры стали и остаются самыми распространенными механизмами для симметричного шифрования – гибкость их реализации. Как вы помните, блочный шифр кодирует блок (группу бит, чаще всего их 128) исходного текста в блок зашифрованного текста. Поскольку в 128 битах умещаются лишь 16 символов, мы обычно шифруем данные большего размера. Разделение текста на блоки с последующим шифрованием каждого в отдельности – не самая разумная мысль.

Основная идея состоит в том, что одинаковые блоки исходного текста в сочетании с конкретным ключом будут давать на выходе одинаковые зашифрованные блоки. Таким образом злоумышленник может выявить часто встречающийся исходный блок с помощью частотного анализа блоков шифротекста. Что еще хуже, если злоумышленнику каким-то образом удастся узнать, какой исходный текст соответствует конкретному зашифрованному блоку, он сможет сразу раскрыть все идентичные блоки.

Для борьбы с этой угрозой были разработаны более сложные методы шифрования, кодирующие больше одного блока за раз. Эти режимы работы блочного шифра разными способами связывают между собой шифрование отдельных блоков и наделяют шифры, в том числе (и прежде всего) AES, разными дополнительными свойствами, не ограничиваясь одной лишь конфиденциальностью. Например, некоторые режимы работы избавляют от необходимости дополнять последний блок, а другие позволяют обнаруживать изменения, внесенные в зашифрованный текст. Есть режимы, оптимизированные для определенных задач, скажем, для шифрования жестких дисков. Во многих задачах, для которых потоковый шифр подошел бы лучше, все равно используются блочные шифры в специальном режиме, фактически превращающем их в потоковые.

Итак, симметричное шифрование – самое распространенное средство обеспечения конфиденциальности, блочные шифры – наиболее широко применяемые его механизмы, а AES – несомненно, самый популярный блочный шифр. Логично, что при таком раскладе наша безопасность в киберпространстве во многом зависит от AES.

Создает ли повсеместное распространение AES какие-то проблемы? В конце концов, самые здоровые экосистемы – биологически разнообразные, а зависимость от той или иной продовольственной культуры может привести к катастрофе. Не должно ли и в криптографии быть больше разнообразия?

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

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

Проблема распространения ключей

Симметричное шифрование – прекрасный инструмент, который мы постоянно используем. Однако у него есть очевидный недостаток: и для шифрования, и для расшифровки обязательно нужен секретный ключ. Один и тот же. Чтобы этот инструмент работал, все, кому нужен ключ, должны его каким-то образом получить.

Но каким образом происходит распространение ключей? Мы не можем просто рассылать их по мере необходимости обычными средствами связи, поскольку ключи к секретной информации и сами – секретная информация. Злоумышленник может получить доступ к большинству коммуникационных каналов в киберпространстве, таких как Интернет. Что же обычно делают, когда нужно послать ключ? Естественно, его шифруют! Но для того, чтобы что-то зашифровать, нужен… ключ. Да, вам не померещилось. Чтобы передать кому-то ключ, вам нужен ключ. Своего рода криптоверсия проблемы курицы и яйца.

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

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

Точно так же физическая приближенность может использоваться для распространения ключей для симметричного шифрования. Неплохой пример – домашняя беспроводная сеть. Соединения со всеми устройствами в ней защищены с помощью симметричного шифрования. В качестве основы секретного ключа, с помощью которого шифруется трафик, выступает основной ключ для доступа к Wi-Fi – пароль. У владельца сети должна быть возможность сгенерировать этот главный ключ. Несмотря на то что владелец часто записывает свой пароль на клочке бумаги (как правило, чтобы не суметь отыскать потом), проще всего его найти на корпусе маршрутизатора, управляющего беспроводной сетью. Любое новое устройство, чтобы присоединиться к сети, должно использовать симметричное шифрование, а значит, снабжено этим паролем.

Главный ключ можно ввести в устройство вручную, можно и установить автоматически, если маршрутизатор физически рядом. Варианты одинаково действенны: никакое устройство не сможет подключиться к сети Wi-Fi, если находится действительно далеко от маршрутизатора (или владельца).

В материальном мире нам бывает нужен новый ключ. За ним мы обычно обращаемся к доверенному лицу – человеку, с которым у нас как минимум есть деловые отношения. Например, ключ от нового дома нам, как правило, вручает агент по недвижимости (полностью ли мы ему доверяем – это уже другой вопрос). Точно так же ключи от новой машины нам выдает автосалон, которому мы доверяем достаточно, чтобы передать ему деньги в обмен на колеса. Многие практические способы применения симметричной криптографии, направленные на защиту секретных данных, возлагают распространение ключей на какую-то доверенную сторону. Симметричный ключ для кредитной карты мы получаем непосредственно от банка вместе с самой картой. Симметричный ключ для мобильного телефона мы получаем на SIM-карте непосредственно от оператора или посредников, которые продают контракты от его имени. Примечательно, что в этих двух примерах мы получаем ключи задолго до того, как в них возникнет необходимость.

Но иногда в киберпространстве нужно делать вещи, речь о которых вообще крайне редко заходит при использовании физических замков и ключей. Я говорю о предоставлении незнакомцам доступа к секретной информации.

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

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

Назад: 2. Ключи и алгоритмы
Дальше: 4. Обмен секретной информацией с незнакомцами