Xem bên trong

Tìm hiểu và phân tích đánh giá độ an toàn của thuật toán MD5

56 tr. + CD-ROM
Luận văn ThS. Hệ thống thông tin — Trường Đại học Công nghệ. Đại học Quốc gia Hà Nội, 2014
Electronic Resources

0.00

Tải về miễn phí bản đầy đủ PDF luận văn tại Link bản đầy đủ 1

ĐẠI HỌC QUỐC GIA HÀ NỘI
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ

CHU THỊ THANH XUÂN

TÌM HIỂU VÀ PHÂN TÍCH ĐÁNH GIÁ
ĐỘ AN TOÀN CỦA THUẬT TOÁN MD5

LUẬN VĂN THẠC SĨ HỆ THỐNG THÔNG TIN

Hà Nội – 2014
2

Tìm hiểu và phân tích đánh giá độ an toàn của thuật toán MD5

ĐẠI HỌC QUỐC GIA HÀ NỘI
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ

CHU THỊ THANH XUÂN

TÌM HIỂU VÀ PHÂN TÍCH ĐÁNH GIÁ
ĐỘ AN TOÀN CỦA THUẬT TOÁN MD5

Ngành: Công nghệ Thông tin
Chuyên ngành: Hệ thống thông tin
Mã số: 60480104

LUẬN VĂN THẠC SĨ HỆ THỐNG THÔNG TIN

NGƯỜI HƯỚNG DẪN KHOA HỌC: TS. NGUYỄN NGỌC CƯƠNG

Hà Nội – 2014

3

Tìm hiểu và phân tích đánh giá độ an toàn của thuật toán MD5

LỜI CAM ĐOAN
Tôi xin cam đoan kết quả đạt được trong luận văn là sản phẩm của riêng cá
nhân tôi, không sao chép lại của người khác. Trong toàn bộ nội dung của luận
văn, những điều đã trình bày là của cá nhân tôi hoặc là được tôi tổng hợp từ
nhiều nguồn tài liệu. Tất cả các nguồn tài liệu tham khảo có xuất xứ rõ ràng và
được trích dẫn hợp pháp.
Tôi xin chịu toàn bộ trách nhiệm và chịu mọi hình thức kỷ luật theo quy định
cho lời cam đoan của tôi.

Hà Nội, tháng 7 năm 2014
Học viên

Chu Thị Thanh Xuân

4

Tìm hiểu và phân tích đánh giá độ an toàn của thuật toán MD5

MỤC LỤC
LỜI CAM ĐOAN …………………………………………………………………………………….. 3
MỤC LỤC ………………………………………………………………………………………………. 4
DANH MỤC CÁC KÝ HIỆU VÀ TỪ VIẾT TẮT ………………………………………. 6
DANH MỤC CÁC BẢNG ………………………………………………………………………… 7
DANH MỤC CÁC HÌNH VẼ, ĐỒ THỊ ……………………………………………………… 8
MỞ ĐẦU ………………………………………………………………………………………………… 9
Chương 1: LÝ THUYẾT VỀ HÀM BĂM…………………………………………………. 11
1.1 Tổng quan về hàm băm ………………………………………………………………….. 11
1.1.1. Định nghĩa hàm băm ………………………………………………………………. 11
1.1.2. Đặc tính của hàm băm …………………………………………………………….. 11
1.1.3. Tính chất của hàm băm: ………………………………………………………….. 12
1.2. Một số hàm băm phổ biến ……………………………………………………………… 13
1.2.1 Hàm băm MD4 ………………………………………………………………………. 14
1.2.2. Hàm băm MD5 ………………………………………………………………………. 15
1.2.3. Hàm băm chuẩn SHA……………………………………………………………… 15
1.3 Ứng dụng của hàm băm …………………………………………………………………. 16
1.3.1 Bảo vệ mật khẩu ……………………………………………………………………… 16
1.3.2 Đấu giá trực tuyến …………………………………………………………………… 17
1.3.3 Download file …………………………………………………………………………. 18
1.3.4 Hàm băm và chữ ký số …………………………………………………………….. 18
Chương 2: HÀM BĂM MD5 …………………………………………………………………… 21
2.1 Giới thiệu MD5 …………………………………………………………………………….. 21
5

Tìm hiểu và phân tích đánh giá độ an toàn của thuật toán MD5

2.2 Ứng dụng của hàm băm MD5 …………………………………………………………. 21
2.2.1 Bảo vệ mật khẩu. …………………………………………………………………….. 21
2.2.2 Kiểm tra tính toàn vẹn của tập tin. …………………………………………….. 22
2.3 Thuật toán MD5 ……………………………………………………………………………. 23
Chương 3: ĐỘ AN TOÀN CỦA THUẬT TOÁN MD5 ……………………………… 30
3.1 Tính an toàn của hàm băm MD5 đối với hiện tượng đụng độ ……………… 30
3.2 Tính an toàn của hàm băm MD5 đối với tính một chiều. ……………………. 32
3.3 Tính an toàn của hàm băm MD5 đối với ứng dụng bảo vệ mật khẩu. …… 33
3.3.1 Kỹ thuật tấn công từ điển ( Dictionary Attack) …………………………… 35
3.3.2 Kỹ thuật tấn công bảng cầu vồng ( Rainbow Table Attack) …………. 36
3.3.3. Kỹ thuật tấn công brute force (Brute force attack) ……………………… 37
Chương 4: THỬ NGHIỆM VÀ ĐÁNH GIÁ ……………………………………………… 40
4.1 Xây dựng cơ sở dữ liệu: …………………………………………………………………. 40
4.2 Bảng kết quả …………………………………………………………………………………. 40
KẾT LUẬN …………………………………………………………………………………………… 44
TÀI LIỆU THAM KHẢO ……………………………………………………………………….. 45
PHỤ LỤC ……………………………………………………………………………………………… 47
6

Tìm hiểu và phân tích đánh giá độ an toàn của thuật toán MD5

DANH MỤC CÁC KÝ HIỆU VÀ TỪ VIẾT TẮT

CPU Central Processing Unit
CUDA Compute Unified Device Architecture
GPGPU General Purpose computing
GPU Graphic Proccessing Unit
MD Message Digest
MD2 Message Digest 2
MD4 Message Digest 4
MD5 Message Digest 5
RSA Rivest Shamir Adleman
SHA Secure Hash Algorithm
VPU Visual Processing Unit

7

Tìm hiểu và phân tích đánh giá độ an toàn của thuật toán MD5

DANH MỤC CÁC BẢNG

Bảng 3.1 : Minh họa tốc độ kiểm tra khóa MD5 trên CPU và các GPU
Bảng 3.2 : Minh hoạ hiệu năng thực hiện công việc giải mã MD5 trên CPU và
GPU
Bảng 4.1 Khả năng khôi phục mật khẩu trên một số công cụ

8

Tìm hiểu và phân tích đánh giá độ an toàn của thuật toán MD5

DANH MỤC CÁC HÌNH VẼ, ĐỒ THỊ

Hình 1.1 Minh họa về hàm băm
Hình 1.2 Cấu trúc lặp của hàm băm MD
Hình 1.3 Cơ chế hoạt động của lưu trữ mật khẩu dùng hàm băm
Hình 1.4 Đấu giá trực tuyến dùng hàm băm
Hình 1.5 Gửi thông điệp sử dụng hàm hash
Hình 1.6 Hàm Hash hỗ trợ chữ ký số
Hình 2.1 Lưu trữ mật khẩu bằng hàm băm MD5
Hình 2.2 Thêm salt vào mật khẩu trước khi băm MD5
Hình 2.3 Mã MD5 được gửi kèm với file download bản Ghost Windows XP
Hình 2.4 Sử dụng phần mềm MD5 Check để kiểm tra tính toàn vẹn của tập tin
Hình 2.5 Hoạt động hàm MD5
Hình 2.6 Một thao tác MD5
Hình 2.7 Thêm các bít vào bản tin ban đầu
Hình 3.1 Ví dụ xung đột hàm băm MD5
Hình 3.2 Tấn công từ điển trên trang md5decrypter.co.uk
Hình 3.3 Phương thức hoạt động của bảng cầu vồng

9

Tìm hiểu và phân tích đánh giá độ an toàn của thuật toán MD5

MỞ ĐẦU

Trong mật mã học MD5 (Message-Digest algorithm 5) là một hàm băm
mật mã được sử dụng phổ biến với giá trị băm (Hash) dài 128 bit. Là một chuẩn
Internet (RFC 1321) MD5 đã được dùng trong nhiều ứng dụng bảo mật và cũng
được dùng phổ biến để kiểm tra tính toàn vẹn của tập tin. Trong ứng dụng
truyền dữ liệu, máy chủ tập tin thường cung cấp một checksum MD5 được tính
toán trước cho tập tin, để người dùng có thể so sánh với checksum của tập tin đã
tải về. Trong ứng dụng chữ ký số, MD5 sẽ băm thông điệp dài thành văn bản đại
diện và việc ký sẽ được thực hiện trên văn bản đại diện trước khi được truyền đi.
Trong ứng dụng mật khẩu, chương trình sẽ băm từng mật khẩu sang không gian
mã MD5 và so sánh mã này với mã MD5 cần được giải mã.
MD5 được thiết kế bởi Ronald Rivest vào năm 1991 để thay thế cho hàm
băm trước đó là MD4 (vì MD4 đã được chứng minh là không an toàn). Từ năm
1996 người ta đã phát hiện ra một lỗ hổng trong MD5 và các chuyên gia mã hóa
bắt đầu đề nghị sử dụng giải thuật khác như SHA-1, đến năm 2005 nhiều lỗ
hổng hơn được khám phá khiến cho việc sử dụng giải thuật này cho mục đích
bảo mật đang bị đặt nghi vấn.
Trên thực tế trong các ứng dụng bảo vệ mật khẩu giải thuật MD5 vẫn
được sử dụng rộng rãi. Có nhiều phương pháp và kỹ thuật tấn công mật khẩu
được công bố nhưng mức độ thành công của các phương pháp này phụ thuộc lớn
vào tài nguyên của máy tính và cách đặt mật khẩu. Do vậy để có một đánh giá
cụ thể về độ an toàn của thuật toán MD5 trong các ứng dụng của nó, đặc biệt là
ứng dụng lưu trữ mật khẩu, tác giả đã lựa chọn đề tài: “Tìm hiểu và phân tích
đánh giá độ an toàn của thuật toán MD5”.
Với mục tiêu đánh giá độ an toàn của thông tin khi sử dụng thuật toán
băm MD5 trong các ứng dụng của nó, tác giả đã sử dụng phương pháp khảo sát
các kỹ thuật tấn công MD5 hiện nay và đi sâu vào đánh giá mức độ thành công
dò tìm mật khẩu trong các kỹ thuật tấn công từ điển, tấn công brute force và tấn
10

Tìm hiểu và phân tích đánh giá độ an toàn của thuật toán MD5

công sử dụng công nghệ GPU trên hệ thống máy tính hiện tại và các công cụ hỗ
trợ. Tác giả tiến hành khảo sát trên 100 hash MD5 được thu thập từ cơ sở dữ liệu
của các website bị lỗi và được mã hóa từ các mật khẩu do tác giả giả thiết dựa
trên thói quen sử dụng mật khẩu của người dùng.
Cấu trúc của luận văn gồm:
Chương 1: Giới thiệu về lý thuyết hàm băm mật mã, những tính chất của hàm
băm và ứng dụng của nó. Trong chương này cũng giới thiệu tổng quan về một số
hàm băm phổ biến.
Chương 2: Tìm hiểu hàm băm MD5, giải thuật MD5, chương trình cài đặt MD5
và ứng dụng chính của hàm băm MD5.
Chương 3: Độ an toàn của hàm băm MD5. Tìm hiểu về tính an toàn của hàm
băm MD5 đối với hiện tượng đụng độ. Đi sâu khảo sát một số kỹ thuật tấn công
hàm băm trong ứng dụng bảo vệ mật khẩu.
Chương 4: Thử nghiệm và đánh giá trên 100 hash mật khẩu được băm bằng
thuật toán MD5.
Tác giả xin chân thành cảm ơn sự hướng dẫn và chỉ bảo tận tình của thầy
Nguyễn Ngọc Cương – Trưởng khoa Toán Tin, Học viện An ninh nhân dân,
cảm ơn các thầy cô giáo trong khoa Hệ Thống Thông Tin trường Đại học Công
nghệ – Đại học Quốc Gia Hà Nội đã tạo điều kiện giúp tác giả hoàn thành luận
văn này. Cảm ơn gia đình, bạn bè cùng những người thân luôn bên cạnh tác giả
giúp tác giả vượt qua những khó khăn trong cuộc sống.
Trong quá trình thực hiện bản luận văn không tránh khỏi sai sót. Tác giả rất
mong nhận được sự nhận xét, đánh giá cũng như tạo điều kiện giúp đỡ của thầy
cô và các đồng nghiệp.
Hà Nội, tháng 7 năm 2014
Học viên
Chu Thị Thanh Xuân

11

Tìm hiểu và phân tích đánh giá độ an toàn của thuật toán MD5

Chương 1: LÝ THUYẾT VỀ HÀM BĂM
1.1 Tổng quan về hàm băm
1.1.1. Định nghĩa hàm băm
Hàm băm (tiếng Anh: hash function) là giải thuật nhằm sinh ra các giá
trị băm tương ứng với mỗi khối dữ liệu (có thể là một chuỗi kí tự, một đối
tượng trong lập trình hướng đối tượng, v.v…). Giá trị băm đóng vai gần như
một khóa để phân biệt các khối dữ liệu, tuy nhiên, người ta chấp hiện tượng
trùng khóa hay còn gọi là đụng độ và cố gắng cải thiện giải thuật để giảm thiểu
sự đụng độ đó. Hàm băm thường được dùng trong bảng băm nhằm giảm chi phí
tính toán khi tìm một khối dữ liệu trong một tập hợp (nhờ việc so sánh các giá
trị băm nhanh hơn việc so sánh những khối dữ liệu có kích thước lớn)
Giá trị của hàm băm là duy nhất, và không thể suy ngược lại được nội
dung thông điệp từ giá trị băm này.
Ví dụ minh họa về hàm băm (trích từ http://vi.wikipedia.org)

Hình 1.1 Minh họa về hàm băm

1.1.2. Đặc tính của hàm băm
Hàm băm h là hàm băm một chiều (one-way hash) với các đặc tính sau:
 Với thông điệp đầu vào x thu được bản băm z = h(x) là duy nhất.
12

Tìm hiểu và phân tích đánh giá độ an toàn của thuật toán MD5

 Nếu dữ liệu trong thông điệp x thay đổi hay bị xóa để thành thông điệp x‟
thì h(x‟) h(x). Cho dù chỉ là một sự thay đổi nhỏ hay chỉ là xóa đi 1 bit dữ liệu
của thông điệp thì giá trị băm cũng vẫn thay đổi. Điều này có nghĩa là: hai thông
điệp hoàn toàn khác nhau thì giá trị hàm băm cũng khác nhau.
 Nội dung của thông điệp gốc không thể bị suy ra từ giá trị hàm băm.
Nghĩa là: với thông điệp x thì dễ dàng tính được z = h(x), nhưng lại không thể
(thực chất là khó) suy ngược lại được x nếu chỉ biết giá trị hàm băm h(x).
1.1.3. Tính chất của hàm băm:
Việc đưa hàm băm h vào dùng trong sơ đồ chữ ký số không làm giảm sự
an toàn của sơ đồ chữ ký số vì nó là bản tóm lược thông báo – bản đại diện cho
thông điệp – được ký chứ không phải là thông điệp gốc. Điều cần thiết đối với
hàm băm h là cần thỏa mãn một số tính chất sau để tránh bị giả mạo:
Tính chất 1: Hàm băm h là không va chạm yếu
Hàm băm h là không va chạm yếu nếu khi cho trước một bức điện x,
không thể tiến hành về mặt tính toán để tìm ra một bức điện x’  x mà h(x’) =
h(x).
Tính chất 2: Hàm băm h là không va chạm mạnh:
Xét một kiểu tấn công như sau: Đầu tiên, tên giả mạo tìm ra được hai
bức thông điệp x‟ và x (x‟ x) mà có h(x‟) = h(x) (ta coi bức thông điệp x là hợp
lệ, còn x‟ là giả mạo). Tiếp theo, hắn đưa cho ông A và thuyết phục ông này kí
vào bản tóm lược h(x) để nhận được y. Khi đó (x‟, y) là bức điện giả mạo nhưng
hợp lệ.
Để tránh kiểu tấn công này, hàm h phải thỏa mãn tính không va chạm
mạnh: Hàm băm h là không va chạm mạnh nếu không có khả năng tính toán để
tìm ra hai bức thông điệp x và x’

mà x x’ và h(x) = h(x’).
Tính chất 3: Hàm băm h là hàm một chiều:
Xét một kiểu tấn công như sau: Việc giả mạo các chữ ký trên bản tóm
lược z thường xảy ta với các sơ đồ chữ ký số. Giả sử tên giả mạo tính chữ ký
trên bản tóm lược z, sau đó hắn tìm một bản thông điệp x‟ được tính ngược từ
bản đại diện z, z = h(x‟). Tên trộm thay thế bản thông điệp x hợp lệ bằng bản
thông điệp x‟ giả mạo, nhưng lại có z = h(x‟). Và hắn ký số trên bản đại diện
13

Tìm hiểu và phân tích đánh giá độ an toàn của thuật toán MD5

cho x‟ bằng đúng chữ ký hợp lệ. Nếu làm được như vậy thì (x‟, y) là bức điện
giả mạo nhưng hợp lệ.
Để tránh được kiểu tấn công này, h cần thỏa mãn tính chất một chiều:
Hàm băm h là một chiều nếu khi cho trước một bản tóm lược thông báo z thì
không thể thực hiện về mặt tính toán để tìm ra thông điệp ban đầu x sao cho h(x)
= z .
1.2. Một số hàm băm phổ biến
Các hàm băm chúng ta xem xét dưới đây có hai thành phần chính. Thành phần
đầu tiên là hàm nén nhận đầu vào là một chuỗi có chiều dài bất kỳ và giá trị
chaining variable (giá trị khởi tạo) và cho đầu ra là chuỗi có chiều dài cố định.
Thành phần thứ hai là hàm chuẩn chuỗi đầu vào, hàm này có nhiệm vụ biến
chuỗi đầu vào có chiều dài bất kỳ thành chuỗi các bít, mà chuỗi này là có chiều
dài là bội số của các khối message block (có chiều dài là 512 hoặc 1024 bít). Ở
thời điểm bắt đầu các chaining variable có giá trị khởi tạo (giá trị khởi tạo này là
tùy thuộc vào hàm băm), và giá trị cuối cùng của các chaining variable chính là
giá trị của hàm băm.
Thuật toán chung cho các hàm băm này như sau:

Given: compression function C:{0,1}
n
x {0,1}
m
 {0,1}
n
;
n – bit constant IV.
Input: message M
1. Break M into m – bit block M1,…, Mk, padding if necessary;
2. Let Mk+1 be encoding of |M|;
3. Let h0 = IV;
4. For i = 1 to k +1 let hi = C (hi-1, Mi);
5. Output hk+1.
Thuật toán trên hàm băm C được lặp nhiều lần, đầu vào của lần lặp sau là khối
block message có chiều dài là 512 hoặc 1024 bit (chiều dài các block message là
512 hay 1024 bit là tùy thuộc vào thuật toán) và giá trị của chaining variable của
vòng trước, ta có mô hình như sau:
14

Tìm hiểu và phân tích đánh giá độ an toàn của thuật toán MD5

Hình 1.2 : Cấu trúc lặp của hàm băm MD

1.2.1 Hàm băm MD4
MD4 (Message-Digest 4) được thiết kế bởi giáo sư Ronald Rivest của đại
học MIT vào năm 1990. Nó thực hiện một hàm băm mật mã để sử dụng trong
kiểm tra tính toàn vẹn của thông điệp. Chiều dài của giá trị băm là 128bit.
Thuật toán MD4 nhận dữ liệu đầu vào là một chuỗi bit x có chiều dài
b>=0 tùy ý và sinh ra mã băm của x có chiều dài cố định 128 bit. Trước tiên
chuỗi bit x được định dạng lại bằng cách thêm r>0 bit phụ thuộc vào x sao cho
chiều dài của chuỗi bit mới là b‟=b+r là bội số của 512. Sau đó chia chuỗi bit
mới này thành m khối, mỗi khối có độ dài đúng bằng 512 bit. Mỗi khối bit này
lại chia thành 16 từ, mỗi từ có 32 bit.
Thuật toán MD4 tuần tự xử lý dãy m khối trong m lượt tính toán. Dữ liệu
đầu vào tại lượt tính toán thứ k (1<=k<=m) là khối thứ k trong dãy và mã băm nhận được sau (k-1) lượt tính toán trước đó (mã băm đầu vào ứng với k=1 đã được khởi tạo từ trước). Tại lượt tính toán thứ k này, khối dữ liệu đầu vào 512 bit liên tiếp đi qua 3 vòng tính toán, trong mỗi vòng gồm có 16 bước, mỗi bước thực hiện tính toán với dữ liệu là một từ trong dãy và các kết quả nhận được sau bước trước. Kết quả sau khi qua 3 vòng tính toán trên sẽ được kết hợp với mã băm trước đó để sinh ra mã băm mới (cho lượt tính toán thứ k). Sau khi đã xử lý hết m khối, mã băm nhận được sau cùng là kết quả ta cần tìm. 15 Tìm hiểu và phân tích đánh giá độ an toàn của thuật toán MD5 1.2.2. Hàm băm MD5 MD5 được phát minh bởi Ron Rivest, người cũng đã tham gia xây dựng RSA. MD5, viết tắt từ chữ „Message Digest 5‟ được phát triển lên từ MD4 và trước đó là MD2, do MD2 và MD4 không còn được xem là an toàn. Kích thước giá trị băm của MD5 là 128 bít, mà chúng ta coi như là an toàn (theo nghĩa không tìm được 2 thông điệp có cùng giá trị băm). Tuy nhiên vào năm 2004 và 2005, một phương pháp tấn công MD5 đã được tìm thấy và một số thông điệp có cùng giá trị băm MD5 được chỉ ra (vi phạm tính chống va chạm mạnh). Tuy vậy ngày nay MD5 vẫn còn được sử dụng phổ biến. Hàm băm MD5 sẽ được giới thiệu chi tiết trong chương 2. 1.2.3. Hàm băm chuẩn SHA Chuẩn hàm băm SHA phức tạp và chậm hơn dòng MD. SHA được thiết kế để chạy trên máy kiến trúc endian lớn hơn là trên máy endian nhỏ. SHA tạo ra bản tóm lược thông điệp có kích thước 160 bit, sử dụng 5 thanh ghi 32 bit. Năm thuật giải SHA là SHA-1 (trả lại kết quả dài 160 bit), SHA-224 (trả lại kết quả dài 224 bit), SHA-256 (trả lại kết quả dài 256 bit), SHA-384 (trả lại kết quả dài 384 bit), và SHA-512 (trả lại kết quả dài 512 bit). Thuật giải SHA là thuật giải băm mật được phát triển bởi cục an ninh quốc gia Mĩ (National Security Agency hay NSA) và được xuất bản thành chuẩn của chính phủ Mĩ bởi viện công nghệ và chuẩn quốc gia Mĩ (National Institute of Standards and Technology hay NIST). Bốn thuật giải sau thường được gọi chung là SHA-2. SHA-1 được sử dụng rộng rãi trong nhiều ứng dụng và giao thức an ninh khác nhau, bao gồm TLS và SSL, PGP,SSH, S/MIME, và IPSec. Hiện nay, SHA-1 không còn được coi là an toàn bởi đầu năm 2005, ba nhà mật mã học người Trung Quốc đã phát triển thành công một thuật giải dùng để tìm được hai đoạn dữ liệu nhất định có cùng kết quả băm tạo ra bởi SHA-1. Tuy vậy SHA vẫn được sử dụng phổ biến, đặc biệt là SHA-2, chưa có phát minh nào tìm ra tính không an toàn của nó.

Tác giả

Chu Thị Thanh Xuân

Nhà xuất bản

ĐHCN

Năm xuất bản

2014

Người hướng dẫn

Nguyễn Ngọc Cương

Định danh

00050003621

Kiểu

text

Định dạng

text/pdf

Chủ đề

Công nghệ thông tin,Hệ thống thông tin,Thuật toán MD5

Nhà xuất bản

Khoa công nghệ thông tin,

Trường đại học Công nghệ

Các đánh giá

Hiện chưa có đánh giá cho sản phẩm.

Hãy là người đầu tiên đánh giá “Tìm hiểu và phân tích đánh giá độ an toàn của thuật toán MD5”

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *