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

Объединенный

.pdf
Скачиваний:
19
Добавлен:
23.06.2024
Размер:
5.17 Mб
Скачать

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

11

некоторого числа подстановок.

Пусть d — натуральное число, такое, что d делит нацело n и l. Исходное сообщение a Vn представляется в виде конкатенации d «слов»

длины

n

бит: a a ||a ||...||a

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

d

 

1

2

 

d

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

К

каждому

«слову»

ai ,

i

1,d

,

применяется

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

i :Vn Vl ,

то есть S a 1 a1 || 2 a2 ||...|| d ad ,

S a Vl

 

 

 

d

 

 

 

d

 

 

 

 

 

 

 

 

 

 

 

 

 

 

При этом подстановки 1, 2,..., d

могут как совпадать, так и различаться

для всех индексов i

 

.

 

 

 

 

 

 

 

 

1,d

 

 

 

 

 

 

 

 

 

В

 

случае,

когда l n,

говорят, что S реализует

подстановку

с

расширением. Примером такого преобразования является алгоритм DES,

описанный нами ранее.

 

 

 

 

 

 

 

 

 

Вместе

с

тем

стоит

отметить,

что подстановки с

расширением

в

современных шифрах встречаются редко и, как правило, выполняется равенство l n. В этом случае каждая подстановка 1, 2,..., d реализует взаимно однозначное отображение множества Vn в себя, то есть является перестановкой.

d

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

 

 

3. На шаге линейного преобразования к

сообщению a применяется

матричное преобразование

L:Vl Vn . Наиболее простой способ его задания

заключается в следующем.

 

 

 

 

 

вектора a a1,a2,...,al , где

 

 

Представим

сообщение

a Vl

в

виде

1

2

l

 

 

. Тогда преобразование L может быть записано в виде

a

,a

,...,a

 

0,1

 

 

 

 

 

 

 

l1,1

l1,l

 

 

 

 

 

 

 

T

 

 

 

 

 

0,1

 

 

L a a1,a2,...,al

 

li, j

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ln,1

ln,l

 

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

Добавим, что явный вид матрицы существенно задает преобразование вектора a Vn .

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

Можно рассматривать матричное преобразование L:Vl Vn , заданное не двоичной матрицей, а матрицей, элементами которой являются элементы некоторого конечного поля

GF 2d такого, что d делит нацело n. Примерами таких преобразований служат алгоритмы

«Rijndael» и «Кузнечик».

В англоязычной литературе принято обозначать шаг наложения раундового ключа символом «X» (от английского «xor», обозначающего сложение по модулю 2), шаг нелинейного преобразования символом «S» («substitution» - подстановка), шаг линейного преобразования — символом «L» («linear» - линейный). Эти сокращения дали подстановочно-перестановочной сети другое, более короткое, название — XSL-сеть.

Приведем несколько конкретных примеров шифров, построенных по принципу SP-

12

сети.

Алгоритм AES

В настоящее время алгоритм AES является государственным стандартом США, он стандартизирован в ряде европейских стран, а также в рамках системы стандартизации ISO. Алгоритм, первоначально называвшийся Rijndael (Рэндал), был разработан в 1998 году бельгийскими математиками Винсентом Райменом (Vincent Rijnmen) и Йоном Дайменом (Joan Daemen). После того, как данный алгоритм в 2001 году стал победителем проводимого американским институтом стандартизации (NIST) конкурса на разработку нового алгоритма шифрования, он был переименован в AES.

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

длина блока шифрования должна равняться 128 битам,

шифр должен поддерживать три варианта алгоритма развертки ключа — для ключей длины 128, 192 и 256 бит.

Институтом NIST были выдвинуты дополнительные требования (См. Announcing Request for Candidate Algorithm Nominations for the Advanced Encryption Standard (AES). — National Institute of Standards and Technology. — 1997), позволившие обеспечить высокую стойкость победителя конкурса, а также возможность эффективной реализации на различных аппаратных платформах. Среди данных требований можно отметить следующие:

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

атакам;

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

должны отсутствовать эквивалентные ключи;

скорость шифрования должна быть высокой на всех аппаратных платформах — от 8-ми битной до 64-х битной;

структура алгоритма должна обеспечивать распараллеливание реализации алгоритма в многопроцессорных системах и аппаратных реализациях;

алгоритм должен предъявлять минимальные требования к оперативной и/или энергонезависимой памяти;

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

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

Описание алгоритма AES

Алгоритм AES обладает следующими параметрами:

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

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

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

количество раундов: r 10, 12 или 14 в зависимости от длины ключа.

Алгоритм развертки ключа позволяет выработать последовательность k1,...,kr 1

раундовых ключей и заключается в следующем. Исходный ключ k Vm представляется в виде конкатенации «слов» размером 32 бита, то есть

13

k l1 ||l2 ||...||lc , где li V32 , c m ,

32

и величина c m принимает значения 4, 6 или 8 в зависимости от длины ключа.

32

Величины l1,l2,...,lc являются начальными значениями последовательности, состоящей из 4 r 1 элементов множества V32 . Для выработки остальных значений используются

следующие рекуррентные соотношения. При c 4,6 для всех индексов

i c 1,4 r 1

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

 

 

 

 

 

 

 

 

 

 

 

 

 

SubWord RotWord li 1 ui 1,if i 1 0 modc

 

 

li

li c

 

 

 

 

 

 

 

 

c

 

 

 

 

 

 

 

 

 

li c

li 1, else

 

 

 

 

 

 

 

 

 

 

 

При c 8 для всех индексов i

 

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

 

 

c 1,4 r 1

 

 

 

li c

SubWord RotWord li 1 ui 1,if i 1 0 modc

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

c

 

 

 

 

li

 

 

 

 

 

 

 

 

 

 

 

SubWord li 1 ,if i 1 4 modc

 

 

 

 

 

li c

 

 

 

 

 

 

 

l

l

, else

 

 

 

 

 

 

 

 

 

 

 

 

 

 

i c

i 1

 

 

 

 

 

 

 

 

Приведенные

соотношения

используют

две

вспомогательные

функции

SubWord * :V32 V32 и RotWord * :V32 V32 , а также набор констант u0,u1,...,uc 1 V32 , образующих последовательность целых чисел

ui 1,2,4,8,16,32,64,128

Функции SubWord * :V32 V32

и RotWord * :V32 V32

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

образом. Представим a V32 в виде конкатенации a a1 ||a2 ||a3 ||a4 , где ai

V8 , тогда

 

SubWord a a1 || a2 || a3 || a4 ,

 

 

 

 

 

 

RotWord a a2 ||a3 ||a4 ||a1 ,

 

 

 

 

 

 

 

где перестановка определена равенством:

 

 

 

 

 

 

b b x x b 1 x x x , где

x x8

x4

x3 x 1

(

1 x x7 x5 x2 )- неприводимый

над полем

GF 2 многочлен,

x

x6 x5 x 1,

b x b 1 x 1 mod g x , или b x

b 1 x 0,

g x x8 1. Если

b b0

||b1 ||...||b7 V8 ,

7

bi 0,1 , то b x bixi . При практической реализации алгоритма на ЭВМ использование

i 0

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

1 задаются таблично. Последовательность раундовых ключей

k ,...,k

r 1

V

алгоритма

 

 

 

1

 

128

 

AES определяется равенствами ki l4i 3 ||l4i 2 ||l4i 1 ||l4i

для всех i

 

.

 

 

1, r 1

 

 

Перейдем к описанию алгоритма зашифрования. Вначале исходное сообщение a V128

представляется в виде конкатенации байт - элементов множества V8 . Для алгоритма AES

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

14

 

 

 

 

 

a1

a2

a3

a4

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

a a ||a

||...||a

 

a

a

a

a

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

5

6

7

 

8

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1

2

16

 

a

a

a

a

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

9

10

11

12

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

a13 a14

a15

a16

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Каждый раундовый ключ ki ,

 

 

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

i 1, r 1

ki ki,1 ||ki,2

||...||ki,16 , ki,1,ki,2,...,ki,16 V8 .

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Алгоритм зашифрования представляет собой SP-сеть и определяется равенством (*), в

котором преобразования U ,

R , W определяются следующим образом. Преобразование U не

определено, и мы будем считать, что выполнено равенство U a a для любого a V128 .

 

Раундовое

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

R ki,a ,

i

 

,

состоит

 

из

четырех

простых

1,r

 

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

1. Преобразование AddRoundKey представляет собой наложение ключа по

 

 

модулю два и определяется равенством

 

 

 

 

 

 

 

 

 

 

 

 

 

 

AddRoundKey ki,a a1 ki,1 ||a2 ki,2 ||...||a16

ki,16 ,

выполненным

для

всех i

 

.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1,r

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2. Преобразование SubBytes представляет собой параллельное применение

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

 

 

 

 

 

 

 

 

 

 

 

SubBytes a a1 || a2 ||...|| a16

 

 

 

 

 

 

 

 

 

 

 

 

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

ShiftRows

представляет

собой

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

байт

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

 

 

 

 

 

 

 

 

 

 

a1

a2

 

a3

a4

a1

a2

a3

a4

 

 

 

ShiftRows a ShiftRows

a

a

 

a

a

 

a

a

a

a

 

 

 

 

 

5

6

7

8

 

6

7

8

5

.

 

 

 

 

 

 

 

 

 

 

 

a

a

 

a

a

 

a

a

a a

 

 

 

 

 

 

 

 

 

 

 

 

 

 

9

10

11

12

 

 

 

11

12

9

10

 

 

 

 

 

 

 

 

 

 

 

 

 

 

a

a

 

a

a

 

 

 

a

a

a

a

 

 

 

 

 

 

 

 

 

 

 

 

 

13

14

15

16

 

16

13

14

15

 

 

 

Теперь легко заметить, что преобразование ShiftRows есть циклический

сдвиг второй строки матрицы, соответствующей сообщению

a V128 ,

на одну

позицию влево, третьей строки матрицы - на две позиции влево и четвертой

строки матрицы - на три позиции влево.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

4. Преобразование MixColumns представляет собой умножение столбцов

матрицы, соответствующей заданному сообщению

a V128 ,

на некоторый

фиксированный многочлен из кольца R4 GF 28 , где поле GF 28 GF 256

порождено

 

неприводимым

 

 

 

над

 

полем

 

 

GF 2

 

многочленом

g x x8 x4 x3 x 1,

а кольцо

R4 GF 256

 

порождено приводимым над

полем GF 256

многочленом h x x4

1.

 

 

 

 

 

 

 

 

 

 

 

 

Преобразование MixColumns представляет собой отображение

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

b1

 

b2

b3

b4

 

 

 

 

MixColumns a MixColumns A1 A2 A3 A4

 

 

 

 

 

 

 

 

 

 

 

b5

 

b6

b7

b8

B1 B2 B3 B4

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

b

 

b

b

b

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

9

 

10

11

12

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

b13

 

b14

b15

b16

 

 

15

в котором коэффициенты b1,...,b16 V8 определяются следующим образом.

Рассмотрим многочлен c x 3x3 2x2 1x 0 , коэффициенты которого принадлежат конечному полю GF(2s) и определяются равенствами

3 x 1, 2 1 1, 0 x.

Тогда коэффициенты b1,...,b16 V8 удовлетворяют равенствам

b1

b2

b3

b4

 

0

3

2

1 a1

a2

a3

a4

 

b b

b b

 

 

 

 

 

 

 

 

 

 

a

a

a

a

 

5

6

7

8

 

 

 

1

 

0

 

3

 

2

6

7

8

5

 

b b

b b

 

 

 

 

 

a

a

a a

 

9

10

11

12

 

 

 

2

 

1

 

0

 

3

11

12

9

10

 

b13

b14

b15

b16

 

3

2

1

0 a16

a13

a14

a15

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

умножение в кольце R4 GF 256 . Также напомним, что такие матрицы принято называть

циркулянтом, или циркулянтной матрицей.

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

операцию умножения на коэффициенты многочлена c x a3x3 a2x2 a1x a0 таблично.

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

R ki ,a MixColumns ShiftRows SubBytes AddRoundKey ki ,a для всех i 1,r 1.

Последнее раундовое преобразование, при i r , отличается от всех предыдущих тем, что в нем не используется преобразование MixColumns, то есть

R kr ,a ShiftRows SubBytes AddRoundKey kr ,a .

Заключительное преобразование W зависит от раундового ключа kr 1 и представляет

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

AddRoundKey

W kr 1,a AddRoundKey kr 1,a a1 kr 1,1 ||a2 kr 1,2 ||...||a16 kr 1,16 .

Алгоритм расшифрования состоит в последовательном применении преобразований,

обратных к введенным преобразованиям SubBytes, ShiftRows, MixColumns и AddRoundKey.

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

Некоторая трудность возникает при обращении преобразования MixColumns, состоящего в умножении столбцов матрицы на фиксированный многочлен c x a3x3 a2x2 a1x a0 .

Определим

многочлен

c 1 x 3x3 2x2 1x 0 ,

где

3 x3 x 1,

0 2 x3 x2 1, 1 x3 1.

Обратное преобразование к MixColumns состоит в умножении столбцов матрицы, соответствующей сообщению a V128 , на многочлен c 1 x :

16

b1

b2

b3

b4

 

0

3

2

1 a1

a2

a3

a4

 

b b

b b

 

 

 

 

 

 

 

 

 

 

a

a

a

a

 

MixColumns 1 a 5

6

7

8

 

 

 

1

 

0

 

3

 

2

6

7

8

5

 

b b

b b

 

 

 

 

 

a

a

a a

 

9

10

11

12

 

 

 

2

 

1

 

0

 

3

11

12

9

10

 

b13

b14

b15

b16

 

3

2

1

0 a16

a13

a14

a15

Алгоритм «Кузнечик»

Новый отечественный алгоритм блочного шифрования «Кузнечик», разработанный коллективом авторов, был анонсирован весной 2013 года, а летом 2015 года принят в качестве национального стандарта Российской Федерации ГОСТ Р 34.12-2015.

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

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

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

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

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

XSL-конструкция

Алгоритм «Кузнечик» обладает следующими параметрами:

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

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

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

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

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

Рассмотрим произвольное сообщение a V128 , представленное в виде конкатенации шестнадцати байт,

aa1 ||a2 ||...||a16 , a1,a2,...,a16 V8 ,

ираундовый ключ ki V128 , также представленный в виде конкатенации байт,

ki ki,1 ||ki,2 ||...||ki,16 , ki,1,ki,2,...,ki,16 V8 , где i 1,10.

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

1. Преобразование X :V128 V128 V128 реализует наложение раундового ключа ki и

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

X ki ,a a1 ki,1 ||a2 ki,2 ||...|| a16 ki,16

для любого допустимого значения индекса i.

17

2. Преобразование S :V128 V128 задает нелинейную перестановку на множестве V128 и

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

S a a1 || a2 ||...|| a16

где перестановка :V8 V8 задается в виде вектора 0... 255 и действует следующим образом:

x x , x V8

Последовательность 0... 255 определяется следующим образом:

(252,238,221,17,207,110,49, 22,251,196, 250,218,35,197,4, 77,233, 119, 240, 219,147,46,153,186,23,54, 241.187, 20, 205, 95,193, 249, 24,101, 90, 226,92, 239,33,129,28,60, 66,139,1,142, 79, 5,132, 2,174, 227,106,143, 160,6,11,237,152,127,212, 211,31,235, 52,44,81,234,

200,

72,171,242,42,

104,162,

253,

58,

206,

204,181,112,14,86,8,12,118,18,191,114,19,

71,156,

183,93,135,21,161,150,41,16,123,154,199,

243,145,120,111,157,158,178,

177,

50,117,25,61,255,

53,138,126,109, 84,198,128,195,189,13,87, 223, 245,36,169,62,168,67, 201, 215,121, 214,246,124, 34,185,3,224,15, 236, 222,122,148,176,188, 220, 232,40, 80, 78,51,10, 74,167,151,96,115,30, 0, 98,68,26,184, 56,130,100,159, 38,65,173,69, 70,146,39, 94,85,47,140,163, 165,125,105, 213,149, 59, 7,88,179, 64,134,172, 29, 247,48, 55,107, 228,136, 217, 231,137, 225,27,131, 73, 76,63, 248, 254,141,83,170,144, 202,216,133, 97,32,113,103,164,45,43,9,91, 203,155,37, 208,190, 229,108,82,89,166, 116,210, 230,244,180,192,209,102,175,194, 57, 75,99,182).

Согласно комментариям разработчиков перестановка была выбрана случайным образом и, в отличие от перестановки алгоритма AES, не имеет явного алгебраического представления (В августе 2015 года появилась работа, авторы которой утверждают обратное,

см. A.Bitykov, L.Perrin, A.Udovenko. The Secret Structure of the S-Box of Streebog, Kuznechik and Strlbob, 2015. - http://eprint.iacr.org/2015/812.pdf).

3. Преобразование L:V128 V128 может быть определено как 16-ти кратное движение

некоторого линейного регистра сдвига, начальное заполнение которого является прообразом, а конечное заполнение - результатом применения преобразования L.

Рассмотрим поле GF 256

как расширение поля GF 2 , порожденное неприводимым

многочленом g x x8 x7 x6

x 1. Каждый

элемент

a

этого

поля может

быть

 

 

 

7

 

 

 

 

 

представлен в виде многочлена

a x aixi . Кроме того,

каждый элемент может быть

 

 

 

i 0

 

 

 

 

 

 

 

 

7

 

 

 

 

 

представлен в виде целого числа a ai 2i не превосходящего 255.

 

 

 

 

 

i 0

 

 

 

 

 

Рассмотрим сжимающее отображение :V128

V128 , задаваемое равенством

 

a 148a16 32a15 133a14

16a13 194a12 192a11 a10 251a9

 

 

a8 192a7 194a6 +16a5 133a4

32a3 148a2

a1

 

 

 

 

в котором целые числа должны интерпретироваться как элементы поля GF 256 ,

порожденного многочленом g x ,

а операции сложения и умножения выполняются в этом

же поле.

 

a V128 как начальное заполнение

 

 

Если рассматривать вектор

линейного регистра

сдвига, то отображение :V128 V128 задает соотношение обратной связи. Тогда один такт

движения данного регистра сдвига описывается преобразованием

 

 

 

:V128 V128 , a a1 ||a2

||...||a16 a2 ||...|| a16 || a .

L a ... a ,

 

Преобразование L:V128 V128

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

где

18

преобразование применяется 16 раз, и задает 16-ти кратное преобразование линейного регистра сдвига с обратной связью .

Тогда раундовое преобразование алгоритма «Кузнечик» задается равенством

R ki,a L S X ki,a для всех i 1,9.

Собственно сам алгоритм зашифрования определяется равенством (*), в котором преобразование U не определено и мы считаем, что U a a, раундовое преобразование

определено вышеприведенным равенством, а завершающее преобразование W совпадает с преобразованием X , то есть

W k10,a X k10,a .

Используя только обозначения X , S и L можно определить алгоритм зашифрования равенством

E k,a X k10,L S X k9,...L S X k1,a ...

Алгоритм развертки ключа блочного шифра «Кузнечик» является его изюминкой и представляет собой 8-ми раундовую сеть Фейстеля, реализованную на блоке длиной 256 бит.

Для

произвольного c V128 и

a a1 ||a2 V256 определим отображение

F c,a :V128

V256 V256 равенством

 

F c,a a2 ||a1 R c,a2 ,

где R — раундовое преобразование, определенное выше.

Пусть k V256 — ключ, представленный в виде конкатенации k k1 ||k2 , где значения k1,k2 V128 являются начальными элементами последовательности раундовых ключей k1,k2,...,k10 .

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

 

k2i 1 || k2i 2 F c8 i 1 8,...F c8 i 1 1,k2i 1 || k2i для всех

i 1,4. Последовательность

констант c1,c2,...,c32 , используемых в данном равенстве, определяется в стандарте.

Приведенное равенство позволяет получить из одной пары раундовых ключей другую, следующую за ней пару. Сравнивая данное равенство с соотношениями (**), легко видеть, что это равенство есть сеть Фейстеля, раундовыми ключами в которой служат константы c1,c2,...,c32 .

Низкоресурсные блочные алгоритмы

В стандарте ISO/IEC 29192-2:2012 Information technology – Security techniques – Lightweight cryptography – Part 2: Block ciphers подробно рассмотрены 2 алгоритма блочного шифрования, удовлетворяющие требованиям стандарта ISO/IEC 29192-1:2012 Information technology – Security techniques – Lightweight cryptography – Part 1: General – это алгоритмы PRESENT и CLEFIA.

Алгоритм PRESENT является алгоритмом блочного шифрования с размером блока 64 бита, длиной ключа 80 или 128 бит и количеством раундов 32. Данный алгоритм был представлен на конференции CHES 2007 авторами, которые работают в Orange Labs, Рурском университете в Бохуме и Датском техническом университете. Среди этих авторов А. Богданов, Л. Кнудсен, Г. Леандр, К. Паар, А. Пошманн, М.Дж.Б. Робшо, Я. Соа, К. Викельсоа. Present считается одним из самых компактных рабочих криптоалгоритмов настоящего времени. Существует оценка, что для аппаратной реализации PRESENT требуется в 2,17 раза меньше логических элементов, чем для AES.

PRESENT представляет собой XSL-сеть с 31 раундом шифрования. Схема ее работы представлена на следующем рисунке

19

Каждый раунд начинается с операции XOR блока открытого текста (plaintext в самом первом раунде) с раундовым ключом, который состоит из 64 бит (операция addRoundKey). Раундовый ключ, вырабатывается с помощью последовательно применяемой операции развертывания ключа (update) из исходного ключа, который записывается в регистр (key register).

Далее производится рассеивающее преобразование (sBoxLayer). Блок открытого текста разделяется на 16 двоичных векторов длины 4, к каждому из которых применяется нелинейная подстановка S. Выбор конкретной нелинейной подстановки (S-box) обусловлен задачей противодействия линейному и дифференциальному криптоанализу. Затем блок подвергается перемешивающему преобразованию (перестановке бит), которое на схеме обозначено как операция pLayer.

В качестве раундового ключа используются 64 левых бит из регистра, содержащего исходный ключ. Затем регистр обновляется по заданному алгоритму, который представляет собой перестановку части бит, применению к части бит, сгруппированных по 4, нелинейной подстановки S, а также наложению на часть бит с помощью операции XOR счетчика раундов (двоичного вектора, зависящего от номера раунда).

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

Алгоритм CLEFIA (от французского clef «ключ») является блочным алгоритмом шифрования, разработанным корпорацией Sony в качестве безопасной альтернативы AES для сферы защиты авторских прав и DRM-систем (Digital Rights Management). Размер блока в CLEFIA — 128 бит, поддерживаемая длина ключа — 128, 192 и 256 бит, а число раундов зависит от длины ключа и составляет соответственно 18, 22 или 26 раундов и 36, 44 и 52 используемых раундовых подключа.

Для обработки блока открытого текста CLEFIA использует обобщенную сеть Фейстеля с четырьмя ветвями. При этом в одном раунде параллельно применяются две функции F: F0 и F1 за раунд. Функция шифрования для CLEFIA представлена на следующем рисунке (где r –