Вот так и надо было начинать!

Чайник в сетях или защите?
Сети я знаю на уровне 2/3 CCNA =) Шифрование я знаю на уровне похуже.
Асиметричное шифрование штука затратная по процессорным ресурсам. Поэтому обычно Асиметричное шифрование используют для обмена сеансовым ключом. Далее сеансовый ключ не меняется (тут я не уверен на все 100% вероятно современные реализации могут переодически менять ключ ибо есть долгоживущие VPN'ы). Это из теории.
Я так понял у тебя есть два связанных генератора ключей (как они связаны нас в данный момент не колышит) факт в том что эти ГК отдают ключи и нам этими ключами надо шифровать Ethernet трафик.
Кстати, что есть "Генераторы ключей"? или это военная тайна (я не удивлюсь)? А всему форуму не запретят выезд в страну вероятного противника потому что мы участвовали в разработке военных девайсов? Они одобрены ФСБ? =)
Еще то в чем я уверен на все 100% что враз OpenVPN и IPSec использовать не имеет смысла. Надо подробнее изучить данные реализации (а реализуют они одно и то же) и понять куда будет проще втиснуть свой костыль =)
Со мной можно спорить, но я пятой точной чую, что ковырять именно OpenVPN будет проще ибо это обычное userspace приложение без всяких ядерных заморочек. Взаимодействие с ядром там простое как барабан. Открывается файл устройства tap/tun и пушутся/читаются пакеты. С сетью ядро само разбирается.
Кстати, может статься что написать свой openvpn с бекджеком и генератором ключей окажется проще чем разбираться в уже существующей инфраструктуре проекта openvpn.
Вообще суть любого VPN это по публичным каналам (которым нет доверия) используя их как транспорт проложить защищенный канал, по которому уже снова запускают стандартные протоколы, например PPP, Ethernet или IP, или же защита данных происходит на прикладном уровне (SSL)
У ядра Linux есть два типа стандартных виртуальных сетевых интерфейсов (может и больше но эти два точно есть и они используются OpenVPN'ом)
tap - предназначен для инкапсуляции Ethernet-кадров
tun - предназначен для инкапсуляции IP кадров
Если я ничего не напутал. =)
tun/tap-интерфейс создаётся или программно вызовами api linux (из своего приложения) либо средствами администрирования (из командной строки). В системе появляется интерфейс, который для ОС выглядит как eth или ppp интерфейс, но он не связан с каким либо реальным устройством в компьютере. Он связывается с файлом в /dev/net/
В ОС ты так же настраиваешь интерфейс как и обычный ethernet/ppp, назначаешь адреса, прописываешь маршруты. Когда ОС исходя из данных таблицы маршрутизации решает что какой-то пакет должен уйти через наш интерфейс оно его туда и отправляет, а мы его можем считать из файла устройства, зашифровать и передать по реальной публичной сети. Обычно в качестве транспорта по публичной сети используется UDP.
Точно так же в обратную сторону. Если что-то нам прилетает через "UDP соединение" (нет там соединений реальных просто привязка к IP и номеру порта UDP), мы это считываем, расшифровываем и записываем в файл устройства нашего виртуального интерфейса, а ОС на полном серьёзе считает что ей пакет на интерфейс пришел ну и соответственно его обрабатывает.
Именно так и работает OpenVPN только его можно по разному настраивать эти настройки обеспечивают разные сочетания протоколов, инкапсуляций, методов шифрования, и прочей сервисной шелухи.
Как это в реальной жизни, примерчег:
http://backreference.org/2010/03/26/tuntap-interface-tutorial/Соответственно тебе решать допиливать этот пример до вменяемого состояния когда этим можно будет пользоваться, или разбираться во внутренней кухне OpenVPN и вживлять в него свои методы шифрования. Геморру одинаково очень много. За второе люди скажут спасибо, если твой генератор ключей популярен и ты выложишь свои изменения в открытый доступ.