Принципы современной криптографии

Nat Queen

[Примечание. Это слегка измененная версия статьи, которая первоначально появилась в выпуске журнала Archive в декабре 2010 года.]

Оригинал статьи вы найдете по адресу http://www.queen.clara.net/pgp/art6.html

Когда я начал готовить разговор по этому вопросу для Midlands User Group в прошлом году, моя первая мысль заключалась в том, чтобы основывать его на статье, которую я написал для Archive 17: 3 в 2003 году. Однако я быстро понял, что потребуется старая статья для обновления, и я добавил несколько новых материалов. Настоящая статья – это расширенная версия беседы, которую я дал.

Основные понятия и терминология

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

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

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

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

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

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

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

Современные криптосистемы можно разделить на два основных типа: симметричные и криптосистемы с открытым ключом. Они будут описаны ниже.

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

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

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

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

Шифрование AES работает с блоками 128 бит и позволяет размер клавиш 128, 192 или 256 бит. В зависимости от того, какой из трех ключевых размеров используется, есть 10, 12 или 14 раундов. Правительство США объявило AES приемлемым для защиты секретной информации до «секретности» при использовании с наибольшим размером ключа (например, AES-256).

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

Чтобы понять, насколько силен такой шифр, давайте оценим, сколько времени потребуется, используя грубую силу, взломать AES-128. С 128-битными ключами число возможных ключей составляет 2 в 128 степени, что примерно равно 3 × 10 в 38 степени. (Если вы не знаете, как математически преобразовать мощность в 2 раза в 10, большинство современных калькуляторов могут сделать это для вас.) Это колоссальное число, но нам все еще нужно некоторое предположение о доступной вычислительной мощности, чтобы приходят к определенной оценке.

Будем великодушны и предположим, что мы можем использовать 10 в 10 степени (т.е. 10 миллиардов) компьютеров, каждый из которых проверяет 1010 ключей в секунду, так что в целом мы можем протестировать 10 в 20 степени ключей в секунду. Тогда время, необходимое для проверки всех возможных ключей, будет (3 × 10 в 38 степени) / 10 в 20 степени = 3 × 10 в 18 степени секунд, что составляет около 10 в 11 степени (т.е. 100 миллиардов) лет. По данным современной космологии это длиннее, чем известный возраст Вселенной, 13,7 млрд. Лет. Чтобы быть справедливым, в среднем понадобилось бы лишь половину этого времени, чтобы найти правильный ключ.

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

С каждым дополнительным битом в длину ключа число возможных ключей удваивается. Предположим, например, что мы используем ключи с 256 битами, а не 128. Сколько времени потребуется, чтобы взломать зашифрованное сообщение, при тех же предположениях относительно доступной вычислительной мощности? Используя тот же метод, что и выше, он остается в качестве упражнения для читателя, чтобы проверить, что ответ составляет около 3 × 10 в 49 степени лет. Это примерно на 300 триллионов триллионов триллионов раз дольше, чем для 128-битного ключа, который, вероятно, вы согласитесь – довольно хорошая безопасность!

Криптография с открытым ключом

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

Криптография с открытым ключом решает эту головоломку аккуратно. В криптографии с открытым ключом каждый пользователь имеет уникальную пару ключей: открытый ключ и секретный ключ.

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

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

Общая схема криптографии с открытым ключом показана на рисунке 2:

Здесь Боб посылает Алисе безопасное сообщение. В таких примерах обычно используются определенные имена, начинающиеся с A, B или C, по мере необходимости, и я также следую популярному (несексуальному!) Соглашению, которое отправитель считается мужчиной и женщиной-получателем.

Таким образом, Боб шифрует открытый текст открытым ключом Alice (PK), и полученный зашифрованный текст может передаваться по небезопасному каналу, например, по электронной почте. Алиса расшифровывает зашифрованный текст своим секретным ключом (SK), чтобы восстановить исходный текст. Никто другой не может этого сделать, потому что никто другой не имеет доступа к секретному ключу Алисы.

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

Для такой схемы работы необходимо выполнить несколько условий:

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

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

Основная математическая идея, которая делает такую ​​криптосистему возможной, известна как односторонняя функция люка. Односторонняя функция – это правило для выполнения вычисления, которое легко, но чью инверсию сложно вычислить. Термины «легкий» и «жесткий» здесь имеют очень специфические технические значения. Грубо говоря, расчет «жесткий», если (и только если), время, требуемое для вычисления компьютером, экспоненциально возрастает с размером входного числа.

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

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

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

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

Криптография с открытым ключом реализована в двух типах компьютерной программы: PGP (которая представляет собой Pretty Good Privacy) и GnuPG (что означает GNU Privacy Guard, иногда также называемый GPG). Это всемирный стандарт для безопасной электронной почты. PGP был оригинальным программным обеспечением, а GnuPG был разработан позднее, но оба они, как правило, совместимы, а версии существуют для всех основных операционных систем.

Двойная система

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

Предположим еще раз, что Боб хочет отправить Алисе безопасное сообщение. Затем Боб шифрует сообщение M с использованием симметричного шифра со случайным образом генерируемым одноразовым ключом K для получения зашифрованного текста M’. В то же время он шифрует ключ K, используя криптосистему с открытым ключом, с открытым ключом Алисы, для получения зашифрованного ключа K’. Затем Боб посылает Алиса и М’, и К’. Это безопасно даже по небезопасному каналу, например, по электронной почте.

Алиса просто меняет процесс, чтобы прочитать сообщение. Сначала она расшифровывает K ‘своим секретным ключом, чтобы получить исходный ключ K для симметричного шифра. Затем она использует этот ключ K для расшифровки зашифрованного текста M’, чтобы получить исходное сообщение M. Конечно, обе стороны должны использовать те же две криптосистемы, чтобы это работало.

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

Двойная система имеет ряд преимуществ. Как уже упоминалось, криптография с открытым ключом менее эффективна, чем симметричная криптография. Однако, поскольку криптосистема с открытым ключом используется только для шифрования ключа для симметричного шифра, который имеет фиксированную длину (обычно от 128 до 256 бит), современный компьютер может делать это очень быстро, независимо от того, сколько времени фактическое сообщение является.

Двойная система также означает, что одно и то же сообщение может быть зашифровано для нескольких получателей очень эффективно. Он шифруется только один раз с помощью одноразового ключа K, как обсуждалось выше, и отправитель шифрует этот ключ с помощью открытого ключа каждого получателя по очереди. Затем весь набор зашифрованных ключей K ‘отправляется одновременно всем получателям, и их программное обеспечение автоматически выбирает соответствующий зашифрованный ключ K’ в каждом случае. Таким образом, так же легко шифровать сообщение одновременно для нескольких получателей, так как он отправляет им общее электронное письмо с использованием любого почтового клиента. Отправитель просто указывает, какие получатели должны быть зашифрованы, а программное обеспечение PGP или GnuPG заботится обо всем.

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

Программное обеспечение PGP и GnuPG

Существуют как коммерческие, так и бесплатные версии PGP. Например, последней версией для Windows является PGP 10. Однако только PGP 2 был перенесен на ОС RISC, и эта старая версия в настоящее время довольно ограничена для безопасной связи с остальным миром, поскольку она позволяет использовать только один конкретный набор алгоритмов шифрования, в то время как более современные версии PGP работают с несколькими различными алгоритмами, которые стали более популярными.

Все версии GnuPG бесплатны и с открытым исходным кодом, без ограничений на их использование. Они могут даже использоваться свободно в коммерческих целях. Порт RISC OS GnuPG является достаточно современным и поэтому рекомендуется для пользователей ОС RISC. GnuPG (как старый PGP 2) – это только программа с командной строкой, и некоторым людям трудно запомнить правильные команды. Однако это не проблема, потому что для GnuPG есть превосходные передние концы (как и для PGP 2).

Информация о PGP и GnuPG для ОС RISC, самом программном обеспечении и удобных для пользователя интерфейсах можно получить на моем веб-сайте по адресу http://www.queen.clara.net/pgp/acorn.html, где посетители также могут найти руководства и учебные пособия для начинающих.

Некоторые популярные почтовые клиенты (например, Messenger Pro и Pluto) имеют удобные параметры для безопасного использования электронной почты с использованием PGP или GnuPG. Использование этих опций довольно интуитивно. Я настоятельно призываю всех пользователей ОС RISC принять GnuPG и убедить всех своих корреспондентов использовать PGP или GnuPG, если они этого еще не сделали. Зачем отправлять электронную почту в виде открытого текста, если для шифрования или дешифрования типичного сообщения требуется не более секунды, и вы можете быть уверены, что ваша корреспонденция полностью закрыта?