Лабораторная работаКриптографияГод: 2024НИЯУ МИФИ: Национальный исследовательский ядерный университет «МИФИ»
👁 14💼 0

Готовая лабораторная работа: Практическая криптография

Загружена: 21.02.2026 07:11

Практические лабораторные работы по криптографии. Реализация и тестирование ЭЦП (ГОСТ R34.10-94), RSA, многоалфавитного шифра и протокола Диффи-Хеллмана на эллиптических кривых с готовыми Python-скриптами и примерами вывода.

Содержание

Криптография. Лабораторная работа № 3
Вариант №6.
Цель работы – разработка процедур выработки и проверки электронной цифровой подписи (ЭЦП) сообщений на базе асимметричного криптографического алгоритма с применением функции хеширования. В рамках работы будут рассмотрены этапы подписания и проверки подлинности цифровой подписи с использованием хэш-функций.
Постановка задачи:
1.	Выбрать алгоритм .............

Подробное описание

📘 О чем эта работа

Сборник лабораторных заданий по практической криптографии, в котором последовательно реализованы ключевые алгоритмы: электронная цифровая подпись на основе ГОСТ R34.10-94, криптосистема RSA, многоалфавитное (Vigenere-подобное) шифрование для русского алфавита и протокол Диффи-Хеллмана на эллиптических кривых. Объектом являются алгоритмы и их программная реализация; предметом — процедуры генерации ключей, подписи/проверки и обмена секретами.

📚 Что внутри

В комплект входят подробные описания алгоритмов и готовые реализации на Python с реальными параметрами и результатами запуска:

  • ЭЦП: алгоритм ГОСТ R34.10-94 с шагами хеширования, выбора k, вычисления r и s; в коде представлен пример с параметрами p=467, q=233, a=2, секретный ключ x=15 и проверкой подписи. Программа использует функцию hash_message (в коде — SHA-1), а в тексте отчета отмечено несоответствие упоминания MD5 — полезно для учебной проверки.
  • RSA: генерация ключей по p=199, q=337, получен открытый ключ (e,n) = (5,66963) и секретный ключ (d,n) = (53061,66963); показан пример шифрования строки 'ИНФОРМАЦИЯ' и восстановление исходного текста.
  • Многоалфавитный шифр: реализация для русского алфавита с двумя подстановочными алфавитами (варианты из таблицы), пример: исходный 'ОСНОВЫ ЗАЩИТЫ ИНФОРМАЦИИ' -> криптограмма 'ПЮМЧФЭ ...' и обратная дешифровка.
  • Эллиптические кривые и ECDH: реализация операций на кривой (сложение, удвоение, умножение точки) на примере a=1, b=1, p=23, G=(6,4) и секретов k1=8, k2=9; показан расчет общих ключей K_A и K_B.
  • Тексты программ на Python со всеми основными функциями: hash_message, generate_signature, verify_signature, модульные операции для RSA, функции add_points/multiply_point для эллиптических кривых, encrypt_vigenere/decrypt_vigenere.
  • Результаты выполнения и анализ: выводы о корректности реализации, демонстрация, что изменение сообщения делает ЭЦП недействительной, и совпадение общих ключей при ECDH.

📊 Для кого подходит

Материал полезен студентам и преподавателям курсов по криптографии, информационной безопасности и практического программирования: лабораторные по курсам «Криптография», «Защита информации», «Криптосистемы». Также подходит для подготовки отчета, проверки работ и изучения примерной реализации алгоритмов на Python.

✨ Особенности

Конкретика и готовые примеры — ключевые преимущества набора: указаны числовые параметры (p, q, a, x, G, k1, k2), приведены реальные выводы программ (подпись r,s; зашифрованные числа RSA; криптограмма Vigenere), реализованы все вспомогательные операции (обратные элементы по модулю, умножение точки на кривой). Отдельно отмечено практическое замечание: в исходном коде используется SHA-1 для хеширования, тогда как в тексте анализа упоминается MD5 — полезно для обсуждения выбора хеш-функции в ЭЦП.

❓ Частые вопросы

Подойдет ли для моего ВУЗа?
Структура лабораторных соответствует стандартным требованиям: цель, постановка задачи, алгоритм, код, результаты и выводы — легко адаптируется под требования преподавателя.

Можно ли адаптировать код под другие параметры?
Да. В скриптах показано, где задаются p, q, a, ключи и алфавиты; достаточно заменить параметры для проверки других вариантов и масштабирования на большие простые числа или стандартные кривые.