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

ОинфБ ПЗ№6

.docx
Скачиваний:
9
Добавлен:
09.07.2024
Размер:
555.74 Кб
Скачать

Министерство образования Республики Беларусь

Учреждение образования

«Белорусский государственный университет

информатики и радиоэлектроники»

Кафедра защиты информации

ОТЧЕТ

Практическое занятие №6

«Шифрование и расшифрование информации

с использованием шифра Цезаря»

Выполнили:

Проверил:

Столер Д.В.

Минск 2024

ХОД ПРАКТИЧЕСКОЙ РАБОТЫ

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

  1. Краткие теоретические сведения

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

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

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

Информация, передаваемая по каналу связи и подлежащая шифрованию называется открытым (исходным) текстом (обозначается М от английского message), а криптографически преобразованная информация называется шифротекстом (обозначается C от английского ciphertext). Криптографическое преобразование открытого текста в шифротекст реализуется по некоторому алгоритму. Отправитель выполняет криптографическое преобразование (шифрование) открытого текста и формирует, таким образом, шифротекст передавая его в канал связи, а получатель выполняет обратное криптографическое преобразование шифротекста (расшифрование) в открытый текст.

  1. Исходные данные для расчета

Таблица 1 – Исходные условия для выполнения заданий

Номер

варианта

Номер

задания

Условие задания

3

1

Ничем сторона не богата,

А мне уже тем хороша,

Что там наудачу когда-то

Моя народилась душа.

2

Зэ, фмъмуд ъзтзж, чшцщъц ямшъ йцпдфр! Пзирйзмъ

тшгаы имугфр кйцплдфр. Ъцудтц фхм хм щъшзахц, р

й фцмс щылдим Хмчыъмйгф щмшлюмф ж чшриръ т

ъмим.

Таблица 2 – Криптографический ключ для выполнения первого задания

Номер варианта

Ключ шифрования

3

9

Рисунок 1 – Алфавит для шифрования и расшифрования сообщений

  1. Описание процедуры и алгоритм шифрования фрагмента сообщения

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

Таблица 3 – Алгоритм шифрования фрагмента сообщения

Фрагмент шифруемого сообщения

Ключ шифрования

Итоговый шифротекст

Буква шифруемого сообщения

Порядковый номер буквы по алфавиту

Порядковый номер буквы после сдвига

Буква шифротекста

1-ая буква

15

9

24

«Ц»

2-ая буква

10

19

«С»

i-буква

1

10

«И»

Программный код, реализующий данный алгоритм:

def find_new_letter(letter: str) -> str: russian_letters = 'АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ' new_index = (russian_letters.index(letter.upper()) + 9) % len(russian_letters) return russian_letters[new_index] if letter.isupper() else russian_letters[new_index].lower() def encrypt_message(unencrypted_string: str) -> str: return ''.join([find_new_letter(symbol) if symbol.isalpha() else symbol for symbol in unencrypted_string]) print(encrypt_message('Ничем сторона не богата,\nА мне уже тем хороша,\nЧто там наудачу когда-то\nМоя народилась душа.'))

  1. Результат шифрования всего сообщения

Результат шифрования четверостишья:

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

  1. Описание процедуры и алгоритм расшифрования фрагмента шифротекста

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

Таблица 4 – Алгоритм расшифрования фрагмента шифротекста

Фрагмент шифротекста

Ключ расшифро-вания

Расшифрованный фрагмент сообщения

Буква шифротекста

Порядковый номер буквы по алфавиту

Порядковый номер буквы после обратного сдвига

Буква расшифрованного сообщения

1-ая буква

9

8

1

«А»

2-ая буква

31

23

«Х»

i-буква

14

6

«Е»

Заметим, что первое слово состоит всего из 2 букв. Отсюда следует, что она является либо междометием, либо предлогом. После данного слова стоит знак препинания – запятая. Исходя из всех соображений ПРЕДПОЛОЖИМ, что первое зашифрованное слово является междометием, состоящим из 2 букв. Всего таких междометий в русском языке – 10.

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

Программный код, реализующий данный алгоритм:

def find_new_letter(letter: str, shift: int) -> str: russian_letters = 'АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ' new_index = (russian_letters.index(letter.upper()) - shift) % len(russian_letters) return russian_letters[new_index] if letter.isupper() else russian_letters[new_index].lower() def decipher_message(encrypted_string): first_words = ["Ой", "Ох", "Эй", "Ах", "Ух", "Их", "Ын", "Эй", "Оу", "Ии"] for shift in range(1, 31): unencrypted_string = ''.join([find_new_letter(symbol, shift) if symbol.isalpha() else symbol for symbol in encrypted_string]) if unencrypted_string[:2] in first_words: return unencrypted_string, shift print(decipher_message('Зэ, фмъмуд ъзтзж, чшцщъц ямшъ йцпдфр! Пзирйзмъ тшгаы имугфр кйцплдфр.' ' Ъцудтц фхм хм щъшзахц, р фцмс щылдим Хмчыъмйгф щмшлюмф ж чшриръ тъмим.'))

  1. Результат расшифрования всего шифротекста

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

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

1

Соседние файлы в предмете Основы информационной безопасности