РЕАЛИЗАЦИЯ ПРОТОКОЛА ДИФФИ ХЕЛЛМАНА В СИСТЕМЕ КОМПЬЮТЕРНОЙ АЛГЕБРЫ MAPLE ДЛЯ ЛАБОРАТОРНОГО ПРАКТИКУМА ПО КРИПТОГРАФИИ
Конференция: CCCXLVIII Студенческая международная научно-практическая конференция «Молодежный научный форум»
Секция: Физико-математические науки
лауреатов
участников
лауреатов


участников



CCCXLVIII Студенческая международная научно-практическая конференция «Молодежный научный форум»
РЕАЛИЗАЦИЯ ПРОТОКОЛА ДИФФИ ХЕЛЛМАНА В СИСТЕМЕ КОМПЬЮТЕРНОЙ АЛГЕБРЫ MAPLE ДЛЯ ЛАБОРАТОРНОГО ПРАКТИКУМА ПО КРИПТОГРАФИИ
Протокол Диффи‑Хеллмана, предложенный в 1976 году Уитфилдом Диффи и Мартином Хеллманом [1], стал историческим прорывом в криптографии, впервые позволив двум сторонам согласовать общий секретный ключ без его предварительной передачи по защищённому каналу. Этот протокол лежит в основе многих современных стандартов безопасной связи, включая TLS, IPsec, SSH и IKE [3, 7], и остаётся востребованным в технологиях blockchain и мессенджеров с end‑to‑end шифрованием. Изучение протокола является обязательным компонентом подготовки специалистов по информационной безопасности, однако его математическая основа – дискретное логарифмирование в конечных полях – часто воспринимается студентами как абстрактная теория, оторванная от практических вычислений [2, 5]. Система компьютерной алгебры Maple позволяет преодолеть это затруднение благодаря встроенным функциям модульной арифметики (mod, Power), работе с большими целыми числами и наглядной визуализации результатов [6]. Актуальность темы определяется необходимостью создания учебных реализаций, которые демонстрируют математическую суть протокола без погружения в низкоуровневое программирование, а также развивают у студентов навыки использования систем символьных вычислений для решения криптографических задач.

Рисунок 1. Реализация протокола Диффи-Хеллмана
Приведённый выше скрипт на языке Maple (рисунок 1) моделирует базовый этап протокола Диффи‑Хеллмана – вычисление и обмен открытыми ключами. Сначала задаются общие параметры, которые должны быть известны обеим сторонам: простое число n = 79, выступающее модулем, и генератор q = 17. В классическом протоколе q должен быть первообразным корнем по модулю n, что гарантирует максимальный размер множества возможных ключей [1, 7]. Затем каждая сторона выбирает собственное секретное число, не подлежащее передаче: первая сторона (Алиса) – alpha = 68, вторая сторона (Боб) – beta = 66. Далее код вычисляет открытые ключи: Алиса отправляет Бобу значение C = Power(q, alpha) mod n, Боб отправляет Алисе значение H = Power(q, beta) mod n. Функция Power в Maple реализует быстрое возведение в степень, а оператор mod приводит результат к вычету по модулю n. Эти две строчки имитируют передачу открытых ключей по незащищённому каналу. Помимо основного обмена, код содержит вспомогательные вычисления C1 = Power(62, alpha) mod n и H1 = Power(64, beta) mod n. Они демонстрируют, что при использовании других оснований (62 и 64) получаются иные открытые значения, но эти значения не могут быть использованы для согласования общего ключа, так как протокол фиксирует единое основание q. Для полноты протокола не хватает явного вычисления общего секретного ключа, которое должно выполняться как K_A = Power(H, alpha) mod n на стороне Алисы и K_B = Power(C, beta) mod n на стороне Боба. При данных параметрах оба вычисления дают число 22, что и является согласованным ключом [2, 5]. Таким образом, код выполняет все математические операции открытой фазы протокола: генерацию секретов, вычисление открытых ключей и (при небольшом дополнении) получение общего секрета.
Разработанный Maple‑скрипт корректно реализует вычислительную часть протокола Диффи‑Хеллмана для выбранных числовых параметров [6]. Код обладает минимальной сложностью, поскольку использует встроенные функции Maple для модульного возведения в степень, что исключает необходимость программирования алгоритма быстрого возведения в степень вручную. Прозрачность операций делает скрипт удобным для лабораторного практикума: студенты могут изменять значения n, q, alpha и beta, наблюдать за изменениями открытых ключей и проверять, что итоговый общий секрет совпадает у обеих сторон при условии корректного выбора генератора [5]. Однако код не включает проверку того, является ли q первообразным корнем по модулю n, и не обрабатывает возможные ошибки (например, когда n не простое). В учебных целях эти упрощения оправданы, но преподаватель должен акцентировать внимание на том, что в реальных системах выбор параметров требует строгого обоснования [3, 7]. Тем не менее, представленная реализация полностью пригодна для демонстрации принципа обмена ключами и может служить основой для дальнейших экспериментов, включая шифрование полученным ключом (например, шифром Цезаря) и моделирование атаки «человек посередине» [4, 7].

