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

Мокрoусов_ПЗ_Криптопротоколы

.pdf
Скачиваний:
50
Добавлен:
31.05.2015
Размер:
1.09 Mб
Скачать

Процедура инициализации SEAL

procedure Initialize a(n,l,A,B,C,D,n1,n2,n3,n4) A←n R[4l];

B←(n»»8)R[4l+1];

C←(n»»16)R[4l+2];

D←(n»»24)R[4l+3]; for j ← 1 to 2 do

P←A&0x7fc; B←B+T[P/4]; A←A»»9; P←B&0x7fc; C←C+T[P/4]; B←B»»9; P←C&0x7fc; D←D+T[P/4]; C←C»»9; P←D&0x7fc; A←A+T[P/4]; D←D»»9;

(n1,n2,n3,n4)←(A,B,C,D); P←A&0x7fc; B←B+T[P/4]; A←A»»9; P←B&0x7fc; C←C+T[P/4]; B←B»»9; P←C&0x7fc; D←D+T[P/4]; C←C»»9; P←D&0x7fc; A←A+T[P/4]; D←D»»9;

Для пояснения сути функционирования алгоритма воспользуемся схемой внутреннего цикла алгоритма SEAL, представленной на рис. 7.

Алгоритм управляется тремя полученными из ключа таблицами: R, S и T. Предварительная обработка отображает ключ k на эти таблицы с помощью процедуры, основанной на SHA. 2-килобайтная таблица T представляет собой S-блок

9*32 битов.

SEAL использует четыре 32-битовых регистра, A, B, C и D, начальные значения которых определяются n и полученными по k таблицами R и T. Эти регистры изменяются в ходе итераций, каждая из которых состоит из восьми этапов. На каждом этапе 9 битов первого регистра (все равно A, B, C или D) используются в качестве индекса таблицы T. Затем выбранное из T значение складывается со вторым регистром (снова одному из A, B, C или D) или объединяется с его содержимым с помощью XOR. Потом первый регистр циклически сдвигается на 9 позиций.

29

Рис. 7. Внутренний цикл SEAL

На некоторых этапах второй регистр далее модифицируется с помощью сложения или XOR с содержимым первого регистра (уже сдвинутым). После 8 таких этапов A, B, C и D добавляются к потоку ключей, при этом каждый из них маскируется сложением или XOR с определенным словом из S. Итерация завершается прибавлением к A и C дополнительных значений, зависящих от n, n1, n2, n3, n4, выбор конкретного значения определяется четностью номера итерации. По-видимому, при разработке этой схемы главными были следующие идеи:

1)использование большого, секретного, получаемого из ключа S-блока (T);

2)чередующиеся некоммутируемые арифметические операции (сложение и XOR);

3)использование внутреннего состояния, поддерживаемого шифром, которое не проявляется явно в

30

потоке данных (значения ni, которые модифицируют A и C в конце каждой итерации);

4) изменение функции этапа в соответствии с номером этапа и изменение функции итерации в соответствии с номером итерации.

Задание:

Используя алгоритм шифрования данных SEAL, написать программу шифрования и дешифрования произвольного набора символов на любом языке программирования.

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

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

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

Оформление отчета:

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

Контрольные вопросы:

1.В чем заключается суть метода шифрования SEAL?

2.Какие главные идеи внутреннего цикла SEAL?

3.Что используется в качестве функции генерации

таблиц?

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

31

5.В чем отличие криптографии от стеганографии?

6.Какие задачи решает современная криптография?

7.Сформулируйте требования к криптографическим системам защиты информации.

8.Дайте определения понятиям: алфавит, криптограмма, криптографическая система, криптографический протокол, символ, шифр, электронная (цифровая) подпись.

32

Практическая работа № 7 Шифрование данных с помощью алгоритма RC2

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

Теоретическое введение

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

Алгоритм RC2 шифрует данные блоками по 64 бита с использованием ключей переменного размера: от 8 до 1024 битов включительно; рекомендуемым размером ключа является 64 бита.

Алгоритм является сетью Фейстеля, в нем выполняются 18 раундов преобразований. Причем раунды алгоритма делятся на 2 типа: смешивающие (mix) раунды и объединяющие (mesh) раунды. Общая структура алгоритма такова:

1.Выполняются 5 смешивающих раундов.

2.Выполняется 1 объединяющий раунд.

3.Выполняются 6 смешивающих раундов.

4.Выполняется 1 объединяющий раунд.

5.Выполняются 5 смешивающих раундов.

Структура смешивающего раунда приведена на рис. 8. Предполагается, что шифруемый блок данных разделен на 4 16-битных слова R0 ,....R3 , над которыми смешивающий раунд

в цикле по i от 0 до 3 выполняет следующие операции (составляющие показанную на рис. 1 функцию f () ):

33

где Kj — фрагмент расширенного ключа, определяемый глобальной переменной j; данная переменная изначально равна нулю и увеличивается на 1 (как показано выше) в каждом смешивающем раунде; процедура расширения ключа подробно описана далее;

&— побитовая логическая операция «и»;

~х — побитовый комплемент к х;

<<< — циклический сдвиг влево на число битов,

определяемое значением

Si

(табл. 2).

 

 

 

 

 

 

 

 

Таблица 2

 

i

0

1

2

 

3

 

 

S

i

1

2

3

 

5

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Рис. 8. Смешивающий раунд алгоритма RC2

Таким образом, в каждой i -й итерации смешивающего раунда выполняется описанное выше преобразование f( ) (рис. 9), которое модифицирует Ri , на основе текущих значений трех осталь-

ных слов шифруемого блока и фрагмента расширенного ключа.

34

Рис. 9. Функция f( ) алгоритма RC2

Аналогично смешивающему раунду, в объединяющем раунде выполняется цикл по i от 0 до 3; в каждой итерации цикла выполняется следующая операция:

R i = R i + K n mod216,

где n =

Ri 1mod 4

&63.

Таким образом, итерация объединяющего раунда представляет собой наложение операцией сложения по модулю 216 фрагмента расширенного ключа, индекс которого опреде-

ляется 6 младшими битами текущего значения слова

Ri 1mod 4

.

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

Как было сказано выше, алгоритм RC2 использует ключи шифрования размером от 8 до 1024 битов, т. е. от 1 до 128 байтов.

Расширение ключа подразумевает получение из ключа шифрования 16битных фрагментов расширенного ключа К0...К63, используемых в смешивающих раундах — по одному в каждой из 4 итераций каждого из 16 смешивающих раундов. Данная процедура выполняется в несколько шагов:

1 Инициализируется

байтовый

массив

L0 ...L127 ,

используемый при расширении ключа:

L0 KI0

...

LT 1 KIT 1

35

где

K

...K

0

T 1

— исходный ключ шифрования, имеющий

размер T байтов. Остальные байты массива L обнуляются.

2Инициализируются другие переменные, участвующие в расширении ключа:

 

T 8 (T1 7) / 8

 

 

TM 255 mod 2

(8*T 1 8*T 8)

 

 

где T1 — размер ключа в битах;

 

T 8

— эффективный размер ключа в байтах;

TM

— битовая маска, учитывающая остаточные биты

ключа, если его размер в битах не кратен 8.

3В цикле по i от операция:

T

до 127 выполняется следующая

 

 

 

 

 

Li P(Li 1 Li T

mod 256) ,

 

 

 

 

где Р — табличная замена, приведенная в табл. 3.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Таблица 3

d9

78

f9

c4

19

 

dd

b5

ed

28

 

e9

fd

79

4a

aO

d8

9d

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

сб

37

83

2b

 

76

53

8e

62

 

4c

64

88

44

8b

fb

a2

 

 

 

-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

17

59

f5

87

 

b3

4f

13

61

 

45

6d

8d

09

81

7d

32

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

bd

8f

40

eb

86

 

b7

7b

0b

fO

 

95

21

22

5c

6b

4e

82

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

54

d6

65

93

ce

 

60

b2

lc

73

 

56

cO

14

a7

8c

fl

dc

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

12

75

ca

If

3b

 

be

e4

dl

42

 

3d

d4

30

a3

3c

b6

26

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

6f

bf

Oe

da

46

 

69

07

57

27

 

f2

Id

9b

be

94

43

03

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

f8

11

c7

f6

90

 

ef

3e

e7

06

 

c3

d5

2f

c8

66

le

d7

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

08

e8

ea

de

80

 

52

ее

f7

84

 

aa

72

ac

35

4d

6a

2a

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

96

la

d2

71

5a

 

15

49

74

4b

 

9f

dO

5e

04

18

a4

ec

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

36

Продолжение табл. 3

с2

еО

41

бе

Of

51

cb

cc

24

91

af

50

al

f4

70

39

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

99

За

85

23

b8

b4

7a

fc

02

36

5b

25

55

97

31

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2d

5d

fa

98

еЗ

8a

92

ae

05

df

29

10

67

6c

ba

c9

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

d3

00

еб

cf

el

9e

a8

2c

63

16

01

3f

58

e2

89

a9

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Od

38

34

lb

ab

33

ff

bO

bb

48

0c

5f

b9

bl

cd

2e

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

с5

f3

db

47

e5

a5

9c

77

0a

a6

20

68

fe

7f

cl

ad

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Таким образом, значение 0 заменяется на D9, 1 — на 78

и т. д.

Псевдослучайная таблица Р сформирована на основе шестнадцатеричной записи дробной части числа .

4 Вычисляется L128 T 8 :

L

P(L

&TM )

128 T 8

128 T 8

 

5 В цикле по i от 1278 до 0 выполняется следующее действие:

L P(L

L

)

 

 

i

i 1

i T 8

 

 

 

6 Для использования в

шифрующих преобразованиях

128-байтная последовательность

L0 ...L127

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

в виде 16-битных слов К0...К63:

 

 

 

Ki L2i

256L2i 1 .

 

 

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

Смешивающий раунд расшифровывания в цикле по i от 3 до 0 выполняет следующие операции:

37

где >>> — циклический сдвиг определяемое значением

вправо на число битов,

Si

;

- начальное значение j устанавливается не в 0, а в 63.

Аналогичным образом изменен и объединяющий раунд при расшифровывании по сравнению с зашифровыванием. В нем в цикле по i от 3 до 0 выполняется следующая операция:

R i = R i - K n mod 216; где

n Ri 1mod 4

& 63

.

Задание:

Используя алгоритм шифрования данных RC2, написать программу шифрования и дешифрования произвольного набора символов на любом языке программирования.

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

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

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

Оформление отчета:

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

38