
Wrapper di tunnel con crittografia simmetrica TCP/UDP
CryptHook è un'implementazione modulare per proteggere applicazioni esistenti con crittografia a blocchi simmetrica. Funziona agganciando le chiamate di sistema di base per la comunicazione di rete send/sendto e recv/recvfrom. Crypthook funzionerà con qualsiasi applicazione esistente che dipende da queste chiamate di sistema.
CryptHook si basa su AES in modalità GCM con una chiave a 256 bit. Le chiavi vengono generate da passphrase usando PBKDF2. Gli IV vengono costruiti al volo usando byte casuali di dati e la stessa tecnica di derivazione della chiave per ricostruire il vettore di inizializzazione sul lato ricevente, in modo da mantenere l'overhead al minimo. Viene verificata anche l'autenticazione di ogni pacchetto.
Le seguenti caratteristiche devono essere modificate se intendi utilizzare questo strumento per qualcosa di ragionevolmente sicuro. Tutta la configurazione può essere modificata in crypthook.c usando i seguenti #define.
#define KEY_SALT "changeme"
#define IV_SALT "changeme"
#define ITERATIONS 1000
#define PASSPHRASE "Hello NSA"
KEY_SALT e ITERATIONS vengono usati nel processo di derivazione della chiave per trasformare la passphrase in chiaro in una chiave a 256 bit.
IV_SALT e ITERATIONS vengono usati nel processo di derivazione dell'IV per trasformare gli 8 byte di dati casuali in un IV completo da usare con l'algoritmo.
PASSPHRASE è semplicemente la passphrase predefinita se non ne viene fornita alcuna tramite la variabile d'ambiente CH_KEY.
$ make
Server
$ LD_PRELOAD=./crypthook.so CH_KEY=donthackmebro ncat -l -p 5000
Client
$ LD_PRELOAD=./crypthook.so CH_KEY=donthackmebro ncat server 5000