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

Лабораторные работы / Методические указания к ЛР по ОАИП (09.02.07)

.pdf
Скачиваний:
60
Добавлен:
08.05.2022
Размер:
3.68 Mб
Скачать

F

 

I

 

M

 

P

 

T

 

W

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

G

 

J

 

N

 

Q

 

U

 

X

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Математическая модель шифра Цезаря записывается в виде (1)

 

 

 

С = ( + ) (1)

 

(1)

 

где C – код символа шифротекста, P – код символа открытого текста, К – коэффициент

сдвига, M – размер алфавита, mod – операция нахождения остатка от деления на М.

Например, результатом шифрования открытого текста RED APPLE по методу Цезаря с ключом К = 3 будет являться последовательность UHG ASSOH.

2.2. Простая моноалфавитная замена

Шифр простой моноалфавитной замены является обобщением шифра Цезаря, и

его математическая модель записывается в виде (2)

= + ( ) (2)

где ≥ 0, < – ключ шифрования, НОД( , ) = 1.

Преобразование согласно схеме (2) является взаимно однозначным отображением только в том случае, если a и M взаимно простые. В этом случае для дешифрования закрытого текста выполняют обратное преобразование по формуле (3)

= −1 ( − )( ) (3)

Пример.

Пусть = 26, = 3, = 6, НОД(3,26) = 1. Тогда получаем следующую таблицу подстановок для шифра простой моноалфавитной замены.

 

A

B

C

D

E

F

G

H

I

G

K

L

M

N

O

P

Q

R

S

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

P

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

C

6

9

12

15

18

21

24

1

4

7

10

13

16

19

22

25

2

5

8

 

T

U

V

W

X

Y

Z

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

P

19

20

21

22

23

24

25

 

 

 

 

 

 

 

 

 

 

 

 

C

11

14

17

20

23

0

3

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Тогда открытый текст «HOME» будет преобразован в шифротекст «BWQS».

2.3. Метод простой перестановки

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

301

что на данное место будет помещен символ открытого текста с номером из соответствующего блока.

Зашифруем открытый текст «ПРИЕЗЖАЮДНЕМ» методом перестановки с ключом К=3142.

П

Р

И

Е

З

Ж

А

Ю

Д

Н

Е

М

 

 

 

 

 

 

 

 

 

 

 

 

И

П

Е

Р

А

З

Ю

Ж

Е

Д

М

Н

 

 

 

 

 

 

 

 

 

 

 

 

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

2.4. Алгоритм Гамильтона – гиперкуб Гамильтона

Гиперкуб Гамильтона представлен на рисунке ниже.

Рисунок 17.3

Ключ нужно сформировать самостоятельно.

Исходный текст → ВЕРХОВНЫЙ СУД РФ.

Допустим, началом маршрута будет 5. В исходном тексте 16 символов. Они составят один блок. На блок формируем свой ключ. Ключом является набор вершин графа, которые соединены своим маршрутом Гамильтона (движения из начальной вершины ключа в конечную). При построении маршрута Гамильтона никакую вершину нельзя пройти более одного раза и никакую нельзя пропустить.

Сформируем ключ (маршрут) для этого блока:

К = 5,13,14,6,2,1,9,10,12,4,3,11,15,16,8,7

302

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

Структура этой таблицы такова. В первой строке таблицы записаны номера вершин гиперкуба в естественном порядке их следования.

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

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

Полученные три блока зашифрованного текста объединяем в одну криптограмму:

ОДЭВЕВЙЭУХРСРФЫН

Расшифруем полученную криптограмму. Создаем таблицу и заполняем ее следующим образом. В третью строку записываем символы блока зашифрованного текста в том порядке, как они следуют в криптограмме. Во вторую строку заносим номера вершин гиперкуба, заданные ключом для данного блока. Первую строку заполняем так. В третьей строке отыскиваем символ, у которого номер 1 во второй строке, и записываем его в ячейку номер 1 первой строки (у нас это символ Э).

Аналогично заполняем ячейку номер 2 первой строки (символ К) и все остальные ее ячейки. В результате в первой строке получаем текущий блок расшифрованного текста.

Полученные блоки расшифрованного текста объединяем в один исходный текст:

ВЕРХОВНЫЙ СУД РФ

303

2.5. Шифры многоалфавитной замены. Шифр Гронсфельда.

Представляет собой модификацию шифра Цезаря. Относится к шифрам сложной

(многоалфавитной) замены. В шифрах сложной замены для шифрования каждого символа исходного текста применяется свой шифр простой (моноалфавитной) замены.

Используемые алфавиты применяются циклически и последовательно.

Например, пусть у нас имеется некоторое сообщение 1, 2, 3, … , , … , 2 , …,

которое надо зашифровать. При использовании полиалфавитного шифра имеется несколько моноалфавитных шифров (например, n штук). И в нашем случае к первой букве применяется первый моноалфавитный шифр, ко второй букве — второй, к

третьей — третий, к n-ой букве — n-й, а к n+1 опять первый, ну и так далее.

Теперь конкретно о шифре Гронсфельда. Для шифрования здесь используется числовой ключ. Но каждая буква смещается не на постоянное число позиций, а на то число, которое соответствует ключу. Ключ соответственно состоит не из одной цифры,

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

например, если в тексте 10 символов, а длина ключа 5 символов, то для шифрования ключ будет использоваться 2 раза.

Пример:

Исходный текст: «шифр гронсфельда»

Ключ 15382

Зашифрованный текст: «щнчш есуръцёрялв»

2.6. Шифр Вижинера.

Шифр Виженера это метод шифрования буквенного текста с использованием ключевого слова.

Этот метод является простой формой многоалфавитной замены. Шифр Виженера изобретался многократно. Впервые этот метод описал Джованни-Баттиста Беллазо

(Giovan Battista Bellaso) в книге La cifra del. Sig. Giovan Battista Bellasо в 1553 году,

однако в 19 веке получил имя Блеза Виженера, швейцарского дипломата. Метод прост для понимания и реализации, он является недоступным для простых методов криптоанализа.

304

Его принцип состоит в том, что каждая буква в исходном шифруемом тексте сдвигается по алфавиту не на фиксированное, а переменное количество символов.

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

Допустим, мы хотим зашифровать фразу "КЛАД ЗАРЫТ В САДУ" используя слово ЗИМА в качестве ключа. Запишем это слово подряд несколько раз под исходной фразой:

Рисунок 17.4 – Шифруемый текст и ключ

Для удобства шифрования используем так называемый "квадрат Виженера" –

таблицу, где в каждой строке алфавит сдвигается на одну позицию вправо. Квадрат Вижинера представлен на рисунке 17.5.

Рисунок 17.5 – Квадрат Вижинера

Если взять строку с первой буквой ключа (З) и столбец с первой буквой исходного текста (К), то на их пересечении увидим букву "Т" - это и будет первая буква нашего зашифрованного сообщения. Затем процедура повторяется для всех остальных пар букв

305

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

Рисунок 17.6 – Результат шифрования

Заметьте, что одна и та же буква (например, А) в исходном сообщений превратилась в разные буквы на выходе (Н, Й и Б), т.к. сдвиг при шифровании для них был разный. Именно поэтому вскрыть шифр Виженера простыми способами невозможно - вплоть до 19 века он считался не взламываемым и успешно использовался военными, дипломатами и шпионами многих стран, частности - конфедератами во время Гражданской войны в США.

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

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

Если — количество букв в алфавите, — буквы открытого текста, — буквы ключа, то шифрование Виженера можно записать следующим образом:

= ( + )

И расшифровывание:

= ( + − )

В компьютере такая операция соответствует сложению кодов ASCII символов сообщения и ключа по некоторому модулю.

2.7. Шифр Атбаша

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

Исходный алфавит: A B C D E F G H I J K L M N O P Q R S T U V W X Y Z

Алфавит замены: Z Y X W V U T S R Q P O N M L K J I H G F E D C B A

306

3. Реализация модуля шифрования и дешифрования методом Цезаря

Опишем ход разработки программного модуля шифрования и дешифрования методом Цезаря. Интерфейс модуля реализуем, используя веб-технологии (язык гипертекстовой разметки HTML и язык описания внешнего стиля документа CSS).

Внешний вид веб-страницы модуля представлен на рисунке 17.7.

Рисунок 17.7 – Интерфейс веб-страницы с модулем шифрования

На рисунке 17.8 представлено окно с основными функциональными возможностями приложения.

Рисунок 17.8 – Окно шифрования/дешифрования

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

Код верстки страницы представлен в листинге 17.3.

307

Листинг 17.3 – Разметка веб-страницы модуля шифрования

1

<!DOCTYPE html>

 

 

 

 

 

2

<html lang="en">

 

 

 

 

 

3

<head>

 

 

 

 

 

 

4

<meta charset="UTF-8">

 

 

 

 

5

<title>Взлом шифра!</title>

 

 

 

 

6

<script src="script.js"></script>

 

 

7

<link

href="css/style.css"

rel="stylesheet"

type="text/css"/>

 

 

 

 

 

 

 

 

 

 

 

8

</head>

 

 

 

 

 

 

9

<body onload="scrambler();">

 

 

 

 

10

<div class="header" id="myHeader"></div>

 

 

11

<div id="title" class="labels">Шифр Цезаря</div>

12

<div id="container">

 

 

 

 

13

<div

class="labels">Ключ:

<div

 

id="key"

class="data_area"></div></div>

 

 

 

 

14

<div

class="labels">Шифр:

<div

id="cipher"

class="data_area"></div></div>

 

 

 

 

 

<div class="labels">Дешифровка: <input type="text"

15

name="decrypt" id="input_decryption" placeholder="Введите

 

дешифрованный текст..."></div>

 

 

 

 

16

<div id="res"></div>

 

 

 

 

17

<div id="div_button_accept_decryption">

 

 

 

<button

 

 

 

name="decrypt_accept"

18

class="button_accept_decryption"

 

 

 

 

 

onclick="correctDecipherment();">Проверить</button></div>

19

</div>

 

 

 

 

 

 

20

<footer><b>©

Автор

программы

-

Заид

Мингалиев</b></footer>

 

 

 

 

 

21

</body>

 

 

 

 

 

 

22

</html>

 

 

 

 

 

 

Код программы, реализованный в файле script.js, представлен в листинге 17.4.

308

Листинг 17.4 – Модуль программы шифрования

 

var words = ["яблоко", "цыпленок", "корабль", "пират",

Создается массив строк words, который

 

проинициализирован набором слов. Из этого

1

"кот", "молодец", "брат", "акробат", "чуваш",

массива случайным образом будет выбираться

 

"татарин", "космонавт"];

 

слово и использоваться для шифрования.

 

 

2

var alfa = "абвгдеёжзийклмнопрстуфхцчшщъыьэюя";

Создается массив символов alfa, где

содержаться все буквы русского алфавита.

 

 

3

var word = "";

Переменная, в которой будет хранится

случайное слово, выбранное из массива words.

 

 

 

 

Функция генерации случайного значения, в

 

 

которую передается нижний предел

4

function randomInteger(min, max) {

возвращаемого случайного значение min и

 

 

верхний предел возвращаемого случайного

 

 

значения max.

5

var rand = min - 0.5 + Math.random() * (max - min + 1);

 

6

return Math.round(rand);

 

7

}

 

8

function scrambler()

Функция шифрования исходного текста.

9

{

 

 

 

Создается переменная keyValue, являющаяся

 

 

ключом шифрования, и присваивается ей

10

var keyValue = randomInteger(1,10);

значение, которое возвращает функция

 

 

randomInteger (т.е. генерируется случайное

 

 

значение в диапазоне от 1 до 10).

11

var cipherString = "";

Создается переменная, в которую будет

записываться зашифрованный текст.

 

 

12

word = String(words[randomInteger(0, words.length -

Выбирается случайное слово из массива words

1)]);

и преобразуется в тип данных String.

309

 

 

words.length возвращает количество

 

 

элементов в массиве words.

13

for (var j = 0; j < word.length; j++)

Объявляется цикл для обработки исходного

текста.

 

 

14

{

 

15

for(var k = 0; k < alfa.length; k++)

Цикл для поиска индекса символа входной

строки в алфавите.

 

 

16

{

 

17

if(word[j]==alfa[k])

Если j–й символ входной строки совпадает с k

м символом алфавита.

 

 

18

{

 

 

 

Проверяем, не превосходит ли сумма ключа

19

if((k + keyValue) <= alfa.length)

keyValue и индекса k (порядкового номера

 

 

буквы в алфавите) размерности алфавита.

20

{

Если не превосходит, то …

21

cipherString += alfa[k + keyValue];

В строку cipherString добавляем (k +

keyValue)–й символ алфавита.

 

 

22

}

 

23

else if ((k + keyValue) > alfa.length)

Если превосходит то, …

24

{

 

 

 

В строку cipherString добавляем (k +

25

cipherString += alfa[k + keyValue - alfa.length];

keyValue - alfa.length)–й символ

 

 

алфавита.

26

}}}}

 

 

 

С помощью метода insertAdjacentHTML

 

key.insertAdjacentHTML("afterbegin", `<div

добавляем в DOM дерево документа с id=key

27

строку, указанную в качестве второго параметра

class="keyValue">${keyValue}</div>`);

 

 

метода. Строка будет проанализирована и

 

 

обработана как HTML. Первый параметр – это

310

Соседние файлы в папке Лабораторные работы