Tải bản đầy đủ (.pdf) (74 trang)

Nghiên cứu về giao thức TLS 1.3 và triển khai thực nghiệm

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (2.63 MB, 74 trang )

BỘ THƠNG TIN VÀ TRUYỀN THƠNG
HỌC VIỆN BƯU CHÍNH VIỄN THÔNG
---------------------------

ĐỒ ÁN TỐT NGHIỆP ĐẠI HỌC

ĐỀ TÀI:

NGHIÊN CỨU, XÂY DỰNG
GIẢI PHÁP TRUYỀN TIN CÓ BẢO MẬT
MẠNG NỘI BỘ VỚI TLS 1.3

Giảng viên hướng dẫn
Học viên thực hiện
Lớp
Khóa
Chuyên ngành

: TS. Nguyễn Mạnh Quân
: Nguyễn Quốc Bảo
: K26
: 26
: Công nghệ thông tin

Hà Nội, 2022


BỘ THƠNG TIN VÀ TRUYỀN THƠNG
HỌC VIỆN BƯU CHÍNH VIỄN THÔNG
---------------------------


ĐỒ ÁN TỐT NGHIỆP ĐẠI HỌC

ĐỀ TÀI:

NGHIÊN CỨU, XÂY DỰNG
GIẢI PHÁP TRUYỀN TIN CÓ BẢO MẬT
MẠNG NỘI BỘ VỚI TLS 1.3

Giảng viên hướng dẫn
Học viên thực hiện
Lớp
Khóa
Chuyên ngành

: TS. Nguyễn Mạnh Quân
: Nguyễn Quốc Bảo
: K26
: 26
: Công nghệ thông tin

Hà Nội, 2022


LỜI CẢM ƠN
Em xin gửi lời cảm ơn sự quan tâm, giúp đỡ của các thầy cô trong Khoa công
nghệ thông tin, các thầy cô trong Học viện. Đặc biệt là thầy giáo, Tiến sĩ Nguyễn
Mạnh Quân đã trực tiếp hướng dẫn và giúp đỡ em rất nhiều trong suốt q trình
nghiên cứu và hồn thành đồ án này.
Do trình độ kiến thức có hạn, thời gian ngắn cũng như khả năng tổng hợp, xử
lý tài liệu còn hạn chế nên đồ án cịn nhiều thiếu sót. Em rất mong nhận được sự

quan tâm góp ý của các thầy, cơ và các bạn để đồ án được hoàn thiện hơn.
Em xin chân thành cảm ơn!

i


LỜI CAM ĐOAN
Em xin cam đoan bản đồ án này là do em tự nghiên cứu dưới sự hướng dẫn của
thầy giáo TS. Nguyễn Mạnh Quân.
Để hoàn thành đồ án này, em chỉ sử dụng tài liệu đã được ghi trong tài liệu
tham khảo, ngồi ra khơng sử dụng bất kỳ tài liệu nào khác mà không được ghi.
Nếu sai, em xin chịu mọi hình thức kỷ luật theo quy định của Học viện.
Hà Nội, ngày

tháng năm 2022

Học viên thực hiện

ii


MỤC LỤC
LỜI CẢM ƠN ........................................................................................................... i
LỜI CAM ĐOAN .................................................................................................... ii
MỤC LỤC ............................................................................................................... iii
DANH MỤC TỪ VIẾT TẮT.................................................................................. v
DANH MỤC HÌNH ẢNH ...................................................................................... vi
LỜI NÓI ĐẦU ...................................................................................................... viii
CHƯƠNG 1. NGHIÊN CỨU GIAO THỨC TLS 1.3 .......................................... 1
1.1. Giới thiệu giao thức TLS 1.3 ............................................................... 1

1.1.1. Khái niệm ...................................................................................... 1
1.1.2. Lịch sử phát triển ........................................................................... 1
1.1.3. Chức năng giao thức...................................................................... 3
1.1.4. Kiến trúc, thành phần .................................................................... 3
1.2. Nguyên lý hoạt động giao thức TLS 1.3 .............................................. 4
1.2.1. Giao thức thành phần Handshake Protocol ................................... 4
1.2.2. Giao thức thành phần Record Protocol ....................................... 10
1.2.3. Giao thức thành phần Alert Protocol........................................... 12
1.3. Các thuật toán mật mã trong giao thức TLS 1.3 ................................ 14
1.3.1. Thuật tốn mã hóa xác thực với dữ liệu liên kết ......................... 15
1.3.2. Thuật toán hàm băm .................................................................... 16
1.3.3. Thuật toán ký số .......................................................................... 16
1.3.4. Thuật toán và giao thức trao đổi khóa ......................................... 16
1.4. Cơ chế chống tấn cơng phát lại .......................................................... 17
1.5. Quản lý khóa trong giao thức TLS 1.3............................................... 18
1.6. Những cải tiến của TLS 1.3 so với phiên bản TLS 1.2...................... 19
1.7. Kết luận chương 1 .............................................................................. 21

iii


CHƯƠNG 2. THIẾT KẾ GIẢI PHÁP TRUYỀN TIN TRONG MẠNG LAN
SỬ DỤNG GIAO THỨC TLS 1.3 ....................................................................... 22
2.1. Sơ đồ hoạt động chung giải pháp truyền tin trong mạng LAN sử dụng
TLS 1.3 ................................................................................................................ 22
2.2. Những chức năng chính phần mềm truyền tin ................................... 23
2.3. Thiết kế mô đun cài đặt giải pháp truyền tin ..................................... 23
2.3.1. Thiết kế mô đun thực hiện kết nối mạng ..................................... 23
2.3.2. Thiết kế mô đun về giao thức thành phần Record Protocol ........ 27
2.3.3. Thiết kế mơ đun thuật tốn mã hóa dữ liệu ................................. 30

2.3.4. Thiết kế mô đun chế độ mã hóa có xác thực ............................... 32
2.3.5. Thiết kế mơ đun về Alert Protocol .............................................. 36
2.4. Kết luận chương 2 .............................................................................. 37
CHƯƠNG 3. CÀI ĐẶT THỰC NGHIỆM TRUYỀN TIN CÓ BẢO MẬT
TRONG MẠNG LAN VỚI GIAO THỨC TLS 1.3 ........................................... 38
3.1. Phân tích thiết kế hệ thống phần mềm ............................................... 38
3.1.1. Biểu đồ Use case ......................................................................... 38
3.1.2. Biểu đồ tuần tự ............................................................................ 39
3.2. Thuyết minh mã nguồn mở một số mô đun trong phần mềm............ 42
3.3.1. Mã nguồn mô đun thực hiện kết nối mạng.................................. 44
3.3.2. Mã nguồn thực thi kết nối TLS 1.3 ............................................. 48
3.3. Hoàn thiện, thử nghiệm và phân tích hoạt động phần mềm .............. 55
3.3.1. Hồn thiện, thử nghiệm chương trình ......................................... 55
3.3.2. Phân tích luồng lưu lượng phần mềm bằng Wireshark ............... 59
3.4. Kết luận chương ................................................................................. 61
KẾT LUẬN ............................................................................................................ 62
TÀI LIỆU THAM KHẢO .................................................................................... 63
XÁC NHẬN NƠI CHẾ BẢN IN ẤN ................................................................... 64

iv


DANH MỤC TỪ VIẾT TẮT
Từ viết tắt

Tiếng Anh

Tiếng Việt

AEAD


Authenticated Encryption with Mã hóa xác thực với dữ liệu
Additional Data
liên kết

AES

Advanced Encryption Standard

Tiêu chuẩn mã hóa dữ liệu tiên
tiến của Hoa Kỳ năm 2001

CBC

Cipher Block Chaining

Chế độ xích mã khối

CCM

Counter with Cipher Block Chế độ bộ đếm kết hợp mã xác
Chaining
Message thực CBC
Authentication Code

DH

Diffle Hellman Key Exchange

ECDHE


Elliptic-curve Diffie–Hellman Trao đổi khóa Diffle Hellman
Diffie-Hellman Ephemeral
cải tiến trên đường cong
Elliptic

ECDSA

Elliptic Curve Digital Signature Thuật toán ký số trên đường
Algorithm
cong Elliptic dạng Weirstrass

HKDF

Key Derivation Function (KDF) Hàm dẫn xuất khóa dựa trên
Based on HMAC Message mã xác thực thông điệp HMAC
Authentication Code

GCM

Galois/Counter Mode

Chế độ mã hóa xác thực trường
Galois

MAC

Message Atuthentication Code

Mã xác thực thơng báo


NIST

National Institure of Standard Viện tiêu chuẩn công nghệ
and Technology
Quốc gia Hoa kỳ

PRF

Pseudorandom Function

Hàm sinh số giả ngẫu nhiên

SSL

Secure Socket Layer

Giao thức bảo mật tầng giao
vận

TLS

Transport Layer Security

Giao thức bảo mật dữ liệu tầng
giao vận
v

Trao đổi khóa Diffle Hellman



DANH MỤC HÌNH
Hình 1.1: Lịch sử phát triển giao thức TLS .................................................... 1
Hình 1.2: Kiến trúc của giao thức TLS........................................................... 3
Hình 1.3: Hoạt động TLS 1.3 Handshake Protocol ........................................ 4
Hình 1.4: Bộ thuật toán mật mã sử dụng trong TLS 1.3 .............................. 14
Hình 1.5: Ký số trong Server Hello .............................................................. 17
Hình 1.6: Quản lý khóa trong TLS 1.3 ......................................................... 18
Hình 1.7: Quá trình bắt tay của TLS 1.2. và TLS 1.3................................... 20
Hình 2.1: Sơ đồ thiết kế chung các mơ đun hoạt động giao thức TLS 1.3... 22
Hình 2.2: Mơ hình lập trình socket TCP....................................................... 24
Hình 2.3: Lược đồ hoạt động giao thức X25519 .......................................... 25
Hình 2.4: Thuật tốn Montegomery Ladder ................................................. 26
Hình 2.5: Hàm tính tốn LADDERSTEP ..................................................... 27
Hình 2.6: Xử lý gói tin tại bên gửi bởi Record Protocol .............................. 28
Hình 2.7: Xử lý gói tin tại bên nhận bởi Record Protocol ............................ 28
Hình 2.8: Hoạt động mã khối AES ............................................................... 30
Hình 2.9: Mơ hình hoạt động của thuật tốn Chacha20 ............................... 31
Hình 2.10: Word đầu vào của Chacha20 ...................................................... 32
Hình 2.11: Phép biến đổi QUARTERROUND ............................................ 32
Hình 2.12: Q trình mã hóa của mã khối trong chế độ GCM..................... 33
Hình 2.13: Quá trình giải mã của mã khối trong chế độ GCM .................... 34
Hình 2.14: Hoạt động mã khối trong chế độ CCM ...................................... 35
Hình 2.15: Quá trình tính tốn của cơ chế Poly1305 ................................... 36
Hình 2.16: Tính tốn thẻ xác thực trong Poly1305 ...................................... 36
Hình 2.17: Xây dựng mơ đun Alert Protocol................................................ 37
Hình 3.1: Use case tổng quát ........................................................................ 38
Hình 3.2: Phân rã chức năng Client .............................................................. 38
vi



Hình 3.3: Phân rã chức năng Server ............................................................. 39
Hình 3.4: Mơ hình truyền tin P2P ................................................................. 39
Hình 3.5: Biểu đồ tuần tự quá trình hoạt động của hệ thống mạng sử dụng
phần mềm truyền tin có bảo mật TLS 1.3 ............................................................... 41
Hình 3.6: Thư viện mật mã BoringSSL ........................................................ 42
Hình 3.7: Mã nguồn các thuật toán mật mã trong thư mục crypto ............... 43
Hình 3.8: Các tập tin header thuật tốn mật mã trong thư mục include ....... 43
Hình 3.9: Các tập tin header thuật toán mật mã trong thư mục include ....... 44
Hình 3.10: Phần mềm chạy bên phía Client ................................................. 55
Hình 3.11: Phần mềm chạy bên phía Server................................................. 56
Hình 3.12: Tùy chọn list_file được thực thi tại phía Client .......................... 57
Hình 3.13: Danh mục tập tin chia sẻ tại phía Server .................................... 57
Hình 3.14: Tập tin chia sẻ tại phía Server .................................................... 58
Hình 3.15: Thực hiện sao chép tập tin ThanhBien_K26.txt tại phía Client . 58
Hình 3.16: Thực hiện sao chép tập tin ThanhBien_K26.txt tại phía Server 58
Hình 3.17: Sao chép thành công tập tin ThanhBien_K26.txt từ Server ....... 58
Hình 3.18: Tập tin mới nhận chia sẻ tại Client ............................................. 59
Hình 3.19: Luồng lưu lượng thơng tin vận chuyển giữa Server và Client ... 59
Hình 3.20: Gói tin Client Hello .................................................................... 60
Hình 3.21: Gói tin có nội dung thơng điệp được mã hóa gửi tới Server ...... 60
Hình 3.22: Dữ liệu kênh truyền được mã hóa sau giai đoạn bắt tay TLS 1.3
................................................................................................................................. 61

vii


LỜI NÓI ĐẦU
Mạng Internet ngày nay được ứng dụng sâu rộng vào cuộc sống của con người
như hội họp, học tập trực tuyến, thương mại điện tử, ngân hàng, tài chính, chính phủ

điện tử... Lượng thơng tin được chia sẻ và trao đổi trên mạng ngày càng lớn, trong
đó có rất nhiều thông tin nhạy cảm, quan trọng của người dùng. Do đó mơi trường
Internet vơ hình chung lại là nơi cho những kẻ xấu lợi dụng để tấn công khai thác
những dữ liệu quan trọng hay thực hiện những mục đích trục lợi hay phá hoại bất
hợp pháp. Do vậy nhu cầu cấp thiết đặt ra là cần có những giải pháp bảo vệ thông
tin nhạy cảm, quan trọng được truyền trong môi trường mạng.
Để bảo vệ thông tin truyền trên hệ thống mạng, chúng ta có thể can thiệp mật
mã vào một trong bốn tầng là tầng ứng dụng, tầng vận chuyển, tầng mạng, tầng truy
cập mạng của bộ giao thức TCP/IP - bộ giao thức nền tảng của Internet. Trong đó,
giải pháp sử dụng giao thức SSL/TLS để thiết lập các kênh truyền tin an toàn trên
Internet là giải pháp được sử dụng rộng rãi và hiệu quả. Khi đó, dữ liệu trên kênh
liên lạc sẽ được mã hóa và xác thực đảm bảo được sự an toàn.
TLS 1.3 là phiên bản mới nhất của giao thức SSL/TLS với nhiều ưu điểm về
tốc độ nhanh và độ an toàn cao hơn. Việc nghiên cứu giao thức TLS 1.3 chuyên sâu
về cả lý thuyết và thực hành triển khai thực tế để cập nhật, áp dụng trong các sản
phẩm mật mã và ATTT là rất cần thiết. Vì vậy em đã lựa chọn và thực hiện đề tài
“Nghiên cứu, xây dựng giải pháp truyền tin có bảo mật mạng nội bộ với TLS 1.3”
làm đồ án tốt nghiệp.

viii


CHƯƠNG 1. NGHIÊN CỨU GIAO THỨC TLS 1.3
1.1. Giới thiệu giao thức TLS 1.3
1.1.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.
1.1.2. 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. Hình 1.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 tồ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 tồ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 tồ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 tố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. Q 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. TLS 1.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 ngun liệu khóa và tính tố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. TLS 1.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ế. Q 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.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.2. TLS 1.3 loại bỏ các thuật tốn mã hóa yếu
như DES, 3DES, đồng thời thêm các thuật tốn mã hóa xác thực mới với độ bảo mật
cao là AES-CCM, ChaCha20-Poly1305.

2


1.1.3. 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 tồ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 tốn mật mã để mã hóa thơng tin khi truyền nhận.
- Dịch vụ tồ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.

1.1.4. 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
Protocol

Record
Protocol

Alert
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.3.
1.2. Nguyên lý hoạt động giao thức TLS 1.3
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.3.
1.2.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.3.
+ 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 tồn.
+ Trường Session ID: số ngun 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ể đố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ỏ q 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. Các máy chủ TLS 1.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 q 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 tố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.
+ Trường Compression Methods: số nguyên có độ dài 1 byte và được đặt mặc
định là giá trị 0.
+ Trường Extensions: chứa một danh sách các phần mở rộng. ServerHello phải
chứa các phần mở rộng được yêu cầu trong gói ClientHello để thiết lập thuộc tính
mật mã và thỏa thuận khác cho phiên liên lạc. Thông báo ServerHello trong TLS 1.3
cũng buộc phải chứa phần mở rộng supported_versions.
Các nội dung trong trường Extensions
6



- Máy trạm gửi yêu cầu phần mở rộng của nó trong ClientHello và máy chủ
tiến hành phản hồi lại trong các thơng báo ServerHello, HelloRetryRequest,
EncryptesExtensions và Certificate.
Khi có nhiều phần mở rộng khác nhau cùng xuất hiện thì chúng có thể nằm ở
bất kỳ vị trí nào trong trường Extensions, riêng pre_shared key (khóa chia sẻ trước)
buộc phải là phần mở rộng cuối cùng trong danh sách của ClientHello.
Bảng 1.1 dưới đây liệt kê các nội dung của phần mở rộng có thể xuất hiện và
chỉ ra các thơng báo chứa phần mở rộng tương ứng trong TLS 1.3:
Bảng 1.1: Danh sách các nội dung phần mở rộng và thông điệp gắn vào
Phần mở rộng

Xuất hiện trong thông báo

Server_name

ClientHello, EncryptedExtensions

Max_fragment_length

ClientHello, EncryptedExtensions

Status_request

ClientHello, CertificateRequest, Certificate

Supported_groups

ClientHello, EncryptedExtensions


Signature_algorithms

ClientHello, CertificateRequest

Use_srtp

ClientHello, EncryptedExtensions

Heartbeat

ClientHello, EncryptedExtensions

Application_layer_protocol_neg
otiation

ClientHello, EncryptedExtensions

Signed_certificate_timestamp

ClientHello, CertificateRequest, Certificate

Client_certificate_type

ClientHello, EncryptedExtensions

Server_certificate_type

ClientHello, EncryptedExtensions

Padding


ClientHello

Key_share

ClientHello, ServerHello, HelloRetryRequest

7


Pre_shared_key

ClientHello, ServerHello

Psk_key_exchange_modes

ClientHello

Early_data

ClientHello,
NewSessionTicket

Cookie

ClientHello, HelloRetryRequest

Supported_versions

ClientHello, ServerHello, HelloRetryRequest


Certificate_authorities

ClientHello, CertificateRequest

Oid_filters

CertificateRequest

Post_handshake_auth

ClientHello

Signature_algorithms_cert

ClientHello, CertificateRequest

EncryptedExtensions,

Ý nghĩa một số nội dung trong trường Extensions
- Supported_versions
+ Phần mở rộng Supported_versions được máy trạm sử dụng để chỉ ra các
phiên bản TLS hỗ trợ, và máy chủ sử dụng để chỉ ra phiên bản mà TLS được chọn
để sử dụng.
+ Supported_versions chứa một danh sách các phiên bản được hỗ trợ theo thứ
tự ưu tiên từ cao đến thấp. Trường hợp Supported_versions khơng xuất hiện trong
ClientHello, thì máy chủ sẽ chọn TLS 1.2 ngay cả khi trường Version của
ClientHello là 0x0304 hoặc máy chủ có thể hủy bỏ bắt tay khi nhận được ClientHello
với trường Version là 0x0304. Trường hợp Supported_versions có xuất hiện trong
ClientHello, thì máy chủ sẽ khơng phải sử dụng giá trị Version để thỏa thuận phiên

bản giao thức mà chỉ cần sử dụng phần mở rộng Supported_versions để xác định thứ
tự thỏa thuận ưu tiên. Máy chủ buộc phải chọn duy nhất một phiên bản TLS xuất
hiện trong Supported_versions.
+ Nếu máy chủ chọn thỏa thuận là các phiên bản trước của TLS 1.3 thì sẽ phải
thiết lập trường Version trong ServerHello và không phải gửi Supported_versions.
Mặt khác, nếu máy chủ thỏa thuận TLS 1.3 thì sẽ buộc phải gửi Supported_versions
8


chứa giá trị phiên bản được chọn là 0x0304. Nhưng trong trường Version thì máy
chủ buộc phải thiết lập thành giá trị 0x0303 tức TLS 1.2. Khi nhận được ServeHello,
máy trạm buộc phải kiểm tra phần mở rộng Supported_versions trước rồi mới tiếp
tục xử lý các phần còn lại của thông báo ServerHello. Nếu phần mở rộng này tồn tại,
máy trạm buộc phải bỏ qua giá trị ServerHello.Version và chỉ sử dụng duy nhất
Supported_versions để xác định phiên bản được chọn. Nếu Supported_versions chứa
một phiên bản không được cung cấp bởi máy trạm hoặc chứa một phiên bản trước
TLS 1.3, thì máy trạm buộc phải hủy bỏ bắt tay với cảnh báo illegal_parameter.
- Signature_algorithms và Signature_algorithms_cert
+ TLS 1.3 cung cấp hai phần mở rộng để chỉ ra các thuật toán ký có thể được
sử dụng: signature_algorithms_cert áp dụng cho các chữ ký trong chứng thư, và
signature_algorithms áp dụng cho các chữ ký trong thơng báo CertificateVerity. Các
khóa được tìm thấy trong chứng thư phải phù hợp với các thuật toán ký mà chúng
được sử dụng (chẳng hạn như thuật toán ký số RSA-PSS).
+ Nếu thơng báo khơng có phần mở rộng signature_algorithms_cert thì các
thuật tốn xuất hiện trong signature_algorithms cũng sẽ được áp dụng cho các chữ
ký trong chứng thư. Nếu máy trạm muốn máy chủ xác thực chính nó qua chứng thư
số thì buộc phải gửi phần mở rộng signature_algorithms. Nếu máy chủ đang xác
thực thông qua chứng thư số và máy trạm lại gửi signature_algorithms thì máy chủ
phải hủy quá trình bắt tay với cảnh báo missing_extension (thiếu nội dung phần mở
rộng).

- Certificate_Authorities
+ Phần mở rộng certificate_authorities được sử dụng để chỉ ra tổ chức phát
hành chứng thư (CA). Máy trạm có thể gửi certificate_authorities trong thơng báo
ClientHello, cịn máy chủ có thể gửi trong thơng báo CertificateRequest.
- Supported_Groups
Supported_groups chỉ ra tên các Group (hay chính là các phiên bản giao thức
Diffie-Hellman) mà máy trạm hỗ trợ cho việc trao đổi khóa, và được sắp xếp theo
thứ tự ưu tiên từ cao đến thấp.
- Key_Share

9


Key_share chứa các thơng số là khóa cơng khai của máy trạm hoặc máy chủ
thực thi giao thức thỏa thuận khóa Diffie-Hellman. Từ các giá trị này hai bên liên
lạc sẽ tính được khóa phiên của liên lạc.
- Pre-shared Key Exchange Modes
+ Để sử dụng PSK, máy trạm phải gửi phần mở rộng
psk_key_exchange_modes. Ý nghĩa của phần mở rộng này là máy trạm chỉ hỗ trợ
việc sử dụng PSK với các chế độ được cung cấp trong phần mở rộng này. Máy chủ
không được chọn một chế độ trao đổi khóa mà khơng được liệt kê bởi máy trạm.
Máy chủ không được gửi lại phần mở rộng psk_key_exchange_modes.
+ Bất kỳ giá trị nào được cấp phát trong tương lai đều phải đảm bảo rằng các
thông điệp giao thức được truyền nhận phải xác định rõ chế độ nào đã được máy chủ
chọn, điều này được chỉ ra trong key_share của ServerHello.
1.2.2. Giao thức thành phần Record Protocol
Giao thức record TLS tại bên gửi sẽ tiếp nhận dữ liệu từ tầng ứng dụng thực
hiện phân mảnh dữ liệu, mã hóa xác thực các phân mảnh này, thêm các thông tin
Header TLS và truyền tới bên nhận. Tại bên nhận, Record Protocal sẽ thu được các
phân mảnh dữ liệu dạng bản mã tiến hành xác minh, giải mã, tập hợp lại và sau đó

được chuyển đến các chương trình xử lý dữ liệu tầng ứng dụng.
Có 4 loại bản ghi được xác định bao gồm: handshake, application data, alert
và change_cipher_spec. Riêng bản ghi change_cipher_spec chỉ được sử dụng cho
các mục đích ngụy trang thành phiên liên lạc TLS 1.3 để tương thích với các thiết bị
mạng trung gian không hỗ trợ giao thức TLS 1.3.
- Record Layer
+ Record Layer sẽ phân mảnh các khối dữ liệu thành các bản ghi TLSPlaintext
có kích thước nhỏ hơn hoặc bằng 214 byte. Mỗi dạng dữ liệu (bản ghi) sẽ được xử lý
khác nhau tùy thuộc vào ContentType của chúng.
+ Các thơng báo handshake có thể được kết hợp thành một bản ghi
TLSPlaintext hoặc được phân mảnh thành nhiều bản ghi, miễn là:

10


• Các thông báo handshake không được xen kẽ với các loại bản ghi khác. Có
nghĩa là, nếu một thơng báo handshake được chia thành 2 hoặc nhiều bản ghi thì sẽ
khơng được có thêm bất kỳ loại bản ghi nào khác giữa chúng.
• Các thơng báo handshake khơng được chia nhỏ trường mở rộng chứa khóa
cơng khai. Việc triển khai phải xác minh rằng tất cả các thông báo ngay trước trường
mở rộng khóa đều phù hợp với giới hạn bản ghi, nếu khơng thì phải chấm dứt kết
nối bằng cảnh báo “unexpected_message”.
Việc triển khai không được gửi các đoạn handshake có độ dài bằng 0, ngay cả khi
các đoạn đó có chứa phần đệm.
+ Các thơng điệp cảnh báo (Alert) không được phân mảnh thành các bản ghi
và nhiều thông báo cảnh báo cũng không được hợp nhất thành một bản ghi
TLSPlaintext. Nói cách khác, một bản ghi có kiểu Alert sẽ chỉ được phép chứa duy
nhất một thông báo cảnh báo.
+ Các thông báo application data chứa dữ liệu ln được bảo vệ bằng việc mã
hóa xác thực trong TLS. Những phân mảnh có nội dung 0 của Application Data có

thể được gửi vì chúng có khả năng hữu ích trong việc chống lại sự phân tích lưu
lượng. Dữ liệu application data có thể được chia thành nhiều bản ghi hoặc thành một
bản ghi duy nhất.
- Record Payload Protecttion
+ Để bảo vệ dữ liệu bản ghi, các hàm bảo vệ bản ghi sẽ chuyển cấu trúc
TLSPlaintext thành cấu trúc TLSCiphertext; các hàm hủy bảo vệ sẽ thực hiện ngược
lại quá trình trên. Trong TLS 1.3, tất cả các hệ mã được mơ hình hóa dưới dạng mã
hóa có xác thực với dữ liệu liên kết (AEAD). AEAD cung cấp một hoạt động mã
hóa và xác thực thống nhất biến bản rõ thành bản mã được xác thực và ngược lại.
Phần tải nội dung của bản ghi luôn được mã hóa.
- Pre-Record Nonce
+ Một số hiệu dãy 64bit được duy trì riêng biệt để đọc và ghi các bản ghi. Số
hiệu dãy thích hợp được tăng thêm 1 sau khi đọc hoặc ghi mỗi bản ghi. Mỗi số hiệu
dãy được đặt bằng 0 khi bắt đầu kết nối hoặc bất cứ khi nào khóa được thay đổi; bản
ghi đầu tiên được truyền theo một khóa lưu lượng cụ thể phải sử dụng số hiệu dãy
là 0.
11


+ Mỗi thuật toán AEAD sẽ chỉ định một phạm vi độ dài có thể có cho mỗi bản
ghi, từ N_MIN đến N_MAX byte đầu vào. Với mỗi thuật toán AEAD, độ dài của
pre_record nonce TLS (iv_length) được đặt lớn hơn 8byte và N_MIN. Một thuật
tốn AEAD có N_MAX nhỏ hơn 8byte sẽ không được sử dụng trong TLS.
Pre_record nonce được hình thành như sau:
• Số hiệu dãy 64 bit được mã hóa theo thứ tự byte mạng và được đệm ở bên
trái thêm các số 0 để tạo thành iv_length.
• Số hiệu dãy sau đệm được XOR với static client_write_iv hoặc
server_write_iv (tùy thuộc vào vai trị).
• Giá trị kết quả (có độ dài iv_length) được sử dụng làm pre_record nonce.
- Record Padding

+ Tất cả các bản ghi TLS đều có thể được đệm thêm để tăng kích thước của
TLSCiphertext. Điều này cho phép bên gửi ẩn đi kích thước thật của lưu lượng truy
cập khỏi người quan sát.
+ Phép đệm là một chuỗi các byte có giá trị bằng 0 được nối vào trường
ContentType trước khi mã hóa.
+ Phần đệm được gửi sẽ tự động được xác nhận bởi cơ chế bảo vệ bản ghi;
khi giải mã thành công TLSCiphertext.encrypted_record, bên nhận sẽ thực hiện quét
trường này từ cuối đến đầu cho đến khi nó tìm thấy một octet khác 0. Octet khác 0
này chính là kiểu nội dung (content type) của thơng báo. Nếu bên nhận khơng tìm
thấy octet nào khác 0 trong bản rõ được trả về từ q trình giải mã AEAD thì nó phải
chấm dứt kết nối bằng cảnh báo “unexpected_message”.
1.2.3. Giao thức thành phần Alert Protocol
Giao thức Alert cung cấp các kiểu nội dung cảnh báo để chỉ ra nguyên nhân
tình trạng lỗi hoặc chấm dứt kết nối. Giống như các thông báo khác, thơng báo cảnh
báo được mã hóa theo chỉ định của trạng thái kết nối hiện tại [1].
Các thông báo cảnh báo được chia làm 2 loại: cảnh báo chấm dứt và cảnh báo
lỗi.
Trong các phiên bản trước TLS 1.3, mức độ nghiêm trọng của cảnh báo được
thể hiện trong trường legacy. Còn đối với TLS 1.3, mức độ nghiêm trọng của cảnh
12


báo được ngầm định trong kiểu của cảnh báo được gửi. Cảnh báo “close_notify”
được sử dụng để chỉ ra sự chấm dứt có thứ tự của một hướng kết nối. Khi nhận được
cảnh báo như vậy, việc triển khai TLS nên đưa ra chỉ dẫn end-of-data cho ứng dụng.
Các cảnh báo lỗi sẽ chỉ ra nguyên nhân các kết nối bị thất bại. Khi nhận được
cảnh báo lỗi, việc triển khai TLS nên chỉ ra lỗi cho ứng dụng và không được phép
gửi hoặc nhận thêm bất kỳ dữ liệu nào trên kết nối. Server và Client phải xóa đi các
giá trị khóa chia sẻ chung được thiết lập trong các kết nối không thành công.
- Các cảnh báo chấm dứt

+ Client và Server phải chia sẻ hiểu biết về các kết nối đang kết thúc để tránh
bị tấn công cắt ngắn (truncation).
+ Các cảnh báo chấm dứt được định nghĩa bao gồm:
• close_notify: cảnh báo này thơng báo cho bên nhận biết rằng bên gửi sẽ
không gửi thêm bất kỳ thông báo nào khác trên kết nối này. Mọi dữ liệu nhận được
sau khi nhận cảnh báo này đều phải bị bỏ qua.
• user_canceled: cảnh báo này thơng báo cho bên nhận biết rằng bên gửi đang
hủy bắt tay vì một số lý do khơng liên quan đến lỗi giao thức. Nếu người dùng hủy
một thao tác sau khi bắt tay hồn tất thì chỉ cần chấm dứt kết nối bằng cách gửi
close_notify sẽ phù hợp hơn. Cảnh báo này nên được theo sau bởi close_notify.
+ Một trong hai bên có thể bắt đầu chấm dứt kết nối bằng cách gửi cảnh báo
close_notify. Mọi dữ liệu nhận được sau khi nhận được cảnh báo chấm dứt đều phải
bị bỏ qua. Mỗi bên đều phải gửi close_notify trước khi chấm dứt việc kết nối, trừ
khi bên đó đã gửi một số cảnh báo lỗi khác.
- Các cảnh báo lỗi
+ Xử lý lỗi trong TLS rất đơn giản. Khi một lỗi được phát hiện, TLS sẽ gửi
thông báo lỗi cho máy bên đối tác. Khi đã truyền đi hoặc nhận được cảnh báo nguy
hiểm, cả hai bên phải ngừng kết nối ngay lập tức.
+ Bất cứ khi nào một triển khai gặp phải tình trạng lỗi nghiêm trọng, nó nên
gửi một cảnh báo thích hợp và phải ngừng kết nối mà không gửi hoặc nhận thêm bất
kỳ dữ liệu nào. Tất cả các cảnh báo được định nghĩa bên dưới được coi là nghiêm
trọng trong TLS 1.3. Việc triển khai nên cung cấp một cách để tạo điều kiện ghi nhật
ký cho việc gửi và nhận các cảnh báo.
13


+ Một số cảnh báo lỗi được định nghĩa bao gồm:
• unexpected_message: cảnh báo này được gửi khi nhận được một thơng báo
khơng phù hợp (ví dụ: thơng báo bắt tay sai, …)
• bad_record_mac: cảnh báo được trả về khi bản ghi nhận được khơng được

bảo vệ. Vì thuật tốn AEAD kết hợp mã hóa và xác thực, làm giảm các rủi ro liên
quan tấn công kênh kề, nên cảnh báo này được sử dụng cho tất cả các lỗi hủy bảo
vệ.
• record_overflow: cảnh báo này được gửi khi nhận được một bản ghi
TLSCiphertext có độ dài lớn hơn 214+256 byte hoặc một bản ghi được giải mã thành
TLSPlaintext có kích thước lớn hơn 214 byte (hoặc một số giới hạn đã thương lượng
khác)
• handshake_failure: việc nhận được thơng báo cảnh báo “handshake_failure”
cho biết rằng bên gửi không thể thỏa thuận một bộ thông số bảo mật được chấp nhận
với các tùy chọn có sẵn.
• bad_certificate: cảnh báo này được đưa ra khi chứng thư số bị lỗi, chứa chữ
ký khơng được xác minh chính xác, …
• unsupported_certificate: chứng thư số thuộc loại khơng được hỗ trợ.
• certificate_revoked: chứng thư số đã bị thu hồi.
• certificate_expried: chứng thư số đã hết hạn.
1.3. Các thuật toán mật mã trong giao thức TLS 1.3
TLS 1.3 sử dụng các bộ thuật toán mật mã để xử lý dữ liệu từ tầng ứng dụng.
Các bộ thuật toán mật mã này được ký hiệu giống như trong hình 1.4.

TLS_AES_128_GCM_SHA256
Protocol AEAD Cipher Mode HKDF Function
Hình 1.4: Bộ thuật toán mật mã sử dụng trong TLS 1.3
Theo hình 1.4 các tham số trong bộ thuật tốn mật mã được chú thích cụ thể
như sau:
- TLS là tên giao thức.

14


- AES_128_GCM: thuật tốn mã hóa AES với khóa có độ dài là 128 bit và

hoạt động trong chế độ GCM. Chế độ GCM có tạo ra một thẻ xác thực cho bản mã
hóa vì vậy AES_128_GCM được coi là một thuật tốn mã hóa xác thực với dữ liệu
liên kết (AEAD - Authenticated encryption with associated data).
- SHA256: là hàm băm mật mã được sử dụng trong các hàm dẫn xuất khóa
(HKDF - HMAC-based Extract-and-Expand Key Derivation Function) được sử
dụng để dẫn xuất khóa cho các thuật tốn mật mã sử dụng trong TLS 1.3.
Từ mô tả về bộ thuật toán của TLS 1.3 trên, dễ thấy rằng các thuật toán mật
mã sử dụng trong bộ giao thức này sẽ có các thuật tốn mã hóa xác thực với dữ liệu
liên kết, thuật tốn hàm băm trong tính tốn của hàm dẫn xuất khóa. Ngồi ra, TLS
1.3 cịn sử dụng hai loại thuật tốn mật mã thơng dụng khác là thuật toán ký số và
các thuật toán hay giao thức về thỏa thuận khóa.
1.3.1. Thuật tốn mã hóa xác thực với dữ liệu liên kết
Giao thức TLS 1.3 hỗ trợ 5 bộ thuật toán mật mã như sau:
- TLS_AES_128_GCM_SHA256
- TLS_AES_256_GCM_SHA384
- TLS_CHACHA20_POLY1305_SHA256
- TLS_AES_128_CCM_SHA256
- TLS_AES_128_CCM_8_SHA256
Từ các bộ thuật toán trên, dễ thấy rằng TLS 1.3 sử dụng các thuật toán mã hóa
xác thực với dữ liệu liên kết là:
- AES_128_GCM: Thuật tốn mã hóa AES với khóa dài 128 bit hoạt động
trong chế độ GCM.
- AES_256_GCM: Thuật tốn mã hóa AES với khóa dài 256 bit hoạt động
trong chế độ GCM.
- CHACHA20_POLY1305: Thuật tốn mã dịng CHACHA20 hoạt động
trong cơ chế xác thực POLY1305.
- AES_128_CCM: Thuật tốn mã hóa AES với khóa dài 128 bit hoạt động
trong chế độ CCM.
15



×