D. GIảI PHáP MậT Mã
8. Trao đổi khoá tự động trong TransCrypt
KEX là một ch−ơng trình trao đổi khố theo thuật toán Diffie-Hellman, kèm theo việc trao đổi chữ ký xác thực. Có thể coi thủ tục này an tồn nh− thủ tục STS bởi vì nó đảm bảo đầy đủ các điều kiện mà thủ tục STS nêu ra. Khố tạo ra có thể đ−ợc sử dụng cho các thuật tốn mã hố khác nhau. Các ch−ơng trình mã hóa sẽ đọc khố từ file đ−ợc tạo ra bởi `kex` để mã hoá dữ liệu.
Để thực hiện việc trao đổi khóa tự động trong TransCrypt, chúng tơi phải sửa đổi mã nguồn của ch−ơng trình KEX. ý t−ởng của chúng tơi là, sau khi chạy
ch−ơng trình `kex` để thoả thuận khoá, khoá sẽ đ−ợc l−u vào một file. Chẳng hạn, trên máy HOSTNAME2 file này có dạng nh− sau:
arg=HOSTNAME1 peer=128.3.0.3 me=128.3.0.5 key=<64 byte>
Sau đó ch−ơng trình daemon của TransCrypt sẽ đ−ợc gọi để đ−a các tham số trong đó có khố từ file này vào module của TransCrypt.
Việc gọi daemon đ−ợc thực hiện trong hàm ready() của file negotiate.c:
{
#define TRANS_DAEMON "/usr/sbin/transcryptd-cb"
char ba[16];
char *na[]={TRANS_DAEMON, "-o", buf, "-s", ba, NULL}; if (KEXsocket>=0) {
snprintf(ba, sizeof(ba), "%d", KEXsocket); } else {
/* should not happen */
Log(LOG_ERR, "internal KEXsocket<0"); na[3]=NULL;
}
execv(TRANS_DAEMON, na);
Giả sử chúng ta đang ở trên máy HOSTNAME1 thì dịng lệnh
execv(TRANS_DAEMON, na) thực chất là gọi lệnh:
"/usr/sbin/transcryptd-cb -o /etc/keyEx/run/HOSTNAME2 - s KEXsocket"
Lệnh này hoàn toàn t−ơng đ−ơng với việc chạy TransCrypt ở chế độ manual (khoá tĩnh).
Và nh− vậy, cứ mỗi lần`kex` đ−ợc gọi thì nó sẽ tạo ra khố mới và gọi daemon để nạp khoá mới cho module mã dịch TransCrypt