Thuật toán mật mã trong TLS 1.3

17:27 | 15/11/2022

Giao thức SSL/TLS được sử dụng để bảo mật kênh truyền cho rất nhiều dịch vụ mạng hiện nay như: dịch vụ Web, Email, Database, VoIP... TLS 1.3 là phiên bản mới nhất của giao thức này với nhiều ưu điểm như tốc độ nhanh và độ an toàn cao hơn so với các phiên bản trước [1]. Bài viết này sẽ trình bày chi tiết về cách thức hoạt động và thuật toán mật mã được sử dụng trong TLS 1.3.

GIỚI THIỆU VỀ GIAO THỨC TLS 1.3

TLS 1.3 được công bố trong RFC 8446 vào năm 2018 [2]. Giao thức này hoạt động tại tầng vận tải trong mô hình truyền thông TCP/IP, giúp thiết lập một kênh truyền bảo mật giữa hai bên liên lạc mô hình mạng Client/Server. TLS 1.3 có kiến trúc bao gồm 3 giao thức chính: giao thức bắt tay (Handshake protocol), giao thức bản ghi (Record protocol), giao thức cảnh báo (Alert protocol).

- Giao thức bắt tay: Xác thực các bên, trao đổi về tham số, chế độ mã hóa và thiết lập mầm khóa (tạo ra khóa truyền thông dùng để mã hóa dữ liệu ở giao thức bản ghi). Giao thức bắt tay được thiết kế để chống lại sự giả mạo; kẻ tấn công chủ động không thể ép buộc bên kia thiết lập các tham số khác.

- Giao thức bản ghi: Sử dụng các tham số được thiết lập bởi giao thức bắt tay để bảo vệ dữ liệu giữa 2 bên truyền thông. Giao thức này chia lưu lượng thành các bản ghi, mỗi bản ghi được mã hóa độc lập bởi thuật toán mã hóa với khóa phiên truyền thông.

- Giao thức cảnh báo: Trong phiên liên lạc TLS 1.3 được thiết lập và thực thi mọi vấn đề phát sinh về trạng thái, lỗi kết nối, sai thông số được thông báo dưới dạng các thông điệp bởi giao thức này cho các bên truyền thông.

QUÁ TRÌNH HOẠT ĐỘNG CỦA GIAO THỨC TLS 1.3

TLS 1.3 tiến hành thiết lập kênh truyền bảo mật giữa các bên truyền thông trong Hình 1 với giao thức bắt tay gồm 3 bước chính như sau:

Bước 1: Phía máy trạm gửi gói Client Hello bao gồm 5 trường bắt buộc, trong đó cần chú ý các trường sau:

- Supported Cipher Suites: Là định danh các bộ thuật toán mã hóa có xác thực với dữ liệu liên kết mà bên máy trạm hỗ trợ.

- Key_share: Đây chính là trường lưu trữ giá trị khóa công khai của máy trạm dùng để cho thỏa thuận một khóa chủ cho phiên liên lạc này giữa máy trạm và máy chủ.

Hình 1. Hoạt động giao thức TLS 1.3

Bước 2: Phía máy chủ gửi lại gói Server Hello bao gồm 6 trường bắt buộc, trong đó cần chú ý các trường sau:

- Selected Cipher Suite: Là định danh bộ thuật toán mã hóa có xác thực phía máy chủ chọn sẽ dùng để mã hóa dữ liệu phiên liên lạc giữa máy trạm và máy chủ.

- Key_share: Đây chính là trường lưu trữ giá trị khóa công khai của máy chủ dùng để cho thỏa thuận một khóa chủ cho phiên liên lạc này giữa máy trạm và máy chủ.

- Certificate: Đây là trường mở rộng được bảo mật có nội dung là chứng thư số của máy chủ cung cấp cho máy trạm để kiểm tra xác thực máy chủ đang liên lạc.

Bước 3: Kết thúc quá trình bắt tay với thông điệp Finished và bắt đầu thực hiện truyền nhận giao thức tầng ứng dụng. Sau khi thực hiện xong giao thức bắt tay, TLS 1.3 sẽ thực hiện giao thức bản ghi để xử lý phân mảnh dữ liệu gửi từ tầng ứng dụng chuyển xuống trong các bước 4, 5 như trên Hình 1.

- Các phân mảnh dữ liệu được mã hóa bởi bộ thuật toán mật mã đã thỏa thuận giữa máy trạm và máy chủ trong quá trình bắt tay trước đó.

- Khóa phiên mã hóa sử dụng được dẫn xuất từ khóa bí mật đã thỏa thuận giữa hai bên liên lạc trong quá trình bắt tay.

THUẬT TOÁN MẬT MÃ SỬ DỤNG TRONG TLS 1.3

Giao thức thỏa thuận khóa

Trong [2] quy định về giao thức/phương thức thỏa thuận khóa sử dụng trong TLS 1.3. Cụ thể, phương thức thỏa thuận khóa chính là giao thức trao đổi khóa Diffie-Hellman trên trường hữu hạn và trên đường cong Elliptic: - Giao thức ECDHE (Elliptic Curve Diffie-Hellman Ephemeral): Giao thức Diffie-Hellman trên đường cong Elliptic có 2 dạng chính là: đường cong Ellitptic dạng Weierstrass (có số modulo kích cỡ > 256 bit như secp256r1, secp384r1, secp512r1) và trên đường cong Elliptic dạng Edward (như X25519, X448).

- Giao thức FFDHE (Finite Field Diffie-Hellman Ephemeral): Giao thức Diffie-Hellman trên trường hữu hạn với số modulo kích cỡ từ 2048 bit tới 8192 bit.

Theo cấu hình mặc định thì ECDHE sẽ được sử dụng để thiết lập TLS 1.3. Hoạt động chung của giao thức này được mô tả trong Hình 2.

Hình 2. Hoạt động giao thức thỏa thuận khóa ECDHE

Giao thức ECDHE được thực hiện theo ba bước chính:

Bước 1: Diễn ra tại máy trạm

- Máy trạm lựa chọn thông số đường cong, ví dụ SECP256r1 với điểm sinh G có bậc n đi kèm.

- Sinh giả ngẫu nhiên khóa riêng máy trạm là số nguyên a: ClientPrivKey = a với 1< a < n. Tính khóa công khai ClientPubKey = a*G (phép nhân vô hướng số nguyên a với điểm sinh G). - Gửi giá trị ClientPubKey và thông tin đường cong cho phía máy chủ.

Bước 2: Diễn ra tại phía máy chủ

- Máy chủ nhận thông tin đường cong sẽ lấy tham số đường cong này trong cơ sở dữ liệu có sẵn.

- Sinh giả ngẫu nhiên khóa riêng máy chủ là số nguyên b: ServerPrivKey = b với 1< b < n. Tính khóa công khai ServerPubKey = b*G.

- Từ giá trị ClientPubKey nhận được, máy chủ tính được giá trị khóa bí mật chia sẻ chung: SharedKey = ClientPubkey*b = a*G*b = a*b*G. -Gửi giá trị ServerPubKey tới phía máy trạm.

Bước 3: Diễn ra tại bên máy trạm

- Từ giá trị ServerPubKey nhận được, máy trạm tính được giá trị khóa bí mật chia sẻ chung: SharedKey = ServerPubkey*a = b*G*a = a*b*G.

- Như vậy cả máy trạm và máy chủ đã thỏa thuận được một khóa bí mật chia sẻ chung. Trong TLS 1.3 cần chú ý đến các giá trị khóa sau:

- Khóa công khai phía máy trạm chính là giá trị KeyShare gửi trong gói ClientHello trong giao thức bắt tay hay Key_Share = ClientPubKey = a*G.

- Khóa công khai phía máy chủ chính là giá trị KeyShare gửi trong gói ServerHello trong giao thức bắt tay hay Key_Share = ServerPubKey = b*G.

- Ngoài ra, TLS 1.3 còn hỗ trợ phương thức thỏa thuận khóa khác là: Chia sẻ khóa trước (PSK) và kết hợp giao thức thỏa thuận khóa ECDHE.

Thuật toán ký số

Nhận thấy rằng các giao thức thỏa thuận khóa ECDHE hay FFDHE đều không hỗ trợ cơ chế xác thực các bên truyền thông. Để đảm bảo vấn đề xác thực này thì TLS 1.3 sử dụng chứng thư số (Certificate trong các gói ServerHello trong quá trình bắt tay) của các bên truyền thông được cấp bởi trung tâm chứng thực bên thứ ba tin cậy.  Để thực hiện kiểm tra nội dung chứng thư số và xác thực được thì TLS 1.3 phải hỗ trợ các thuật toán ký số. TLS 1.3 đã loại bỏ các thuật toán ký số không an toàn trong TLS 1.2 và chỉ hỗ trợ các thuật toán ký số có độ bảo mật tốt như sau:

- RSA (PKCS#1 v2.0): Có độ dài khóa lớn hơn 2048 bit.

- ECDSA: Thuật toán ký số trên đường cong Elliptic dạng Weierstrass với độ dài số modulo lớn hơn 224 bit.

- EdDSA: Thuật toán ký số trên đường cong Elliptic dạng Edward với hai phiên bản chính là Ed25519 và Ed448.

Bộ thuật toán mã hóa và hàm băm

Sau quá trình bắt tay thì cả hai phía máy trạm và máy chủ sẽ thỏa thuận được một bộ thuật toán mã hóa. Bộ thuật toán mã hóa này sử dụng để mã hóa gói tin tầng ứng dụng gửi nhận giữa hai bên liên lạc và được ký hiệu: TLS_AEADCipherMode_HashAlgorithm

Theo Hình 2, các tham số trong bộ thuật toán mật mã được chú thích cụ thể như sau:

-TLS: Là tên giao thức.

- AEADCipherMode: Là thuật toán mã hóa có xác thực với dữ liệu liên kết (Authenticated Encryption with Associated Data - AEAD).

- HashAlgorithm: Là hàm băm mật mã được sử dụng đảm bảo tính toàn vẹn các gói tin trong quá trình bắt tay và trong kiến trúc các hàm dẫn xuất khóa HKDF (HMAC-based Extract-and-Expand Key Derivation Function) được sử dụng để sinh khóa cho các thuật toán mật mã sử dụng trong TLS 1.3.

+Hàm HKDF: Là hàm dẫn xuất khóa có kiến trúc HMAC (mã xác thực thông báo dựa trên hàm băm) có chức năng sinh một hoặc nhiều khóa phiên truyền thông cho TLS 1.3 [3].

Trong [2] quy định TLS 1.3 chỉ sử dụng 5 bộ thuật toán mã hóa sau:

- TLS_AES_128_GCM_SHA256: Với thuật toán AEAD là mã khối AES 128 bit trong chế độ xác thực GCM; hàm băm SHA256.

- TLS_AES_256_GCM_SHA384: Với thuật toán AEAD là mã khối AES 256 bit trong chế độ xác thực GCM; hàm băm SHA384.

- TLS_CHACHA20_POLY1305_ SHA256: Với thuật toán AEAD là mã dòng có xác thực CHACHA20_ POLY1305; hàm băm SHA256.

- TLS_AES_128_CCM_SHA256: Với thuật toán AEAD là mã khối AES 128 bit trong chế độ xác thực CCM; hàm băm SHA256.

- TLS_AES_128_CCM_8_SHA256: Với thuật toán AEAD là mã khối AES 128 bit trong chế độ xác thực CCM8; hàm băm SHA256.

Các thuật toán AEAD là các thuật toán mã hóa khóa bí mật, vì vậy phải cần một khóa phiên truyền thông bí mật giống nhau ở cả phía máy trạm và máy chủ để mã hóa và giải mã dữ liệu phiên truyền thông. Khóa phiên truyền thông này được sinh từ hàm dẫn xuất khóa HKDF với mầm khóa chính là khóa bí mật chia sẻ chung Shared_Key đã thiết lập được thông qua giao thức Diffie-Hellman trong quá trình bắt tay.

ĐỘ AN TOÀN CỦA CÁC CÁC THUẬT TOÁN VÀ THAM SỐ MẬT MÃ TRONG TLS 1.3

Để xem xét độ mạnh các thuật toán mật mã trong TLS 1.3 thì có thể tham khảo khuyến nghị của NIST (Hình 3) trong việc lựa chọn kích thước tham số cho các thuật toán mật mã cơ bản tương ứng thời điểm sử dụng [4]. Trong TLS 1.3 cần quan tâm đến độ an toàn của giao thức thỏa thuận khóa và bộ thuật toán mã hóa.

Hình 3. Khuyến nghị NIST về độ bảo mật và thời gian sử dụng các thuật toán mật mã cơ bản năm 2020

- Giao thức thỏa thuận khóa có độ an toàn phụ thuộc độ dài tham số modulo p. Như vậy, với các giao thức thỏa thuận khóa trong TLS 1.3 đã trình bày trong mục 3 thì theo khuyến nghị sẽ có độ an toàn theo tham số modulo p từ 128 đến 256 bit.

- Các bộ thuật toán mã hóa được thiết kế với các thành phần là các thuật toán có độ an toàn ngang nhau. Vì vậy, xem xét độ an toàn thuật toán mã khối AES và mã dòng CHACHA20-POLY1305 thì độ an toàn của các bộ thuật toán này theo khuyến nghị tương đương từ 128 bit tới 258 bit.

Với độ an toàn mức 112 bit tới 256 bit thì cũng theo khuyến nghị mức bảo mật này có thể sử dụng an toàn cho tới năm 2030.

KẾT LUẬN

Với việc sử dụng bộ thuật toán mã hóa có xác thực và lược đồ ký số mới (Ed25519 và Ed448) thì TLS 1.3 có độ bảo mật tốt trên khía cạnh mật mã đến năm 2030. Việc cập nhật TLS 1.3 cho các dịch vụ mạng hiện nay cho các doanh nghiệp, tổ chức và cá nhân là thiết yếu và cần thực hiện nhanh chóng để đảm bảo an toàn cho các dịch vụ này.

TÀI LIỆU THAM KHẢO

1. Andy Brodie: Overview of TLS v1.3 - What’s new, what’s removed and what’s changed? OWASP Security, London, 2018.

2. E. Rescorla: The Transport Layer Security (TLS) Protocol Version 1.3, IETF, RFC 8446, 2018.

3. Krawczyk, Eronen: NIST: HMAC-based Extract-andExpand Key Derivation Function (HKDF), IETF, 2010.

4. NIST: Cryptographic Key Length Recommendation, 2020.