
Обёртка туннеля с симметричным шифрованием для TCP/UDP
CryptHook — это модульная реализация для обеспечения безопасности существующих приложений с помощью симметричного блочного шифрования. Она работает путём перехвата базовых системных вызовов для сетевого взаимодействия: send/sendto и recv/recvfrom. Crypthook будет работать с любым существующим приложением, которое использует эти системные вызовы.
CryptHook использует AES в режиме GCM с 256-битным ключом. Ключи генерируются из парольных фраз с помощью PBKDF2. IV (векторы инициализации) создаются на лету с использованием случайных байтов данных, а для реконструкции вектора инициализации на принимающей стороне применяется та же техника вывода ключа — чтобы минимизировать накладные расходы. Также проверяется подлинность каждого пакета.
Следующие характеристики необходимо изменить, если вы собираетесь использовать это для чего-либо, требующего разумного уровня безопасности. Всю конфигурацию можно изменить в файле crypthook.c с помощью следующих #defines.
#define KEY_SALT "changeme"
#define IV_SALT "changeme"
#define ITERATIONS 1000
#define PASSPHRASE "Hello NSA"
KEY_SALT и ITERATIONS используются в процессе вывода ключа для преобразования текстовой парольной фразы в 256-битный ключ.
IV_SALT и ITERATIONS используются в процессе вывода IV для преобразования 8 случайных байтов в полный вектор инициализации для использования с алгоритмом.
PASSPHRASE — это просто парольная фраза по умолчанию, если она не указана через переменную окружения CH_KEY.
$ make
Сервер
$ LD_PRELOAD=./crypthook.so CH_KEY=donthackmebro ncat -l -p 5000
Клиент
$ LD_PRELOAD=./crypthook.so CH_KEY=donthackmebro ncat server 5000