Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
gruppa_903a_proekt.doc
Скачиваний:
50
Добавлен:
10.02.2015
Размер:
23.8 Mб
Скачать

Noekeon

Криптоалгоритм Noekeon, авторами которого являются Joan Daemen, Michael Peeters, Gilles Van Assche и Vincent Rijmen (Бельгия), шифрует 128‑битовые блоки открытых данных под управлением секретного ключа такого же размера.

Блок шифруемых данных Р и секретный ключ К представляются в виде конкатенации четырех 32- битовых слов: P=Р0Р1Р2Р3 и K=K0K1K2K3. В алгоритме используется преобразования со следующими логическими операциями над 32‑битовыми словами a и b:

Øa – побитовое отрицание a;

a&b – побитовое умножение a и b;

aÚb – побитовая дизьюнкция a и b;

aÅb – побитовое сложение a и b по модулю 2;

shlna(shrna) – сдвиг a влево (право) на n позиций.

rolna(rorna) – циклический сдвиг a влево (право) на n позиций.

Преобразования q определяется как:

q(K,P)º{

t:=P0ÅP1; S(t); P1:=P1Åt; P3:=P3;

0123):=(Р0ÅK01ÅК12ÅК23ÅК3);

t:=P1ÅP3; S(t); P0:=P0Åt;P2:=P2Åt},

где

S(t)º{t:=+shr8t+shl8t}.

Обратное преобразование q-1, возвращающее P к исходному значению, задаётся следующим образом:

q-1(K,P)º{

t:=P1ÅP3; S(t); P0:=P0Åt;P2:=P2Åt;

0123):=(Р0ÅK01ÅК12ÅК23ÅК3);

t:=P0ÅP2; S(t); P1:=P1Åt;P3:=P3Åt}.

Отметим так же, что q-1(K,P)=q(K-1,P), где K-1 получается из K применением преобразования q с нулевым ключом, т.е. q(0,K).

Преобразования g, p1 и p2 определяются как

g(P)º{

P1:=P1ÅØ(P2P3);P0:=P0Å(P1&P3);

P0«P3;P2:=P0ÅP2ÅP3;

P1:=P1ÅØ(P2P3);P0:=P0Å(P1&P2)}.

p1(P)={rol1P1;rol5P2;rol2P3}.

p2(P)={rol1P1;rol5P2;rol2P3}.

Отметим, что g-1=g; p-1=p2, p-12=p1.

Алгоритм зашифрования

Вход: P – 128‑битовый блок открытых данных.

for i:=1 to R do {q(K,P); p1(P); g(P); p2(P)};

q(K,P).

Выход: P – 128‑битовый шифртекст. Стандартное число число раундов R=16.

Этот же алгоритм используется и для расшифрования, но при этом необходимо заменить либо q на q-1, либо K на K-1(одно из двух).

кадырова

Rijndael

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

Блок В=(b0,b1,…,bm-1) открытых данных, состоящих из , или байтов, в процессе криптографического преобразования представляется в виде матрицы (называемой состоянием), имеющей строки и столбцов. Аналогично, секретный ключ K=(k0,k1,…,kq-1), состоящий из , или байтов, представляется в виде матрицы, имеющей 4 строки и столбцов. Например, если и , то и представляются в виде матриц:

b00

b01

b02

b03

b04

b06

b0

b4

b8

b12

b16

b20

b10

b11

b12

b13

b14

b15

b1

b5

b9

b13

b17

b21

b20

b21

b22

b23

b24

b25

b2

b6

b10

b14

b18

b22

b30

b31

b32

b33

b34

b35

b3

b7

b11

b15

b19

b23

k00

k01

k02

k03

k0

k4

k8

k12

k10

k11

k12

k13

k1

k5

k9

k13

k20

k21

k22

k23

k2

k6

k10

k14

k30

k31

k32

k34

k3

k7

k11

k15

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

Число раундов шифрования зависит от длины блока и длины ключа и определяется следующей таблицей:

16, 16, 10

16, 24, 12

16, 32, 14

24, 16, 12

24, 24, 12

24, 32, 14

32, 16, 14

32, 24, 14

32, 32, 14

Например, если , , то .

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

Один раунд криптографического преобразования, кроме заключительного, состоит из следующих операций над состоянием State под управлением раундового подключа :

.

Последовательность этих операций обозначается как Round (State, RoundKey).

Заключительный раунд, обозначаемый как , отличается от тем, что операция в нем отсутствует. (Это делает всю последовательность операций зашифрования симметричной.)

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

  1. (отметим, что ; если , то );

  2. подстановка преобразует байт в байт (здесь , – биты в и ) по правилу:

y0

   

 

1

0

0

0

1

1

1

1

 

 

x0

   

 

1

   

y1

1

1

0

0

0

1

1

1

x1

1

y2

1

1

1

0

0

0

1

1

x2

0

y3

1

1

1

1

0

0

0

1

x3

0

y4

1

1

1

1

1

0

0

0

x4

0

y5

0

1

1

1

1

1

0

0

x5

1

y6

0

0

1

1

1

1

1

0

x6

1

y7

0

0

0

1

1

1

1

1

x7

0

Замечание. Значение можно вычислить следующим образом:

где – циклический сдвиг байта влево на позиций, или

где () – сдвиг влево (вправо) на позиций.

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

( , , …, ).

Отметим также, что

.

Таблица подстановки вычисляется следующим образом:

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

(сдвиг строк). Последние три строки State циклически сдвигаются влево соответственно на , , и байта. Величины сдвигов зависят от длины блока:

Например, для -байтового блока это преобразование выглядит следующим образом:

b00

b01

b02

b03

сдвига нет Þ

b00

b01

b02

b03

b10

b11

b12

b13

сдвиг на 1 Þ

b11

b12

b13

b10

b20

b21

b22

b23

сдвиг на 2 Þ

b22

b23

b20

b21

b30

b31

b32

b33

сдвиг на 3 Þ

b33

b30

b31

b32

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

Операции и ShiftRow перестановочны:

.

(перемешивание столбцов). Матрица умножается слева на невырожденную циркулянтную матрицу:

a00

a01

a02

a03

$02

$03

$01

$01

.

a10

a11

a12

a13

$01

$02

$03

$01

a20

a21

a22

a23

$01

$01

$02

$03

a30

a31

a32

a33

$03

$01

$01

$02

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

Обратная операция , возвращающая к исходному значению, реализуется путем умножения на матрицу , обратную к :

,

где

$0e

$0b

$0d

$09

.

$09

$0e

$0b

$0d

$0d

$09

$0e

$0b

$0b

$0d

$09

$0e

AddRoundKey (добавление раундового подключа). К состоянию добавляется раундовый ключ :

посредством обычной побитовой операции ⊕ сложения по модулю . Операция инволютивна. Ее повторное применение возвращает к исходному значению.

Вычисление раундовых подключей.

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

,

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

;

следующие слов образуют ключ K1 и т.д. Так что:

Первые слов задаются секретным ключом , т.е.:

Остальные ключей вычисляются рекурсивно, исходя из слов с минимальными индексами:

.

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

где – элемент поля .

Алгоритм зашифрования

Вход: – блок открытых данных (в виде ).

Выход: – блок шифртекста (в виде ).

При расшифровании обратные операции выполняются в обратном порядке:

Алгоритм расшифрования

Вход: – блок шифртекста (в виде ).

.

Выход: – блок открытых данных ( в виде ).

Замечание. Определим преобразования и как

,

а последовательность раундовых подключей преобразуем в ,…,, где

.

Тогда алгоритм расшифрования преобразуется к виду:

колпаков

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]