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

Crypton v1.0

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

‑байтовые блоки , участвующие в криптографическом преобразовании, представляются в виде ‑матрицы

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

  1. Нелинейные преобразования , или определяются как

; , , .

Здесь , , и − подстановки на множестве байтов, причем , , (ввиду этого и ). Подстановки и конструируются следующим образом. Сначала на основе двух подстановок и , заданных на множестве полубайтов (см. в табл. 1), строится инволютивная подстановка , заданная на множестве байтов (далее , ,…, − биты, образующие байт со значением ; полубайты и имеют значения и ; аналогично, , и − биты, образующие байты , и :

w7

:=

0

0

1

0

1

0

0

0

z7

w6

1

0

0

0

0

1

1

0

z6

w5

0

0

0

1

0

1

0

0

z5

w4

0

1

1

0

0

0

0

1

z4

w3

1

0

0

1

0

1

0

0

z3

w2

0

1

0

0

0

0

0

1

z2

w1

0

0

1

0

1

0

0

1

z1

w0

1

0

0

0

0

0

1

0

z0

На основе подстановки определяются подстановки :

,

где − циклический сдвиг байта влево на битовых позиций.

Таблица 1. Подстановки и

0

1

2

3

4

5

6

7

8

9

a

b

c

d

e

f

f

e

a

1

b

5

8

d

9

3

2

7

0

6

4

c

b

a

d

7

8

e

0

5

f

6

3

4

1

9

2

c

c

3

a

9

e

5

d

b

6

8

2

4

f

7

1

0

6

c

e

a

b

7

9

3

4

d

1

0

f

2

5

8

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

,

где , , ; , , , .

Отметим, что , , .

  1. Преобразование − обычное транспонирование матрицы . Очевидно, что .

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

Вход: Р – 128‑битовый (16‑байтовый) блок открытых данных в виде 4´4‑матрицы.

В алгоритме зашифрования используются раундовые подключи ke0, ke1,…, ke12, представленные, как и блок Р, в виде 4´4‑матриц

С:=P;

С:=СÅС ke0;

for r:=1 to 12 do {n:=(r-1) mod 2; t(pnn(С))); С:=СÅker};

t(p1(t(C))).

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

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

kdi:=t(pi+1 mod 2(t(ke12-i))), i:=0,1,…,12.

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

Вход: C – 128‑битовый блок шифртекста в виде 4´4‑матрицы.

P:=C; t(p1(t(Р)));

for r:=12 downto 1 do {P:=PÅker; γr mod 2r+1 mod 2(τ(P)))};

P:=PÅke0.

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

Вычисление раундовых подключей. Раундовые подключи ke0, ke1,…,ke12 генерируются на основе 32‑байтового секретного ключа К=(k0,k1,…,k31). Каждый раундовый ключ представлен 4´4‑матрицей; i-ая строка матрицы ker обозначается keri, 0£i£3, 0£r£12. При вычислении значений keri используются вспомогательные переменные u0,u1,u2,u3; v0,v1,v2,v3; e0,e1,…,e7 и константы с01,…,c12; mс0,mс1,mc2, mс3. Каждая из них рассматривается либо как 4‑байтовый массив, либо как 32‑битовое число. Операции roln и rolbn определяются следующим образом:

roln(X) – циклический сдвиг 32‑битового числа X влево на n битов;

rolbn(X) – циклический сдвиг каждого байта в 4‑байтовом массиве X влево на n битов;

;

for i:=0 to 3 do {ei:=uiÅv0Åv1Åv2Åv3; ei+4:=viÅu0Åu1Åu2Åu3};

c0:=$a54ff53a;

for i:=1 to 12 do ci:=(ci-1+$3c6ef372) mod 232;

mc0:=$acacacac;

for i:=0 to 3 do mci:=rolb1(mci-1);

for i:=0 to 3 do {ke0,i:=eiÅc0Åmci; ke1i:=ei+4Åc1Åmci};

for r:=2 to 12 do {

if r нечетно then {

(e4,e5,e6,e7):=(rolb2(e7),rolb2(e4),rol8(e5),rol16(e6));

for i:=0 to 3 do ker,i:=ei+4ÅcrÅmci;}

else {

(e0,e1,e2,e3):=(rol24(e1),rol16(e2),rolb6(e3),rolb6(e0));

for i:=0 to 3 do ker,i:=eiÅcrÅmci;}}.

Вафина

E2

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

По своей структуре шифр – классический шифр Фейстеля (см. рис.1). В алгоритме используются следующие преобразования:

– побитовое сложение по модулю блоков и одинаковой длины (в , или байтов).

В операциях и аргументы и результат – -байтовые блоки, представленные в виде массивов -битовых слов:

, , , .

Значения и вычисляются как

, , , , , .

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

Операция умножения () выполняется по модулю . Значения

и определяются как

( – число, обратное к относительно умножения по модулю , т.е. , если нечётное число). Отметим, что .

Функция от ‑байтового аргумента определяется как

.

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

.

Функция возвращает ‑байтовый аргумент , циклически сдвинутый на один байт влево:

.

Функция от ‑байтового аргумента возвращает 8-байтовое значение , где – подстановка на множестве байтов, являющаяся произведением двух подстановок:

,

.

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

.

Подстановка также представлена в табл.1.

Функция от ‑байтового аргумента возвращает 8‑байтовое значение :

y0

:=

0

1

1

1

1

1

1

0

x0

y1

1

0

1

1

0

1

1

1

x1

y2

1

1

0

1

1

0

1

1

x2

y3

1

1

1

0

1

1

0

1

x3

y4

1

1

0

1

1

1

0

0

x4

y5

1

1

1

0

0

1

1

0

x5

y6

0

1

1

1

0

0

1

1

x6

y7

1

0

1

1

1

0

0

1

x7

т.е. y0:=x1x2x3x4x5x6 и т.д. Значения можно последовательно вычислить как

y7:=x7x3; y6:=x6x2; y5:=x5x1; y4:=x4x0;

y3:=x3x5; y2:=x2x4; y1:=x1x7; y0:=x0x6;

y7:=y7y2; y6:=y6y1; y5:=y5y0; y4:=y4y3;

y3:=y3y7; y7:=y2y6; y1:=y1y5; y0:=y0y4.

Раундовая функция , зависящая от ‑байтового аргумента и 16‑байтового аргумента , определяется как:

,

где и – левая и правая половины .

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

Представим , и в виде массивов ‑байтовых подблоков , и :

, , ;

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

for i:=0 to 3 do Yi:=P(S(Xi));

L0:=Y0P(S(U));

for i:=0 to 3 do Li:=P(S(Li-1));

V:=L3.

Предполагается, что секретный ключ имеет длину в битов и представлен в виде четырёх ‑байтовых подблоков, т.е. . Если ‑битовый ключ, то его расширяют, полагая , , где ‑байтовая константа (−левый байт); если ‑битовый ключ, то полагают .

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

U:=g; (L,Y,U):=G(K,U); p:=0;

for i:=0 to 7 do

{(L,Y,U):=G(Y,U); (q4i,q4i+1,q4i+2,q4i+3):=L};

for i:=0 to 7 do

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

Вход: -битовый блок открытых данных, представленный в виде конкатенации ‑байтовых подблоков и .

  1. (Начальное преобразование.)

M:=BP((Mk13)k14);

  1. (12 раундов шифрования по схеме Фейстеля.)

for i:=1 to 11 do {L:=LF(R,ki); L↔R};

L:=LF(R,k12);

  1. (Заключительное преобразование.)

C:=(BP-1(M)k15)k16.

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

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

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

Таблица 1. Подстановка S в E2

225

66

62

129

78

23

158

253

180

63

44

218

49

30

224

65

204

243

130

125

124

18

142

187

228

88

21

213

111

233

76

75

53

123

90

154

144

69

188

248

121

214

27

136

2

171

207

100

9

12

240

1

164

176

246

147

67

99

134

220

17

165

131

139

201

208

25

149

106

161

92

36

110

80

33

128

47

231

83

15

145

34

4

237

166

72

73

103

236

247

192

57

206

242

45

190

93

28

227

135

7

13

122

244

251

50

245

140

219

143

37

150

168

234

205

51

101

84

6

141

137

10

94

217

22

14

113

108

11

255

96

210

46

211

200

85

194

35

183

116

226

155

223

119

43

185

60

98

19

229

148

52

177

39

132

159

215

81

0

97

173

133

115

3

8

64

239

104

254

151

31

222

175

102

232

184

174

189

179

235

198

107

71

169

216

167

114

238

29

126

170

182

117

203

212

48

105

32

127

55

91

157

120

163

241

118

250

5

61

58

68

87

59

202

199

138

24

70

156

191

186

56

86

26

146

77

38

41

162

152

16

153

112

160

197

40

193

109

20

172

249

95

79

196

195

209

252

221

178

89

230

181

54

82

74

42

Гафаров

IDEA

Криптоалгоритм IDEA (International Data Encryption Algorithm), авторами которого являются сотрудники Швейцарского федерального института технологий Xuejia Lai и James Massey, шифрует 64‑битовые блоки открытых данных под управлением 128-битового секретного ключа.

IDEA не является шифром Фейстеля, но это симметричный шифр: алгоритм расшифрования идентичен алгоритму зашифрования (после определенного преобразования раундовых подключей). Общая схема алгоритма, состоящего из 8 раундов шифрования, представлена на рис.1. Основная идея конструкции – смешивание операций различных алгебраических групп.

В алгоритме используются операции над 16-битовыми подблоками (неотрицательными целыми числами) А и В:

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

А+В – сложение по модулю 216;

А·В – умножение по модулю 216+1;

Замечание. При выполнении операции умножения нулевой блок отождествляется с числом 216. Таким образом, операция умножения – это умножение в мультипликативной группе Z*216+1={1,2,…,216} целых чисел по модулю 216+1, а операция сложения – это сложение в аддитивной группе Z216={0,1,…,216-1} целых чисел по модулю 216. Обозначим через элемент, обратный к Х относительно сложения, а черезY-1 – элемент, обратный к Y относительно умножения по модулю 216+1:

Х+=0,Y·Y-1=1.

Отметим, что

=

0, если Х=0;

(216-1)-(Х-1), если Х¹0,

или =not (Х-1), где not a – побитовое отрицание а. Значение Y-1 можно вычислить, используя следующее соотношение, вытекающее из Малой теоремы Ферма:

Y-1= Y216-1 mod 216+1.

Отметим также, что а·0=0·а=not (a+2) mod 216; если a,b>0, то

а·b=

(ab mod 216)-(ab div 216), если ab mod 216³ab div 216;

(ab mod 216)+216+1-(ab div 216), если ab mod 216<ab div 216.

В алгоритме используются следующие преобразования над 64‑битовым блоком М=(М1234), представленным в виде четырех 16‑битовых подблоков М1, М2, М3 и М4, под управлением 16‑битовых ключей Q1,…,Q6 (далее X1, X2, Y1, Y2, Z1, Z2 – вспомогательные 16‑битовые переменные):

E1(M,Q1,Q2,Q3,Q4)º{M:=(M1·Q1,M2+Q2,M3+Q3,M4·Q4)};

E2(M,Q5,Q6)º{X1:=M1ÅM3; X2:=M2ÅM4;

Y1:=X1·Q5; Y2:=X2+X1·Q5);

Z1:=Y2·Q6; Z2:=Y1+Y2·Q6);

M:=MÅ(Z1,Z2,Z1,Z2); M2«M3}.

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

Е1-1(М,Q1,Q2,Q3,Q4)ºE1(M,Q1-1,,,Q4-1);

E2-1(M,Q5,Q6)º{X1:=M1ÅM2;X2:=M3ÅM4;

Y1:=X1·Q5; Y2:=X2+(X1·Q5);

Z1:=Y2·Q6; Z2:=Y1+(Y2·Q6);

M2«M3; M:=MÅ(Z1,Z2,Z1,Z2)}.

Отметим, что E2-1(M,Q5,Q6)º{M2«M3;E2(M,Q5,Q6); M2«M3}.

В алгоритме зашифрования (расшифрования) используются 52 раундовых подключей k1,…,k52, формируемых на основе 128‑битового секретного ключа К: k1 равен первым (наиболее значимым) 16 битам ключа K, k2 – следующим 16 битам, k8 – последним 16 битам; затем ключ K циклически сдвигается влево на 25 битов и создаются восемь следующих подключей – k9 ,…, k16. Эта процедура повторяется, пока не будут получены все 52 подключа.

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