
TCP/UDP 대칭 암호화 터널 래퍼
CryptHook은 기존 애플리케이션을 대칭 블록 암호화로 보호하는 모듈식 구현체입니다. 네트워크 통신용 기본 시스템 호출인 send/sendto 및 recv/recvfrom을 후킹하는 방식으로 동작합니다. Crypthook은 이러한 시스템 호출에 의존하는 모든 기존 애플리케이션에서 작동합니다.
CryptHook은 256비트 키를 사용하는 AES GCM 모드를 사용합니다. 키는 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바이트의 무작위 데이터를 알고리즘과 함께 사용할 수 있는 전체 IV로 변환하는 데 사용됩니다.
PASSPHRASE는 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