Добавил:
Да поможет вам Котельников Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

4 Лекция - Блочные шифры

.pdf
Скачиваний:
4
Добавлен:
23.06.2024
Размер:
794.59 Кб
Скачать

Симметрические криптографические системы Блочные шифры

Под симметричной шифрсистема [secret key cryptosystem, symmetric cryptosystem,

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

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

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

1. Моно- и многоалфавитные подстановки.

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

2. Перестановки.

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

3. Блочные шифры.

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

4. Гаммирование (поточные шифры).

Представляет собой преобразование исходного текста, при котором символы исходного

2

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

Рассмотрим сперва блочные шифры.

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

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

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

Первым блочным шифром, получившим международную известность, стал шифр Люцифер, разработанный в 1971 году американскими специалистами из фирмы IBM под руководством Хорста Фейстеля (Horst Feistel). На протяжении нескольких последующих лет этот алгоритм несколько раз перерабатывался (известно четыре различных модификации шифра Люцифер (Описание всех четырех модификаций алгоритма Люцифер может быть найдено в монографии Панасенко СЛ. Алгоритмы шифрования. Специальный справочник.

СП6.:БХВ-Петербург. — 2009, — 576 с)) и в 1975 году был принят в качестве первого американского национального стандарта. Сейчас этот алгоритм известен под названием DES (Data Encryption Standard).

Всвязи с большим количеством теоретических и практических результатов, снижающих стойкость алгоритма DES, в 1997 году американский национальный институт стандартизации (NIST) объявил конкурс на разработку нового алгоритма шифрования. Опередив в финале пятерых оппонентов, победителем конкурса стал алгоритм Rijndael, разработанный бельгийскими математиками Винсентом Райменом (Vincent Rijnmen) и Йоном Дайменом (Joan Daemen). В 2001 году данный алгоритм был стандартизован и получил название AES. До настоящего времени алгоритм AES считается стойким и рекомендуется американским правительством к использованию в коммерческих и государственных структурах.

История разработки отечественных блочных шифров немного скромнее. Советский, а позднее и российский алгоритм блочного шифрования появился в конце 80-х годов. В 1989 году он был принят в качестве государственного стандарта ГОСТ 28147-89 и действует на территории Российской Федерации до настоящего времени. Вначале на стандарте стоял ограничительный гриф «Для служебного пользования», который был снят в 1994 году. В отличие от большинства зарубежных стандартов, ГОСТ 28147-89 регламентировал не только алгоритм блочного шифрования информации, но и режимы его применения.

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

Летом 2014 года был представлен новый отечественный алгоритм блочного

3

шифрования, получивший название «Кузнечик» (англ, - Grasshopper). Этот алгоритм, по мнению авторов, должен был исправить ряд недостатков, которые были выявлены при анализе алгоритма ГОСТ 28147-89

В 2015 году был принят новый стандарт Российской Федерации ГОСТ Р 34.12-2015, регламентирующий использование алгоритмов блочного шифрования. В данный стандарт был включен новый алгоритм "Кузнечик", а также алгоритм блочного шифрования ГОСТ 28147-89, получивший название "Магма". Данный стандарт сменился дословно с ним совпадающим стандартом ГОСТ 34.12-2018, действующим с лета 2019 года.

Дадим формальное определение блочного шифра.

Пусть m и n - натуральные числа, Vm K - множество ключей, a Vn ~ множество

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

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

Для любого ключа k Vm и любого сообщения a Vn алгоритм зашифрования задается отображением

E k,a :Vm Vn Vn

При фиксированном значении ключа k Vm данное отображение должно являться биекцией, то есть взаимно однозначным отображением множества Vn в себя. В противном

случае корректное расшифрование информации будет невозможно. Алгоритм расшифрования задается отображением

D k,c :Vm Vn Vn , где D k,E k,a a.

для любой пары значений k Vm и a Vn .

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

Алгоритм развертки ключа вырабатывает из заданного ключа k Vm конечную последовательность k0,k1,k2... двоичных векторов, которая используется при зашифровании

и расшифровании сообщений.

Следует отметить, что не каждые отображения E и D, заданные вышеприведенными условиями, определяют блочный шифр. Основной задачей блочного шифра является обеспечение конфиденциальности передаваемой информации, то есть сохранение в тайне сообщения a Vn от лиц, не владеющих секретным ключом k Vm . Если же противник и/или

нарушитель может определить секретный ключ k Vm , то он может, очевидно,

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

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

1.При фиксированном и неизвестном значении ключа k Vm задача определения

сообщения

a Vn при известном

значении

с E

k,a

и известном наборе сообщений

a1,a2,...,at

и соответствующих им

значений

c1,c2

,...,ct ,

где сi E k,ai , i

 

, должна

1,t

4

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

2.Задача определения неизвестного значения k Vm при известном наборе

сообщений a1,a2,...,at и соответствующих им значений c1,c2,...,ct , где сi E k,ai , i 1,t,

должна является трудноразрешимой для максимально возможного натурального значения t.

Введенный нами параметр t задает количество пар ai,сi при i 1,t, для которых известно шифрующее преобразование. Этот параметр, как правило, называется объемом используемой информации для фиксированного ключа k Vm , а значение параметра t

выступает в качестве границы применимости того или иного метода дешифрования (компрометации сообщения).

Действительно, если величина t 2n , то шифрующее преобразование известно полностью и процесс дешифрования произвольного сообщения a Vn тривиален. Вместе с

тем получение большого числа пар ai,сi при неизвестном и фиксированном ключе k Vm

не всегда может быть осуществлено на практике.

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

Структура блочного алгоритма шифрования

У большинства современных блочных шифров алгоритмы зашифрования и расшифрования устроены следующим образом.

При зашифровании сообщение a Vn подвергается предварительному преобразованию

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

Затем к результату преобразования U многократно применяются однотипные преобразования R1,...Rr , называемые раундами. Параметр r определяет количество раундов алгоритма шифрования, при этом каждый из раундов зависит от своего уникального раундового ключа ki , i 1,r. Как мы говорили выше, раундовые ключи вырабатываются из ключа k Vm при помощи алгоритма развертки ключа и представляют собой двоичные вектора некоторой длины s, которая в общем случае может не совпадать с длиной сообщения n и длиной ключа m.

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

В общем виде алгоритм зашифрония может быть записан следующим образом

U,R1,...,Rr ,W :Vs Vn Vn

E k,a W kr 1,Rr kr ,...R1 k1,U k0,a ... (*)

Схематично мы можем так представить структуру алгоритма зашифрования

5

U

R1

..

Rr

W

 

.

y

x

 

 

 

k0

k1

 

kr

kr+1

Отметим, что во многих алгоритмах зашифрования преобразования R1,...Rr , совпадают

практически для всех индексов. Так, в алгоритме AES, отличие имеет только последний раунд, а в алгоритме ГОСТ 28147-89 все раунды одинаковы.

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

U 1,R1 1,...,Rr 1,W 1 :Vs Vn Vn

обратные преобразования, удовлетворяющие равенствам

U 1 k0,U k0,a a, W 1 kr 1,W kr 1,a a, R 1 ki,R ki,a a , i 1,r.

для любого a Vn и любого набора ключей ko,k1,...,kr 1.

Пусть с E k,a — шифртекст, соответствующий сообщению a Vn , тогда алгоритм расшифрования может быть записан в виде

D k,c U k0,R1 k1,...Rr kr ,W kr 1,c ... .

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

y

W-1

 

Rr-1

 

R1-1

 

U-1

x

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

kr+1

kr

k1

k0

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

1.«сеть Фейстеля», впервые примененную Хорстом Фейстелем при разработке алгоритма DES,

2.«подстановочно-перестановочную сеть», или коротко — SP-сеть, основанную на последовательном применении некоторого числа подстановок и перестановок, где аббревиатура SP есть сокращение от английского Substitution

&Permutation, то есть «подстановка и перестановка», что, собственно, и объясняет используемое обозначение. Другим часто используемым названием является «XSL-сеть», где буквы XSL обозначают элементарные отображения (Xor, Substitution, Linear), из которых состоит одно раундовое преобразование.

6

 

 

 

 

 

 

 

Сеть Фейстеля

 

 

 

 

В

сети Фейстеля число раундов r

 

четно,

n

тоже

четно,

а все

раундовые

преобразования одинаковы. Исходное сообщение a Vn

представляется в виде конкатенации

двух частей одинаковой длины, то есть a a1

||a2 , при этом если a Vn , то a1,a2 Vn/2 .

 

Раундовое преобразование R определяются следующим образом:

 

 

 

R ki,a a2

F ki,a1 ||a1 |, ki Vs , i

 

,(**)

 

 

 

 

 

 

 

1,r

 

 

 

 

 

 

 

где

преобразование

F :Vs Vn/2 Vn/2

реализует

 

операцию наложения

раундового

ключа и нелинейное преобразование половины

блока a1 Vn/2 .

Конкретный

вид

преобразования F определяется спецификацией алгоритма шифрования.

 

с R ki,a

Для преобразования

R легко построить обратное.

Обозначим символом

двоичный вектор из множества Vn, являющийся

результатом преобразования R

при

некотором значении индекса i

 

. Представим с

в виде конкатенации двух частей,

т.е.

1,r

c c ||c

, где c ,c V

, и определим обратное преобразование R 1 равенством

 

 

1 2

1

2

n/2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

R 1 ki,c c2 ||c1 F ki,c2

 

 

 

 

 

 

 

 

 

Поскольку выполнены равенства c1 a2

F ki,a1

и c2 a1

то легко видеть, что

 

R 1 ki,c a1 ||a2 F ki,a1 F ki,c2 a1 ||a2 a

и определенное отображение R 1 действительно является обратным отображению R . Схематично преобразования R и R 1 могут быть представлены следующим образом

a1

 

a2

 

 

 

F(ki,a1)

c1

c1

a1

c2

c2

F(ki,c2)

a2

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

Алгоритм DES

Алгоритм DES являлся государственным стандартом США с марта 1975 года по ноябрь 2001 года. Алгоритм обладает следующими параметрами:

7

длина ключа: m 64,

длина раундового ключа: s 64,

длина блока обрабатываемых данных: n 64,

количество раундов: r 16.

Алгоритм развертки ключа заключается в следующем. Исходный ключ k Vm

представляется в виде двоичной последовательности из множества V64 . Из данной

последовательности удаляются элементы с номерами, кратными 8, то есть 8-й, 16-й, 24-й и так далее.

 

Оставшаяся

 

последовательность

делится на

 

два блока

 

c0 , d0

одинаковой длины,

c0,d0 V28 .

Далее выработка

 

раундовых

ключей

k1,...,k16

выполняется рекурсивно, в

соответствии со следующими равенствами:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ci ci 1

li , ci ci 1

li ,

ki ci

|| di , i

 

 

 

,

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1,16

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

где величины li

задают величину циклического сдвига и определяются в соответствии

со следующей таблицей:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

i

1

2

 

 

 

3

 

 

 

4

 

 

5

 

 

 

6

 

 

7

 

 

8

 

 

 

9

 

 

 

 

10

 

11

 

 

12

 

13

 

14

 

 

 

15

 

16

 

 

li

1

1

 

 

 

2

 

 

 

2

 

 

2

 

 

 

2

 

 

2

 

 

2

 

 

 

1

 

 

 

 

2

 

 

2

 

 

2

 

 

 

2

 

 

2

 

 

 

2

 

1

 

 

 

 

Отображение x :V56 V48

 

представляет собой подстановку со сжатием и задается

следующим образом.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

x x1 || x2 ||...|| x56

 

 

 

 

 

 

 

 

 

 

 

 

 

 

V56

 

 

 

 

 

 

Запишем двоичную последовательность

 

 

из множества

 

в виде

x x1 || x2

||...|| x56 , где xi 0,1 . Тогда x x 1 || x 2 ||...|| x 48 ,

где величины i , i

 

 

1,48

, представляют собой следующую последовательность индексов

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

14

 

 

 

17

 

 

11

 

 

24

 

 

1

 

 

5

 

 

3

 

 

28

 

 

15

 

 

6

 

 

 

21

 

 

10

 

 

23

 

 

19

 

 

12

 

 

4

 

 

 

 

 

 

 

 

 

 

 

 

 

 

26

 

 

 

8

 

 

16

 

 

7

 

 

27

 

 

20

 

 

13

 

 

2

 

 

41

 

 

52

 

 

31

 

 

37

 

 

47

 

 

55

 

 

30

 

 

40

 

 

 

 

 

 

 

 

 

 

 

 

 

 

51

 

 

 

45

 

 

33

 

 

48

 

 

44

 

 

49

 

 

39

 

 

56

 

 

34

 

 

53

 

 

46

 

 

42

 

 

50

 

 

36

 

 

29

 

 

32

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

k1,...,k16

 

Как

видно

из

приведенного описания,

при

 

генерации

раундовых

ключей

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

Алгоритм зашифрования определен равенством (*), в котором преобразования U и W представляют собой перестановку на множестве V64 и не зависят от какого-либо раундового

ключа.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Пусть a V64

произвольное сообщение,

 

представленное

в

 

виде

двоичной

последовательности

 

a a1 ||a2 ||...||a64 .

Тогда

U x au 1

||au 2

||...||au 64 ,

где

u i

представляют собой следующую последовательность индексов

 

 

 

 

 

 

 

 

 

 

 

 

 

58

 

 

50

 

 

42

 

 

34

 

 

26

 

 

18

 

 

10

 

 

2

 

 

60

 

 

52

 

 

44

 

 

36

 

 

28

 

 

20

 

 

12

 

 

4

 

 

 

 

 

 

62

 

 

54

 

 

46

 

 

38

 

 

30

 

 

22

 

 

14

 

 

6

 

 

64

 

 

56

 

 

48

 

 

40

 

 

32

 

 

24

 

 

16

 

 

8

 

 

 

 

 

 

57

 

 

49

 

 

41

 

 

33

 

 

25

 

 

17

 

 

9

 

 

1

 

 

59

 

 

51

 

 

43

 

 

35

 

 

27

 

 

19

 

 

11

 

 

3

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

61

 

 

53

 

 

45

 

 

37

 

 

29

 

 

21

 

 

13

 

 

5

 

 

63

 

 

55

 

 

47

 

 

39

 

 

31

 

 

23

 

 

15

 

 

7

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

U и

Преобразование

 

 

W

 

является

перестановкой,

 

обратной

к перестановке

определяется равенством W U a a

для любого a V64 .

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

8

Раундовое преобразование R алгоритма DES в точности удовлетворяет равенству (**), в котором функция F :V48 V32 V32 определяется следующим образом

F k,a1 S k a1 , k V48 , a1 V32

Отображение

:V32 V48

 

принято

называть

 

подстановкой с расширением, а

отображение S :V48 V32 подстановкой со сжатием. Опишем данные отображения более

детально.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

x x1 || x2 ||...|| x32 .

Пусть x V32

представлено в виде двоичной последовательности

Тогда x x 1 ||a 2 ||...||a 48

, где

i

представляют собой следующую

последо-

вательность индексов

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

32

 

 

1

 

 

2

 

 

3

 

 

4

 

 

 

5

 

 

 

 

 

 

 

4

 

 

5

 

 

6

 

 

7

 

 

8

 

 

 

9

 

 

 

 

 

 

 

8

 

 

9

 

 

10

 

 

11

 

 

12

 

 

13

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

12

 

 

13

 

 

14

 

 

15

 

 

16

 

 

17

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

16

 

 

17

 

 

18

 

 

19

 

 

20

 

 

21

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

20

 

 

21

 

 

22

 

 

23

 

 

24

 

 

25

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

24

 

 

25

 

 

26

 

 

27

 

 

28

 

 

29

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

28

 

 

29

 

 

30

 

 

31

 

 

32

 

 

1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Отображение S x представляет собой параллельное применение восьми нелинейных

перестановок и

устроено следующим

образом. Представим

x V48

в виде

последовательности x x1 || x2 ||...|| x8 , где xi

V6 ,

i

 

. Тогда

 

 

1,8

 

 

S x S1 x1 ||S2 x2 ||...|| S8

x8 ,

S1,...,S8

:V6 V4 ,

 

 

где S1,...,S8 - фиксированные сжимающие отображения, реализующие подстановку элементов множества V4 вместо элементов множества V6 . Каждое из указанных отображений определяется текстом стандарта FIPS 46-3 и представляет собой комбинацию четырех различных перестановок на множестве V4 .

Алгоритм «Магма» (ГОСТ 28147-89)

Алгоритм ГОСТ 28147-89 был впервые стандартизирован в Советском Союзе в 1989 году, до настоящего времени является действующим стандартом на территории Российской Федерации и ряда стран СНГ.

В 2015 году алгоритм ГОСТ 28147-89 был включен в состав национального стандарта Российской Федерации ГОСТ Р 34.12-2015 и получил название «Магма». Ныне он является частью действующего стандарта ГОСТ 34.12-2018. Алгоритм обладает следующими параметрами:

длина ключа: m 256,

длина раундового ключа: s 32,

длина блока обрабатываемых данных: n 64,

количество раундов: r 32.

Алгоритм развертки ключа достаточно прост и состоит в следующем. Исходный ключ k V256 представляется в виде конкатенации 8 «слов»:

k l1 ||l2 ||...||l8 , где li V32 , i 1,8.

Тогда последовательность раундовых ключей определяется равенством k1,k2,...,k32 l1,l2,...,l8,l1,l2,...,l8,l1,l2,...,l8,l8l7,...,l1

9

в котором последние 8 «слов» l1,l2,...,l8 записаны в обратном порядке.

Алгоритм зашифрования определен равенством (*), в котором отсутствуют преобразования U и W (можно считать W a U a a).

Раундовые преобразования R одинаковы и удовлетворяет равенству (**), в котором функция F :V32 V32 V32 определяется следующим образом.

Раундовый ключ ki V32 запишем в виде двоичной последовательности ki ki,0 ||ki,1 ||...||ki,31 и представим его в виде целого числа (Если в памяти ЭВМ используется little-endian порядок записи байтов (от младшего к старшему), то преобразование в целое число производить нет надобности, поскольку область данных, где хранится вектор ki V32 ,

будет корректно интерпретирована компилятором как целое число, удовлетворяющее следующему равенству. В случае big-endian порядка записи байтов преобразование должно быть выполнено):

31

ki ki, j 2j , 0 ki 232 , i 1,32, тогда

j 0

F ki,x S bi 11, bi x ki mod232 , i 1,32,

а отображение S x :V32 V32 представляет собой параллельное применение восьми нелинейных подстановок.

Представим x V32 в виде последовательности x x1 || x2 ||...|| x8 , где xi V4 , i 1,8.

Тогда, если зафиксировать перестановки S1,...,S8 :V4 V4 , то

S x S1 x1 ||S2 x2 ||...|| S8 x8 .

В тексте стандарта ГОСТ 28147-89 точные значения перестановок S1,...,S8 :V4 V4 не

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

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

С другой стороны, известны атаки (Описание алгоритмической атаки восстановления неизвестных перестановок алгоритма ГОСТ 28147-89 содержится в работе Saarinen M.-J. A chosen key attack against the secret S-Ьох of GOST. — 1998. Кроме того, неизвестные перестановки могут быть определены путем дизассемблирования исполняемого кода, реализующего алгоритм шифрования) на алгоритм ГОСТ 2814789, позволяющие по некоторому объему блоков открытого текста, а также соответствующих им блоков зашифрованного текста, определить точные значения перестановок S1,...,S8 :V4 V4 . Этот

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

алгоритме перестановки. На сайте ТК 26 были опубликованы шесть вариантов возможных наборов перестановок, разработанных для стандартизации алгоритма ГОСТ 28147-89 в системе стандартизации ISO. В тексте нового стандарта ГОСТ Р 34.12-2015 зафиксирован один из опубликованных наборов перестановок S1,...,S8 :V4 V4 , принимающих следующие значения

Номер S-блока Значение

0 1 2 3 4 5 6 7 8 9 A B C D E F

10

 

1

C

4

6

 

2

A

5

B

9

E

8

D

7

0

3

F

1

 

 

2

6

8

2

 

3

9

A

5

 

C

1

E

4

7

B

D

0

F

 

 

3

B

3

5

 

8

2

F

A

 

D

E

1

7

4

C

9

6

0

 

 

4

C

8

2

 

1

D

4

F

6

7

0

A

5

3

E

9

B

 

 

5

7

F

5

 

A

8

1

6

 

D

0

9

3

E

B

4

2

C

 

 

6

5

D

F

6

9

2

C

 

A

B

7

8

1

4

3

E

0

 

 

7

8

E

2

 

5

6

9

1

 

C

F

4

B

0

D

A

3

7

 

 

8

1

7

E

 

D

0

5

8

3

4

F

A

6

9

C

B

2

 

где S

i s0,is1,i,...,s15,i

,S

x sx,i

, x V4 , i

 

.

 

 

 

 

 

 

 

 

 

1,8

 

 

 

 

 

 

 

 

 

Заметим, что при действии перестановки

Si

происходит неявное преобразование 4-х

битного вектора х в целое число, определяющее индекс вектора в массиве Si .

Таким образом, алгоритм «Магма» представляет собой алгоритм ГОСТ 28147-89 с фиксированными определенным образом перестановками S1,...,S8 .

В последние годы появился ряд результатов криптографического анализа алгоритма ГОСТ 28147-89. Был разработан метод нахождения секретного ключа с трудоемкостью 2224 операций зашифрования, требующий 232 пар открытых и шифрованных блоков текста и 247 мегабайт памяти. Другой метод имеет трудоемкость 2192 операций зашифрования и требует 264 пар открытых и шифрованных текстов и 219 мегабайт памяти.

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

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

SP-сеть

Другим способом построения блочных шифров является «подстановочноперестановочная сеть» (Substitution-Permutation network), основанная на многократном применении однотипных раундовых преобразований, состоящих из подстановок, перестановок и операций наложения ключа. Одним из первых шифров, построенных по такому принципу, был алгоритм «Люцифер», легший в основу алгоритма DES. Среди других алгоритмов, относимых к классу SP-сетей, можно выделить алгоритмы IDEA, AES и Serpent, а также российский алгоритм «Кузнечик».

Как и ранее, мы рассматриваем алгоритм зашифрования, задаваемый равенством (*). В SP-сети каждое раундовое преобразование R состоит из трех шагов.

1. Шаг наложения раундового ключа на вектор a Vn , как правило,

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

2. Пусть l n — фиксированное натуральное число. Шаг подстановки заключается в применении нелинейного преобразования S :Vn Vl ,

основанного на параллельном применении ко входному сообщению a Vn