Уроки криптографии. Современные блочные шифры. Режим простой замены с зацеплением

Аннотация: В этой лекции поставлено несколько целей. Показать различие между традиционными и современными шифрами с симметричным ключом. Привести современные блочные шифры и обсудить их характеристики. Объяснить, почему современные блочные шифры должны быть спроектированы как шифры подстановки. Ввести компоненты блочных шифров, таких как P-блоки и S-блоки. Обсудить и показать различие между двумя классами шифров: шифры Файстеля и шифры не-Файстеля. Обсудить два вида атак, особо направленных на раскрытие современных блочных шифров: дифференциальный и линейный криптоанализ. Ввести понятие "шифры для потока" и показать различие между синхронными и несинхронными шифрами. Обсудить линейную и нелинейную обратную связь регистров сдвига для реализации поточных шифров.

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

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

7.1. Современные блочные шифры

Современный блочный шифр с симметричными ключами шифрует n -битовый блок исходного текста или расшифровывает n -битовый блок зашифрованного текста. Алгоритм шифрования или дешифрования используют k -битовый ключ . Алгоритм дешифрования должен быть инверсией алгоритма шифрования, и оба в работе используют один и тот же ключ засекречивания так, чтобы Боб мог восстановить сообщение, передаваемое Алисой. Рисунок 7.1 показывает общую идею шифрования и дешифрования в современном блочном шифре.


Рис. 7.1.

Если сообщение имеет размер меньше, чем n бит , нужно добавить заполнение, чтобы создать этот n -разрядный блок; если сообщение имеет больше, чем n бит , оно должно быть разделено на n -разрядные блоки, и в случае необходимости нужно добавить к последнему блоку соответствующее заполнение. Общие значения для n обычно 64 , 128 , 256 или 512 битов.

Пример 7.1

Сколько дополнительных битов нужно добавить к сообщению 100 символов, если для кодирования используется ASCII по 8 битов и блочный шифр принимает блоки 64 бита?

Решение

Закодировать 100 символов, используя ASCII по 8 битов. Это сообщение содержит 800 бит . Исходный текст должен делиться без остатка на 64 . Если | M | и | Pad | - длина сообщения и длина заполнения, то

| M | + | Pad | == 0 mod 64 -> | Pad | = -800 mod 64-> 32 mod 64

Это означает, что к сообщению нужно добавить 32 бита заполнения (например, нулей). Текст тогда будет состоять из 832 битов или тринадцати 64 -разрядных блоков. Заметим, что только последний блок содержит заполнение. Шифратор использует алгоритм шифрования тринадцать раз, чтобы создать тринадцать блоков зашифрованного текста.

Подстановка, или транспозиция

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

Если шифр спроектирован как шифр подстановки , значения бита 1 или 0 в исходном тексте могут быть заменены либо на 0 , либо на 1 . Это означает, что исходный текст и зашифрованный текст могут иметь различное число единиц. Блок исходного текста на 64 бита, который содержит 12 нулей и 52 единицы, может быть представлен в зашифрованном тексте 34 нулями и 30 единицами. Если шифр спроектирован как шифр перестановки (транспозиции) , биты только меняют порядок следования (перемещаются), сохраняя то же самое число символов в исходном и зашифрованном текстах. В любом случае, число возможных n -битовых исходных текстов или зашифрованных текстов равно 2 n , потому что каждый из n битов, использованных в блоке, может иметь одно из двух значений - 0 или 1 .2 64 блока по 64 бита, чтобы найти один, который имеет смысл. Если бы Ева могла пробовать 1 миллиард блоков в секунду, и тогда ей потребовалось бы сотни лет, прежде чем эта работа могла бы принести успех.

b. Во втором случае (перестановка) Ева знает, что в исходном тексте есть точно 10 единиц, потому что транспозиция не изменяет числа единиц (или нулей) в зашифрованном тексте. Ева может начать атаку исчерпывающего поиска, используя только те 64 -битовые блоки, которые имеют точно 10 единиц. Есть только (64!) / [(10!) (54!)] = 151 473 214 816 из 2 64 слов по 64 бита, которые имеют точно 10 единиц. Ева может проверить всех их меньше чем за 3 минуты, если она может провести 1 миллиард испытаний в секунду.

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

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

Знаете ли вы?
Еще во времена Римской империи, шифрование использовалось Юлием Цезарем для того, чтобы сделать письма и сообщения нечитаемыми для врага. Это играло важную роль как военная тактика, особенно во время войн.

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

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

Типы шифрования

Симметричное шифрование

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

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

В современных системах, ключ обычно представляет собой строку данных, которые получены из надежного пароля, или из совершенно случайного источника. Он подается в симметричное шифрование программного обеспечения, которое использует его, чтобы засекретить входные данные. Скремблирование данных достигается с помощью симметричного алгоритма шифрования, такие как Стандарт шифрования данных (DES), расширенный стандарт шифрования (AES), или международный алгоритм шифрования данных (IDEA).

Ограничения

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

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

Асимметричное шифрование

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

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

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

Diffie-Hellman и RSA являются примерами алгоритмов, использующих шифрование с открытым ключом.

Ограничения

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

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

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

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

Хеширование

Методика хеширования использует алгоритм, известный как хэш-функция для генерации специальной строки из приведенных данных, известных как хэш. Этот хэш имеет следующие свойства:

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

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

Message Digest 5 (MD5) и Secure Hashing Algorithm (SHA) являются двумя широко используемыми алгоритмами хеширования.

Ограничения

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

Сочетание методов шифрования

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

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

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

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

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

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

Чтобы отличие между блочными и поточными шифрами стало понятнее, приведем пример на простом шифре замены.

Поточное шифрование

Зашифруем поточным шифром замены слово CIPHER:

Зашифровали каждый символ и получили шифротекст. Проще простого.

БЛОЧНОЕ ШИФРОВАНИЕ

Зашифруем слово AVADAKEDAVRA. Поскольку шифр блочный, открытый текст разобьем на блоки по четыре символа: AVAD | AKED | AVRA (на практике блоки текста состоят из 64-256 бит). Для каждого блока придумаем свою таблицу замены:

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

СЕТЬ ФЕЙСТЕЛЯ

Теперь мы готовы перейти к очень важной теме, которая открывает дверь в бескрайний мир современных систем шифрования. Сеть Фейстеля - это метод блочного шифрования, разработанный Хорстом Фейстелем в лаборатории IBM в 1971 году. Сегодня сеть Фейстеля лежит в основе большого количества криптографических протоколов. Попробуем разобрать «на пальцах», что же она собой представляет.

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

  • Блок разбивается на две равные части - левую (L) и правую (R).
  • После разбиения левый подблок изменяется функцией f с использованием ключа K: x = f(L, K). В качестве функции можно представить себе какое угодно преобразование — например, старый добрый шифр сдвига с ключом К.
  • Полученный подблок складывается по модулю 2 с правым подблоком R, который до этого был не у дел: х=х+R
  • Далее полученные части меняются местами и склеиваются.

Как видишь, все достаточно просто. Для того чтобы понять, как это работает, посмотри на схему:

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

Теперь посмотрим работу сети Фейстеля на примере. Возьмем слово AVADAKEDAVRA и разобьем его на два блока по шесть символов - AVADAK | EDAVRA. За функцию возьмем шифр сдвига на число позиций, определенных раундовым ключом. Пусть секретный ключ K = . В качестве раундовых ключей возьмем K = 1, K = 2. Для сложения по модулю 2 переведем текст в двоичный код согласно телеграфному алфавитику , которым вряд ли кто-то еще пользуется вообще.

Вот что получилось:

Теперь прогоним через сеть Фейстеля из двух раундов первый блок:

Второй блок попробуй зашифровать сам, у меня получилось MOSSTR.

Расшифрование осуществляется точно так же: шифротекст разбивается на блоки и затем подблоки, левый подблок поступает в функцию, складывается по модулю 2 с правым, и затем подблоки меняются местами. Отличие заключается в том, что раундовые ключи подаются в обратном порядке, то есть в нашем случае в первом раунде применим ключ K = 2, а затем во втором раунде K = 1.

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

ГОСТ 28147-89 (МАГМА)

В арсенале уже есть почти все необходимые понятия, поэтому мы готовы пе- рейти к первой важной теме отечественной криптографии - ГОСТ 28147-89. Стоит сказать, что про этот стандарт не написал еще только ленивый, поэтому я попробую в миллион первый раз кратко и без тучи формул изложить суть режимов шифрования великой и ужасной Магмы. Если решишь почитать сам стандарт, то стоит запастись временем, силами, терпением и едой, потому что стандарты на человеческом языке, как известно, писать строго запрещено.

Основные характеристики: ключ 256 бит, блок 64 бита.

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

ГОСТ 28147 весьма скупо характеризует свои таблицы замены. Говорится лишь о том, что они являются дополнительным секретным элементом (наряду с секретным ключом) и «поставляются в установленном порядке». Больше ничего. С момента принятия ГОСТ 28147 научно-техническая неопределенность, связанная с выбором S-боксов, порождала слухи и домыслы. Ходили разговоры о секретных критериях, известных только разработчикам ГОСТа. Естественно, что эта неопределенность снижала доверие к криптосистеме.

Этот недостаток дал отличную почву для критики стандарта. Французский криптограф Николя Куртуа опубликовал несколько статей, содержащих ряд спорных положений относительно стойкости ГОСТа. Куртуа считает, что на российский стандарт легко построить атаку и его никак нельзя причислять к международным. Однако свой анализ Куртуа проводит для S-боксов, отличных от действующих, так что не стоит полагаться на его мнение.

А теперь посмотрим, что же напридумывали в стенах мрачной Лубянки.

Режим простой замены

В режиме простой замены на 32 раунда, согласно стандарту, нам нужно 32 раундовых ключа. Для генерации раундовых ключей исходный 256-битный ключ разбивается на восемь 32-битных блоков: K1…K8. Ключи K9…K24 являются циклическим повторением ключей K1…K8. Ключи K25…K32 являются ключами K8…K1.

  1. Каждый блок 64 бита делится на два подблока - Ai и Bi.
  2. Левый подблок Ai складывается по модулю 232 с раундовым ключом K1: Ai+1 = Ai + Ki mod 232.
  3. Левый подблок проходит через S-бокс.
  4. Биты левого подблока сдвигаются на 11 позиций (циклический сдвиг).
  5. Левый подблок складывается с правым по модулю 2: A = A ⊕ B . iii
  6. Правый подблок принимает первоначальное значение левого подблока: Bi+1 = Ai.
  7. Подблоки меняются местами.

Сразу пример одного раунда. Ключ 256 бит:

arvadek adava arvadek adava arvadek adava arvadek adava arva

00011 01010 11110 00011 01001 00001 01111 00011 01001 00011 11110

00011... . . . 00011 01010 11110 0

Тогда раундовые ключи

K1 = 00011 01010 11110 00011 01001 00001 01

K2 = 111 00011 01001 00011 11110 00011 0001

K3 = . . .

S - бокс= [ 1 , 15 , 13 , 0 , 5 , 7 , 10 , 4 , 9 , 2 , 3 , 14 , 6 , 11 , 8 , 12 ]

Как пользоваться таким S-боксом? Очень просто! Если на входе S-бокса 0, то на выходе будет 1 (берем 0-й символ S-бокса), если 4, то на выходе будет 5 (берем 4-й символ), если на входе 7, то на выходе 4, и так далее.

Открытый текст:

Делится на два 32-битных блока старших и младших битов:

Пример, конечно, вышел дикий, потому что ГОСТ - это все-таки не такой стандарт, чтоб каждый мог его ручками перебирать.

Режим простой замены чересчур простой и имеет существенные недостатки:

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

Таким образом, применять ГОСТ 28147-89 в режиме простой замены желательно лишь для шифрования ключевых данных.

РЕЖИМ ГАММИРОВАНИЯ

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

А теперь все по порядку.

Шаги 3–5 повторяются для каждого блока. Все эти манипуляции можно посмотреть на схеме.

Расшифрование выполняется аналогично, вместо блока открытого текста подается блок шифротекста.

Режим гаммирования с обратной связью

Идем на усложнение. Алгоритм похож на режим гаммирования, однако гамма формируется на основе предыдущего блока зашифрованных данных, так что результат шифрования текущего блока зависит также и от предыдущих блоков. 1. Синхропосылка S - 64-битная псевдослучайная последовательность.

2. S шифруется в режиме простой замены.
3. Открытый текст складывается по модулю 2 с полученной гаммой.
4. Полученный шифротекст поступает в качестве синхропосылки для следующего блока, а также поступает на выход. Как это выглядит, можно посмотреть на схеме.

Режим имитовставки

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

1. Блок открытого текста проходит 16 раундов в режиме простой замены.
2. К полученному блоку по модулю 2 прибавляется еще один блок открытого текста.
3. Сумма проходит еще 16 раундов в режиме простой замены.
4. Прибавляется следующий блок открытого текста и опять простая замена и так далее, пока не кончатся блоки открытого текста.

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

ГОСТ 34.12-2015 (КУЗНЕЧИК)

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

Основные характеристики: ключ 256 бит, блок 128 бит.

Также стоит сказать, что в новом стандарте S-боксы фиксированы и продуманны, так что не стоит изобретать свои чудо-случайные подстановки. В новом ГОСТе режимов шифрования стало гораздо больше:
режим простой замены (Electronic Codebook, ЕСВ);
режим гаммирования (Counter, CTR);
режим гаммирования с обратной связью по выходу (Output Feedback, OFB);
режим простой замены с зацеплением (Cipher Block Chaining, СВС);
режим гаммирования с обратной связью по шифротексту (Cipher Feedback,CFB);
режим выработки имитовставки (Message Authentication Code algorithm).

Рассмотрим новые режимы.

Режим простой замены с зацеплением

Как было видно на прошлом стандарте, режим простой замены - самый слабый из режимов, поэтому в новом стандарте он теперь выступает с зацеплением и стал вовсе не таким простым.

  1. Инициализирующий вектор - звучит страшно, но на деле всего лишь последовательность битов, поступающая на вход.
  2. Вектор разбивается на две части - L и R, одна из которых складывается по модулю 2 с открытым текстом, а другая становится половинкой инициализирующего вектора для следующего блока.
  3. Сумма открытого текста и кусочка инициализирующего вектора проходит через шифр простой замены.
  4. Полученные блоки зашифрованного текста склеиваются.

Стоит посмотреть на схему, и сразу все становится ясно.

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

Для плюсов - Encryptions . Среди отечественных разработок это криптопровайдер КриптоПро CSP .

Пара слов о стойкости режимов шифрования. Немало зарубежных криптографов пытались поднять руку на наш стандарт, однако на данный момент не известно ни одной атаки, которая может быть реализована на современном технологическом уровне развития. Среди программистов этот стандарт долгое время был не слишком популярен, так как из его текста понять алгоритм работы тяжело, а более четких описаний маловато. Но сейчас уже полно реализаций на многих языках программирования. Так что теперь использование ГОСТа вполне реально, и по многим параметрам он превосходит зарубежные стандарты. В конце концов, где же патриотизмъ?!

09.07.2003

Что такое шифрование?

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

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

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

Основные современные методы шифрования

Среди разнообразнейших способов шифровании можно выделить следующие основные методы:

  • Алгоритмы замены или подстановки - символы исходного текста заменяются на символы другого (или того же) алфавита в соответствии с заранее определенной схемой, которая и будет ключом данного шифра. Отдельно этот метод в современных криптосистемах практически не используется из-за чрезвычайно низкой криптостойкости.
  • Алгоритмы перестановки - символы оригинального текста меняются местами по определенному принципу, являющемуся секретным ключом. Алгоритм перестановки сам по себе обладает низкой криптостойкостью, но входит в качестве элемента в очень многие современные криптосистемы.
  • Алгоритмы гаммирования - символы исходного текста складываются с символами некой случайной последовательности. Самым распространенным примером считается шифрование файлов "имя пользователя.pwl", в которых операционная система Microsoft Windows 95 хранит пароли к сетевым ресурсам данного пользователя (пароли на вход в NT-серверы, пароли для DialUp-доступа в Интернет и т.д.).

Когда пользователь вводит свой пароль при входе в Windows 95, из него по алгоритму шифрования RC4 генерируется гамма (всегда одна и та же), применяемая для шифрования сетевых паролей. Простота подбора пароля обусловливается в данном случае тем, что Windows всегда предпочитает одну и ту же гамму.

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

Симметричные и асимметричные криптосистемы

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

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

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

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

Алгоритм RSA

Алгоритм RSA (по первым буквам фамилий его создателей Rivest-Shamir-Adleman) основан на свойствах простых чисел (причем очень больших). Простыми называются такие числа, которые не имеют делителей, кроме самих себя и единицы. А взаимно простыми называются числа, не имеющие общих делителей, кроме 1.

Для начала выберем два очень больших простых числа (большие исходные числа нужны для построения больших криптостойких ключей. Например, Unix-программа ssh-keygen по умолчанию генерирует ключи длиной 1024 бита).

Определим параметр n как результат перемножения p и q . Выберем большое случайное число и назовем его d , причем оно должно быть взаимно простым с результатом умножения (p -1)*(q -1) .

Отыщем такое число e, для которого верно соотношение

(e*d) mod ((p -1)*(q -1)) = 1

(mod - остаток от деления, т. е. если e, умноженное на d, поделить на ((p -1)*(q -1)) , то в остатке получим 1).

Открытым ключом является пара чисел e и n , а закрытым - d и n .

При шифровании исходный текст рассматривается как числовой ряд, и над каждым его числом мы совершаем операцию

C(i)= (M(i) e) mod n.

В результате получается последовательность C(i) , которая и составит криптотекст. Декодирование информации происходит по формуле

M(i) = (C(i) d) mod n.

Как видите, расшифровка предполагает знание секретного ключа.

Давайте попробуем на маленьких числах.

Установим p=3, q=7 . Тогда n=p*q=21. Выбираем d как 5. Из формулы (e*5) mod 12=1 вычисляем e=17 . Открытый ключ 17, 21 , секретный - 5, 21 .

Зашифруем последовательность «12345»:

C(1)= 1 17 mod 21= 1

C(2)= 2 17 mod 21 =11

C(3)= 3 17 mod 21= 12

C(4)= 4 17 mod 21= 16

C(5)= 5 17 mod 21= 17

Криптотекст - 1 11 12 16 17.

Проверим расшифровкой:

M(1)= 1 5 mod 21= 1

M(2)= 11 5 mod 21= 2

M(3)= 12 5 mod 21= 3

M(4)= 16 5 mod 21= 4

M(5)= 17 5 mod 21= 5

Как видим, результат совпал.

Криптосистема RSA широко применяется в Интернете. Когда вы подсоединяетесь к защищенному серверу по протоколу SSL, устанавливаете на свой ПК сертификат WebMoney либо подключаетесь к удаленному серверу с помощью Open SSH или SecureShell, то все эти программы применяют шифрование открытым ключом с использованием идей алгоритма RSA. Действительно ли эта система так надежна?

Конкурсы по взлому RSA

С момента своего создания RSA постоянно подвергалась атакам типа Brute-force attack (атака методом грубой силы, т. е. перебором). В 1978 г. авторы алгоритма опубликовали статью, где привели строку, зашифрованную только что изобретенным ими методом. Первому, кто расшифрует сообщение, было назначено вознаграждение в размере 100 долл., но для этого требовалось разложить на два сомножителя 129-значное число. Это был первый конкурс на взлом RSA. Задачу решили только через 17 лет после публикации статьи.

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

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

Один из самых распространенных в России почтовых клиентов, программа The Bat!, обладает встроенными возможностями добавлять цифровые подписи к письмам (обратите внимание на пункт меню Privacy при редактировании письма). Подробнее об этой методике читайте в статье (см. «Мир ПК», № 3/02).

Рис. 3

Криптография

Криптография - наука о принципах, средствах и методах преобразования информации для защиты ее от несанкционированного доступа и искажения. В последнее время она развивается очень и очень бурно. Это бесконечная увлекательная гонка, требующая много времени и сил: криптоаналитики взламывают алгоритмы, которые еще недавно были стандартами и повсеместно использовались. Кстати, недавно математики Дэн Голдстон (США) и Кем Илдирим (Турция) доказали первую закономерность в распределении простых чисел (до сих пор таких закономерностей не замечали). Простые числа располагаются на числовой оси некоторыми скоплениями, что несколько облегчает их поиск.

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

Олег Бунин - специалист по разработке ПО для крупных Интернет-проектов, сотрудник компании «Рамблер», http://www..htm ).

  • Введение в криптографию / Под ред. В.В. Ященко. М.: МЦНМО, 2000.
  • Носов В. А. Краткий исторический очерк развития криптографии // Материалы конференции "Московский университет и развитие криптографии в России", МГУ, 17-18 октября 2002 г.
  • Саломаа А. Криптография с открытым ключом. М., 1996 .
  • Циммерман Ф. PGP - кодирование с открытым ключом для всех.
  • Система шифрования Цезаря

    Пример алгоритма замены - система шифрования Цезаря. Этот метод основан на замене каждой буквы сообщения на другую путем смещения от исходной на фиксированное количество символов. Попробуйте расшифровать четверостишие Омара Хайяма (время выполнения - 10 минут).

    РЛЗЬ ЁМЭЙЗ АВБЖУ ИЙЗАВЛУ, БЖЩЛУ ЖЩЭЗЬЖЗ ЖЮЁЩЕЗ, ЭЫЩ ЫЩАЖФО ИЙЩЫВЕЩ БЩИЗЁЖВ ЭЕШ ЖЩРЩЕЩ: ЛФ ЕМРСЮ ЪЗЕЗЭЩГ, РЮЁ РЛЗ ИЗИЩЕЗ ЮКЛУ, В ЕМРСЮ ЬМЭУ ЗЭВЖ, РЮЁ ЫЁЮКЛЮ К ДЮЁ ИЗИЩЕЗ.

    Успели? Привожу «отгадку»:

    Чтоб мудро жизнь прожить, знать надобно немало,

    Два важных правила запомни для начала:

    Ты лучше голодай, чем что попало есть,

    И лучше будь один, чем вместе с кем попало.

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

    Windows и пароли

    Как Windows шифрует пароли?

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

    Конкурс AES (Advanced Encryption Standard)

    В 80-х гг. в США приняли стандарт симметричного шифрования для внутреннего применения - DES ((Data Encryption Standard, подобный стандарт есть и в России). Но в 1997 г., когда стало понятно, что 56-битового ключа DES недостаточно для надежной криптосистемы, Американский институт стандартизации объявил конкурс на новый стандартный алгоритм. Из 15 вариантов был выбран лучший: бельгийский алгоритм Rijndael (его название составлено из фамилий авторов - Rijmen и Daemen, читается как «Рэйндал». Этот алгоритм уже встроен в различные криптографические средства, поставляемые на рынок). Другими финалистами конкурса стали MARS, RC6, Serpent, TwoFish. Все эти алгоритмы были признаны достаточно стойкими и успешно противостоящими всем широко известным методам криптоанализа.

    Криптографические хэш-функции

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

    • два разных набора данных с одинаковым результатом преобразования (стойкость к коллизиям); например, количество арифметических операций, необходимых для того, чтобы найти блок данных, также имеющий краткое сообщение для хэш-функции MD5, составляет приблизительно 2 64;
    • входное значение по известному результату хэширования (необратимость); для MD5 предполагаемое количество операций, необходимых для вычисления исходного сообщения, равно 2 128.

    Сергей Панасенко ,
    начальник отдела разработки программного обеспечения фирмы «Анкад»,
    [email protected]

    Основные понятия

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

    С = Ek1(M)

    M" = Dk2(C),

    где M (message) - открытая информация (в литературе по защите информации часто носит название "исходный текст");
    C (cipher text) - полученный в результате зашифрования шифртекст (или криптограмма);
    E (encryption) - функция зашифрования, выполняющая криптографические преобразования над исходным текстом;
    k1 (key) - параметр функции E, называемый ключом зашифрования;
    M" - информация, полученная в результате расшифрования;
    D (decryption) - функция расшифрования, выполняющая обратные зашифрованию криптографические преобразования над шифртекстом;
    k2 - ключ, с помощью которого выполняется расшифрование информации.

    Понятие "ключ" в стандарте ГОСТ 28147-89 (алгоритм симметричного шифрования) определено следующим образом: "конкретное секретное состояние некоторых параметров алгоритма криптографического преобразования, обеспечивающее выбор одного преобразования из совокупности всевозможных для данного алгоритма преобразований". Иными словами, ключ представляет собой уникальный элемент, с помощью которого можно изменять результаты работы алгоритма шифрования: один и тот же исходный текст при использовании различных ключей будет зашифрован по-разному.

    Для того, чтобы результат расшифрования совпал с исходным сообщением (т. е. чтобы M" = M), необходимо одновременное выполнение двух условий. Во-первых, функция расшифрования D должна соответствовать функции зашифрования E. Во-вторых, ключ расшифрования k2 должен соответствовать ключу зашифрования k1.

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

    Алгоритмы шифрования можно разделить на две категории: симметричного и асимметричного шифрования. Для первых соотношение ключей зашифрования и расшифрования определяется как k1 = k2 = k (т. е. функции E и D используют один и тот же ключ шифрования). При асимметричном шифровании ключ зашифрования k1 вычисляется по ключу k2 таким образом, что обратное преобразование невозможно, например, по формуле k1 = ak2 mod p (a и p - параметры используемого алгоритма).

    Симметричное шифрование

    Свою историю алгоритмы симметричного шифрования ведут с древности: именно этим способом сокрытия информации пользовался римский император Гай Юлий Цезарь в I веке до н. э., а изобретенный им алгоритм известен как "криптосистема Цезаря".

    В настоящее время наиболее известен алгоритм симметричного шифрования DES (Data Encryption Standard), разработанный в 1977 г. До недавнего времени он был "стандартом США", поскольку правительство этой страны рекомендовало применять его для реализации различных систем шифрования данных. Несмотря на то, что изначально DES планировалось использовать не более 10-15 лет, попытки его замены начались только в 1997 г.

    Мы не будем рассматривать DES подробно (почти во всех книгах из списка дополнительных материалов есть его подробнейшее описание), а обратимся к более современным алгоритмам шифрования. Стоит только отметить, что основная причина изменения стандарта шифрования - его относительно слабая криптостойкость, причина которой в том, что длина ключа DES составляет всего 56 значащих бит. Известно, что любой криптостойкий алгоритм можно взломать, перебрав все возможные варианты ключей шифрования (так называемый метод грубой силы - brute force attack). Легко подсчитать, что кластер из 1 млн процессоров, каждый из которых вычисляет 1 млн ключей в секунду, проверит 256 вариантов ключей DES почти за 20 ч. А поскольку по нынешним меркам такие вычислительные мощности вполне реальны, ясно, что 56-бит ключ слишком короток и алгоритм DES необходимо заменить на более "сильный".

    Сегодня все шире используются два современных криптостойких алгоритма шифрования: отечественный стандарт ГОСТ 28147-89 и новый криптостандарт США - AES (Advanced Encryption Standard).

    Стандарт ГОСТ 28147-89

    Алгоритм, определяемый ГОСТ 28147-89 (рис. 1), имеет длину ключа шифрования 256 бит. Он шифрует информацию блоками по 64 бит (такие алгоритмы называются блочными), которые затем разбиваются на два субблока по 32 бит (N1 и N2). Субблок N1 обрабатывается определенным образом, после чего его значение складывается со значением субблока N2 (сложение выполняется по модулю 2, т. е. применяется логическая операция XOR - "исключающее или"), а затем субблоки меняются местами. Данное преобразование выполняется определенное число раз ("раундов"): 16 или 32 в зависимости от режима работы алгоритма. В каждом раунде выполняются две операции.

    Первая - наложение ключа. Содержимое субблока N1 складывается по модулю 2 с 32-бит частью ключа Kx. Полный ключ шифрования представляется в виде конкатенации 32-бит подключей: K0, K1, K2, K3, K4, K5, K6, K7. В процессе шифрования используется один из этих подключей - в зависимости от номера раунда и режима работы алгоритма.

    Вторая операция - табличная замена. После наложения ключа субблок N1 разбивается на 8 частей по 4 бит, значение каждой из которых заменяется в соответствии с таблицей замены для данной части субблока. Затем выполняется побитовый циклический сдвиг субблока влево на 11 бит.

    Табличные замены (Substitution box - S-box) часто используются в современных алгоритмах шифрования, поэтому стоит пояснить, как организуется подобная операция. В таблицу записываются выходные значения блоков. Блок данных определенной размерности (в нашем случае - 4-бит) имеет свое числовое представление, которое определяет номер выходного значения. Например, если S-box имеет вид 4, 11, 2, 14, 15, 0, 8, 13, 3, 12, 9, 7, 5, 10, 6, 1 и на вход пришел 4-бит блок "0100" (значение 4), то, согласно таблице, выходное значение будет равно 15, т. е. "1111" (0 а 4, 1 а 11, 2 а 2 ...).

    Алгоритм, определяемый ГОСТ 28147-89, предусматривает четыре режима работы: простой замены, гаммирования, гаммирования с обратной связью и генерации имитоприставок. В них используется одно и то же описанное выше шифрующее преобразование, но, поскольку назначение режимов различно, осуществляется это преобразование в каждом из них по-разному.

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

    K0, K1, K2, K3, K4, K5, K6, K7, K0, K1 и т. д. - в раундах с 1-го по 24-й;

    K7, K6, K5, K4, K3, K2, K1, K0 - в раундах с 25-го по 32-й.

    Расшифрование в данном режиме проводится точно так же, но с несколько другой последовательностью применения подключей:

    K0, K1, K2, K3, K4, K5, K6, K7 - в раундах с 1-го по 8-й;

    K7, K6, K5, K4, K3, K2, K1, K0, K7, K6 и т. д. - в раундах с 9-го по 32-й.

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

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

    1. В регистры N1 и N2 записывается их начальное заполнение - 64-бит величина, называемая синхропосылкой.

    2. Выполняется зашифрование содержимого регистров N1 и N2 (в данном случае - синхропосылки) в режиме простой замены.

    3. Содержимое регистра N1 складывается по модулю (232 - 1) с константой C1 = 224 + 216 + 28 + 24, а результат сложения записывается в регистр N1.

    4. Содержимое регистра N2 складывается по модулю 232 с константой C2 = 224 + 216 + 28 + 1, а результат сложения записывается в регистр N2.

    5. Содержимое регистров N1 и N2 подается на выход в качестве 64-бит блока гаммы шифра (в данном случае N1 и N2 образуют первый блок гаммы).

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

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

    Зашифрование и расшифрование в режиме гаммирования

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

    В большинстве реализаций алгоритма ГОСТ 28147-89 синхропосылка не секретна, однако есть системы, где синхропосылка - такой же секретный элемент, как и ключ шифрования. Для таких систем эффективная длина ключа алгоритма (256 бит) увеличивается еще на 64 бит секретной синхропосылки, которую также можно рассматривать как ключевой элемент.

    В режиме гаммирования с обратной связью для заполнения регистров N1 и N2, начиная со 2-го блока, используется не предыдущий блок гаммы, а результат зашифрования предыдущего блока открытого текста (рис. 2). Первый же блок в данном режиме генерируется полностью аналогично предыдущему.

    Рис. 2. Выработка гаммы шифра в режиме гаммирования с обратной связью.

    Рассматривая режим генерации имитоприставок , следует определить понятие предмета генерации. Имитоприставка - это криптографическая контрольная сумма, вычисляемая с использованием ключа шифрования и предназначенная для проверки целостности сообщений. При генерации имитоприставки выполняются следующие операции: первый 64-бит блок массива информации, для которого вычисляется имитоприставка, записывается в регистры N1 и N2 и зашифровывается в сокращенном режиме простой замены (выполняются первые 16 раундов из 32). Полученный результат суммируется по модулю 2 со следующим блоком информации с сохранением результата в N1 и N2.

    Цикл повторяется до последнего блока информации. Получившееся в результате этих преобразований 64-бит содержимое регистров N1 и N2 или его часть и называется имитоприставкой. Размер имитоприставки выбирается, исходя из требуемой достоверности сообщений: при длине имитоприставки r бит вероятность, что изменение сообщения останется незамеченным, равна 2-r.Чаще всего используется 32-бит имитоприставка, т. е. половина содержимого регистров. Этого достаточно, поскольку, как любая контрольная сумма, имитоприставка предназначена прежде всего для защиты от случайных искажений информации. Для защиты же от преднамеренной модификации данных применяются другие криптографические методы - в первую очередь электронная цифровая подпись.

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

    Алгоритм ГОСТ 28147-89 считается очень сильным алгоритмом - в настоящее время для его раскрытия не предложено более эффективных методов, чем упомянутый выше метод "грубой силы". Его высокая стойкость достигается в первую очередь за счет большой длины ключа - 256 бит. При использовании секретной синхропосылки эффективная длина ключа увеличивается до 320 бит, а засекречивание таблицы замен прибавляет дополнительные биты. Кроме того, криптостойкость зависит от количества раундов преобразований, которых по ГОСТ 28147-89 должно быть 32 (полный эффект рассеивания входных данных достигается уже после 8 раундов).

    Стандарт AES

    В отличие от алгоритма ГОСТ 28147-89, который долгое время оставался секретным, американский стандарт шифрования AES, призванный заменить DES, выбирался на открытом конкурсе, где все заинтересованные организации и частные лица могли изучать и комментировать алгоритмы-претенденты.

    Конкурс на замену DES был объявлен в 1997 г. Национальным институтом стандартов и технологий США (NIST - National Institute of Standards and Technology). На конкурс было представлено 15 алгоритмов-претендентов, разработанных как известными в области криптографии организациями (RSA Security, Counterpane и т. д.), так и частными лицами. Итоги конкурса были подведены в октябре 2000 г.: победителем был объявлен алгоритм Rijndael, разработанный двумя криптографами из Бельгии, Винсентом Риджменом (Vincent Rijmen) и Джоан Даймен (Joan Daemen).

    Алгоритм Rijndael не похож на большинство известных алгоритмов симметричного шифрования, структура которых носит название "сеть Фейстеля" и аналогична российскому ГОСТ 28147-89. Особенность сети Фейстеля состоит в том, что входное значение разбивается на два и более субблоков, часть из которых в каждом раунде обрабатывается по определенному закону, после чего накладывается на необрабатываемые субблоки (см. рис. 1).

    В отличие от отечественного стандарта шифрования, алгоритм Rijndael представляет блок данных в виде двухмерного байтового массива размером 4X4, 4X6 или 4X8 (допускается использование нескольких фиксированных размеров шифруемого блока информации). Все операции выполняются с отдельными байтами массива, а также с независимыми столбцами и строками.

    Алгоритм Rijndael выполняет четыре преобразования: BS (ByteSub) - табличная замена каждого байта массива (рис. 3); SR (ShiftRow) - сдвиг строк массива (рис. 4). При этой операции первая строка остается без изменений, а остальные циклически побайтно сдвигаются влево на фиксированное число байт, зависящее от размера массива. Например, для массива размером 4X4 строки 2, 3 и 4 сдвигаются соответственно на 1, 2 и 3 байта. Далее идет MC (MixColumn) - операция над независимыми столбцами массива (рис. 5), когда каждый столбец по определенному правилу умножается на фиксированную матрицу c(x). И, наконец, AK (AddRoundKey) - добавление ключа. Каждый бит массива складывается по модулю 2 с соответствующим битом ключа раунда, который, в свою очередь, определенным образом вычисляется из ключа шифрования (рис. 6).


    Рис. 3. Операция BS.

    Рис. 4. Операция SR.

    Рис. 5. Операция MC.

    Количество раундов шифрования (R) в алгоритме Rijndael переменное (10, 12 или 14 раундов) и зависит от размеров блока и ключа шифрования (для ключа также предусмотрено несколько фиксированных размеров).

    Расшифрование выполняется с помощью следующих обратных операций. Выполняется обращение таблицы и табличная замена на инверсной таблице (относительно применяемой при зашифровании). Обратная операция к SR - это циклический сдвиг строк вправо, а не влево. Обратная операция для MC - умножение по тем же правилам на другую матрицу d(x), удовлетворяющую условию: c(x) * d(x) = 1. Добавление ключа AK является обратным самому себе, поскольку в нем используется только операция XOR. Эти обратные операции применяются при расшифровании в последовательности, обратной той, что использовалась при зашифровании.

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

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

    Асимметричное шифрование

    Алгоритмы асимметричного шифрования, как уже отмечалось, используют два ключа: k1 - ключ зашифрования, или открытый, и k2 - ключ расшифрования, или секретный. Открытый ключ вычисляется из секретного: k1 = f(k2).

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

    Примером однонаправленной функции может служить умножение двух больших чисел: N = P*Q. Само по себе такое умножение - простая операция. Однако обратная функция (разложение N на два больших множителя), называемая факторизацией, по современным временным оценкам представляет собой достаточно сложную математическую задачу. Например, разложение на множители N размерностью 664 бит при P ? Q потребует выполнения примерно 1023 операций, а для обратного вычисления х для модульной экспоненты y = ax mod p при известных a, p и y (при такой же размерности a и p) нужно выполнить примерно 1026 операций. Последний из приведенных примеров носит название - "Проблема дискретного логарифма" (DLP - Discrete Logarithm Problem), и такого рода функции часто используются в алгоритмах асимметричного шифрования, а также в алгоритмах, используемых для создания электронной цифровой подписи.

    Еще один важный класс функций, используемых в асимметричном шифровании, - однонаправленные функции с потайным ходом. Их определение гласит, что функция является однонаправленной с потайным ходом, если она является однонаправленной и существует возможность эффективного вычисления обратной функции x = f-1(y), т. е. если известен "потайной ход" (некое секретное число, в применении к алгоритмам асимметричного шифрования - значение секретного ключа).

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

    Алгоритм RSA

    Разработанный в 1978 г. тремя авторами (Rivest, Shamir, Adleman), он получил свое название по первым буквам фамилий разработчиков. Надежность алгоритма основывается на сложности факторизации больших чисел и вычисления дискретных логарифмов. Основной параметр алгоритма RSA - модуль системы N, по которому проводятся все вычисления в системе, а N = P*Q (P и Q - секретные случайные простые большие числа, обычно одинаковой размерности).

    Секретный ключ k2 выбирается случайным образом и должен соответствовать следующим условиям:

    1

    где НОД - наибольший общий делитель, т. е. k1 должен быть взаимно простым со значением функции Эйлера F(N), причем последнее равно количеству положительных целых чисел в диапазоне от 1 до N, взаимно простых с N, и вычисляется как F(N) = (P - 1)*(Q - 1) .

    Открытый ключ k1 вычисляется из соотношения (k2*k1) = 1 mod F(N) , и для этого используется обобщенный алгоритм Евклида (алгоритм вычисления наибольшего общего делителя). Зашифрование блока данных M по алгоритму RSA выполняется следующим образом: C = M[в степени k1] mod N . Заметим, что, поскольку в реальной криптосистеме с использованием RSA число k1 весьма велико (в настоящее время его размерность может доходить до 2048 бит), прямое вычисление M[в степени k1] нереально. Для его получения применяется комбинация многократного возведения M в квадрат с перемножением результатов.

    Обращение данной функции при больших размерностях неосуществимо; иными словами, невозможно найти M по известным C, N и k1. Однако, имея секретный ключ k2, при помощи несложных преобразований можно вычислить M = Ck2 mod N. Очевидно, что, помимо собственно секретного ключа, необходимо обеспечивать секретность параметров P и Q. Если злоумышленник добудет их значения, то сможет вычислить и секретный ключ k2.

    Какое шифрование лучше?

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

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

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

    Дополнительные источники информации

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

    1. Брассар Ж. "Современная криптология".
    2. Петров А. А. "Компьютерная безопасность: криптографические методы защиты".
    3. Романец Ю. В., Тимофеев П. А., Шаньгин В. Ф. "Защита информации в современных компьютерных системах".
    4. Соколов А. В., Шаньгин В. Ф. "Защита информации в распределенных корпоративных сетях и системах".

    Полное описание алгоритмов шифрования можно найти в следующих документах:

    1. ГОСТ 28147-89. Система обработки информации. Защита криптографическая. Алгоритм криптографического преобразования. - М.: Госстандарт СССР, 1989.
    2. Алгоритм AES: http://www.nist.gov/ae .
    3. Алгоритм RSA: http://www.rsasecurity.com/rsalabs/pkcs/pkcs-1 .