преобразование замешивания столбцов (MixColumn). преобразование представляет собой умножение состояния на матрицу ME при шифровании или матрицу MD при расшифровании:
48.
.ЧаСТь.1
ME
MD
⊗
⊗
State
State
2 3
1 1
⊗
b1
b5
b9
b13 1
2 3
1
b2
b6
b10
b14 1
1 2
3
b3
b7
b11
b15 3
1 1
2
b4
b8
b12
b16
b1
= (b1 * 2) XOR (b2*3) XOR (b3*1) XOR (умножение двух байт выполняется последующему алгоритму:
если один из байт равен 0, результатом будет если один из байт равен 1, результатом будет другой байт;
в остальных случаях происходит замена каждого байта по таблице. Замененные байты складываются, при необходимости вычитается для попадания в интервал [0, 255] и происходит замена пота- блице E, что и дает результат. на языке псевдо-Си таблицы L и E имеют следующий вид
= {
, 0x00, 0x19, 0x01, 0x32, 0x02, 0x1A, 0xC6, 0x4B,
0xC7, 0x1B, 0x68, 0x33, 0xEE, 0xDF, 0x03,
0x64, 0x04, 0xE0, 0x0E, 0x34, 0x8D, 0x81, 0xEF, 0x4C,
0x71, 0x08, 0xC8, 0xF8, 0x69, 0x1C, 0xC1,
0x7D, 0xC2, 0x1D, 0xB5, 0xF9, 0xB9, 0x27, 0x6A, 0x4D,
0xE4, 0xA6, 0x72, 0x9A, 0xC9, 0x09, 0x78,
0x65, 0x2F, 0x8A, 0x05, 0x21, 0x0F, 0xE1, 0x24, 0x12,
0xF0, 0x82, 0x45, 0x35, 0x93, 0xDA, 0x8E,
0x96, 0x8F, 0xDB, 0xBD, 0x36, 0xD0, 0xCE, 0x94, 0x13,
0x5C, 0xD2, 0xF1, 0x40, 0x46, 0x83, 0x38,
0x66, 0xDD, 0xFD, 0x30, 0xBF, 0x06, 0x8B, 0x62, 0xB3,
0x25, 0xE2, 0x98, 0x22, 0x88, 0x91, 0x10,
0x7E, 0x6E, 0x48, 0xC3, 0xA3, 0xB6, 0x1E, 0x42, 0x3A,
0x6B, 0x28, 0x54, 0xFA, 0x85, 0x3D, 0xBA,
0x2B, 0x79, 0x0A, 0x15, 0x9B, 0x9F, 0x5E, 0xCA, 0x4E,
0xD4, 0xAC, 0xE5, 0xF3, 0x73, 0xA7, 0x57,
0xAF, 0x58, 0xA8, 0x50, 0xF4, 0xEA, 0xD6, 0x74, 0x4F,
0xAE, 0xE9, 0xD5, 0xE7, 0xE6, 0xAD, 0xE8,
0x2C, 0xD7, 0x75, 0x7A, 0xEB, 0x16, 0x0B, 0xF5, 0x59,
0xCB, 0x5F, 0xB0, 0x9C, 0xA9, 0x51, 0xA0,
Лабораторная.работа.№.4.
.49 0x7F, 0x0C, 0xF6, 0x6F, 0x17, 0xC4, 0x49, 0xEC, 0xD8,
0x43, 0x1F, 0x2D, 0xA4, 0x76, 0x7B, 0xB7,
0xCC, 0xBB, 0x3E, 0x5A, 0xFB, 0x60, 0xB1, 0x86, 0x3B,
0x52, 0xA1, 0x6C, 0xAA, 0x55, 0x29, 0x9D,
0x97, 0xB2, 0x87, 0x90, 0x61, 0xBE, 0xDC, 0xFC, 0xBC,
0x95, 0xCF, 0xCD, 0x37, 0x3F, 0x5B, 0xD1,
0x53, 0x39, 0x84, 0x3C, 0x41, 0xA2, 0x6D, 0x47, 0x14,
0x2A, 0x9E, 0x5D, 0x56, 0xF2, 0xD3, 0xAB,
0x44, 0x11, 0x92, 0xD9, 0x23, 0x20, 0x2E, 0x89, 0xB4,
0x7C, 0xB8, 0x26, 0x77, 0x99, 0xE3, 0xA5,
0x67, 0x4A, 0xED, 0xDE, 0xC5, 0x31, 0xFE, 0x18, 0x0D,
0x63, 0x8C, 0x80, 0xC0, 0xF7, 0x70, 0x07
};
E
= {
0x01, 0x03, 0x05, 0x0F, 0x11, 0x33, 0x55, 0xFF, 0x1A,
0x2E, 0x72, 0x96, 0xA1, 0xF8, 0x13, 0x35,
0x5F, 0xE1, 0x38, 0x48, 0xD8, 0x73, 0x95, 0xA4, 0xF7,
0x02, 0x06, 0x0A, 0x1E, 0x22, 0x66, 0xAA,
0xE5, 0x34, 0x5C, 0xE4, 0x37, 0x59, 0xEB, 0x26, 0x6A,
0xBE, 0xD9, 0x70, 0x90, 0xAB, 0xE6, 0x31,
0x53, 0xF5, 0x04, 0x0C, 0x14, 0x3C, 0x44, 0xCC, 0x4F,
0xD1, 0x68, 0xB8, 0xD3, 0x6E, 0xB2, 0xCD,
0x4C, 0xD4, 0x67, 0xA9, 0xE0, 0x3B, 0x4D, 0xD7, 0x62,
0xA6, 0xF1, 0x08, 0x18, 0x28, 0x78, 0x88,
0x83, 0x9E, 0xB9, 0xD0, 0x6B, 0xBD, 0xDC, 0x7F, 0x81,
0x98, 0xB3, 0xCE, 0x49, 0xDB, 0x76, 0x9A,
0xB5, 0xC4, 0x57, 0xF9, 0x10, 0x30, 0x50, 0xF0, 0x0B,
0x1D, 0x27, 0x69, 0xBB, 0xD6, 0x61, 0xA3,
0xFE, 0x19, 0x2B, 0x7D, 0x87, 0x92, 0xAD, 0xEC, 0x2F,
0x71, 0x93, 0xAE, 0xE9, 0x20, 0x60, 0xA0,
0xFB, 0x16, 0x3A, 0x4E, 0xD2, 0x6D, 0xB7, 0xC2, 0x5D,
0xE7, 0x32, 0x56, 0xFA, 0x15, 0x3F, 0x41,
0xC3, 0x5E, 0xE2, 0x3D, 0x47, 0xC9, 0x40, 0xC0, 0x5B,
0xED, 0x2C, 0x74, 0x9C, 0xBF, 0xDA, 0x75,
0x9F, 0xBA, 0xD5, 0x64, 0xAC, 0xEF, 0x2A, 0x7E, 0x82,
0x9D, 0xBC, 0xDF, 0x7A, 0x8E, 0x89, 0x80,
0x9B, 0xB6, 0xC1, 0x58, 0xE8, 0x23, 0x65, 0xAF, 0xEA,
0x25, 0x6F, 0xB1, 0xC8, 0x43, 0xC5, 0x54,
50.
.ЧаСТь.1 0xFC, 0x1F, 0x21, 0x63, 0xA5, 0xF4, 0x07, 0x09, 0x1B,
0x2D, 0x77, 0x99, 0xB0, 0xCB, 0x46, 0xCA,
0x45, 0xCF, 0x4A, 0xDE, 0x79, 0x8B, 0x86, 0x91, 0xA8,
0xE3, 0x3E, 0x42, 0xC6, 0x51, 0xF3, 0x0E,
0x12, 0x36, 0x5A, 0xEE, 0x29, 0x7B, 0x8D, 0x8C, 0x8F,
0x8A, 0x85, 0x94, 0xA7, 0xF2, 0x0D, 0x17,
0x39, 0x4B, 0xDD, 0x7C, 0x84, 0x97, 0xA2, 0xFD, 0x1C,
0x24, 0x6C, 0xB4, 0xC7, 0x52, 0xF6, Добавление циклового ключа Цикловой ключ добавляется к состоянию посредством простого EXOR (рис. 1.24). Цикловой ключ вырабатывается из ключа шифрования посредством алгоритма выработки ключей (key schedule). Длина циклового ключа равна длине блока Nb.
a
0,0
a
0,1
a
0,2
a
0,3
a
0,4
a
0,5
a
1,0
a
1,1
a
1,2
a
1,3
a
1,4
a
1,5
a
2,0
a
2,1
a
2,2
a
2,3
a
2,4
a
2,5
a
3,0
a
3,1
a
3,2
a
3,3
a
3,4
a
3,5
k
0,0
k
0,1
k
0,2
k
0,3
k
0,4
k
0,5
k
1,0
k
1,1
k
1,2
k
1,3
k
1,4
k
1,5
k
2,0
k
2,1
k
2,2
k
2,3
k
2,3
k
2,5
k
3,0
k
3,1
k
3,2
k
3,3
k
3,4
k
3,5
+
=
b
0,0
b
0,1
b
0,2
b
0,3
b
0,4
b
0,5
b
1,0
b
1,1
b
1,2
b
1,3
b
1,4
b
1,5
b
2,0
b
2,1
b
2,2
b
2,3
b
2,4
b
2,5
b
3,0
b
3,1
b
3,2
b
3,3
b
3,4
b
3,5 рис. 1.24. операция добавления циклового ключа при шифровании части расширенного ключа выбираются от начала к концу, при расшифровании — от конца к началу.
Расширение ключа (Key расширенный ключ представляет собой линейный массив четырех байтовых слови обозначается
W[Nb*(Nr + 1)]. первые Nk слов содержат ключ шифрования. Все остальные слова определяются рекурсивно из слов с меньшими индексами. Алгоритм выработки ключей зависит от величины Nk. ниже приведена версия для Nk
≤ 6 и версия для Nk > для Nk < 6 или Nk
= 6
KeyExpansion(CipherKey,W)
{
for (i
= 0; i < Nk; i++) W[i] = CipherKey[i];
for (j
= Nk; j < Nb*(Nk+1); j+=Nk)
{
W[j]
= W[j-Nk] ^ SubByte( Rotl( W[j-1] ) ) ^
Rcon[j/Nk];
for
(i
= 1; i < Nk && i+j < Nb*(Nr+1); i++)
Лабораторная.работа.№.4.
.51
W[i+j]
= W[i+j-Nk] ^ W[i+j-1];
можно заметить, что первые Nk слов заполняются ключом шифрования. Каждое последующее слово W[i] получается посредством EXOR предыдущего слова W[i – 1] и слова на Nk позиций ранее W[i – Nk]. Для слов, позиция которых кратна Nk, перед EXOR применяется преобразование ка затем еще прибавляется цикловая константа. преобразование содержит циклический сдвиг байтов в слове, обозначенный как Rotl, затем следует SubByte — применение замены байт;
для Nk > 6
KeyExpansion(CipherKey,W)
{
for (i
=0; i
for (j
=Nk; j {
W[j]
= W[j-Nk] ^ SubByte(Rotl(W[j-1])) ^
Rcon[j/Nk];
for
(i
=1; i<4; i++) W[i+j] = W[i+j-Nk] ^
W[i+j-1];
W[j+4]
= W[j+4-Nk] ^ SubByte(W[j+3]);
for
(i
=5; iW[i+j-1];
отличие для схемы при Nk > 6 состоит в применении SubByte для каждого четвертого байта из Nk.
Цикловая константа независит от Nk и определяется следующим образом
=
( RC[i], '00' , '00' , '00' ), где
RC[0]
='01'
RC[i]
=xtime(Rcon[i-1])
Шифрование.Шифр Rijndael включает следующие преобразо вания:
начальное добавление циклового ключа – 1 циклов
52.
.ЧаСТь.1
заключительный цикл.
на языке псевдо-Си это выглядит следующим образом (State, CipherKey)
{
KeyExpansion(CipherKey, ExpandedKey); // Расширение ключа, ExpandedKey); // Добавление циклового ключа For ( i
=1 ; i// циклы, ExpandedKey+Nb*Nr); // заключительный цикл Если предварительно выполнена процедура расширения ключа, то процедура будет иметь следующий вид (State, CipherKey)
{
AddRoundKey(State, ExpandedKey);
For ( i
=1 ; iFinalRound(State, Описание демонстрационной программы.программа выполнена на языке C# и состоит из двух элементов — файла Rijndael.dll, содержащего реализацию алгоритма шифрования, и демонстрационного приложения RijndaelDemo.exe. Для работы приложения необходима оС Windows с установленным .NET Framework В основном окне демонстрационной программы задаются длина ключа, длина блока, а также расширенный ключ шифрования, вычисляемый в соответствии с заданным ключом шифрования рис. 1.25, можно подробно рассмотреть действие всех цикловых преобразований) как при шифровании, таки при расшифровании (рис. 1.27, 1.28).
Лабораторная.работа.№.4.
.53
рис. 1.25. Главное окно демонстрационной программы
рис. 1.26. окно расширенного ключа
рис. 1.27. окна преобразований ByteSub и ShiftRow при шифровании предлагается выбрать исходный файл и файл, куда будет помещен результат шифрования, при расшифровании — соответственно зашифрованный файл и файл, предназначенный для помещения результата расшифрования. В процессе используются указанные в главном окне программы ключ шифрования и длины ключа и блока
54.
.ЧаСТь.1
рис. 1.28. окна преобразований MixColumn и задание. ознакомиться со сведениями о программе RijndaelDemo. Запустить модуль RijndaelDemo.exe.
2. изучить на примере обычных текстовых файлов способы шифрования и расшифрования с помощью алгоритма Rijndael. подробно рассмотреть действие всех цикловых преобразований (ByteSub,
ShiftRow, MixColumn, AddRoundKey) как при шифровании, таки рас- шифровании. исходный текст для шифрования может быть подготовлен заранее и сохранен в файле *.txt.
3. Сохранить в отчете экранные формы, демонстрирующие процесс шифрования и расшифрования информации, проанализировать полученные результаты. Включить в отчет о лабораторной работе ответы на контрольные задания, выбранные в соответствии с номером варианта, указанным преподавателем (табл. таблица номер варианта
Контрольные задания, 5, 7, Сравнить основные характеристики алгоритмов Rijndael и ГоСт 28147—89 2, 4, Сравнить основные характеристики алгоритмов Rijndael и DES
11, описать структуру сети Фейстеля
12, 14, привести обобщенные схемы шифрования данных с помощью алгоритма Rijndael и ГоСт 28147—89. Дать их сравнительный анализ, 9, 18, 29 Сравнить один раунд шифрования данных с помощью алгоритма и ГоСт 28147—89
Список.литературы.
.55
номер варианта
Контрольные задания, 22, Сравнить эквивалентность прямого и обратного преобразований в алгоритмах Rijndael и ГоСт 28147—89 10, 17, Сравнить выработку ключевой информации в алгоритмах Rijn- dael и ГоСт 28147—89 21, 23, Сравнить алгоримы Rijndael и ГоСт 28147—89 по показателям диффузии, 28, Сравнить алгоримы Rijndael и ГоСт 28147—89 по показателям стойкости, 15, Сравнить алгоримы Rijndael и ГоСт 28147—89 по показателям производительности и удобству реализации
Список литературы Бабаш А.В. Криптографические и теоретико-автоматные аспекты современной защиты информации. Криптографические методы защиты. м. : изд. центр ЕАои, 2009.
2. Бабаш А.В., Шанкин Г.П. Криптография / под редакцией В.п. Шер- стюка, Э.А. применко. м. : СоЛон-р, 2007.
3. Баранова Е.К. Эффективное кодирование и защита информации текст лекций для студентов специальности 510200. м. : мГуЛ, 2002.
4. Мельников В.В. Защита информации в компьютерных системах. м. : Финансы и статистика ; Электроинформ, 1997.
5. Романец Ю.В., Тимофеев ПА, Шаньгин В.Ф. Защита информации в компьютерных системах и сетях. м. : радио и связь, 2001.
6. Смарт Н Криптография. м. : техносфера, Окончание
ЧаСТь.
2
ТеореТиЧеСкие Сведения
Асимметричные системы шифрования Смысл асимметричных криптосистем (системы открытого шифрования с открытым ключом — public
key systems) состоит в том, что для зашифрования и расшифрования используются разные преобразования. одно из них — зашифрование — является абсолютно открытым для всех. Другое же — расшифрова- ние — остается секретным за счет секретности ключа расшифрования. таким образом, любой, кто хочет что-либо зашифровать, пользуется открытым преобразованием, но расшифровать и прочитать это сможет лишь тот, кто владеет секретным ключом. Схема асимметричной криптосистемы представлена на рис. Отправитель Р
1
Исходное сообщение М
Алгоритм шифрования
Криптограмма, С
Получатель Р
2
Алгоритм расшифрования
Секретный ключ
Генерация ключей
Незащищенный канал
Противник
Открытый ключ
М
рис. 2.1. обобщенная схема асимметричной криптосистемы
В настоящее время во многих асимметричных криптосистемах вид преобразования определяется ключом. у пользователя есть два ключа секретный и открытый. открытый ключ публикуется в общедоступном месте, и каждый, кто хочет послать сообщение этому пользователю, зашифровывает текст открытым ключом. расшифровать сообщение может только упомянутый пользователь с секретным ключом. таким образом, отпадает проблема передачи секретного ключа, как в симметричных системах. однако, несмотря на все свои преимущества, эти криптосистемы достаточно трудоемки и медлитель-
Теоретические.сведения.
.57
ны. Стойкость асимметричных криптосистем базируется в основном на алгоритмической трудности решить за приемлемое время какую- либо задачу. Если злоумышленнику удастся построить такой алгоритм, то дискредитирована будет вся система и все сообщения, зашифрованные с помощью этой системы. В этом состоит главная опасность асимметричных криптосистем в отличие от симметричных. Алгоритм Диффи — Хеллмана.АлгоритмДиффи — Хеллмана
(Diffie — Hellman) использует функцию дискретного возведения в степень. Вначале генерируются два больших простых числа n и q. Эти два числа необязательно хранить в секрете. Далее один из партнеров генерирует случайное число x и посылает другому участнику будущих обменов P
2
значение
= q
x
mod по получениизначенияАпартнер P
2
генерирует случайное число у и посылает участнику обмена P
1
вычисленное значение
= q
y
mod n.
партнерP
1
,получивзначение В,вычисляетK
x
= B
x
mod а партнер A
y
mod n. Алгоритм гарантирует, что числаK
y
и K
x
равны и могут быть использованы в качестве секретного ключа для шифрования. Даже перехватив числа Аи В, трудно вычислить или K
y
. Схематично работа алгоритма Диффи — Хеллмана представлена на рис. Отправитель Р
1
Получатель Р 1. Генерация n, модуль основание
А
В
2. Вычисление А = q
x
mod n
по случайному числу. Вычисление ключа
K
x
= B
x
mod n
3. Вычисление В = q
y
mod n
по случайному числу. Вычисление ключа
K
y
= A
y
mod рис. 2.2. Алгоритм Диффи — Хеллмана
пример 2.1
n
= 5, q = 7, x = 3, y = А
= 7 3
(mod 5)
= 343 (mod 5) = 3; В = 7 2
(mod 5)
= 49 (mod 5) = К 7 3
(mod 5)
= 64 (mod 5) = 4; K
y
= 3 2
(mod 5)
= Алгоритм первое практическое воплощение принцип открытого шифрования получил в системе RSA, разработанной в 1977 г.
58.
.ЧаСТь.2
в массачусетском технологическом институте (США) и получившей свое название от первых букв фамилий авторов рональд ривест
(R. Rivest),Эди Шамир(A. Shamir), Леонард Адлеман (L. идея авторов этого алгоритма состояла в том, что, взяв целое число в виде произведения двух больших простых чисел N
= P ∙ Q, легко подобрать пару чисел Y и X, таких, чтобы для любого целого числа M, меньшего N, было справедливо соотношение M mod В качестве открытого ключа шифрования в системе RSA выступают ключи модуль N, а секретным ключом для расшифрования сообщений является число X. процедура шифрования сообщения M, рассматриваемого как целое число (такое допущение возможно вследствие того, что любой контент может быть представлен в числовой форме при обработке в средствах вычислительной техники, меньшее N при необходимости длинное сообщение разбивается на отрезки, шифруемые независимо, состоит в вычислении значения
= M
Y
mod N.
расшифрование осуществляется аналогично с использованием секретного ключа X:
M
= C
X
mod математически строго можно доказать, что определение по паре чисел (N, Y) секретного ключа X не проще разложения на простые множители числа N, те. нахождения P и Q. Задача же разложения на множители целого числа изучается в математике с древнейших времени известна как сложная вычислительная задача. В настоящее время разложение числа из нескольких сотен десятичных знаков потребует от современных вычислительных машин сотен лет непрерывной работы. Далее представлен пример работы алгоритма генерация ключей
Получатель 1. Р, Q — простые, N
= P ∙ Q
2.
ϕ(N) = (P – 1) ∙ (Q – 1), ϕ(N) — функция Эйлера
Выбор открытого ключа Y:
1 < Y
≤ ϕ(N), ноД(Y, ϕ(N)) = Выбор открытого ключа X:
X ∙ Y
≡ 1 (mod Отправитель
шифрование ММ
Теоретические.сведения.
.59
Получатель
1 2 3 4 5 6 7 8 9 ... 16