D. GIảI PHáP MậT Mã
6. Sử dụng ch−ơng trình KE
• u cầu: Máy tính chạy hệ điều hành Linux RedHat 6.2 (nhân 2.2.14) hoặc
RedHat 7.0 (nhân 2.2.16). Ng−ời sử dụng phải là root. Giả sử tên hai máy tính lần l−ợt là HOSTNAME1 và HOSTNAME2. Để biên dịch đ−ợc ch−ơng trình nguồn, chúng ta cần bộ nguồn OpenSSL phiên bản 0.9.6 hoặc mới hơn.
• Tạo th− mục /etc/keyEx/pk, /etc/keyEx/run.
• Tạo hai bộ khố cơng khai RSA cho hai bên nh− sau: (n1, e1, d1) cho
HOSTNAME1 và (n2, e2, d2) cho HOSTNAME2.
• Trên máy HOSTNAME1 tạo hai file:
- file thứ nhất: /etc/keyEx/keyEx.priv l−u n1 và d1 nh− sau:
# PVKH: file /etc/keyEx/keyEx.priv myModulo=0xn1
PrivateExponent=0xd1
- file thứ hai: /etc/keyEx/pk/HOSTNAME2 l−u n2 và e2 nh− sau:
# PVKH: file /etc/keyEx/pk/HOSTNAME2 peerModulo=0xn2
peerPublicExponent=0xe2
• Trên máy HOSTNAME2 tạo hai file t−ơng tự nh− trên
- file thứ nhất: /etc/keyEx/keyEx.priv l−u n2 và d2 nh− sau:
# PVKH: file /etc/keyEx/keyEx.priv myModulo=0xn2
- file thứ hai: /etc/keyEx/pk/HOSTNAME1 l−u n1 và e1 nh− sau:
# PVKH: file /etc/keyEx/pk/HOSTNAME1 peerModulo=0xn1
peerPublicExponent=0xe1
Ví dụ: với cấu hình của chúng tơi, trên máy HOSTNAME1 là: - file /etc/keyEx/pk/HOSTNAME2 peerModulo=0x89f5d9ec8170d69bfd403d9ed4037ff14a01abfdfbe94d5 ef64b73a32d22cfaf19f1a9b1b403b6d7b0f922c425085c9f34af3b64aaf 08af16a498d4814c69da3 peerPublicExponent=0x40c14214bfcaba17db7549cf934fe73f12345d9 855f8c9c10d5525f26a76545441537a74cc58867fdaf02d89296b29c6cff f1b17fdd08eb4abc200b1b408c2130789f5d9ec8170d69bfd403d9ed4037 ff14a01abfdfbe94d5ef64b73a32d22cfaf19f1a9b1b403b6d7b0f922c42 5085c9f34af3b64aaf08af16a498d4814c69da3
Chú ý: khoá đ−ợc ghi trên một dịng, trong file có thể có dấu cách, dấu '#'. - file /etc/keyEx/keyEx.priv myModulo=0x95441d0731fd9f5a1dc6dfb2f2eadec98024f8b013abdc772 d72346b9309cd59d3e68f92dff6e39051a792caac15a01fb5826f337524c 87e1bfedbb954ccef89 PrivateExponent=0x209c36eadf507badba36743d15073bd36503bd9c27 02f3f966befdd8ef2ac10c4cb15ddf7a5880db674bb3b0928ba5d17d54db 04436b234a6f37701e35330edd
• Trên máy HOSTNAME2:
- file thứ nhất: /etc/keyEx/keyEx.priv l−u n2 và d2 nh− sau:
myModulo=0x89f5d9ec8170d69bfd403d9ed4037ff14a01abfdfbe94d5ef 64b73a32d22cfaf19f1a9b1b403b6d7b0f922c425085c9f34af3b64aaf08 af16a498d4814c69da3 PrivateExponent=0x48d1dd23dc94e7ab929cca519caeab6549aa4f1fd2 60baeacd9e1705851fa1609a25ec1b161e64a85af98d12b087b59534832f eed40c7f53a815c0e7944ff0ff
- file thứ hai: /etc/keyEx/pk/HOSTNAME1 l−u n1 và e1 nh− sau:
peerModulo=0x95441d0731fd9f5a1dc6dfb2f2eadec98024f8b013abdc7 72d72346b9309cd59d3e68f92dff6e39051a792caac15a01fb5826f33752 4c87e1bfedbb954ccef89 peerPublicExponent=0x40c43eb9f5d50f8c01bba8bf0ee8e6dae38b4de 9783734d139534bfbd4d5fac2072cea07ae0a8ff566d663561a45f74d73b b51892458ef940137656e9e2949db4595441d0731fd9f5a1dc6dfb2f2ead
ec98024f8b013abdc772d72346b9309cd59d3e68f92dff6e39051a792caa c15a01fb5826f337524c87e1bfedbb954ccef89
• copy file chạy `kex` vào th− mục /usr/sbin
• Lựa chọn cổng 10000 (phải đảm bảo cổng này ch−a có dịch vụ nào sử dụng)
cho kex bằng cách thêm dòng sau vào file /etc/services:
kex 10000/tcp #port 10000 for kex
• Thêm dịng sau vào file /etc/inetd.conf
kex stream tcp nowait root /usr/sbin/kex kex
hoặc nếu sử dụng TCP Wrapper cho việc điều khiển truy nhập:
kex stream tcp nowait root /usr/sbin/tcpd /usr/sbin/kex
Chú ý: Với các phiên bản RedHat 7.0 hoặc 7.1, ch−ơng
trình daemon inetd đ−ợc thay thế bởi trình xinetd, file cấu hình cho dịch vụ này đ−ợc đặt trong th− mục /etc/xinetd/. Khi này ta sẽ tạo thêm 1 file với tên là tên của dịch vụ cần chạy (ở đây là `kex`), nội dung nh− sau:
service kex {
disable = no
user = root # ng−ời dùng đ−ợc phép chạy
port = 10000 # cổng dịch vụ
socket_type = stream
wait = no
server = /usr/sbin/kex
}
Sau khi cấu hình xong với 2 file /etc/services và /etc/inetd.conf, ta nên khởi động lại máy để kích hoạt ch−ơng trình `kex`.
Lệnh chạy `kex`:
Trên HOSTNAME1:
kex -c HOSTNAME2:10000
Sau khi thực hiện lệnh này thì khố tạo ra đ−ợc l−u trong /etc/keyEx/run/HOSTNAME2
(Chý ý: Nếu chạy trên HOSTNAME2 thì thực hiện lệnh `kex -c HOSTNAME1:10000` - khố tạo ra là file /etc/keyEx/run/HOSTNAME1).
`-c hostname:port`: kex chạy ở chế độ client-server, kết nối đến một máy có địa
chỉ xác định.
`-t timeout`: Thiết lập thời gian chờ lần kết nối, mặc định là 60 giây.
`-k KEYFILE`: Chỉ ra file chứa private key và mymodulo, mặc định là
/etc/keyEx/keyEx.prv
`-p PROTO`: Chỉ ra giao thức của KEX, hiện tại duy nhất là 1.
`-E`: Ghi các thơng tin gỡ rối ra màn hình thay vì syslog (/var/log/message).
`-r host`: Xác định host là nơi mà các gói tin của KEX đ−ợc routed qua. Tuỳ chọn
này cần thiết khi kết nối TCP giữa hai máy thông qua một SOCKS hoặc một proxy khác.
Kiểm tra quá trình chạy `kex`
Sau khi chạy `kex` thành cơng, ở máy HOSTNAME1 khóa sẽ đ−ợc l−u trong file /etc/keyEx/run/HOSTNAME2 (dịng key=), cịn máy HOSTNAME2 khố l−u trong /etc/keyEx/HOSTNAME1. Chúng ta hãy kiểm tra dòng `key=` trong hai file này, nếu giống nhau hồn tồn thì q trình trao đổi khố thành công.