
Wrapper de tunnel de chiffrement symétrique TCP/UDP
CryptHook est une implémentation modulaire permettant de sécuriser des applications existantes avec un chiffrement par blocs symétrique. Il fonctionne en interceptant les appels système de base pour la communication réseau send/sendto et recv/recvfrom. Crypthook fonctionnera avec toute application existante qui repose sur ces appels système.
CryptHook repose sur AES en mode GCM avec une clé de 256 bits. Les clés sont générées à partir de phrases de passe en utilisant PBKDF2. Les IV sont construits à la volée à l'aide d'octets aléatoires, et la même technique de dérivation de clé permet de reconstruire le vecteur d'initialisation côté réception afin de minimiser la surcharge. L'authentification de chaque paquet est également vérifiée.
Les caractéristiques suivantes doivent être modifiées si vous souhaitez utiliser cet outil pour quelque chose de raisonnablement sécurisé. Toute la configuration peut être modifiée dans crypthook.c à l'aide des #defines suivants.
#define KEY_SALT "changeme"
#define IV_SALT "changeme"
#define ITERATIONS 1000
#define PASSPHRASE "Hello NSA"
KEY_SALT et ITERATIONS sont utilisés dans le processus de dérivation de clé pour transformer la phrase de passe en texte clair en une clé de 256 bits.
IV_SALT et ITERATIONS sont utilisés dans le processus de dérivation d'IV pour transformer les 8 octets de données aléatoires en un IV complet utilisable par l'algorithme.
PASSPHRASE est simplement la phrase de passe par défaut si aucune n'est fournie via la variable d'environnement CH_KEY.
$ make
Serveur
$ LD_PRELOAD=./crypthook.so CH_KEY=donthackmebro ncat -l -p 5000
Client
$ LD_PRELOAD=./crypthook.so CH_KEY=donthackmebro ncat server 5000