CS-Cipher

Авторы алгоритма шифрования CSCipher (или просто CS) — Жак Стерн (Jacques Stem) и Серж Воденэ из расположенного в Париже высшего учеб­ного заведения Ecole Normale Superieure (ENS). ENS представляет собой университет, предлагающий обучение по различным направлениям, как для студентов старших курсов, так и послевузовское. ENS эсдет свою историю с 1796 г., его специалисты хорошо известны в мире своими исследованиями в области криптографии.

Название алгоритма CS происходит от французского словосочетания Chiffrement Symetrique, что весьма просто переводится как «симметричный шифр». Алгоритм шифрует данные 64-битными блоками с использованием ключа переменной длины — до 128 битов.

CS был впервые представлен авторами на конференции Fast Software Encryption в 1998 г., а в сентябре 2000 г. предложен на конкурс NESSIE его авторами при участии Пьера-Алана Фуке (PierreAlain Fouque) из компании CS Communication & Systemes, владеющей правами на алгоритм [311].

Структура алгоритма

Алгоритм CS представляет собой SP-сеть, состоящую из 8 раундов преобра­зований. Между раундами, а также перед первым раундом и после последне­го, выполняется наложение на обрабатываемый блок данных одного из фрагментов расширенного ключа k0ks (процедура расширения ключа бу­дет подробно описана далее) побитовой логической операцией «исключаю­щее или» (XOR) — рис. 3.46 [367].

clip_image002

Рис. 3.46. Структура алгоритма CS

В каждом раунде (функция EQ на рис. 3.46) выполняются следующие опе­рации (рис. 3.47):

1. 64-битный блок данных делится на 4 слова по 16 битов, каждое из кото­рых обрабатывается операцией М () (подробно описана далее).

6 Зак. 194

150

Гпава 3

clip_image004

2. Выполняется байтовая перестановка результата предыдущего шага со­гласно таблице:

О, 2, 4, 6, 1,3,5,7.

То есть байт 0 остается на своем месте, байт 2 становится байтом 1 и т. д. Байты отсчитываются справа налево.

3. Результат предыдущего шага складывается операцией XOR с константой с, после чего повторяются шаги 1 и 2. 64-битные константы сие’ (ис­пользуются на следующем шаге) получены из шестнадцатеричной записи первых 128 битов дробной части константы е и выглядят так:

c = B7E151628AED2A6A; c‘=BF7158809CF4F3C7.

4. Результат предыдущего шага обрабатывается аналогично шагу 3, но вме­сто константы с используется с’.

Функция М () обрабатывает 16-битные слова следующим образом (рис. 3.48):

1. Входное значение х разбивается на два 8-битных фрагмента х1 и хг.

2. Вычисляются байты выходного значения: clip_image006

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

151

где:

• «< — операция циклического сдвига на указанное число битов влево;

• преобразование Р() будет подробно описано далее;

• функция h() определена следующим образом:

clip_image008

Символом & обозначена побитовая логическая операция «и», а 55 — ше-стнадцатеричная константа.

clip_image010

Рис. 3.48. Функция М алгоритма CS

clip_image012

Рис. 3.49. Преобразование р алгоритма CS

3. Выходное значение у — результат конкатенации:

clip_image014

Преобразование Р() замещает 8-битное входное значение р = pt pr (pt и рг имеют размер по 4 бита) 8-битным значением g = <?/ • <?г путем следующих вычислений (рис. 3.49):

clip_image016

где:

t— временная переменная;

□ функция g() будет подробно описана далее;

□ функция /() определена согласно табл. 3.13.

Таблица 3.13

Входное значение

0

1

2

3

4

5

6

7

8

9

А

В

С

D

Е

F

Выходное значение

F

D

В

в

7

5

7

7

Е

D

А

В

Е

D

Е

F

Выходное значение функции /() также может быть вычислено из вход­ного следующим образом:

/(гс) = л&(л«<1), где п — побитовый комплемент к п. Функция g() является табличной заменой (табл. 3.14).

Таблица 3.14

Входное значение

0

1

2

3

4

5

6

7

8

9

А

В

с

D

Е

F

Выходное значение

А

6

0

2

В

Е

1

8

D

4

5

3

F

С

7

9

Стоит сказать, что для ускорения шифрования данных преобразование P(PhPr) мо^сет быть реализовано не описанными выше вычислениями, а в виде табличной замены, приведенной в табл. 3.15 (строки соответствуют значению р1, столбцы — рг).

Таблица 3.15

 

0

1

2

3

4

5

6

7

8 ‘

9

А

В

С

D

Е

F

0′

29

0D

61

40

ЕВ

8F

1F

85

5F

58

01

39

86

1

97

D7

D6

35

АЕ

17

16

21

В6

69

А5

72

87

08

2

ЗС

18

Е6

Е7

FA

AD

В8

89

В7

00

F7

6F

73

84

11

63

3

3F

96

7F

BF

14

9D

АС

А4

F6

20

62

30

4

03

С5

46

A3

44

65

7D

4D

3D

42

79

49

5

F5

В5

94

54

FF

56

57

ОВ

F4

43

ОС

4F

70

6D

6

Е4

02

ЗЕ

2F

А2

47

Е0

С1

D5

95

А7′

51

33

7

5D

D4

1D

ЕЕ

75

ЕС

DD

А6

В4

78

48

ЗА

32

8

98

AF

СО

Е1

2D

09

0F

В9

27

Е9

BD

ЕЗ

9F

07

9

В1

ЕА

92

93

53

31

10

80

F2

D8

04

36

06

Таблица 3.15 (окончание)

 

0

1

2

3

4

5

6

7

8

9

А

В

С

D

Е

F

А

BE

А9

64

45

38

F3

А1

F0

CD

37

25

15

81

В

FB

90

Е8

D9

52

19

28

26

88

FC

D1

Е2

АО

34

С

82

67

DA

СВ

С7

41

Е5

С4

С8

EF

DB

СЗ

СС

АВ

СЕ

ED

D

DO

ВВ

D3

D2

71

68

13

12

ВЗ

С2

СА

DE

77

DC

DF

Е

66

83

ВС

8D

60

С6

22

23

В2

91

05

76

CF

74

С9

F

АА

F1

99

А8

59

50

ЗВ

FE

F9

24

ВО

ВА

ГО

F8

55

Расшифровывание

Расшифровывание выполняется применением обратных операций в обратной последовательности. Обратной к операции Е() является операция Е~1(), приведенная на рис. 3.50.

clip_image018

Рис. 3.50. Операция Е   () алгоритма CS

Сначала в этой операции выполняется обратная (по отношению к применяе­мой в операции EQ) байтовая перестановка, затем применяется операция М-1 (), затем выполняется операция XOR обрабатываемых данных с кон­стантой с’ и т. д.

154

Гпава 3

Операция М ” () также выполняется в несколько шагов:

1. Входное значение у разбивается на два 8-битных фрагмента ytv\ уг.

2. Вычисляются байты выходного значения:

где функция К{) определена следующим образом: clip_image020 3. Выходное значение х — результат конкатенации:

clip_image022

Процедура расширения ключа

Расширение ключа выполняется в несколько этапов. Сначала ключ шиф­рования (если его размер меньше 128 битов) дополняется справа нулями до 128 битов.

Затем дополненный 128-битный ключ к делится на две 64-битные части:

на основе которых выполняется итеративное вычисление подключей к0…&8

(рис. 3.51):

clip_image024

clip_image026

Рис. 3.51. Расширение ключа в алгоритме CS

clip_image028

clip_image030

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

155

Функция F() определена следующим образом:

clip_image032

где Р'() обозначает параллельное применение функции Р() к каждому бай­ту входного 64-битного значения.

Преобразование Р() было описано выше, а Г() представляет собой битовую перестановку (xt — /-Й бит 64-битного значения х)\

clip_image034

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

Константы с( получены из первых строк описанной выше таблицы преобра­зования Р() и выглядят следующим образом:

clip_image036

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

Достоинства и недостатки алгоритма

Первичный криптоанализ алгоритма CS был проведен одним из его авто­ров— Сержем Воденэ [380], который доказал, что измененный вариант ал­горитма с константами и подключами, замененными на случайные величины, не подвержен дифференциальному и линейному криптоанализу. Кроме того, для достижения стойкости против данных видов атак достаточно 5 Уз раундов алгоритма.

Эксперты конкурса NESSIE в отчете [313] также подтверждают, что у алго­ритма CS не обнаружено слабостей и каких-либо атак на него. Однако

исследования производительности алгоритмов — участников конкурса пока­зали, что алгоритм CS является наиболее медленным среди всех 64-битных участников [308, 311]. Поэтому CS не вышел во второй этап конкурса именно из-за низкой скорости шифрования [308].

Вы можете следить за любыми ответами на эту запись через RSS 2.0 ленту. Вы можете оставить ответ, или trackback с вашего собственного сайта.

Оставьте отзыв

XHTML: Вы можете использовать следующие теги: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

 
Rambler's Top100