Giao thức bắt tay - SSL Handshaking Protocol

In document AN TOÀN VÀ BẢO MẬT THÔNG TIN (Page 113-116)

CHƯƠNG 7. MỘT SỐ ỨNG DỤNG THỰC TIỄN

7.3 Giao thức bảo mật web Secure Socket Layer version 3 - SSLv3

7.3.1 Giao thức bắt tay - SSL Handshaking Protocol

Trước khi tiến hành truyền số liệu, SSL thực hiện giao thức bắt tay để chứng thực website và chứng thực người duyệt web, trao đổi khóa phiên và thống nhất các thuật toán mã hóa được sử dụng. Sơ đồ bắt tay được minh họa trong hình bên dưới.

Client Server

client_hello server_hello

certificate

certificate_request server_hello_done

certificate client_exchange_key

certificate_verify

finished finished

Phase 1

Phase 2

Phase 3

Phase 4

(đường nét đứt là các thông điệp không bắt buộc, chỉ sử dụng khi cần chứng thực từ phía client)

Pha 1: Chọn thuật toán mã hóa Pha 2: Server cung cấp chứng chỉ Pha 3: Trao đổi khóa phiên

Truyền dữ liệu của giao thức HTTP

client Pha 4: Hoàn tất bắt tay server

114

Hình 7-6. Giao thức bắt tay SSL

Sơ đồ trên gồm có 10 loại thông điệp và được chia thành 4 pha:

1) Pha 1: thỏa thuận về phương pháp mã hóa được sử dụng. Pha này bắt đầu bằng thông điệp client_hello được gửi từ client đến website, thông điệp này gồm các tham số sau:

 Version: phiên bản SSL cao nhất mà client sử dụng

 Random: là một cấu trúc ngẫu nhiên gồm 32 byte

 SessionID: nếu bằng 0 có nghĩa là client muốn thiết lập một session mới hoàn toàn. Nếu khác 0 nghĩa là client muốn thiết lập một kết nối mới trong session này. Việc dùng session giúp cho client và server giảm các bước thỏa thuận trong quá trình bắt tay.

 CompressionMethod: phương pháp nén dữ liệu sử dụng trong quá trình truyền dữ liệu

 CipherSuite: Các phương pháp mã hóa khóa công khai dùng để trao đổi khóa phiên như RSA, Fixed Diffie-Hellman, Ephemeral Diffie-Hellman, Anonymous Diffie-Hellman. Phương pháp nào liệt kê trước thì có được ưu tiên hơn. Ứng với mỗi phương pháp trao đổi khóa là danh sách các loại mã hóa đối xứng được sử dụng. Gồm các tham số sau:

- CipherAlgorithm: phương pháp mã hóa đối xứng sử dụng (là một trong các phương pháp mã khối RC2, DES, 3DES, IDEA, AES, Fortezza hay mã dòng RC4)

- Hash Algorithm: MD5 hay SHA-1.

- CipherType: mã hóa đối xứng là mã khối hay mã dòng.

- KeyMaterial: một chuỗi byte được dùng để sinh khóa.

- IV Size: kích thước của IV dùng trong mô hình CBC của mã khối.

 Sau khi nhận được client_hello server sẽ trả lời bằng thông điệp server_hello để xác các thuật toán được sử dụng.

2) Pha 2: chứng thực server và trao đổi khóa của mã hóa công khai. Sau khi đã xác nhận thuật toán mã hóa với client, server tiếp tục thực hiện các thông điệp sau:

- Thông điệp certificate: server cung cấp certificate của mình cho client (dưới dạng chứng chỉ X.509) .

- Thông điệp certificate_request: trong trường hợp server cần chứng thực người sử dụng, server sẽ gửi thông điệp này để yêu cầu client cung cấp chứng chỉ.

- Thông điệp server_hello_done: báo hiệu server đã hoàn tất pha 2.

3) Pha 3: chứng thực client và trao đổi khóa của mã hóa đối xứng

- Thông điệp certificate: nếu server yêu cầu certificate, client cung cấp certificate của mình cho server.

- Thông điệp client_key_exchange: trong bước này client gửi các thông số cần thiết cho server để tạo khóa bí mật. Ta cũng sẽ chỉ đề cập đến trường hợp RSA. Trong trường hợp này client tạo một giá trị bất kỳ gọi là “tiền khóa chủ” (pre-master secret) có kích thước 48 byte, mã hóa bằng khóa

115 công khai của server. Sau khi có “pre-master secret”, client và server sẽ tính giá trị “khóa chủ” (master-secret) như sau:

master_secret = MD5(pre_master_secret || SHẮÁ ||

pre_master_secret ||ClientHellọrandom ||

ServerHellọrandom)) ||

MD5(pre_master_secret || SHẮBB' ||

pre_master_secret || ClientHellọrandom ||

ServerHellọrandom)) ||

MD5(pre_master_secret || SHẮCCC' ||

pre_master_secret || ClientHellọrandom ||

ServerHellọrandom))

Master_secret cũng có chiều dài là 48 byte (384 bít). Phép toán || là phép nối - Thông điệp certificate_verify: là chữ ký của client trong trường hợp server

cần chứng thực client. Client phải dùng khóa riêng để ký chữ ký, do đó server có thể đảm bảo được là không ai khác dùng certificate của client để giả mạọ

4) Pha 4: hoàn tất quá trình bắt taỵ Trong pha này client và server gửi thông điệp finished để thông báo hoàn tất quá trình bắt tay lẫn nhaụ Tham số của thông điệp này là một giá trị hash để hai bên có thể kiểm tra lẫn nhaụ Giá trị hash này kết nối của 2 giá trị hash:

MD5(master_secret || pad2 ||

MD5(handshake_messages || Sender || master_secret || pad1)) SHĂmaster_secret || pad2 ||

SHĂhandshake_messages || Sender || master_secret || pad1)) Trong đó handshake_messages là tất cả các thông điệp đầu đến trước thông điệp finished nàỵ Sender là mã để phân biệt thông điệp finished này là từ client hay từ server. Đây là cơ chế chống replay attack dùng hàm hash mà chúng ta đã tìm hiểu trong chương 6.

Dựa trên giá trị master_secret, client và server sẽ tính các tham số cần thiết cho mã hóa đối xứng như sau:

- Hai khóa dành cho việc mã hóa dữ liệu, một khóa dành cho chiều server gửi client và 1 khóa dành cho chiều client và server.

- Hai giá trị IV, cũng dành cho server và client tương ứng

- Hai khóa dành cho việc tính giá trị MAC, cũng tương ứng cho server và client Tùy theo phương pháp mã hóa đối xứng được sử dụng mà các tham số này có chiều dài khác nhaụ Tuy nhiên, chúng được lấy từ dãy bít theo công thức sau:

key_block = MD5(master_secret || SHẮÁ || master_secret ||

ServerHellọrandom || ClientHellọrandom)) ||

MD5(master_secret || SHẮBB' || master_secret ||

ServerHellọrandom || ClientHellọrandom)) ||

MD5(master_secret || SHẮCCC' || master_secret ||

ServerHellọrandom ||ClientHellọrandom)) ||

. . .

116

Việc dùng các giá trị ClientHello.random và ServerHello.random sẽ làm phức tạp việc phá mã hơn.

Đến đây client và server đã hoàn tất quá trình bắt tay trao đổi khóa, sẵn sàng để truyền số liệu theo giao thức truyền số liệu.

In document AN TOÀN VÀ BẢO MẬT THÔNG TIN (Page 113-116)