Nguyên lý hoạt động của giao thức SSL

Một phần của tài liệu Xây dựng mạng riêng ảo dựa trên giao thức secure sockets layer (SSL) (Trang 38)

Giao thức SSL sử dụng một sự kết hợp giữa mã hóa khóa đối xứng và khóa công khai. Mã hóa khóa đối xứng nhanh hơn nhiều so với mã hóa khóa công khai, nhưng mã hóa khóa công khai cung cấp các kỹ thuật xác thực tốt hơn.

Một phiên làm việc SSL luôn luôn bắt đầu với một cuộc trao đổi các thông điệp (message) được gọi là cuộc bắt tay SSL. Việc bắt tay cho phép máy chủ xác thực nó với máy trạm bằng cách sử dụng kỹ thuật khóa công khai, sau đó cho phép máy trạm và máy chủ hợp tác với nhau trong việc tạo ra các khóa đối xứng được sử dụng để mã hóa, giải mã và phát hiện xâm nhập nhanh trong suốt phiên làm việc tiếp theo. Nếu muốn, quá trình bắt tay đó

cũng cho phép máy trạm xác thực với máy chủ. Hình 2.3 trình bày quá trình trao đổi các thông điệp giữa hai đầu cuối để thực hiện bắt tay theo giao thức SSL.

Hình 2.3: Các thông điệp trao đổi trong quá trình bắt tay của SSL

Việc bắt tay được bắt đầu với sự xác thực bắt buộc của server trong khi việc xác thực client là tuỳ chọn. Sau khi xác thực được thiết lập, việc đàm phán hệ mật mã xảy ra. Các tham số thương lượng trong giao thức này sẽ được sử dụng trong toàn phiên liên lạc. Vì vậy, giao thức bắt tay thiết lập điều kiện cho toàn bộ việc trao đổi dữ liệu có bảo mật. Điều này làm cho giao thức bắt tay trở thành mục tiêu của những người muốn xâm nhập. Các thông điệp trao đổi trong giao thức này có cấu trúc sau:

1 byte 3 byte >1 byte

Type Length Content

Trường Type là 1 byte dùng để chỉ thị kiểu của thông điệp ngoài 10 tuỳ chọn khác nhau. Trường Length chỉ thị độ dài của thông điệp tính theo byte. Trường Content có độ dài lớn hơn một byte chứa các tham số kết hợp với thông điệp.

Bảng 2.1 dưới đây trình bày các kiểu của thông điệp, ý nghĩa của chúng và các tham số được trao đổi. Tóm tắt những gì được trình bày trong Bảng 2.1 và Hình 2.3, sự trao đổi thông điệp có thể nhóm thành bốn giai đoạn. Giai đoạn một được sử dụng để khởi xướng một kết nối logic và để thiết lập khả năng bảo mật sẽ được kết hợp với một phiên cụ thể. Thông thường, sự trao đổi được khởi xướng bởi client người gửi thông điệp ClientHello.

Bảng 2.1: Ý nghĩa các thông điệp trao đổi trong quá trình bắt tay

Thông điệp Hướng Ý nghĩa Các tham số trao đổi Kiểu

HelloRequest SC Thông báo đến client bắt đầu bắt tay. Null chọn Tuỳ

ClientHello CS Thông điệp này khởi đầu sự bắt tay với server.

Version, Client Random, Session ID, CipherSuilte, phương

pháp nén.

Bắt buộc

ServerHello SC Thông điệp này là sự trả lời của server cho ClientHello.

Version, Server Random, Session ID, CipherSuilte, phương pháp nén. Bắt buộc Certificate SC CS

Thông điệp này chứa chứng chỉ của server hay client nếu server có

yêu cầu. Chuỗi chứng chỉ X509 v3 Tuỳ chọn ServerKey Exchang SC

Thông báo đến client

bắt đầu bắt tay. Null

Tuỳ chọn

Giai đoạn hai bao gồm xác thực server bằng cách gửi chứng chỉ server. Một sự trao đổi khoá và một yêu cầu chứng chỉ client có thể cũng xảy ra trong giai đoạn này. Server báo hiệu kết thúc ServerHello bằng cách gửi thông điệp ServerHelloDone. Trong giai đoạn ba, client gửi chứng chỉ của nó (nếu được yêu cầu), trao đổi PreMasterSecret với server và có thể gửi sự xác minh chứng chỉ. Giai đoạn cuối cùng hoàn thành việc thiết lập một kết nối có bảo mật. Client gửi một thông điệp ChangeCipherSpec và bản sao Cipher Spec sắp tới vào Cipher Spec hiện tại. Sau đó, client gửi thông điệp Finished dưới một sơ đồ bảo mật mới. Thông điệp Finished xác nhận rằng sự trao đổi khoá đã thành công. Một vấn đề quan trọng được đề cập là thông điệp ChangeCipherSpec không phải là một phần của giao thức Handshake.

Mỗi lần một phiên được thiết lập, có thể là cần thiết thiết lập một kết nối mới bao gồm thiết lập lại các tham số Client_Random và Server_Random với các thông điệp ClientHello và ServerHello trong khi giữ lại tại cùng thời điểm các thuật toán mã hoá và thuật toán Hash đã chọn. Một xác thực mới được bỏ qua và trái với việc thiết lập một phiên, các thông điệp ClientHello và ServerHello được mã hoá. Client và server thừa nhận sự đồng ý của chúng bằng cách gửi thông điệp ChangeCipherSpec từ mỗi phía và kết thúc việc bắt tay rút gọn với thông điệp Finished. Hình 2.5 trình bày thủ tục thiết lập một kết nối mới một cách chi tiết.

Điều quan trọng cần chú ý là Sesion ID đối với ClientHello trong thiết lập sẽ giống như của phiên gốc. Trong trường hợp Session ID gửi bởi client không có mặt trong server hoặc không đúng hoặc bởi vì phiên này đã được xem là quá hạn, yêu cầu của client bị từ chối và server khởi động một bắt tay đầy đủ để thiết lập một phiên mới.

Hình 2.5: Trao đổi trong khi thiết lập một kết nối mới

ChangeCipherSpec là giao thức đơn giản nhất trong SSL. Nó chỉ gồm một thông điệp dài 1 byte có cùng tên với giao thức. Thông báo này chỉ thị cho giao thức Record bên nhận biết rằng việc mã hoá của các khung (frame) dữ liệu tiếp theo sẽ được thực hiện với CipherSpec và khoá vừa thiết lập.

Giao thức Record chỉ tham dự sau khi truyền thông điệp ChangeCipherSpec. Trong khi thiết lập một phiên, giao thức này bị giới hạn để đóng gói dữ liệu bắt tay và truyền không sửa đổi tới tầng TCP. Trong giai đoạn mã hoá, giao thức này nhận dữ liệu từ các tầng trên (bắt tay, cảnh báo, ChangeCipherSpec và tầng ứng dụng) và truyền dữ liệu này sau khi thực hiện các thao tác sau:

 Phân đoạn dữ liệu thành từng khối với kích thước tối đa 214 byte.

 Nén dữ liệu. (adsbygoogle = window.adsbygoogle || []).push({});

 Tạo ra một bản tóm tắt để khởi tạo MAC và bảo đảm tính toàn vẹn

của thông điệp.

 Mã hoá dữ liệu (tính bảo mật).

Giao thức Record đưa thêm một header 5 byte vào mỗi thông điệp nhận được từ lớp trên. Header được tạo thành từ: Content Type (1 byte), Major Version (1 byte), Minor Version (1 byte) và độ dài nén (2 byte). Content Type chỉ thị kiểu thông điệp dựa theo kiểu gốc của thông điệp (dữ liệu Handshake, ChangeCipherSpec, Alert và Application). Major Version chỉ thị phiên bản chính của SSL khi sử dụng (đối với SSLv3 giá trị này là 3). Minor Version chỉ thị phiên bản phụ của SSL khi sử dụng (đối với SSLv3 giá trị này là 0). Cuối cùng, độ dài nén là độ dài tính theo byte của phân mảnh của bản mã (hoặc phân mảnh nén nếu việc nén được sử dụng), giá trị cực đại của nó có thể là 214 +2048.

Một vấn đề quan trọng cần chú ý đó là không có dấu hiệu đặc biệt được tạo ra giữa một vài ứng dụng có thể sử dụng SSL. Nội dung hoặc dữ liệu mà các ứng dụng này có thể gửi là trong suốt đối với SSL vì SSL chỉ được gửi khi thiết lập một kết nối bảo mật giữa client và server. Hình 2.6 minh hoạ quá trình hoạt động của giao thức Record SSL.

Tại đầu nhận, các hoạt động tương tự nhưng theo trật tự ngược lại là giải mã, xác minh tính toàn vẹn, giải nén và lắp ráp lại. Nếu việc tính toán digest là không giống hệt với bản tóm tắt nhận được, giao thức Record sẽ gọi giao thức Alert để gửi một thông báo lỗi tới bên gửi.

Một phần của tài liệu Xây dựng mạng riêng ảo dựa trên giao thức secure sockets layer (SSL) (Trang 38)