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

Бакалаврська дипломна робота Шифр на основі перестановок байтів

.pdf
Скачиваний:
14
Добавлен:
24.01.2021
Размер:
1.4 Mб
Скачать

21

Значення цього стану і буде результатом генерації і-го псевдовипадкового числа. У

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

Таблиця 2.2 – Зчитування станів лічильників

y1

y0

Псевдовипадкове число

 

 

 

0

0

: =

 

 

 

0

0

1

: =

 

 

 

1

1

0

: =

 

 

 

2

1

1

: =

 

 

 

3

6) Змінення стану лічильника. Після отримання і-го псевдовипадкового числа, стан відповідного лічильника збільшується або зменшується на одиницю в залежності від ключа K. Якщо після змінення стану, значення лічильника досягнуло nmin або nmax, то при наступному потраплянні на цей лічильник, кроки 5 і 6 пропускаються і відбувається генерація наступної комбінації y1, y0. Приклад змінення станів лічильників показано у таблиці 2.3.

Таблиця 2.3 – Зміна станів лічильників

Секретний ключ K

Початковий стан лічильника

 

 

1

С0 = С0 − 1

0

С1 = С1 + 1

0

С2 = С2 + 1

1

С3 = С3 − 1

Для більш детального роз’яснення алгоритму генерації псевдовипадкових чисел наведено приклад його роботи.

Нехай довжина вхідного повідомлення дорівнює 18 байт, тобто 18 символів,

що пронумеровані від 0 до 17. Відповідно діапазони D0, D1, D2, D3 будуть мати такий вигляд:

0 = [0 … 3 ], 1 = [4 … 7 ], 2 = [8 … 11 ], 3 = [12 … 17 ]

Секретний ключ k2 задано наступною послідовністю:

2 = ′1101′

22

У відповідності до секретного ключа, лічильники C0 C1 та C3 будуть працювати на віднімання, а лічильник C2 – на додавання. Початкові стани

лічильників будуть мати такі значення:

 

С

0

 

= 0

= 3

 

 

 

 

 

С

 

 

= 1

= 7

 

 

1

 

 

 

С

2

= 2

= 8

 

 

 

 

 

С

3

= 3

= 17

 

 

 

 

У таблиці 2.4 відображений процес генерації псевдовипадкової послідовності, при цьому вказано проміжні стани лічильників, комбінації бітів y1, y0, що генерує РЗЛЗЗ, та згенероване псевдовипадкове число ri.

Таблиця 2.4 – Приклад формування ПВЧ

Крок

y1, y0

C0

C1

C2

C3

ri

 

 

 

 

 

 

 

1

10

3

7

8

17

8

 

 

 

 

8+1=9

 

 

2

01

3

7

9

17

7

 

 

 

7-1=6

 

 

 

3

00

3

6

9

17

3

 

 

3-1=2

 

 

 

 

4

01

2

6

9

17

6

 

 

 

6-1=5

 

 

 

5

11

2

5

9

17

17

 

 

 

 

 

17-1=16

 

6

10

2

5

9

16

9

 

 

 

 

9+1=10

 

 

7

11

2

5

10

16

16

 

 

 

 

 

16-1=15

 

8

00

2

5

10

15

2

 

 

2-1=1

 

 

 

 

9

10

1

5

10

15

10

 

 

 

 

10+1=11

 

 

10

11

1

5

11

15

15

 

 

 

 

 

15-1=14

 

11

11

1

5

11

14

14

 

 

 

 

 

14-1=13

 

12

01

1

5

11

13

5

 

 

 

5-1=4

 

 

 

13

10

1

4

11

13

11

23

 

 

 

 

stop

 

 

14

11

1

4

-

13

13

 

 

 

 

-

13-1=12

 

15

00

1

4

-

12

1

 

 

1-1=0

 

-

 

 

16

11

0

4

-

12

12

 

 

 

 

-

stop

 

17

10

0

4

-

-

4

 

 

 

stop

-

-

 

18

00

0

-

-

-

0

 

 

stop

-

-

-

 

В результаті буде згенеровано N чисел від 0 до N-1, при цьому будуть використані усі числа кожного з чотирьох діапазонів D0, D1, D2, D3.

2.3 Опис процесу зашифрування

На етапі перестановки P1 першим кроком є формування масиву S з символів

‘0’, довжиною N. Після цього, кожен символ вхідного повідомлення побайтно зчитується у природньому порядку, додається за модулем 256 до і-го байту гами і перезаписується у масив S на позицію, що була згенерована з допомогою алгоритму, що описаний у підрозділі 2.2.

Для генерації гами використовується метод накопичення, при якому формування і-го байту гами відбувається шляхом додавання за модулем 256

попереднього зчитаного байту вхідного повідомлення до попереднього байту гами,

тобто значення результату залежить від кожного байту вхідного повідомлення. При цьому, нульовий байт гами буде дорівнювати секретному ключу k3, а нульовий байт повідомлення m0 – нулю:

0 = 30 = 0

= (−1 + −1) 256

Накладання відбувається шляхом додавання за модулем 256:

= ( + ) 256,

де ci – зашифрований байт.

24

Для реалізації побайтового додавання за модулем 256 символи вхідного повідомлення подаються у вигляді значень ASCII.

Наприклад, нехай згенерована псевдовипадкова послідовність відповідає послідовності, що відображена у табл. 2.4, а вхідне повідомлення та секретний ключ k3 дорівнюють таким значенням:

3 = 218

= “ ”

Утаблиці 2.5 відображено відповідність малих літер латинського алфавіту та символу пробіл їх ASCII-значенням.

Таблиця 2.5 – Частина значень ASCII кодів

Dec

Символ

Dec

Символ

Dec

Символ

Dec

Символ

 

 

 

 

 

 

 

 

32

space

103

g

110

n

117

u

 

 

 

 

 

 

 

 

97

a

104

h

111

o

118

v

 

 

 

 

 

 

 

 

98

b

105

i

112

p

119

w

 

 

 

 

 

 

 

 

99

c

106

j

113

q

120

x

 

 

 

 

 

 

 

 

100

d

107

k

114

r

121

y

 

 

 

 

 

 

 

 

101

e

108

l

115

s

122

z

 

 

 

 

 

 

 

 

102

f

109

m

116

t

-

-

 

 

 

 

 

 

 

 

Відповідно до даної таблиці, повідомлення M буде виглядати наступним

чином:

= "112,101,114,109,117,116,97,116,105,111,110,32,99,105,112,104,101,114"

Оскільки довжина повідомлення N = 18, то буде сформовано масив S, що

буде складатись з 18-ти елементів:

= “0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0”

Далі відбувається зчитування першого символу вхідного повідомлення,

формується перший елемент гами g1, і накладається на зчитаний символ:

0 = 218

0 = 01 = (218 + 0) 256 = 218

1 = (112 + 218) 256 = 74

25

Відповідно до першого елементу згенерованої послідовності r1 = 8, перший зашифрований елемент вхідного повідомленння M, буде перезаписано на восьму позицію масиву S:

= “0,0,0,0,0,0,0,0,74,0,0,0,0,0,0,0,0,0”

Після цього зчитується другий символ повідомлення M, формується і накладається елемент гами g2:

2 = (218 + 112) 256 = 742 = (101 + 74) 256 = 175

Оскільки, наступний елемент послідовності r2 = 7, то елемент c2 буде перезаписано на сьому позицію:

= “0,0,0,0,0,0,0,175,74,0,0,0,0,0,0,0,0,0”

Аналогічним чином, відбуваються процеси підстановки та перестановки для усіх інших елементів вхідного повідомлення:

3 = (74 + 101) 256 = 1753 = (114 + 175) 256 = 33

= “0,0,0,33,0,0,0,175,74,0,0,0,0,0,0,0,0,0”

4 = (175 + 114) 256 = 334 = (109 + 33) 256 = 142

= “0,0,0,33,0,0,142,175,74,0,0,0,0,0,0,0,0,0”

5 = (33 + 109) 256 = 1425 = (117 + 142) 256 = 3

= “0,0,0,33,0,0,142,175,74,0,0,0,0,0,0,0,0,3”

6 = (142 + 117) 256 = 36 = (116 + 3) 256 = 119

= “0,0,0,33,0,0,142,175,74,119,0,0,0,0,0,0,0,3”

7 = (3 + 116) 256 = 1197 = (97 + 119) 256 = 216

= “0,0,0,33,0,0,142,175,74,119,0,0,0,0,0,0,216,3”

8 = (119 + 97) 256 = 216

26

8 = (116 + 216) 256 = 76= “0,0,76,33,0,0,142,175,74,119,0,0,0,0,0,0,216,3”

9 = (216 + 116) 256 = 769 = (105 + 76) 256 = 181

= “0,0,76,33,0,0,142,175,74,119,181,0,0,0,0,0,216,3”10 = (76 + 105) 256 = 18110 = (111 + 181) 256 = 36

= “0,0,76,33,0,0,142,175,74,119,181,0,0,0,0,36,216,3”11 = (181 + 111) 256 = 3611 = (110 + 36) 256 = 146

= “0,0,76,33,0,0,142,175,74,119,181,0,0,0,146,36,216,3”12 = (36 + 110) 256 = 14612 = (32 + 146) 256 = 178

= “0,0,76,33,0,178,142,175,74,119,181,0,0,0,146,36,216,3”13 = (146 + 32) 256 = 17813 = (99 + 178) 256 = 21

= “0,0,76,33,0,178,142,175,74,119,181,21,0,0,146,36,216,3”14 = (178 + 99) 256 = 2114 = (105 + 21) 256 = 126

= “0,0,76,33,0,178,142,175,74,119,181,21,0,126,146,36,216,3”15 = (21 + 105) 256 = 12615 = (112 + 126) 256 = 238

= “0,238,76,33,0,178,142,175,74,119,181,21,0,126,146,36,216,3”16 = (126 + 112) 256 = 23816 = (104 + 238) 256 = 86

= “0,238,76,33,0,178,142,175,74,119,181,21,86,126,146,36,216,3”17 = (238 + 104) 256 = 8617 = (101 + 86) 256 = 187

= “0,238,76,33,187,178,142,175,74,119,181,21,86,126,146,36,216,3”

27

18 = (86 + 101) 256 = 18718 = (114 + 187) 256 = 45

= “45,238,76,33,187,178,142,175,74,119,181,21,86,126,146,36,216,3”

Описана процедура еквівалентна процедурі блокового шифрування в режимі зчеплення блоків. Тут вектором ініціалізації є секретний ключ k3.

На етапі перестановки P2, елементи масиву S зчитуються у псевдовипадковому порядку і записуються в файл результату у природньому.

Нехай, на етапі перестановки P2 було згенеровано наступну псевдовипадкову послідовність R:

= “16,6,17,1,10,0,12,8,14,7,13,5,15,4,11,9,3,2”

Урезультаті виконання процесів накладання гами та перестановки P1, масив

S набув вигляду:

= “45,238,76,33,187,178,142,175,74,119,181,21,86,126,146,36,216,3”

Тоді, результатом перестановки P2 буде файл елементів:

= “216,142,3,238,181,45,86,74,146,175,126,178,36,187,21,119,33,76”

Усимвольному форматі, файл буде мати вигляд:

F = “ÏÄ ¯Á-VJÆ»~▓$╗ w!L”

На даному етапі процес зашифрування є завершеним, тож можна перейти до опису процесу розшифрування.

2.3 Опис процесу розшифрування

Процес розшифрування починається з формування проміжного масиву S, що буде заповнений символами “0”, розміром N:

= “0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0”

Далі відбувається побайтне зчитування зашифрованого повідомлення у природньому порядку і запис в масив S на позицію, що згенерована з допомогою алгоритму, що описаний у підрозділі 2.2. На цьому етапі використовується секретний ключ k4, який був використаний під час зашифрування на етапі перестановки P2, тож у даному випадку послідовність буде наступною:

28

= “16,6,17,1,10,0,12,8,14,7,13,5,15,4,11,9,3,2”

Відповідно до згенерованої послідовності процес зворотної перестановки P2

буде відбуватись таким чином:

= “216,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0”

= “0,0,0,0,0,0,142,0,0,0,0,0,0,0,0,0,216,0”

= “0,0,0,0,0,0,142,0,0,0,0,0,0,0,0,0,216,3”

= “0,238,0,0,0,0,142,0,0,0,0,0,0,0,0,0,216,3”

= “0,238,0,0,0,0,142,0,0,0,181,0,0,0,0,0,216,3”

= “45,238,0,0,0,0,142,0,0,0,181,0,0,0,0,0,216,3”

= “45,238,0,0,0,0,142,0,0,0,181,0,86,0,0,0,216,3”

= “45,238,0,0,0,0,142,0,74,0,181,0,86,0,0,0,216,3”

= “45,238,0,0,0,0,142,0,74,0,181,0,86,0,146,0,216,3”

= “45,238,0,0,0,0,142,175,74,0,181,0,86,126,146,0,216,3”

= “45,238,0,0,0,178,142,175,74,0,181,0,86,126,146,0,216,3”

= “45,238,0,0,0,178,142,175,74,0,181,0,86,126,146,36,216,3”

= “45,238,0,0,187,178,142,175,74,0,181,0,86,126,146,36,216,3”

= “45,238,0,0,187,178,142,175,74,119,181,21,86,126,146,36,216,3”

= “45,238,0,33,187,178,142,175,74,119,181,21,86,126,146,36,216,3”

= “45,238,76,33,187,178,142,175,74,119,181,21,86,126,146,36,216,3”

Далі відбувається процес зворотної перестановки P1, тобто зчитування у псевдовипадковому порядку і записування у природньому. При цьому під час зчитування і-го елементу відбувається зворотній процес накладання гами, тобто віднімання за модулем 256. А оскільки в більшості сучасних електронно-

обчислювальних машинах операція віднімання реалізується шляхом додавання числа в доповняльному коді, то процеси формування та накладання гами будуть відбуватись наступним чином:

0 = 3

0 = 0= ( −1 + −1) 256

29

= (256 − )

= ( + ) 256,

де – і-й байт гами у доповняльному коді, – байт масиву S, номер якого відповідає номеру і-го значення псевдовипадкової послідовності R.

Під час зворотної перестановки P1, для генерування псевдовипадкової послідовності використовується секретний ключ k1, тож у даному випадку послідовність буде рівною послідовності, що відображена у таблиці 2.4.

Отже, процеси зворотної перестановки P1 та зворотного накладання гами будуть виконуватись таким чином:

0 = 00 = 218

1 = (218 + 0) 256 = 2181 = (256 − 218) = 38

1 = ( 8 + 1) 256 = (74 + 38) 256 = 1122 = (218 + 112) 256 = 74

2 = (256 − 74) = 1822 = ( 7 + 2) 256 = (175 + 182) 256 = 101

3 = (74 + 101) 256 = 1753 = (256 − 175) = 81

3 = ( 3 + 3) 256 = (33 + 81) 256 = 1144 = (175 + 114) 256 = 33

4 = (256 − 33) = 2234 = ( 6 + 4) 256 = (142 + 223) 256 = 109

5 = (33 + 109) 256 = 1425 = (256 − 142) = 114

5 = ( 17 + 5) 256 = (3 + 114) 256 = 1176 = (142 + 117) 256 = 3

6 = (256 − 3) = 2536 = ( 9 + 6) 256 = (119 + 253) 256 = 116

30

7 = (3 + 116) 256 = 1197 = (256 − 119) = 137

7 = ( 16 + 7) 256 = (216 + 137) 256 = 978 = (119 + 97) 256 = 216

8 = (256 − 216) = 408 = ( 2 + 8) 256 = (76 + 40) 256 = 116

9 = (216 + 116) 256 = 769 = (256 − 76) = 180

9 = ( 10 + 9) 256 = (181 + 180) 256 = 10510 = (76 + 105) 256 = 181

10 = (256 − 181) = 7510 = ( 15 + 10) 256 = (36 + 75) 256 = 111

11 = (181 + 111) 256 = 3611 = (256 − 36) = 220

11 = ( 14 + 11) 256 = (146 + 220) 256 = 11012 = (36 + 110) 256 = 146

12 = (256 − 146) = 11012 = ( 5 + 12) 256 = (178 + 110) 256 = 32

13 = (146 + 32) 256 = 17813 = (256 − 178) = 78

13 = ( 11 + 13) 256 = (21 + 78) 256 = 9914 = (178 + 99) 256 = 21

14 = (256 − 21) = 23514 = ( 13 + 14) 256 = (126 + 235) 256 = 105

15 = (21 + 105) 256 = 12615 = (256 − 126) = 130

15 = ( 1 + 15) 256 = (238 + 130) 256 = 11216 = (126 + 112) 256 = 238

16 = (256 − 238) = 18