README.md

Алгоритм Диффи — Хеллмана

Протокол Диффи — Хеллмана (англ. Diffie–Hellman key exchange protocol, DH) — криптографический протокол, позволяющий двум и более сторонам получить общий секретный ключ, используя незащищенный от прослушивания канал связи.

Т.е. защита от атаки «человек посередине».

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

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

Системные требования

Программа писалась в MSVS в качестве классического консольного приложения Windows на С++.

Если вас устраивает консольное приложение под Windows, ничего менять не нужно

Если вы хотите использовать этот код в приложении с GUI либо на каком ни будь приборе, прочитайте, что вам нужно изменить в разделе «Структура программы».

Если вы хотите гарантировать безопасность алгоритма, вам нужно доработать программу, увеличив размеры ключей (доработать код в каталоге /math/)

Структура программы

/math/ — каталог, где хранится реализация алгоритма (на языке С)
/math_api/ — каталог, где хранятся Callback-функции (на языке С++), необходимые для работы кода из каталога /math/
/остальные_файлы — классы, реализующие консольное меню (на языке С++)
В коде использованы только стандартные библиотеки.

Концепция такой структуры программы в том, чтобы каталог math\ можно было переносить без изменений:

  1. На микроконтроллер любого устройства независимо от програмно-аппаратной части и вашего видения на то, каким должен быть (если он есть) пользовательский интерфейс.
  2. В приложения на фреймворках для desktop-ных устройств (ПК), например, для создания оконных приложений - фреймворк QT (при использовании в коде родного С++), Windows Forms (при использовании C++ CLI) и т.д

Каталог math_api\ программист переписывал бы сам в зависимости от:

  1. Выбора пользовательского интерфейса, выбора устройств ввода-вывода
  2. Выбора способа взаимодействия между абонентами (например, TCP/IP сокеты либо, например, обмен по какой нибудь шине через интерфейс UART, SPI, USB т.д.)

Остальные файлы не обязательны, переписываются в зависимости от выбора пользовательского интерфейса.

Снимок работы программы

Про разработку программы

Программа писалась несколько дней. По следующему плану:

Процесс разработки можно было бы разбить на несколько человек.

Конвейеры
0 успешных
0 с ошибкой