Алгоритм Диффи — Хеллмана
Протокол Диффи — Хеллмана (англ. Diffie–Hellman key exchange protocol, DH) — криптографический протокол, позволяющий двум и более сторонам получить общий секретный ключ, используя незащищенный от прослушивания канал связи.
Т.е. защита от атаки «человек посередине».
Общий секретный ключ не передается по каналу связи, а независимо генерируется на машинах участников сеанса связи с помощю данного математического алгоритма.
Перехват чисел, которыми обмениваются абоненты, чтобы их ключ совпал, не достаточен для воссоздания ключа.
Системные требования
Программа писалась в MSVS в качестве классического консольного приложения Windows на С++.
Если вас устраивает консольное приложение под Windows, ничего менять не нужно
Если вы хотите использовать этот код в приложении с GUI либо на каком ни будь приборе, прочитайте, что вам нужно изменить в разделе «Структура программы».
Если вы хотите гарантировать безопасность алгоритма, вам нужно доработать программу, увеличив размеры ключей (доработать код в каталоге /math/)
Структура программы
/math/ — каталог, где хранится реализация алгоритма (на языке С)
/math_api/ — каталог, где хранятся Callback-функции (на языке С++), необходимые для работы кода из каталога /math/
/остальные_файлы — классы, реализующие консольное меню (на языке С++)
В коде использованы только стандартные библиотеки.
Концепция такой структуры программы в том, чтобы каталог math\ можно было переносить без изменений:
- На микроконтроллер любого устройства независимо от програмно-аппаратной части и вашего видения на то, каким должен быть (если он есть) пользовательский интерфейс.
- В приложения на фреймворках для desktop-ных устройств (ПК), например, для создания оконных приложений - фреймворк QT (при использовании в коде родного С++), Windows Forms (при использовании C++ CLI) и т.д
Каталог math_api\ программист переписывал бы сам в зависимости от:
- Выбора пользовательского интерфейса, выбора устройств ввода-вывода
- Выбора способа взаимодействия между абонентами (например, TCP/IP сокеты либо, например, обмен по какой нибудь шине через интерфейс UART, SPI, USB т.д.)
Остальные файлы не обязательны, переписываются в зависимости от выбора пользовательского интерфейса.
Снимок работы программы
Про разработку программы
Программа писалась несколько дней. По следующему плану:
Процесс разработки можно было бы разбить на несколько человек.