3.5.2. Bảo mật cho gói tin thoại/video SRTP
SRTP là giao thức phát triển hỗ trợ cho RTP để mã hóa, chứng thực bản tin, chống nghe lén. Nó nằm giữa lớp ứng dụng RTP và lớp vận chuyển RTP. SRTP cũng có SRTCP, hỗ trợ các chức năng bảo mật cho RTCP. SRTP mã hóa các gói thoại dùng AES, thuật toán mã hóa dùng khóa đối xứng và có khả năng nén RTP header. Phần tải RTP được mã hóa sau đó đóng gói vào trong gói SRTP.
Nhược điểm: mất thời gian xử lý hơn nên có thể tăng trễ.
Điều quan trọng nhất trong SRTP là sự an toàn của khóa trao đổi giữa hai bên bao gồm: địa chỉ IP, số port UDP, SSRC. Cài đặt khóa cho tất cả các máy điện thoại thì quá phức tạp, vì vậy RTP và SRTP nên ở chung một lớp hơn là hai lớp tách biệt.
MIKEY
Là một giải pháp quản lý khóa. Nó có ba cách vận chuyển và thiết lập khóa mã hóa TEK: preshared key, public key và DH (Diffie Hellman). Với preshared key, public key thì khóa được đưa tới người nhận một cách an toàn, còn với DH thì khóa được sinh ra dựa trên các giá trị trao đổi giữa hai bên.
SDP Security Descriptions
SDP Security Descriptions là thuộc tính mới của SDP, dùng để báo hiệu và thương lượng các thông số mã hóa cho luồng SRTP, gồm: bộ mật mã, thông số khóa, thông số phiên cho luồng unicast.
a=crypto: <tag> <crypto-suite> <key params> [<session-params>]
Trong đó:
<tag>: số thập phân, nhận dạng thuộc tính crypto <crypto - suit> thuật toán chứng thực và mã hóa <key-params> phương thức và thông tin khóa thực sự
<session-params > thông số tùy chọn chỉ giao thức vận chuyển
Thuộc tính này chỉ hạn chế cho các luồng unicast, các dịch vụ bên dưới của giao thức vận chuyển (IPsec, TLS, S/MIME) bảo đảm cho thuộc tính này của SRTP.
Ngoài TLS và SRTP còn phải có các thuật toán khác hỗ trợ chứng thực user, xác thực chứng chỉ, trao đổi khóa mã hóa.
3.5.3. Bảo đảm sự tin cậy
Sự tin cậy được bảo đảm bằng cách mã hóa tải mà chỉ có người có khóa mới đọc được. AES-CM Key Stream Generator Key Stream Block RTP playload cipher text RTP playload cipher text Plain text : 11011010100011 Key Stream : 10110001010000 Cipher text : 01101011110011 Key stream : 10110001010000 Plain text : 11011010100011 BU 128 bit 128 bit Initial value Key 128 bit Hình 3.12: Mã hóa trong SRTP
Giá trị khởi tạo ban đầu + khóa = 128 bit block Bi,j (giá trị khởi tạo ban đầu được tính bằng 48 bit chỉ số gói, 32 bit SSRC, 112 bit salting key dịch trái và XOR). Mỗi một block 128 bit này XOR với 1 block plaintext RTP để tạo ra 1 block cipher text.
Chứng thực bản tin
Toàn vẹn bản tin được đảm bảo nhờ hàm hash.
IP UDP RTP Media Payload Authen. tag
Hash Function Secret Key
Hình 3.13: Chứng thực gói SRTP
HMAC-SHA1 băm header và phần tải với khóa mật. Giá trị này là thẻ chứng thực của người gửi. Người nhận cũng tính toán tương tự và so sánh với thẻ, nếu không đúng thì chứng thực thất bại và gói bị bỏ.
3.5.4. Chống ghi lén
ROC và sliding window được dùng để chống ghi lén. 16 bit số thứ tự trong header và 32 bit ROC trong bảng mật mã tạo thành 48 bit, là chỉ số của gói. Chỉ số gói được mã hóa cùng với các thông số khác để tạo các chuỗi khóa.
N-2 YES N+64 NO N+63 NO N+1 YES N YES N-1 YES w Sliding Window RTP Packet
Sequence Number Received ?
Hình 3.14: Chống ghi lại bằng Sliding Window
Chỉ số gói nhận được phải nằm trong phạm vi của sliding window và bit Received tương ứng phải là thứ tự gói xử lý tiếp theo, nếu không gói sẽ bị hủy. Nếu kẻ tấn công chọn một số ngẫu nhiên, kích thước cửa số là 64 thì 99% (1-64/216) gói bị hủy.
3.5.5. Chứng thực bản tin
S/MIME mã hóa bằng khóa công khai, đóng gói theo định dạng MIME. Cung cấp các dịch vụ bảo mật cho các ứng dụng bản tin (HTTP, SIP) như: chứng thực, toàn vẹn bản tin, không chối cãi (nếu dùng chữ ký số), an toàn dữ liệu (do được mã hóa).
SIP gồm có header và phần bản tin SDP. Phần bản tin SDP được mã hóa bằng S/MIME, tuy nhiên các trường trong header như To, From, Call-ID, Cseq và Contact là cần thiết đối với các thành phần trung gian như SIP proxy server, firewall, UAS để thiết lập một cuộc gọi được yêu cầu nên nó phải ở dạng plaintext.
Thông điệp Giá trị hàm băm Khóa phiên bất kì Giá trị hàm băm Khóa công cộng của Alice Khóa phiên 1. hàm băm 2. ký Mã hóa Khóa công cộng của Bob Bên gửi Bên nhận Khóa bí mật Thông điệp đã mã hóa Xác nhận của Alice Chữ ký đã đƣợc mã hóa Khóa bí mật Thông điệp đã mã hóa Xác nhận của Alice Chữ ký đã đƣợc mã hóa Thông điệp đã đƣợc ký Xác nhận của Alice Chữ ký Thông điệp đã đƣợc ký Xác nhận của Alice Chữ ký 6. Giả mã hóa 8. Kiểm tra 7. hàm băm
Khóa riêng của Bob 5. Giải mã 10. So sánh
9. Ký
4. Mã hóa
Hình 3.15: Quá trình gửi bản tin của S/MIME
Quá trình trao đổi khóa và bản tin giữa hai hệ thống:
Bản tin gốc được băm bằng một thuật toán băm, nếu không có quá trình này thì sẽ mất nhiều thời gian xử lý hơn khi ký số vì bản tin quá dài.
Alice ký bản tin được băm bằng thuật toán chữ ký số và đính chữ ký đó kèm theo bản tin gốc.
Một session key được sinh ra ngẫu nhiên để mã hóa bản tin, chứng chỉ và chữ ký bằng một thuật toán mã hóa.
Key session được mã hóa bằng public key của Bob dùng thuật toán mã hóa public key, rồi đính kèm bản tin đã được mã hóa.
Phía bên nhận, dùng private key của Bob và cùng thuật toán mã hóa để giải mã ra session key.
Bob kiểm tra xem bản tin có phải gửi từ Alice không và nó có bị thay đổi khi truyền không bằng cách:
- Dùng thuật toán băm như bước 1
- Bob xác nhận chứng chỉ của Alice là hợp lệ
- Dùng thuật toán trong bước 2, giá trị băm được ký bởi public key của Alice. - Chữ ký được so sánh với chữ ký nhận được, nếu không đúng thì bản tin đã bị
can thiệp.
3.6. Kết luận
Bảo mật luôn là một vấn đề được rất nhiều người quan tâm, đặc biệt trong lĩnh vực công nghệ thông tin, bảo mật thoại cũng không nằm ngoài quy luật đó. Có nhiều phương pháp bảo bảo mật, nhưng lựa chọn một phương pháp bảo mật hợp lý và hiệu quả cho từng trường hợp mới là vấn đề quan trọng.
Trong chương này, tôi đã đưa ra một số giải pháp cho vấn đề bảo mật thoại qua mạng internet:
- Bảo mật bằng biện pháp hành chính - Bảo mật các thiết bị phần cứng - Bảo mật bằng các phần mềm.
CHƢƠNG 4: XÂY DỰNG ỨNG DỤNG
Ngày nay, việc trao đổi thoại trên mạng IP ngày càng trở lên phổ biến, đã có rất nhiều phần mềm được xây dựng nhằm đáp ứng nhu cầu đó của người dùng như: Yahoo, Skype với rất nhiều tính năng nổi trội. Trong chương xây dựng ứng dụng này, tôi xây dựng hai modul quan trọng trong việc ứng dụng bảo mật VoIP.
Như đã giới thiệu ở chương 1, quá trình hoạt động của hệ thống VoIP được bắt đầu bằng việc số hóa các âm thanh từ người gọi, tiếp theo là sử dụng các thuật toán nén và mã hóa để nén và mã hóa các tín hiệu âm thanh này, sau đó các khối dữ liệu đã mã hóa sẽ được đóng gói và truyền đi. Tại nơi nhận, các gói tín hiệu truyền tới sẽ được người nhận giải mã và giả nén để thu được tín hiệu tương ứng với tín hiệu ban đầu. Vì vậy đối với một ứng dụng bảo mật VoIP có thể được chia ra thành các modul nhỏ như sau:
Modul 1: Thiết lập kết nối giữa các máy Modul 2: Nén, giải nén các tín hiệu âm thanh Modul 3: Mã hóa, giải mã dữ liệu
Modul 4: Truyền nhận các tín hiệu âm thanh.
4.1. Mô tả bài toán thực tế
Xây dựng một hệ thống truyền thông giao tiếp trực tiếp sử dụng máy tính giữa nhiều người dùng: cá nhân, các tổ chức, công ty hoạt động phân tán tại nhiều vị trí địa lý khác nhau, sử dụng cơ sở hạ tầng mạng như mạng cục bộ, hoặc internet. Phương thức giao tiếp chủ yếu là thoại.
4.2. Xác định các yêu cầu
4.2.1. Các chức năng chính của Server và Client
Các chức năng của Server:
- Quản lý việc đăng ký thành viên - Quản lý thông tin user
- Xác thực người dùng và tình trạng người dùng
- Tiếp nhận và kết nối các client trong hệ thống với nhau
Các chức năng của Client:
- Đăng nhập hệ thống
- Thay đổi thông tin của User
Hình 4.1. Mô hình cài đặt hệ thống VoIP kiểu PC to PC
Mô tả hệ thống:
Đối với Client
- PC1 và PC2 đăng ký tài khoản người dùng với máy chủ - Gửi yêu cầu kết nối
- Kết nối và hội thoại
Đối với Server
- Máy chủ xác nhận tài khoản người dùng
- Khi nhận được yêu cầu kết nối của PC1 (PC2), máy chủ kiểm tra xem tình trạng của máy PC2 (PC1) đang dỗi hay bận
- Nếu PC2 (PC1) dỗi, máy chủ gửi tín hiệu báo cho PC1 (PC2) và cho phép hai máy kết nối.
4.2.2. Sơ đồ chức năng hệ thống
4.2.2.1. Sơ đồ chức năng đăng nhập, xác định trạng thái user
Mô tả: Client gởi các thông tin về account của mình cho server để server xác thực các thông tin về client. Nếu đúng, server gửi trả client xác thực đúng và cho phép thực hiện kết nối. Nếu không đúng, server gởi thông điệp bằng lời thoại, buộc client đăng nhập lại nếu muốn vào hệ thống.
client Đăng nhập Các thông tin về user đăng nhập Server xử lý Xác thực user Đăng nhập lại Đ S
4.2.2.2. Sơ đồ chức năng thay đổi thông tin của user
Mô tả: Trong trường hợp client muốn thay đổi các thông tin liên quan, client này gửi các thông tin cần thay đổi tới server, server sẽ cập nhật các thông tin này vào cơ sở dữ liệu. Nếu cập nhật thành công, server sẽ báo cho client biết thông tin đã được thay đổi. Nếu cập nhật không thành công, sẽ báo cho client biết và client thoát khỏi hệ thống.
Đ Lưu?
client
Xem thông tin về usse
Server xử lý
Lưu? S Đăng nhập lại
Thay đổi các thông tin
Cập nhật thông tin về user
4.2.2.3. Chức năng thực hiện cuộc gọi đến một client khác đang online
Mô tả: client 1 (M1)yêu cầu server cho biết địa chỉ của client 2 (M2) để thực hiện cuộc gọi đến M2. Nếu M2 đang online server sẽ trả về cho M1 địa chỉ IP của M2, M2 sẽ sử dụng IP này để thực hiện cuộc gọi. Nếu M2 không online server gửi thông báo bằng thoại cho M1 rằng M2 không online yêu cầu gọi lại sau.
Client 2
Các dòng âm thanh gởi đi
Client 1
Yêu cầu server cho
biết IP của client 2 Server xử lý
Online?
Thông báo offline IP của client2 Đ
4.3. Chƣơng trình mã hóa sử dụng thuật toán AES
4.4. Chƣơng trình X-lite.
Phần này giới thiệu một chương trình truyền thoại thực tế X-lite chưa được tích hợp giải thuật mã hóa.
Để triển khai được mô hình này cần: mạng Lan, hai máy tính, máy một cài đặt tổng đài 3CX (có chức năng của một SIP Server) và cài đặt phần mềm softphone X- lite (có chức năng như một client), máy hai cài đặt phần mềm softphone X- lite (có chức năng như một client).
Hình 4.1: Màn hình đăng nhập tổng đài IP PBX
Hình 4.3: Giao diện phần mềm softphone X-lite
Trong phần mềm softphone X- lite ta thực hiện thiết lập tài khoản người dùng, bằng cách nhập User name và Password như đã đăng ký ban đầu.
Hình 4.4: Thiết lập tài khoản ngƣời dùng
Để thực hiện cuộc gọi
- Bước 1: Chọn line (1 hoặc 2)
- Bước 2: Nhập số máy đã đăng ký
- Bước 3: Chọn biểu tượng call
Sau khi bên gọi được chấp nhận cuộc gọi, trạng thái sẽ chuyển sang chế độ active và tín hiệu thoại được truyền trên các máy được kết nối một cách liên tục cho đến khi ta chọn biểu tượng ngắt kết nối.
Hình 4.6: Trạng thái truyền cuộc gọi
4.5. Chƣơng trình VoIP
Trong phần này, tôi xây dựng một phần mềm VoIP đã được tích hợp thuật toán nén CELP và thuật toán mã hóa AES bao gồm các chức năng:
Đăng nhập hệ thống
Thiết lập tài khoản cuộc gọi Tạo kết nối
Kết nối thành công
Với các yêu cầu về phần cứng và quy trình đăng nhập tổng đài 3CX là tương tự như đối với phần mềm X-lite.
Hình 4.7: Thiết lập tài khoản ngƣời dùng
Sau khi một tài khoản đã được đăng kí tại tổng đài SIP server thì trạng thái sẽ là 200 (sẵn sàng để thiết lập cuộc gọi).
Hình 4.8: Giao diện chƣơng trình
Để thiết lập kết nối, nhập số mở rộng của máy tính muốn liên lạc và nhấn vào biểu tượng Call. Hệ thống sẽ cố gắng để thiết lập kết nối, nếu gặp lỗi hệ thống sẽ báo lỗi, nếu thành công trạng thái sẽ chuyển sang Alerting.
Sau khi có tín hiệu chấp nhận từ bên gọi, trạng thái cuộc gọi chuyển sang Active, tín hiệu được truyền đến máy đã kết nối. Tín hiệu âm thanh sẽ được truyền liên tục cho tới khi một trong hai bên muốn ngắt kết nối.
Hình 4.9: Quá trình tạo kết nối thành công
Hình 4.12. Thoại có bảo mật
4.6. Khối mã hóa và giải mã AES
Các định nghĩa đƣợc sử dụng việc mã hóa và giải mã
#define NDEBUG #include <assert.h> typedef uint32_t u32; typedef uint16_t u16; typedef uint8_t u8;
#define MAXKC (256/32) #define MAXKB (256/8) #define MAXNR 14 #ifndef AES_ASM #ifdef FULL_UNROLL
Các modul sử dụng trong quá trình mã hóa và giải mã
o Tạo lập khóa mã hóa
int AES_set_encrypt_key(const unsigned char *userKey, const int bits,AES_KEY *key)
o Tạo khóa giải mã
int AES_set_decrypt_key(const unsigned char *userKey, const int bits,AES_KEY *key)
o Xây dựng hàm mã hóa
void AES_encrypt(const unsigned char *in, unsigned char *out, const AES_KEY *key)
o Xây dựng hàm giải mã
void AES_decrypt(const unsigned char *in, unsigned char *out, const AES_KEY *key)
o Mã hóa dữ liệu
void AES_cbc_encrypt(const unsigned char *in, unsigned char *out, const unsigned long length, const AES_KEY *key, unsigned char *ivec, const int enc)
4.7. Khối nén và giải nén âm thanh CELP
Các thƣ viện đƣợc định nghĩa trong trong thuật toán CELP
#define prototyp_h #define common_h #define qsize_h #define parm_h
Một số hàm quan trọng đƣợc xây dựng trong thuật toán CELP
extern int close(); extern int fclose(); extern int fprintf(); extern int fscanf(); extern int open(); extern int printf(); extern int printf(); extern int read(); extern int sscanf(); extern int write(); void init_encoder(); void encoder();
void encode_vector(int); void adapt_frame();
extern real PSF_LPC_MEM a10[]; void adapt_coder();
4.7. Kết luận
Trong chương này, trên cơ sở là chương trình truyền thoại X-lite chưa được bảo mật, tôi đã xây dựng được ứng dụng truyền thoại có tích hợp giải thuật nén thoại và mã hóa tín hiệu VoIP, với các chức năng tương tự.
KẾT LUẬN
Như chúng ta đã biết, hiện nay nhu cầu trao đổi thông tin là vô cùng to lớn, với ưu điểm là nhanh, chính xác, tiện dụng,… truyền thoại, đang là một trong những phương thức truyền thông phổ biến nhất, cùng với những ưu điểm đó của truyền thoại truyền thống truyền thoại trên nền IP với ưu thế vượt trội về giảm giá thành cũng đã và ngày càng phát triển lớn mạnh. Vì thế đảm bảo tính bí mật của thông tin trong quá trình truyền thông là vấn đề được nhiểu người quan tâm hơn bao giờ hết.
Với yêu cầu đặt ra ban đầu của đề tài: “Nghiên cứu giải pháp bảo mật thoại trên mạng internet”, tác giả đã tiến hành nghiên cứu về công nghệ VoIP và nhận thấy rằng: ở