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

Serpent

Криптоалгоритм Serpent (Змея) 1, авторами которого являются, шифрует 128‑битовые блоки открытых данных под управлением ‑битового секретного ключа. (Допускается использование более короткого ключа – в этом случае он расширяется до требуемого размера добавлением одной битовой единицы и необходимого числа битовых нулей.) Число раундов шифрования равно .

Serpent оперирует со ‑битовым блоком данных , представленным в виде четырех ‑битовых слов: , , , ).

Биты в словах индексируют от до , в ‑битовом блоке − от до , а в ‑битовом ключе – от до . В словах принят прямой (little-endian) порядок байтов (младший байт размещен слева, занимая младшую адресную позицию).

Алгоритм шифрования представляет собой вариант общей ‑сети (подстановочно-перестановочной), построенной по схеме : “key-addition-substitution-linear transformation” − прибавление ключевого элемента − подстановка − линейное преобразование. В качестве криптографических операций используются только табличные подстановки и следующие операции над -битовыми словами и :

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

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

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

(отметим, что , ).

Таблица 1. Преобразования и в Serpent

X0:=rol13(X0);

X2:=rol10(X2);

X2:=rol3(X2);

X0:=rol27(X0);

X1:=X1X0X2;

X2:=X2X3shl7(X1);

X3:=X3X2shl3(X0);

X0:=X0X1X3;

X1:=rol1(X1);

X3:=rol25(X3);

X3:=rol7(X3);

X1:=rol31(X1);

X0:=X0X1X3;

X3:=X3X2shl3(X0);

X2:=X2X3shl7(X1);

X1:=X1X0X2;

X0:=rol5(X0);

X2:=rol29(X2);

X2:=rol22(X2).

X0:=rol19(X0).

Таблица 2. Таблица замены в Serpent (в ‑ичном представлении)

0

1

2

3

4

5

6

7

8

9

a

b

c

d

e

f

3

8

f

1

a

6

5

b

e

d

4

2

7

0

9

c

f

c

2

7

9

0

5

a

1

b

e

8

6

d

3

4

8

6

7

9

3

c

a

f

d

1

e

4

0

b

5

2

0

f

b

8

c

9

6

3

d

1

2

4

a

7

5

e

1

f

8

3

c

0

b

6

2

5

4

a

9

e

7

d

f

5

2

b

4

a

9

c

0

3

e

8

d

6

7

1

7

2

c

5

8

4

6

b

e

9

1

f

d

3

a

0

1

d

f

0

e

8

2

b

7

4

c

a

9

3

5

6

Преобразование и обратное к нему преобразование , определённые в табл. 1, выполняются над ‑битовым блоком , , , ), представленным в виде четырех ‑битовых слов , , , .

Табличные подстановки , , ,…, , применяются к ‑битовым блокам , ,…, ), представленным в виде массива из полубайтов (полубайт − четыре бита): каждый из полубайтов заменяется на соответствующий полубайт согласно табл. 2.

Например, для блока

15ab503B 12436578 9af0d84e f1e2c3d2

имеем:

f9249084 f8c8693d 12e07dc5 e05ba87b.

Преобразование – это перестановка битов в блоке : бит перемещается в позицию , где , , ,…, . Обратная перестановка перемещает бит в позицию , , ,…, .

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

W[0..7]:=K;

for i:=0 to 32 do {

for j:=0 to 3 do {

Wj+8:=rol11(WjWj+3Wj+5Wj+7Gword4(4i+j))};

Ki:=P(S(11-i) mod 8(W[8..11]));

W[0..7]:=W[4..11]}.

Здесь G=$9e3779b9 – дробная часть отношения золотого сечения ( в ‑ичном представлении; ‑байтовое слово со значением .

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

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

C:=IP(B);

for i:=0 to 30 do C:=L(Simod8(CKi));

C:=S7(CK31)K32;

C:=FP(C).

Выход: C − ‑битовый блок шифртекста .

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

Вход: C − ‑битовый блок шифртекста.

B:=IP(C);

B:=S7-1(BK32)K31;

for i:=30 downto 0 do B:=S-1imod8(L-1(B))Ki;

B:=FP(B).

Выход: B − ‑битовый блок открытых данных.

зарипов

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

Обозначим через множество байтов (т.е. , если отождествить ‑битовый байт с числом , а через – множество ‑байтовых векторов .

В алгоритме используются следующие функции:

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

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

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

где символ ⨁ обозначает побитовое сложение байтов () по модулю .

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

Функции и определяются как

Функции и : определяются как

,

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

Функция определяется рекурсивно:

,

, ,

где

,

Алгоритм шифрования Magenta построен в соответствии со схемой Фейстеля (см. рис. 1). Для блока данных и раундового подключа результат одного “раунда Фейстеля” определен как

где

Magenta предусматривает использование -байтовых секретных ключей c , или . Раундовые подключи Кi определяются как

для ,

для ,

для ,

где .

Алгоритм состоит из 6 или 8 раундов в зависимости от длины ключа К. Результат зашифрования блока открытых данных XÎВ16 определяется как

где , а функция определяется как

Преобразование инволютивно:

.

Другими словами,

.

Замечание. Авторы определяют преобразование зашифрования как

;

в этом случае обратное преобразование имеет вид: K=(

.

Рис. 1. Алгоритм

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