Э. Таненбаум - Компьютерные сети. (4-е издание) (DJVU) (1130092), страница 226
Текст из файла (страница 226)
2. Яегреп1 (Росс Андерсон (Коза Апдегзоп), Эли Бихам (Е?1 В!Ьаш) и Ларс Кнудсен (?лгз Кппг?зеп), 59 голосов). 3. ТвойзЬ (команда, возглавляемая Брюсом Шнайером (Вгасе 3сЬпе!ег), 31 голос). 4. КС6 (компания КЯА ?.аЬогасог?ез, 23 голоса). 5. МАКВ (корпорация?ВМ, 13 голосов). В октябре 2000 года Ь??5Т объявил о том, что он также голосует за К!)пбае?, и уже в ноябре 2001 года К!?пбае! становится стандартом правительства США, опубликованным как Федеральный стандарт обработки информации, Р?Р3 197. Благодаря полной открытости конкурса, а также благодаря техническим возможностям К?)пс?ае! и тому факту, что выигравшая конкурс команда состояла из двух молодых бельгийских шифровалыциков (которые вряд ли стали бы сотрудничать с Ь?5А, предоставляя какие-то лазейки), ожидается, что К!)пбае! станет доминирующим мировым криптографическим стандартом, по крайней мере, на ближайшее десятилетие.
Название К!)пбае! (произносится примерно как Райндол) представляет собой сокращение фамилий авторов: Раймен + Домен. КЬ!пг?ае! поддерживает длины ключей и размеры блоков от 128 до 256 бит с шагом в 32 бита. Длины ключей и блоков могут выбираться независимо друг от друга. Тем не менее, стандарт АЕ5 говорит о том, что размер блока должен быть равен 128 битам, а длина ключа — 128, 192 или 256 бит. Однако вряд ли кто-то будет использовать 192-битные ключи, позтому фактически АЕЯ применяется в двух вариантах: со 128-битными блоками и 128-битными ключами, а также со 128-битными блоками и 256-битными ключами.
Далее приводится описание алгоритма, и там мы рассматриваем только один случай — 128/128, поскольку именно зто, скорее всего, станет нормой для коммерческих приложений. 128-битный ключ означает, что размер пространства его значений равен 2гж = 3 ° 10". Даже если Агентству национальной безопасности удастся собрать машину на миллионе параллельных процессоров, каждый из ко- Алгоритмы с симметричным криптографическим ключом 839 торых будет способен вычислять один ключ в пикосекунду, на перебор всех значений потребуется около 10" лет, К тому времени Солнце уже давно потухнет, и нашим далеким потомкам придется читать распечатку со значением ключа при свете свечи. й!!Пс!аЕ! С математической точки зрения, метод К!)пт)ае! основывается на теории полей Галуа, благодаря чему можно строго доказать некоторые его свойства, касающиеся секретности.
Тем не менее, можно рассматривать его и с точки зрения кода программы на языке С, не вдаваясь в математические подробности. Как и в [)ЕБ, в 81) п()ае! применяются замены и перестановки. И там, и там используются несколько итераций, их число зависит от размера клточа и блока и равно 10 для 128-разрядного ключа и 128-битных блоков; для максимального размера ключа и блоков число итераций равно 14. Однако, в отличие от Е)ЕБ, все операции выполняются над целыми байтами, что позволяет создавать эффективные реализации как в аппаратном, так и в программном исполнении. Схематичный алгоритм метода К!]пт)ае! приведен в листинге 8.1. Листинг 8.1.
Схематичный алгоритм мвтода Е(1)пс)ав( Йег(пе [ЕИВТН 16/* Число байтов в блоке данных или ключе */ )!бетзпе ИРОН5 4/* Число строк в пассиве зваге */ Йетзпе ИСО[5 4/* Число столбцов в пассиве зсате */ ()бетзпе МООИ05 10/* Число итераций */ туребет цпзтдпеб сдаг Ьуте/8-разрядное целое без знака */ гдбпбае1(Ьуте р1а1птехв[ЕЕИЯТН]. Ьуте с(рлегтехт[ЕЕМВТН], Ьуте Ееу[ЕЕМЯТН]) ! 1пт г:/* Счетчик цикла */ Ьуте агате[ИМОН53[МСО[53;/* Текущее состояние */ втгцст[Ьусе Е[ММОН5КМСО[53;) гц[МООМ05 + 13:/* Ключи итерации */ ехрапб Кеу(йеу,гй);/* Сфориировать ключи итерации */ сору рТазпсехт во техт(агате. р1азптехт)./* инициализация текущего состояния */ хог гоцпбяеу тобо агате(всасе.
гй[03);/* Сложить ло модулю 2 ключ с текудим состоянием */ Тог(г-1: г<нйООМ05: г++) ( вцозтттцсе(втате):/* Пропустить нашдый байт через 5-блок */ говаве гоша(агаве);/* Повернуть строку 1 на т байт */ тб(г < ДООИ05) щзх со1цщпз(агате);/* Смешивающая функция */ хог гоцпбхеу 1пто агате(ввасе.
гк[г]):/* словить ло иодулю 2 ключ с текущии состояниеи */ ) сору агаве то с!рпегтехг(с(рлегвехв, зЬаЬе);/* Вернуть результат */ ) У функции г10пбае1 три аргумента: р1атптех1 — массив размером 16 байт, содержащий входные данные, от рбег1ехв — массив размером 16 байт, в который будет возвразцен шифр, а также Кеу — 16-разрядный ключ. В процессе вычислений текущее состояние данных сохраняется в байтовом массиве в(вбе, размер которо- 840 Глава 8. Безопасность в сетях го равен Кй0$45 х $$00с5.
Для 128-битных блоков данных размер этого массива равен 4к4 байта. В 16 байтах целиком уместится один блок, Массив зйвсе ианачально содержит открытый текст и модифицируется на каждом этапе вычислений. На некоторьгх этапах выполняется побайтовая подстановка На других этапах — перестановка байтов внутри массива. Могут выполсгяться и другие преобразования.
В конечном итоге содержимое 11асе представляет собой зашифрованный текст, который и возвращается в качестве результата функции. Алгоритм начинается с распространения ключа по 11 массивам одинакового размера, представляющим состояние (згасе). эти массивы хранятся в г~ — массиве структур, содержащих массивы состояний. Одна из этих структур будет использована в начале вычислений, а остальные 10 — во время 10 итераций (по одной на итерацию).
Вычисление ключа для каждой итерации производится довольно сложным образом, и мы не будем рассматривать детали этого процесса. Достаточно сказать, что для этого осуществляются циклические повороты и суммирования по модулю 2 различных групп разрядов ключа. Подробности можно узнать в (Паетеп и В[)реп, 2002).
Следующий шаг состоит в копировании открытого текста в массив э1аге для того, чтобы его можно было обрабатывать во время последующих итераций. Копируется текст в колонки по 4 байта.' первые 4 байта попадают в колонку О, вторые — в колонку 1 и т. д. И колонки, и строки нумеруются с нуля, а итерации— с единицы. Процесс создания 12 байтовых массивов размером 4х4 показан на рис. 8.8. в[все г$с[0) г$с[1) г$с[2) га[3) га[4) га[6) га[6) г$с[7) гх[З) га[9) г$с[10) Ключи итераций Рио. 8.8. Создание массивов зсвсе и гк Перед началом основного цикла вычислений производится еще одно действие: гх[0) поразрядно складывается по модулю 2 с массивом э1зге. Другими словами, каждый из 16 байт в массиве згзге заменяется суммой по модулю 2 от него самого и соответствующего байта в гК [03, Только после этого начинается главное развлечение.
В цикле проводятся 10 итераций, в каждой из которых массив эсзге подвергается преобразованию. Каждый раунл (итерация) состоит из четырех шагов. на шаге 1 в зтаге производится посимвольная подстановка. Каждый байт по очереди используется в качестве индекса для Я-блока, заменяющего его значение на соответствуюгцую запись Я-бло- Алгоритмы с симметричным криптографическим ключом а41 ка.
На этом шаге получается прямой моноалфавитный подстановочный шифр В отличие от РЕБ, где используются несколько Б-блоков, в Кцпдае1 Б-блок всего один. На шаге 2 каждая из четырех строк поворачивается влево. Строка 0 поворачивается на 0 байт (то есть не изменяется), строка 1 — на 1 байт, строка 2 — на 2 байта, а строка 3 — на 3 байта. Смысл заключается в разбрасывании данных вокруг блока. Это аналогично перестановкам, показанным на рис.
8.5. На шаге 3 происходит независимое перемешивание всех колонок. Делается это с помощью операции матричного умножения, в результате которого каждая новая колонка оказывается равной произведению старой колонки на постоянную матрицу. ??ри этом умножение выполняется с использованием конечного поля 1алуа, бР(2'). Несмотря на то, что все это кажется довольно сложным, алгоритм устроен так, что каждый элемент матрицы вычисляется посредством всего лишь двух обращений к таблице и трех суммирований по модулю 2 (Раешеп и К1)шеп, 2002, приложение Е).
Наконец, на шаге 4 юпоч данной итерации складывается по модулю 2 с массивом агате. Благодаря обратимости всех действий расшифровка может быть выполнена с помощью такого же алгоритма, но с обратным порядком следования всех шагов. Однако есть одна хитрость, которая позволяет заниматься расшифровкой, используя алгоритм шифрования с измененными таблицами.
Данный алгоритм обладает не только очень высокой защищенностью, но и очень высокой скоростью. Хорошая программная реализация на машине с частотой 2 ГГц может шифровать данные со скоростью 700 Мбит/с. Такой скорости достаточно для шифрации видео в формате МРЕС-2 в реальном масштабе времени. Аппаратные реатизации работают еще быстрее. Режимы шифрования Несмотря на всю свою сложность, АЕБ (или РЕБ, или любой другой блочный код) представляет собой, по сути дела, мопоалфавитный подстановочный шифр с большими длинами символов (в АЕБ используются 128-битные символы, в РЕБ— 64-битные). Для любого отрывка открытого текста шифр при прогоне через один и тот же шифрующий блок будет получаться всегда одинаковым. Скажем, если вы будете 100 раз пытаться зашифровать текст абсИефй, задавая всякий раз один и тот же ключ для алгоритма РЕБ, вы получите 100 одинаковых копий шифра. Взломщик может попытаться использовать этот недостаток при попытке расшифровки текста.
Режим электронного шифроблокнота Чтобы понять, каким образом это свойство моноалфавитного подстановочного шифра может быть использовано для частичного взлома шифра, мы рассмотрим (тройное) кодирование по стандарту РЕБ только лишь потому, что изображать 64-разрядные блоки проще, чем 128-разрядные. Надо иметь при этом в виду, что АЕБ сталкивается с теми же самыми проблемами. Самый очевидный способ ко- В42 Глава 6.
Безопасность в сетях дирования длинного сообщения заключается в разбиении его на отдельные блоки по 8 байт (64 бита) с последующим кодированием этих блоков по очереди одним и тем же ключом. Последний блок при необходимости можно дополнить до 64 бит. Такой метод называется режимом электронного шифроблокнота, по аналогии со старомодными шифроблокнотами, содержавшими слова и соответствующие им шифры (обычно это были пятизначные десятичные числа).
Па рис. 8.9 показано начало компьютерного файла, в котором перечислены поощрительные премии сотрудникам компании. Этот файл состоит из последовательных 32-разрядных записей, по одной на сотрудника, следующего формата: 16 байт на имя, 8 байт на должность и 8 байт на премию. Каждый из шестнадцати 8-байтовых блоков (пронумерованных от 0 до 15) кодируется шифром ПЕ8, Имя Должность Премия ~ < — 1 Рис. 6.9. Открытый текст файла, зашифрованного в виде 16 ОЕЗ-блоков Лесли только что поругалась с боссом и не рассчитывает на большую премию.