Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторная 3 / Болтушкин Л.С., группа 712-2, лабораторная 3.docx
Скачиваний:
1
Добавлен:
31.10.2025
Размер:
879.71 Кб
Скачать

Министерство науки и высшего образования Российской Федерации

Федеральное государственное автономное образовательное учреждение высшего образования

ТОМСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ СИСТЕМ УПРАВЛЕНИЯ И РАДИОЭЛЕКТРОНИКИ (ТУСУР)

Кафедра комплексной информационной безопасности электронно-вычислительных систем (КИБЭВС)

АССИМЕТРИЧНЫЕ ШИФРЫ

Отчет по лабораторной работе №3

по дисциплине «Методы и средства криптографической защиты информации»

Студент гр. 712-2

_______Л.С. Болтушкин

«__» __________2025 г.

Руководитель

Преподаватель

кафедры КИБЭВС

______ ______ В.А. Полюга

«__» __________2025 г.

Томск 2025

Введение

Целью данной лабораторной работы является реализация алгоритмов RSA, ранцевой криптосистемы, криптосистемы Эль-Гамаля при помощи знакомого языка программирования; реализовать алгоритмы быстрого возведения в степень и тест Ферма при помощи знакомого языка программирования.

1 Ход работы

На рисунке 1.1 представлен код реализации алгоритм RSA и результат работы.

Листинг программы представлен в Приложении А.

Рисунок 1.1 – Реализация алгоритма RSA

Ниже представлен код реализации алгоритма криптосистемы Эль-Гамаля, на рисунке 1.2 представлен результат работы программы.

Листинг программы представлен в Приложении Б.

Рисунок 1.2 – Реализация алгоритма Эль-Гамаля

Ниже представлен код реализации алгоритма ранцевой криптосистемы, на рисунке 1.3 представлен результат работы программы.

Листинг программы представлен в Приложении В.

Рисунок 1.3 – Реализация ранцевой криптосистемы

Ниже представлен код реализации теста Ферма, на рисунке 1.4 представлен результат работы программы.

Листинг программы представлен в Приложении Г.

Рисунок 1.4 – Реализация теста Ферма

Также был решен тренажер на быстрое возведение в степень по модулю, код реализации алгоритма и успешный результат работы представлен на рисунке 1.5.

Листинг программы представлен в Приложении Д.

Рисунок 1.5 – Реализация кода на быстрое возведение в степень по модулю

На рисунке 1.6 представлено успешное выполнение тренажера.

Рисунок 1.6 – Тренажер

Заключение

В ходе выполнения данной лабораторной работы были изучены и реализованы основные криптографические алгоритмы: RSA, ранцевая криптосистема и криптосистема Эль-Гамаля. Также была реализована функция быстрого возведения в степень по модулю и проведён тест Ферма программными средствами. Полученные результаты продемонстрировали практическую применимость теоретических основ криптографии. Реализация алгоритмов на языке программирования позволила глубже понять процессы генерации ключей, шифрования и расшифрования информации, а также особенности работы с большими простыми числами и модульной арифметикой. Все алгоритмы успешно отработали заданные входные данные, что подтверждает корректность их реализации.

Приложение а

(обязательное)

Листинг программы алгоритма RSA

import random

from sympy import isprime, mod_inverse

# Генерация большого простого числа больше 10^5

def generate_prime(lower_bound=10 ** 5):

while True:

candidate = random.randint(lower_bound, lower_bound * 10)

if isprime(candidate):

return candidate

# Функция для шифрования

def do_encrypt(message, public_exponent, modulus):

return pow(message, public_exponent, modulus)

# Функция для расшифровки

def do_decrypt(ciphertext, private_exponent, modulus):

return pow(ciphertext, private_exponent, modulus)

def rsa_simulation():

plaintext = int(input("Введите сообщение для шифрования (целое число меньше модуля): "))

first_prime = generate_prime()

second_prime = generate_prime()

while first_prime == second_prime:

second_prime = generate_prime()

modulus = first_prime * second_prime

phi_n = (first_prime - 1) * (second_prime - 1)

public_exponent = 65537 # часто используемое значение

while phi_n % public_exponent == 0:

public_exponent = random.randrange(2, phi_n)

# Расчёт закрытого ключа

private_exponent = mod_inverse(public_exponent, phi_n)

print(f"p = {first_prime}, q = {second_prime}")

print(f"n = {modulus}, e = {public_exponent}, d = {private_exponent}")

if plaintext >= modulus:

print("Сообщение слишком большое для шифрования этим ключом. Повторите с меньшим числом.")

return

ciphertext = do_encrypt(plaintext, public_exponent, modulus)

print(f"Зашифрованное сообщение: {ciphertext}")

decrypted_plaintext = do_decrypt(ciphertext, private_exponent, modulus)

print(f"Расшифрованное сообщение: {decrypted_plaintext}")

if __name__ == "__main__":

rsa_simulation()

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