CHƯƠNG 1. NGHIÊN CỨU GIAO THỨC TLS 1. Giới thiệu giao thức TLS 1. Khái niệm Giao thức TLS (Transport Layer Security) là một giao thức bảo mật dữ liệu truyền trên mạng Internet và hoạt động ở tầng giao vận trong kiến trúc mạng TCP/IP.
Lịch sử phát triển Hình 1.1: Lịch sử phát triển giao thức TLS Giao thức TLS được phát triển từ giao thức SSL.1 đưa ra thông tin quá trình phát triển giao thức TLS bao gồm các phiên bản chính như sau: - Phiên bản SSL 1.0 được ra đời năm 1994 phát triển bởi công ty Netscape Communications. Đây là phiên bản đầu tiên của bộ giao thức SSL/TLS nhưng không được công bố do vấn đề bản quyền và chứa điểm yếu liên quan đến vấn đề bảo vệ bí mật. Mục tiêu chính của SSL 1.0 là thiết lập một kênh liên lạc an toàn trên một mạng không an toàn, tuy nhiên vẫn chưa tập trung vào việc bảo vệ tính toàn vẹn dữ liệu. Điểm yếu của giao thức liên quan đến tính xác thực và thiếu tính toàn vẹn, tem thời gian hoặc số thứ tự bí mật nhằm ngăn chặn tấn công dùng lại gói dữ liệu.
- Phiên bản SSL 2.0 là phiên bản đặc tả kỹ thuật đầu tiên được chính thức công bố của bộ giao thức SSL/TLS. Phiên bản này là sản phẩm của quá trình cải tiến 1 liên tục từ phiên bản SSL 1.0 nhưng vẫn còn nhiều điểm yếu như: Giá trị MAC không bao trùm được trường độ dài phần đệm, không có chức năng ký, thiếu quá trình xác thực bắt tay, sử dụng các thuật toán yếu dễ bị tấn công (MD5, RC4) hoặc sử dụng khóa cho nhiều mục đích. - Phiên bản SSL 3.0 giải quyết nhiều lỗ hổng trong các phiên bản trước bằng cách sử dụng một loạt các tính năng và cơ chế mới. Quá trình bắt tay bao gồm các thông báo bổ sung và giao thức mới có tên là ChangeCipherSpec.
Cải tiến tổng thể là giao thức được phát triển mang tính cấu trúc hơn và được thiết kế thành nhiều lớp, các tính năng còn thiếu đã được bổ sung và đã giải quyết những lỗ hổng liên quan tới bảo mật. - Phiên bản TLS 1.0 thực chất là phiên bản SSL 3.1 vì không do công ty Netscape phát triển nữa mà được tiêu chuẩn hóa bởi IETF (Internet Engineering Task Force) nên được đổi tên thành như vậy.0 nâng cấp bao gồm đặc tả chi tiết về hàm giả ngẫu nhiên được sử dụng để dẫn xuất khóa. Chức năng này được sử dụng cho việc mở rộng nguyên liệu khóa và tính toán giá trị tóm lược trong thông báo Finished. - Phiên bản TLS 1.1 là bản cập nhật của TLS 1.0 với một số thay đổi.
Thay đổi rõ ràng nhất là khả năng ngăn chặn các kiểu tấn công liên quan đến chế độ hoạt động CBC của mã khối.1 nghiêm cấm việc sử dụng các hệ mật yếu (DES, RSA với khóa nhỏ hơn 1024 bits) sao cho phù hợp với các yêu cầu về hệ mật được sử dụng trong thực tế. Quá trình ngừng kết nối mà không gửi một thông báo ngắt kết nối thì không thể tái kết nối phiên làm việc đó nữa. - Phiên bản TLS 1.2 là phiên bản có rất nhiều cải tiến so với phiên bản TLS 1. Một trong những cải tiến đó là việc loại bỏ sự tích hợp các hàm băm MD5 và SHA-1 trong hàm sinh số giả ngẫu nhiên (PRF) và thay thế bằng một hàm băm có khóa cụ thể (dựa trên mã khối AES-GCM hoặc AES-CBC).
- Phiên bản TLS 1.3 là phiên bản mới nhất của giao thứ TLS bao gồm nhiều cải tiến về mặt bảo mật so với TLS 1.3 loại bỏ các thuật toán mã hóa yếu như DES, 3DES, đồng thời thêm các thuật toán mã hóa xác thực mới với độ bảo mật cao là AES-CCM, ChaCha20-Poly1305. Chức năng giao thức Mục tiêu chính của giao thức TLS là thiết lập một kênh truyền bảo mật giữa hai đầu mối liên lạc trên mạng Internet. Kênh truyền bảo mật được thiết lập bởi TLS này đảm bảo các dịch vụ an toàn thông tin sau: - Dịch vụ xác thực: đảm bảo tính xác thực của nguồn gốc thông tin và tính chân thực của các bên liên lạc. - Dịch vụ bí mật: đảm bảo tính bí mật của thông tin thông qua việc sử dụng các thuật toán mật mã để mã hóa thông tin khi truyền nhận.
- Dịch vụ toàn vẹn dữ liệu: đảm bảo thông tin không bị sai lệch, thay đổi trái phép trong quá trình truyền nhận. - Dịch vụ chống chối bỏ: các thông tin gửi đi có thể được ký số (tùy chọn) bởi các lược đồ ký số phổ biến hiện nay. Kiến trúc, thành phần TLS 1.3 có kiến trúc rất phức tạp bao gồm 3 giao thức thành phần chính được mô tả chi tiết trong hình 1.2: - Giao thức thành phần Handshake Protocol: được thực thi nhằm thực hiện các chức năng thiết lập kênh truyền hoặc thỏa thuận các tham số an toàn, xác thực các phiên liên lạc. TCP/IP Stack Application TLS 1.3 Layer Handshake Record Alert Protocol Protocol Protocol Transport Internet Network Access Hình 1.2: Kiến trúc của giao thức TLS 3 - Giao thức thành phần Record Protocol: đảm nhiệm chức năng xử lý dữ liệu từ tầng ứng dụng chuyển xuống, cụ thể thực hiện các công việc như mã/giải mã, nén/giải nén, xác thực dữ liệu.
- Giao thức thành phần Alert Protocol: đảm nhiệm chức năng tạo, gửi các thông điệp liên quan tới tình trạng hoạt động giao thức TLS 1. Nguyên lý hoạt động giao thức TLS 1.3 làm việc theo mô hình máy trạm và máy chủ, cụ thể là thiết lập kênh truyền bảo mật giữa hai bên liên lạc này. Kênh truyền bảo mật này được thiết lập thông qua việc thực hiện các giao thức thành phần chính là: Handshake Protocol, Alert Protocol và Record Protocol. Thứ tự triển khai kết nối bảo mật TLS 1.3 sẽ bắt đầu với giao thức Handshake Protocol, sau đó dữ liệu truyền nhận các bên liên lạc xử lý bởi Record Protocol, đồng thời giao thức Alert Protocol sẽ đưa ra các thông báo cảnh báo, lỗi xảy trong suốt phiên kết nối TLS 1.
Giao thức thành phần Handshake Protocol Các thông điệp bắt tay trao đổi khóa Khởi tạo kênh truyền với Handshake Protocol Hình 1.3: Hoạt động TLS 1.3 Handshake Protocol Các bước hoạt động của giao thức Handshake được thực thi chi tiết như sau: 4 - Bước 1: Kênh liên lạc giữa máy trạm và máy chủ được bắt đầu với máy trạm gửi một thông điệp client hello đến máy chủ. Thông điệp này bao gồm các trường như sau: + Trường Version: Trong các phiên bản trước TLS 1.3, trường này được dùng để thỏa thuận phiên bản giao thức và thể hiện phiên bản cao nhất được hỗ trợ bởi máy trạm. Đối với TLS 1.2, giá trị trường này là 0x0303, còn giá trị 0x0304 định danh cho TLS 1. + Trường Random: số nguyên có độ dài 32 byte được tạo ra bởi bộ tạo số giả ngẫu nhiên an toàn.
+ Trường Session ID: số nguyên có độ dài 32 byte chứa giá trị ID phiên của máy trạm, giá trị này không nhất thiết phải tạo ngẫu nhiên nhưng nên là một giá trị không thể đoán trước được. + Trường Cipher Suites: là một danh sách các hệ mật mã đối xứng được hỗ trợ bởi máy trạm, đặc biệt là các thuật toán mật mã sẽ sử dụng trong giao thức thành phần Record Protocol (bao gồm cả độ dài khóa bí mật) và hàm băm được sử dụng cùng HKDF theo thứ tự mức độ ưu tiên giảm dần. Nếu danh sách chứa các bộ mật mã mà máy chủ không nhận biết (không được khai báo) hoặc không hỗ trợ hoặc không muốn sử dụng thì máy chủ phải bỏ qua các bộ mật mã đó và lựa chọn một bộ còn lại để xử lý trong các bước tiếp theo của TLS. + Trường Compression Methods: Trong các phiên bản trước TLS 1.3, trường này sẽ chứa danh sách các phương thức nén được hỗ trợ.
Đối với TLS 1.3, trường này có độ dài 1 byte được đặt bằng 0 (tương ứng với giá trị NULL trong các phiên bản trước). Nếu trường này có giá trị khác 0 thì máy chủ buộc phải hủy bỏ quá trình bắt tay với cảnh báo illegal_parameter (thông số không hợp lệ). Ý nghĩa rằng các thông điệp tiếp theo trong giao thức bắt tay không cần phải nén. + Trường Extensions: máy trạm yêu cầu các tính năng mở rộng từ máy chủ bằng việc gửi dữ liệu trong trường extentions.
Đối với TLS 1.3, việc sử dụng các phần mở rộng là bắt buộc vì các tính năng được chuyển sang phần mở rộng nhằm duy trì tính tương thích của ClientHello với các phiên bản trước của TLS. Máy chủ có thể lựa chọn thực hiện các phần mở rộng này. Tất cả các phiên bản của TLS đều có trường Extentions theo sau trường Compression Methods. Thông báo ClientHello trong TLS 1.3 luôn chứa các phần mở rộng.
Các phần mở rộng được đính kèm các 5 byte sau trường Compression Methods ở cuối ClientHello.3 sẽ thực hiện kiểm tra này đầu tiên và chỉ cho phép thỏa thuận TLS 1.3 nếu tồn tại supported_versions. Nếu thỏa thuận các phiên bản trước TLS 1.3, máy chủ phải kiểm tra xem thông báo ClientHello có chứa dữ liệu hoặc chứa phần mở rộng hợp lệ với no data sau trường Compression Methods hay không. Nếu không thì phải hủy quá trình bắt tay với cảnh báo decode-error. Trong trường hợp máy trạm yêu cầu tính năng bổ sung bằng cách sử dụng phần mở rộng và nếu tính năng này không được cung cấp bởi máy chủ thì máy trạm có thể hủy quá trình bắt tay.
Sau khi gửi ClientHello, máy trạm sẽ đợi thông báo phản hồi ServerHello hoặc HelloRetryRequest từ máy chủ. - Bước 2: Máy chủ gửi lại thông điệp ServerHello cho máy trạm để phản hồi lại thông điệp ClientHello trong bước 1. Thông điệp này chứa các thông số mật mã đã chấp thuận dựa trên gói ClienHello, cụ thể bao gồm các trường như sau: + Trường Version: trường này tương tự như trong gói ClientHello. + Trường Random: số nguyên có độ dài 32 byte được tạo bởi bộ tạo số giả ngẫu nhiên an toàn.
+ Trường Session ID: số nguyên có độ dài 32 byte chứa giá trị giống với Session ID của máy trạm gửi trong gói ClientHello. Nếu máy trạm nhận được ServerHello chứa Session ID có giá trị khác với Session ID mà đã gửi trong ClientHello thì máy trạm phải hủy quá trình bắt tay với cảnh báo illegal_parameter. + Trường Cipher Suite: chứa một bộ thuật toán mật mã duy nhất được chọn bởi máy chủ từ danh sách bộ thuật toán mật mã (Cipher Suite) của ClientHello. Nếu máy trạm nhận được một bộ thuật toán mật mã không được cung cấp trong danh sách mà nó đã gửi thì máy trạm phải hủy quá trình bắt tay với cảnh báo illegal_parameter.