Tải bản đầy đủ (.docx) (27 trang)

Tiểu luận môn toán học cho khoa học máy tính HỆ MÃ HÓA RSA, GIẢI THUẬT BĂM MD5 & ỨNG DỤNG

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 (380.8 KB, 27 trang )

Bài thu hoạch môn học Toán Cho Khoa Học Máy Tinh Gvhd: PGS.TS Đỗ Văn Nhơn
ĐẠI HỌC QUỐC GIA THÀNH PHỐ HỒ CHÍ MINH
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN
__________
BÀI THU HOẠCH MÔN HỌC
TOÁN CHO KHOA HỌC MÁY TÍNH
ĐỀ TÀI
HỆ MÃ HÓA RSA, GIẢI THUẬT BĂM MD5
& ỨNG DỤNG
GVHD: PGS.TS. DỖ VĂN NHƠN
HVTH: Lê Thúc Quốc Anh
MSHV: CH1301002
Hvth: Lê Thúc Quốc Anh - Mã số: CH1301002 Trang 1
Bài thu hoạch môn học Toán Cho Khoa Học Máy Tinh Gvhd: PGS.TS Đỗ Văn Nhơn
TP HCM, 01/2014
MỤC LỤC
LỜI MỞ ĐẦU
Ngày nay, các ứng dụng Công nghệ thông tin đã và đang ngày càng phổ biến rộng
rãi đã ảnh hưởng rất lớn đến diện mạo của đời sống, kinh tế, xã hội. Mọi công việc hàng
ngày của chúng ta đều có thể thực hiện được từ xa với sự hổ trợ của máy vi tính và mạng
internet (từ việc học tập, giao dịch,… đến việc gửi thư). Tất cả thông tin liên quan đến
những công việc này đều do máy vi tính quản lý và truyền đi trên hệ thống mạng.
Đối với những thông tin bình thường thì không có ai chú ý đến, nhưng đối với
những thông tin mang tính chất sống còn đối với một số cá nhân (hay tổ chức) thì vấn đề
bảo mật thật sự rất quan trọng, vấn đề khó khăn đặt ra là làm sao giữ được thông tin bí
mật và giữ cho đến đúng được địa chỉ cần đến. Nhiều tổ chức, cá nhân đã tìm kiếm và
đưa ra nhiều giải pháp bảo mật phương pháp mã hóa khóa công khai được xem là phương
pháp có tính an toàn khá cao.
Như vậy việc đảm bảo an toàn thông tin, tránh mọi nguy cơ bị thay đổi, sao chép
hoặc mất mát dữ liệu trong các ứng dụng trên mạng luôn là vấn đề bức xúc, được nhiều
người quan tâm. Trong bài thu hoạch này, em trình bày những vấn đề liên quan đến mã


hóa thông tin, thuật toán mã hóa RSA, thuật toán băm MD5. Từ đó viết ứng dụng minh
họa giải thuật MD5.
Em xin chân thành cám ơn PGS.TS Đỗ Văn Nhơn, và các thầy cô trong trường
Đại học CNTT- ĐHQG TP HCM cùng các bạn bè đã giúp em hoàn thành tốt môn học
này.
Hvth: Lê Thúc Quốc Anh - Mã số: CH1301002 Trang 2
Bài thu hoạch môn học Toán Cho Khoa Học Máy Tinh Gvhd: PGS.TS Đỗ Văn Nhơn
Hvth: Lê Thúc Quốc Anh - Mã số: CH1301002 Trang 3
Bài thu hoạch môn học Toán Cho Khoa Học Máy Tinh Gvhd: PGS.TS Đỗ Văn Nhơn
I./ TỔNG QUAN VỀ MÃ HÓA:
1./ Khái niệm mã hóa:
Mã hoá là một tiến trình biến đổi thông tin, sử dụng các thuật toán nhằm mục đích
không cho người khác có thể nắm bắt được nếu thiếu một vốn thông số nhất định (key)
để dịch ngược. Đi kèm với mã hoá là giải mã.
Mã hóa là ngành khoa học nghiên cứu về giấu thông tin. Cụ thể mã hóa là ngành
nghiên cứu cách chuyển đổi thông tin từ dạng "có thể hiểu được" thành dạng "không thể
hiểu được". Mã hóa giúp đảm bảo các tính chất sau cho thông tin:
• Tính bí mật (confidentiality): thông tin chỉ được tiết lộ cho những ai được phép.
• Tính toàn vẹn (integrity): thông tin không thể bị thay đổi mà không thể phát
hiện.
• Tính xác thực (authentication): người gởi hoặc người nhận chứng minh là đúng
họ.
• Tính không chối bỏ (non-repudiation): người gởi (hoặc người nhận) sau này
không thể chối bỏ việc đã gởi (hoặc nhận) thông tin.
Có rất nhiều loại thuật toán mã hoá cho dữ liệu máy tính, chúng được gọi tên theo
thuật toán và có thể so sánh trực tiếp với nhau, ví dụ mã hoá 128-bit, Triple-DES, 2048-
bit RSA.
2./ Các thuật toán mã hóa:
a./ Mã hóa đối xứng:
Hình 1. Nguyên lý của hệ thống mã hoá đối xứng

Hvth: Lê Thúc Quốc Anh - Mã số: CH1301002 Trang 4
Bài thu hoạch môn học Toán Cho Khoa Học Máy Tinh Gvhd: PGS.TS Đỗ Văn Nhơn
Mã hóa đối xứng sử dụng cùng một khóa cho việc mã hóa và giải mã. Có thể nói
mã đối xứng là mã một khoá hay mã khóa riêng hay mã khoá thỏa thuận.
Nguyên lý cơ bản của hệ thống mã hoá khoá đối xứng được chỉ ra trong (hình 1)
Có thể thấy rằng bản chất của mã hoá đối xứng là cả phía thu và phía phát đều sử dụng
cùng một khoá bí mật (SK), và thuật toán ở cả hai phía cũng đều giống nhau. Mã hoá đối
xứng như trên dựa vào việc phân phối khoá một cách bảo mật giữa cả hai phía. Nhưng
thực tế là khoá chung đó lại phân phối tới tất cả mọi người trong mạng, và vấn đề “kênh
bảo mật” đã làm đau đầu những nhà quản trị mạng. Điều nguy hiểm nhất là bất cứ ai
chiếm được khoá trong quá trình phân phối cũng có toàn quyền truy nhập tới dữ liệu do
khoá đó bảo vệ. Do đó, quá trình phân phối khoá phải trên “kênh bảo mật”, bất kể là kênh
logic hay kênh vật lý (hình 3).
Hình 2: Kênh nguyên lý trong hệ thống mã hoá đối xứng.
b./ Mã hoá bất đối xứng:
Ngược lại với mã hoá đối xứng, thuật toán bất đối xứng hoạt động theo ít nhất là
hai khoá, hay chính xác hơn là một cặp khoá (hình 1). Khoá sử dụng được biết đến như là
khoá bí mật và khoá công khai và do đó có khái niệm mã hoá khoá công khai. Mỗi khoá
được sử dụng để mã hoá hay giải mã, nhưng khác với thuật toán đối xứng, giá trị của
khoá ở mỗi phía là khác nhau.
Trong hệ thống RSA, dữ liệu được mã hoá bằng khoá bí mật (KX
u
) và chỉ có thể
giải mã được bằng khoá công khai của cặp khoá đó. Cặp khoá này được tạo ra cùng nhau
và do đó có liên quan trực tiếp với nhau. Mặc dù có quan hệ với nhau nhưng nếu biết hay
truy nhập được khoá công khai thì cũng không thể tính toán được giá trị của khoá bí mật.
Hvth: Lê Thúc Quốc Anh - Mã số: CH1301002 Trang 5
Bài thu hoạch môn học Toán Cho Khoa Học Máy Tinh Gvhd: PGS.TS Đỗ Văn Nhơn
Do đó, công khai khoá mã cũng không làm ảnh hưởng tới tính bảo mật của hệ thống, nó
cũng chỉ như một địa chỉ thư tín còn khoá bí mật vẫn luôn được giữ kín. Bản chất của mã

hoá khoá công khai RSA là bất cứ bản tin mật mã nào đều có thể được nhận thực nếu như
nó được mã hoá bằng khoá bí mật còn giải mã bằng khoá công khai. Từ đó, phía thu còn
xác định được cả nguồn gốc của bản tin. Bất cứ người nào giữ khoá công khai đều có thể
nghe trộm bản tin mật mã bằng cách tính toán với kho bí mật, không chỉ đảm bảo tính tin
cậy của bản tin (trong một nhóm) mà còn được nhận thực, hay còn gọi là không thể từ
chối, ví dụ như người gửi không thể từ chối rằng chính họ là tác giả của bản tin đó. Nó
hoàn toàn trái ngược với hoạt động của khoá đối xứng, trong đó bản tin mật mã được
đảm bảo tính toàn vẹn giữa phía mã hoá và giải mã, nhưng bất kỳ ai có được khoá chung
đều có thể phát bản tin và từ chối rằng chính mình đã phát nó, còn phía thu thì không thể
biết được đâu là tác giả của bản tin đó. Thuật toán đối xứng yêu cầu khả năng tính toán
lớn hơn và do đó, tốc độ quá trình mã hoá chậm hơn so với mã hoá đối xứng. Đó cũng là
trở ngại chính trong các hệ thống cho phép tỷ lệ lỗi lớn như trong truyền thông thoại. Do
đó, mã hoá khoá công khai không phù hợp với các bản tin có chiều dài thông thường, tuy
nhiên khi kết hợp cả hai chế độ với nhau lại có thể đảm bảo tính nhận thực, tin cậy và
toàn vẹn của bản tin. Nói chung, các ứng dụng sử dụng thuật toán bất đối xứng là:
• Sử dụng một giá trị “băm” nhỏ làm chữ ký điện tử.
• Mã hoá các khoá bí mật được sử dụng trong thuật toán đối xứng.
• Thỏa thuận khóa mã bí mật giữa các phía trong truyền thông.
Hình 3: Nguyên lý cơ bản của mã hoá khoá công khai và thuật toán RSA.
Hvth: Lê Thúc Quốc Anh - Mã số: CH1301002 Trang 6
Bài thu hoạch môn học Toán Cho Khoa Học Máy Tinh Gvhd: PGS.TS Đỗ Văn Nhơn
c./ Hệ mã hóa RSA:
 Khái niệm hệ mật mã RSA:
Thuật toán được Ron Rivest, Adi Shamir và Len Adleman mô tả lần đầu tiên vào
năm 1977 tại Học viện Công nghệ Massachusetts (MIT). Tên của thuật toán lấy từ 3 chữ
cái đầu của tên 3 tác giả. Hệ mã hoá này dựa trên cơ sở của hai bài toán
 Bài toán Logarithm rời rạc (Discrete logarith).
 Bài toán phân tích thành thừa số.
Trong hệ mã hoá RSA các bản rõ, các bản mã và các khoá (public key và private
key) thuộc tập số nguyên ZN = {1, , N-1}. Trong đó tập ZN với N = p × q là các số

nguyên tố khác nhau cùng với phép cộng và phép nhân Modulo N tạo ra modulo số học
N.
Khoá mã hoá E
KB
là cặp số nguyên (N, K
B
) và khoá giải mã D
kb
là cặp số nguyên
(N, k
B
), các số là rất lớn, số N có thể lên tới hàng trăm chữ số.
Các phương pháp mã hoá và giải mã là rất dễ dàng.
Công việc mã hoá là sự biến đổi bản rõ P (Plaintext) thành bản mã C (Ciphertext)
dựa trên cặp khoá công khai K
B
và bản rõ P theo công thức sau đây:
 C = E
KB
(P) = E
B
(P) = P
KB
(mod N) (1)
Công việc giải mã là sự biến đổi ngược lại bản mã C thành bản rõ P dựa trên cặp
khoá bí mật k
B
, modulo N theo công thức sau:
 P = D
kB

(C) = D
B
(C) = C
kB
(mod N) (2)
Dễ thấy rằng, bản rõ ban đầu cần được biến đổi một cách thích hợp thành bản mã,
sau đó để có thể tái tạo lại bản rõ ban đầu từ chính bản mã đó :
 P = D
B
(E
B
(P)) (3)
Thay thế (1) vào (2) ta có:
 (P
KB
)
kB
= P (mod N) (4)
Hvth: Lê Thúc Quốc Anh - Mã số: CH1301002 Trang 7
Chọn p và q
Tính N = p × q
Tính γ(N)
Chọn khóa KB C = PKB(mod N)
P = CkB(mod N)Chọn khóa KB
kB
kB
Bản rõ P
Bảng mã C
Bản rõ gốc P
Bài thu hoạch môn học Toán Cho Khoa Học Máy Tinh Gvhd: PGS.TS Đỗ Văn Nhơn

Trong toán học đã chứng minh được rằng, nếu N là số nguyên tố thì công thức (4)
sẽ có lời giải khi và chỉ khi K
B
.k
B
= 1 (mod N-1), áp dụng thuật toán ta thấy N = p × q với
p, q là số nguyên tố, do vậy (4) sẽ có lời giải khi và chỉ khi :
 K
B
.k
B
≡ 1 (mod γ(N)) (5)
trong đó γ(N) = LCM(p-1, q-1)
LCM (Lest Common Multiple) là bội số chung nhỏ nhất.
Nói một cách khác, đầu tiên người nhận B lựa chọn một khoá công khai K
B
một
cách ngẫu nhiên. Khi đó khoá bí mật k
B
được tính ra bằng công thức (5). Điều này hoàn
toàn tính được vì khi B biết được cặp số nguyên tố (p, q) thì sẽ tính được γ(N).
Hình 4: Sơ đồ các bước thực hiện mã hoá theo thuật toán RSA
 Độ an toàn của hệ RSA:
Hvth: Lê Thúc Quốc Anh - Mã số: CH1301002 Trang 8
Bài thu hoạch môn học Toán Cho Khoa Học Máy Tinh Gvhd: PGS.TS Đỗ Văn Nhơn
Độ an toàn của hệ thống RSA dựa trên 2 vấn đề của toán học: bài toán phân tích
ra thừa số nguyên tố các số nguyên lớn và bài toán RSA. Nếu 2 bài toán trên là khó
(không tìm được thuật toán hiệu quả để giải chúng) thì không thể thực hiện được việc phá
mã toàn bộ đối với RSA. Phá mã một phần phải được ngăn chặn bằng các phương pháp
chuyển đổi bản rõ an toàn.

Một nhận định chung là tất cả các cuộc tấn công giải mã đều mang mục đích
không tốt. Trong phần độ an toàn của hệ mã hoá RSA sẽ đề cập đến một vài phương thức
tấn công điển hình của kẻ địch nhằm giải mã trong thuật toán này.
Chúng ta xét đến trường hợp khi kẻ địch nào đó biết được modulo N, khoá công
khai K
B
và bản tin mã hoá C, khi đó kẻ địch sẽ tìm ra bản tin gốc (Plaintext) như thế nào.
Để làm được điều đó kẻ địch thường tấn vào hệ thống mật mã bằng hai phương thức sau
đây:
• Phương thức thứ nhất:
Trước tiên dựa vào phân tích thừa số modulo N. Tiếp theo sau chúng sẽ tìm
cách tính toán ra hai số nguyên tố p và q, và có khả năng thành công khi đó sẽ
tính được λ(N) và khoá bí mật k
B
. Ta thấy N cần phải là tích của hai số nguyên
tố, vì nếu N là tích của hai số nguyên tố thì thuật toán phân tích thừa số đơn
giản cần tối đa bước, bởi vì có một số nguyên tố nhỏ hơn . Mặt khác, nếu N là
tích của n số nguyên tố, thì thuật toán phân tích thừa số đơn giản cần tối đa N
1/n
bước.
Một thuật toán phân tích thừa số có thể thành phức tạp hơn, cho phép phân
tích một số N ra thành thừa số trong O()bước, trong đó p là số chia nhỏ nhất
của N, việc chọn hai số nguyên tố là cho thuật toán tăng hiệu quả.
• Phương thức thứ hai:
Phương thức tấn công thứ hai vào hệ mã hoá RSA là có thể khởi đầu bằng
cách giải quyết trường hợp thích hợp của bài toán logarit rời rạc. Trường hợp
này kẻ địch đã có trong tay bản mã C và khoá công khai K
B
tức là có cặp
(K

B
,C).
Cả hai phương thức tấn công đều cần một số bước cơ bản, đó là :
 (exp) trong đó N là số modulo.
 Một số tính chất của hệ RSA:
• Trong các hệ mật mã RSA, một bản tin có thể được mã hoá trong thời
gian tuyến tính.
Hvth: Lê Thúc Quốc Anh - Mã số: CH1301002 Trang 9
Bài thu hoạch môn học Toán Cho Khoa Học Máy Tinh Gvhd: PGS.TS Đỗ Văn Nhơn
Đối với các bản tin dài, độ dài của các số được dùng cho các khoá có thể
được coi như là hằng. Tương tự như vậy, nâng một số lên luỹ thừa được thực hiện
trong thời gian hằng, các số không được phép dài hơn một độ dài hằng. Thực ra
tham số này che dấu nhiều chi tiết cài đặt có liên quan đến việc tính toán với các
con số dài, chi phí của các phép toán thực sự là một yếu tố ngăn cản sự phổ biến
ứng dụng của phương pháp này. Phần quan trọng nhất của việc tính toán có liên
quan đến việc mã hoá bản tin. Nhưng chắc chắn là sẽ không có hệ mã hoá nào hết
nếu không tính ra được các khoá của chúng là các số lớn.
• Các khoá cho hệ mã hoá RSA có thể được tạo ra mà không phải tính
toán quá nhiều.
Một lần nữa, ta lại nói đến các phương pháp kiểm tra số nguyên tố. Mỗi số
nguyên tố lớn có thể được phát sinh bằng cách đầu tiên tạo ra một số ngẫu nhiên
lớn, sau đó kiểm tra các số kế tiếp cho tới khi tìm được một số nguyên tố.Một
phương pháp đơn giản thực hiện một phép tính trên một con số ngấu nhiên, với
xác suất 1/2 sẽ chứng minh rằng số được kiểm tra không phải nguyên tố. Bước
cuối cùng là tính p dựa vào thuật toán Euclid.
Như phần trên đã trình bày trong hệ mã hoá công khai thì khoá giải mã
(private key) k
B
và các thừa số p,q là được giữ bí mật và sự thành công của
phương pháp là tuỳ thuộc vào kẻ địch có khả năng tìm ra được giá trị của k

B
hay
không nếu cho trước N và K
B
. Rất khó có thể tìm ra được k
B
từ K
B
cần biết về p và
q, như vậy cần phân tích N ra thành thừa số để tính p và q. Nhưng việc phân tích
ra thừa số là một việc làm tốn rất nhiều thời gian, với kỹ thuật hiện đại ngày nay
thì cần tới hàng triệu năm để phân tích một số có 200 chữ số ra thừa số.
Độ an toàn của thuật toán RSA dựa trên cơ sở những khó khăn của việc xác
định các thừa số nguyên tố của một số lớn. Bảng dưới đây cho biết các thời gian
dự đoán, giả sử rằng mỗi phép toán thực hiện trong một micro giây.
Số các chữ số trong số
được phân tích
Thời gian phân tích Đơn vị thời gian
50
4 Giờ
75
104 Giờ
Hvth: Lê Thúc Quốc Anh - Mã số: CH1301002 Trang 10
Bài thu hoạch môn học Toán Cho Khoa Học Máy Tinh Gvhd: PGS.TS Đỗ Văn Nhơn
100
74 Năm
200
4.000.000 Năm
300
5 × 10

15
Năm
500
4 × 10
25
Năm
 Một số phương pháp tấn công giải thuật RSA:
Tính chất an toàn của phương pháp RSA dựa trên cơ sở chi phí cho việc giải mã
bất hợp lệ thông tin đã được mã hóa sẽ quá lớn nên xem như không thể thực hiện được.
Vì khóa là công cộng nên việc tấn công bẻ khóa phương pháp RSA thường dựa
vào khóa công cộng để xác định được khóa riêng tương ứng. Điều quan trọng là dựa vào
n để tính p, q của n, từ đó tính được d.
• Phương pháp sử dụng ϕ(n):
Giả sử người tấn công biết được giá trị φ(n). Khi đó việc xác định giá trị p,
q được đưa về việc giải hai phương trình sau:
 n = p × q (6)
 ϕ(n) = (p - 1)(q - 1) (7)
Thay q = n/p, ta được phương trình bậc hai:
 p
2
- (n - ϕ(n) + 1)p + n=0 (8)
p, q chính là hai nghiệm của phương trình bậc hai này. Tuy nhiên vấn đề
phát hiện được giá trị ϕ(n) còn khó hơn việc xác định hai thừa số nguyên tố của
n.
• Bẻ khóa dựa trên các tấn công lặp lại:
 Simons và Norris: hệ thống RSA có thể bị tổn thương khi sử dụng
tấn công lặp liên tiếp. Nếu đối thủ biết cặp khóa công cộng {n, b}
và từ khóa C thì có thể tính chuỗi các từ khóa sau:
 C
1

=C
e
(mod n)
 C
2
=C
1
e
(mod n)

 C
i
=C
i-1
e
(mod n)
 Nếu có một phần tử C
j
trong chuỗi C
1
, C
2
, C
3
, , C
i
sao cho C
j
= C
thì khi đó sẽ tìm được M = C

j
- 1 vì:
 C
j
= C
j-1
e
(mod n)
 C = M
e
(mod n)
• Sự che dấu thông tin trong hệ thống RSA:
Hệ thống RSA có đặc điểm là thông tin không phải luôn được che dấu.
Hvth: Lê Thúc Quốc Anh - Mã số: CH1301002 Trang 11
Bài thu hoạch môn học Toán Cho Khoa Học Máy Tinh Gvhd: PGS.TS Đỗ Văn Nhơn
Giả sử người gởi có e = 17, n = 35. Nếu anh ta muốn gởi bất cứ dữ liệu nào
thuộc tập sau:
 {1, 6, 7, 8, 13, 14, 15, 20, 21, 22, 27, 28, 29, 34}
thì kết quả của việc mã hóa lại chính là dữ liệu ban đầu. Nghĩa là:
 M = M
e
mod n.
Còn khi p = 109, q = 97, e = 865 thì hệ thống hoàn toàn không có sự che
dấu thông tin, bởi vì:


M, M = M
865
mod (109 × 97)



Với mỗi giá trị n, có ít nhất 9 trường hợp kết quả mã hóa chính là dữ liệu
nguồn ban đầu. Thật vậy,
 M = M
e
mod n
hay:
 M = M
e
mod p và M = M
e
mod q
Với mỗi e, mỗi đẳng thức trong (*) có ít nhất 3 giải pháp thuộc tập {0,1,-1}.
Số thông điệp không được che dấu (không bị thay đổi sau khi mã hóa):
 m = [1+gcd(e-1, p-1)][1+gcd(e-1), q-1]
Mấu chốt để có thể giải mã được thông tin là có được giá trị p và q tạo nên
giá trị n.
Khi có được hai giá trị này, ta có thể dễ dàng tính ra được
φ
(n) = (p–1)(q–
1) và giá trị a = b – 1 mod
φ
(n) theo thuật toán Euclide mở rộng.
Nếu số nguyên n có thể được phân tích ra thừa số nguyên tố, tức là giá trị p
và q có thể được xác định thì xem như tính an toàn của phương pháp RSA
không còn được bảo đảm nữa. Như vậy, tính an toàn của phương pháp RSA
dựa trên cơ sở các máy tính tại thời điểm hiện tại chưa đủ khả năng giải quyết
việc phân tích các số nguyên rất lớn ra thừa số nguyên tố. Năm 1994, Peter
Shor, một nhà khoa học tại phòng thí nghiệm AT&T, đã đưa ra một thuật toán
có thể phân tích một cách hiệu quả các số nguyên rất lớn trên máy tính lượng

tử.
II./ TỔNG QUAN VỀ HÀM BĂM VÀ THUẬT TOÁN HÀM BĂM MD5
1./ Giới thiệu hàm băm mật mã:
Hàm băm mật mã là một thủ tục tất định có đầu vào là khối dữ liệu bất kỳ và trả
về một xâu bit có độ dài cố định, gọi là giá trị băm (mật mã), mà bất kỳ sự thay đổi vô
tình hay các ý trên dữ liệu sẽ thay đổi giá trị băm. Dữ liệu đem mã hóa thường được gọi
Hvth: Lê Thúc Quốc Anh - Mã số: CH1301002 Trang 12
Bài thu hoạch môn học Toán Cho Khoa Học Máy Tinh Gvhd: PGS.TS Đỗ Văn Nhơn
là thông điệp (message), và giá trị băm đôi khi còn được gọi là tóm lược thông điệp
(message digest) hay giá trị tóm lược (digest).
Hàm băm mật mã lý tưởng có 4 tính chất chính sau:
• Dễ dàng tính giá trị băm với bất kỳ thông điệp cho trước nào.
• Không thể tìm được một thông điệp từ một giá trị băm cho trước.
• Không thể sửa được một thông điệp mà không làm thay đổi giá trị băm của nó.
• Không thể tìm ra 2 thông điệp khác nhau mà có cùng giá trị băm.
Hàm băm mật mã có rất nhiều ứng dụng trong an toàn thông tin, nhất là cho chữ
ký điện tử (Digital Signatures), mã xác thực thông điệp (MACs – Message
Authentication Codes), và một số dạng xác thực khác. Chúng cũng có thể sử dụng như
các hàm băm thông thường, để đánh chỉ số dữ liệu trong bảng băm: như điểm chỉ, để
nhận diện dữ liệu lặp hay xác định tệp dữ liệu duy nhất: hay như checksums để nhận biết
sự thay đổi dữ liệu.
a./ Tính chất:
Đa số các hàm băm mật mã được thiết kế với đầu chuỗi đầu vào có độ dài tùy ý và
kết quả đầu ra là một giá trị băm có độ dài cố định. Hàm băm mật mã phải có thể chống
lại được tất cả các kiểu tấn công phân tích đã biết. Tối thiểu, nó phải có các tính chất sau:
• Kháng tiền ảnh (Preimage resistance): cho trước một giá trị băm h, khó tìm ra
thông điệp m thỏa mã h = hash(m). Khái niệm như là hàm một chiều (one way
function). Các hàm thiếu tính chất này sẽ bị tổn thương bởi các tấn công tiền ảnh
(preimage attacks).
• Kháng tiền ảnh thứ 2 (Second preimage resistance): cho trước một đầu vào m

1
,
khó có thể tìm ra đầu vào m
2
khác (không bằng m
1
) thỏa mãn hash(m
1
) = hash(m
2
).
Tính chất này đôi khi như là kháng va chạm yếu (weak collision resistance). Các
hàm thiếu tính chất này sẽ bị tổn thương bởi các tấn công tiền ảnh thứ 2 (second
preimage attacks).
• Kháng va chạm (Collision resistance): khó có thể tìm ra 2 thông điệp m
1
và m
2
thỏa mãn hash(m
1
) = hash(m
2
). Một cặp như vậy được gọi là một va chạm băm
(mật mã), và tính chất này đôi khi như là kháng va chạm mạnh (strong collision
resistance). Tính chất này yêu cầu rằng một giá trị băm tối thiểu cũng mạnh hơn
yêu cầu kháng tiền ảnh, hơn nữa các va chạm có thể tìm được bởi tấn công ngày
sinh (birthday attack).
Hvth: Lê Thúc Quốc Anh - Mã số: CH1301002 Trang 13
Bài thu hoạch môn học Toán Cho Khoa Học Máy Tinh Gvhd: PGS.TS Đỗ Văn Nhơn
Các tính chất trên nói lên rằng đối phương ác ý không thể thay hoặc sửa dữ liệu

đầu vào mà không làm thay đổi giá trị tóm lược của nó. Do đó, nếu 2 chuỗi có cùng một
giá trị tóm lược, thì người ta tin tưởng rằng chúng là giống nhau.
Một hàm có các tiêu chí này vẫn có thể có các tính chất không mong muốn. Hiện
tại các hàm băm mật mã thông thường vẫn bị tổn thương bởi các tấn công mở rộng độ dài
(length-extension attacks): cho trước h(m) và len(m) nhưng không biết m, bằng cách
chọn m' hợp lý, kẻ tấn công có thể tính h(m || m'), với || ký hiệu là phép ghép chuỗi. Tính
chất này có thể được sử dụng để phá vỡ các lược đồ xác thực đơn giản dựa vào hàm băm.
Cấu trúc HMAC (Hash Message Authentication Code) gặp phải các vấn đề như vậy.
Về mặt lý tưởng, người ta có thể muốn các điều kiện mạnh hơn. Kẻ tấn công
không thể tìm ra 2 thông điệp có các giá trị tóm lược gần giống nhau; hoặc luận ra bất kỳ
thông tin có ích nào về dữ liệu, mà chỉ cho trước giá trị tóm lược. Do đó, hàm băm mật
mã phải tiến gần tới hàm ngẫu nhiên (đến mức có thể) mà vẫn là tất định và tính toán
hiệu quả.
Thuật toán checksum, như là CRC32 và các CRC (Cyclic Redundancy Check)
khác, được thiết kế nhiều yêu cầu yếu hơn, và nói chung không giống như là các hàm
băm mật mã. Ví dụ, có một CRC đã được sử dụng kiểm tra tính toàn vẹn trong chuẩn mã
WEP (Wired Equivalent Privacy), nhưng đã có một tấn công khai thác tính tuyến tính của
checksum.
b./ Ứng dụng:
Một ứng dụng tiêu biểu của hàm băm mật mã sẽ như sau: Alice đặt ra một bài toán
khó cho Bob, và tuyên bố rằng cô ta đã giải được. Bob sẽ phải cố gắng tự thực hiện,
nhưng chưa dám chắc rằng Alice không giải sai. Do đó, Alice viết ra lời giải của mình,
gắn thêm một giá trị nonce ngẫu nhiên, tính giá trị băm của nó và cho Bob biết giá trị
băm đó (giữ bí mật lời giải và giá trị nonce). Bằng cách này, khi Bob tìm ra lời giải của
mình vài ngày sau đó, Alice có thể chứng minh rằng cô ta có lời giải sớm hơn bằng cách
tiết lộ giá trị nonce cho Bob. (Đây là một ví dụ về một lược đồ cam kết đơn giản trong
thực tế, vai trò của Alice và Bob thường sẽ là các chương trình máy tính, và bí mật sẽ là
một cái gì đó dễ dàng giả mạo hơn là một bài toán đó theo yêu cầu).
Một ứng dụng quan trọng của băm an toàn là xác minh tính toàn vẹn của thông
điệp. Xác định liệu có thay đổi nào đã được thực hiện đối với thông điệp (hoặc một tập

tin), ví dụ, có thể được thực hiện bằng cách so sánh các giá trị tóm lược thông điệp đã
tính toán trước, và sau đó, truyền đi (hoặc sự kiện nào đó).
Hvth: Lê Thúc Quốc Anh - Mã số: CH1301002 Trang 14
Bài thu hoạch môn học Toán Cho Khoa Học Máy Tinh Gvhd: PGS.TS Đỗ Văn Nhơn
Một giá trị tóm lược thông điệp cũng có thể phục vụ như là một phương tiện nhận
dạng một tập tin đáng tin cậy một số hệ thống quản lý mã nguồn, bao gồm Git, Mercurial
và Monotone, sử dụng giá trị sha1sum của nhiều dạng nội dung khác nhau (nội dung tập
tin, cây thư mục, vv) để nhận dạng chúng một cách duy nhất. Một ứng dụng khác liên
quan tới việc xác thực mật khẩu.
Các giá trị băm còn được sử dụng để nhận dạng tập tin trên mạng chia sẻ peer-to-
peer. Ví dụ, trong một liên kết ed2k, một giá trị băm MD4-biến thể được kết hợp với kích
thước tập tin, cung cấp đủ thông tin để định vị các nguồn tập tin, tải các tập tin và xác
nhận nội dung của nó.
2./ Hàm băm dựa trên mã khối:
Có một số phương pháp sử dụng thuật toán mã khối để xây dựng một hàm băm
mật mã, cụ thể nó là hàm nén một chiều (one-way compression function).
Các phương pháp tương tự như các chế độ hoạt động của mã khối sử dụng cho
phép mã. Tất cả các hàm băm đã biết, bao gồm MD4, MD5, SHA-1 và SHA-2 được xây
dựng từ các thành phần giống mã khối, chúng được thiết kế riêng cho mục đích này, với
thông tin phản hồi để bảo đảm rằng các hàm nhận được là không song ánh.
Một thuật toán mật mã khối chuẩn như AES có thể được sử dụng thay cho những
thuật toán mật mã khối tùy chỉnh điều này thường phải trả giá về hiệu năng, nhưng có thể
được thuận lợi khi hệ thống cần thực hiện băm mật mã và chức năng mật mã khác như
mã hóa đều có thể sử dụng chung một thuật toán mã khối, nhưng bị hạn chế ở kích thước
mã hoặc phần cứng phải phù hợp với nó, chẳng hạn như trong một số hệ thống nhúng
như thẻ thông minh.
3./ Cấu trúc Merkle-Damgård:
Một hàm băm phải có thể xử lý thông điệp độ dài tùy ý cho kết quả đầu ra có độ
dài cố định. Điều này có thể đạt được bằng cách chặt đầu vào thành chuỗi các khối có
kích thước bằng nhau, và tác động vào chúng theo thứ tự bằng cách sử dụng một hàm nén

một chiều. Hàm nén hoặc có thể được thiết kế đặc biệt cho băm hoặc được xây dựng từ
một thuật toán mã khối. Một hàm băm được xây dựng với cấu trúc Merkle-Damgård có
khả năng kháng va chạm dựa vào hàm nén của nó; bất kỳ va chạm nào đối với hàm băm
đầy đủ có thể đều bắt nguồn từ một va chạm trong các hàm nén.
Hvth: Lê Thúc Quốc Anh - Mã số: CH1301002 Trang 15
Bài thu hoạch môn học Toán Cho Khoa Học Máy Tinh Gvhd: PGS.TS Đỗ Văn Nhơn
Hình 5: Cấu trúc băm Merkle-Damgård
Khối cuối xử lý cũng phải được thêm cho đủ độ dài khối; điều này rất quan trọng
đối với tính an toàn của cấu trúc Merkle-Damgård. Hầu hết các hàm băm phổ dụng, bao
gồm SHA-1 và MD5, thực hiện theo cấu trúc này.
Cấu trúc trên vẫn tiềm ẩn lỗi cố hữu, bao gồm các tấn công mở rộng độ dài và các
tấn công tạo-và-dán, và không thể song song được.
4./ Birthday attack:
Một dạng tấn công có khả năng đối với các hệ chữ ký điện tử có dùng hàm Băm là
tìm cách tạo ra những văn bản x và x' có nội dung khác nhau mà giá trị Băm giống nhau.
Kẻ địch có thể tìm cách tạo ra một số lượng rất lớn các văn bản có nội dung không thay
đổi nhưng khác nhau về biểu diễn nhị phân (đơn giản là việc thêm bớt khoảng trắng hay
dùng nhiều từ đồng nghĩa để thay thế ), sau đó sử dụng một chương trình máy tính để
tính giá trị Băm của các văn bản đó và đem so sánh với nhau để hi vọng tìm ra một cặp
văn bản đụng độ (sử dụng phương pháp thống kê).
Nhưng việc này đòi hỏi số văn bản cần được tính giá trị Băm phải lớn hơn kích
thước không gian Băm rất nhiều. Chẳng hạn như nếu hàm Băm có không gian Băm 64bit
thì số lượng văn bản cần được đem ra nạp vào chương trình phải ít nhất là 2
64
.
Tuy nhiên nếu kẻ địch thử với lượng văn bản ít hơn nhiều, trong phạm vi có thể
tính được thì xác suất để tìm được đụng độ sẽ như thế nào? Câu trả lời là “có thể thực
hiện được”. Bản chất của hiện tượng này được minh hoạ rõ thông qua phát biểu sau,
thường được gọi là nghịch lý ngày sinh (birthday paradox).
5./ Hàm băm mật mã:

Hvth: Lê Thúc Quốc Anh - Mã số: CH1301002 Trang 16
Bài thu hoạch môn học Toán Cho Khoa Học Máy Tinh Gvhd: PGS.TS Đỗ Văn Nhơn
Hàm băm mật mã là hàm toán học chuyển đổi một thông điệp có độ dài bất kỳ
thành một dãy bit có độ dài cố định (tùy thuộc vào thuật toán băm). Dãy bit này được gọi
là thông điệp rút gọn (message digest) hay giá trị băm (hash value), đại diện cho thông
điệp ban đầu. Dễ dàng nhận thấy rằng hàm băm h không phải là một song ánh. Do đó, với
thông điệp x bất kỳ, tồn tại thông điệp x' ≠ x sao cho h(x) = h(x'). Lúc này, ta nói rằng "có
sự đụng độ xảy ra". Một hàm băm h được gọi là an toàn (hay "ít bị đụng độ") khi không
thể xác định được (bằng cách tính toán) cặp thông điệp x và x' thỏa mãn x ≠ x' và h(x) =
h(x'). Trên thực tế, các thuật toán băm là hàm một chiều, do đó, rất khó để xây dựng lại
thông điệp ban đầu từ thông điệp rút gọn. Hàm băm giúp xác định được tính toàn vẹn dữ
liệu của thông tin: mọi thay đổi, dù là rất nhỏ, trên thông điệp cho trước, ví dụ như đổi
giá trị 1 bit, đều làm thay đổi thông điệp rút gọn tương ứng. Tính chất này hữu ích trong
việc phát sinh, kiểm tra chữ ký điện tử, các đoạn mã chứng nhận thông điệp, phát sinh số
ngẫu nhiên, tạo ra khóa cho quá trình mã hóa…
Hàm băm là nền tảng cho nhiều ứng dụng mã hóa. Có nhiều thuật toán để thực
hiện hàm băm, như SHA-1, MD5,
6./ Cấu trúc hàm băm:
Đa số các hàm băm mật mã đều có cấu trúc giải thuật như sau:
• Cho trước một thông điệp M có độ dài bất kỳ. Tùy theo thuật toán được sử dụng,
chúng ta có thể cần bổ sung một số bit vào thông điệp này để nhận được thông
điệp có độ dài là bội số của một hằng số cho trước. Chia nhỏ thông điệp thành
từng khối có kích thước bằng nhau: M
1
, M
2
, …M
s
• Gọi H là trạng thái có kích thước n bit, f là "hàm nén" thực hiện thao tác trộn khối
dữ liệu với trạng thái hiện hành. Khởi gán H0 bằng một vector khởi tạo nào đó H

i
= f(H
i-1
, M) với i = 1, 2, 3, …, s, H
s
chính là thông điệp rút gọn của thông điệp M
ban đầu.
7./ Tính an toàn hàm băm và hiện tượng đụng độ:
Hàm băm được xem là an toàn đối với hiện tượng đụng độ khi rất khó tìm được
hai thông điệp có cùng giá trị băm.
Nhận xét: Trong một tập hợp mà các phần tử mang một trong N giá trị cho trước
với xác suất bằng nhau, chúng ta cần khoảng N phép thử ngẫu nhiên để tìm ra một cặp
phần tử có cùng giá trị.
Hvth: Lê Thúc Quốc Anh - Mã số: CH1301002 Trang 17
Bài thu hoạch môn học Toán Cho Khoa Học Máy Tinh Gvhd: PGS.TS Đỗ Văn Nhơn
Như vậy, phương pháp hàm băm được xem là an toàn đối với hiện tượng đụng độ
nếu chưa có phương pháp tấn công nào có thể tìm ra cặp thông điệp có cùng giá trị hàm
băm với số lượng tính toán ít hơn đáng kể so với ngưỡng 2
n/2
, với n là kích thước (tính
bằng bit) của giá trị băm.
Phương pháp tấn công dựa vào đụng độ:
• Tìm ra 2 thông điệp có nội dung khác nhau nhưng cùng giá trị băm.
• Ký trên một thông điệp, sau đó, người ký sẽ không thừa nhận đây là chữ ký của
mình mà nói rằng mình đã ký trên một thông điệp khác.
• Như vậy, cần phải chọn 2 thông điệp "đụng độ" với nhau trước khi ký.
8./ Tính một chiều:
Hàm băm được xem là hàm một chiều khi cho trước giá trị băm, không thể tái tạo
lại thông điệp ban đầu, hay còn gọi là "tiền ảnh" ("pre-image"). Như vậy, trong trường
hợp lý tưởng, cần phải thực hiện hàm băm cho khoảng 2

n
thông điệp để tìm ra được "tiền
ảnh" tương ứng với một giá trị băm.
Nếu tìm ra được một phương pháp tấn công cho phép xác định được “tiền ảnh”
tương ứng với một giá trị băm cho trước thì thuật toán băm sẽ không còn an toàn nữa.
Cách tấn công nhằm tạo ra một thông điệp khác với thông điệp ban đầu nhưng có cùng
giá trị băm gọi là tấn công "tiền ảnh thứ hai" (second pre-image attack).
9./ Sử dụng cho các nguyên thủy mật mã:
Các hàm băm có thể được dùng để xây dựng nguyên thủy mật mã khác. Tuy
nhiên, để những nguyên thủy mật mã này được an toàn, thì cần phải chú ý xây dựng
chúng theo đúng nguyên lý.
Mã xác thực thông điêp (MACs) thường được xây dựng từ hàm băm. HMAC cũng
dựa vào MAC.
Cũng như thuật toán mã khối có thể được dùng để xây dựng hàm băm, hàm băm
có thể được sử dụng để xây dựng các thuật toán mã khối. Cấu trúc Luby-Rackoff sử dụng
các hàm băm xây dựng mã khối có thể chứng minh được an toàn nếu hàm băm mà nó dựa
vào là an toàn. Ngoài ra, có nhiều hàm băm (bao gồm cả các hàm băm SHA) được xây
Hvth: Lê Thúc Quốc Anh - Mã số: CH1301002 Trang 18
Bài thu hoạch môn học Toán Cho Khoa Học Máy Tinh Gvhd: PGS.TS Đỗ Văn Nhơn
dựng bằng cách sử dụng một thuật toán mã khối mục đích đặc biệt theo cấu trúc Davies-
Meyer hoặc cấu trúc khác mã khối đó cũng có thể được sử dụng trong một chế độ hoạt
động thông thường, mà không có sự đảm bảo an toàn tương tự.
Bộ sinh số giả ngẫu nhiên (PRNGs) có thể được xây dựng dựa vào hàm băm. Điều
này được thực hiện bằng cách kết hợp một mầm ngẫu nhiên (bí mật) với một bộ đếm và
lấy giá trị băm của nó.
Thuật toán mã dòng (tream cipher) có thể được xây dựng dựa vào các hàm băm.
Thường điều này được thực hiện bằng cách: đầu tiên, xây dựng một Bộ sinh số số giả
ngẫu nhiên an toàn mật mã sau đó, sử dụng dòng các byte ngẫu nhiên như là dòng khóa
(keystream). SEAL là một thuật toán mã dòng sử dụng SHA-1 để tạo ra các bảng bên
trong, mà sau đó được sử dụng trong một bộ sinh dòng khóa nhiều hay ít không liên quan

đến các thuật toán băm SEAL không được đảm bảo tính mạnh (hay yếu) như SHA-1.
10./ Ghép các hàm băm mật mã:
Ghép các kết quả đầu ra từ nhiều hàm băm tạo ra tính kháng va chạm tối thiểu
cũng tốt như là độ mạnh nhất của thuật toán trong các kết nối. Ví dụ, SSL sử dụng ghép
nối MD5 và SHA-1 để đảm bảo giao thức đó sẽ vẫn an toàn thậm chí nếu một hàm băm
bị phá vỡ.
Tuy nhiên, với các hàm băm Merkle-Damgård, hàm ghép nối chỉ mạnh như các
thành phần tốt nhất, chứ không mạnh hơn. Joux chỉ ra rằng 2-va chạm dẫn đến n-va chạm
nếu dễ dàng tìm ra 2 thông điệp có cùng giá trị băm MD5, thì không khó để tìm thấy
nhiều thông điệp khi kẻ tấn công muốn lấy các giá trị băm MD5 giống nhau. Trong số n
thông điệp với cùng giá trị băm MD5, có khả năng có được một va chạm SHA-1. Nhưng
công việc cần thực hiện thêm là tìm va chạm SHA-1 (làm sao để tốt hơn tìm kiếm ngày
sinh) là đa thức. Lập luận này được tổng kết bởi Finney.
11./ Thuật toán băm mật mã:
Có một danh sách dài các hàm băm mật mã, mặc dù trong đó có nhiều hàm băm
được cho là dễ bị tổn thương và không nên sử dụng. Ngay cả khi một hàm băm chưa bị
phá vỡ, một tấn công thành công đối với một biến thể yếu đó có thể làm giảm sự tự tin
của các chuyên gia và dẫn đến loại bỏ nó. Ví dụ, vào tháng 8 năm 2004 người ta đã tìm ra
những điểm yếu của một vài hàm băm phổ biến vào thời đó, bao gồm SHA-0, RIPEMD,
Hvth: Lê Thúc Quốc Anh - Mã số: CH1301002 Trang 19
Bài thu hoạch môn học Toán Cho Khoa Học Máy Tinh Gvhd: PGS.TS Đỗ Văn Nhơn
và MD5. Điều này đã đặt ra câu hỏi an ninh lâu dài của các thuật toán sau này được bắt
nguồn từ những hàm băm này - đặc biệt, SHA-1 (một phiên bản mạnh của SHA-0),
RIPEMD-128, và RIPEMD-160 (cả hai phiên bản mạnh của RIPEMD). Vì vậy, cả SHA-
0 và RIPEMD đều không được sử dụng rộng rãi kể từ khi chúng được thay thế bởi các
phiên bản mạnh.
Đến năm 2009, hai hàm băm mật mã được sử dụng thông dụng nhất vẫn là MD5
và SHA-1. Tuy nhiên, MD5 đã bị phá vỡ do có một tấn công lên nó để phá vỡ SSL trong
năm 2008 SHA-0 và SHA-1 là các thành viên của họ hàm băm SHA được phát triển bởi
NSA. Vào tháng 2 năm 2005, đã tấn công thành công trên SHA-1, việc tìm kiếm va chạm

trong khoảng 269 phép toán băm, thay vì 280 theo dự kiến cho hàm băm 160-bit. Vào
tháng 8 năm 2005, có một tấn công thành công trên SHA-1 trong đó việc tìm kiếm va
chạm chỉ cần 263 phép toán băm. Điểm yếu lý thuyết của SHA-1 tồn tại vốn có, nhưng
gợi ý rằng có thể thực hiện về mặt thực tế để phá vỡ nó cũng phải mất vài năm. Các ứng
dụng mới có thể tránh được những vấn đề này bằng cách sử dụng thêm các thành viên
tiên tiến của họ SHA, như SHA-2, hoặc sử dụng các kỹ thuật như băm ngẫu nhiên hóa sẽ
công quan tâm đến kháng va chạm.
Tuy nhiên, để đảm bảo tính chất mạnh lâu dài của các ứng dụng có sử dụng hàm
băm, hiện có một cuộc thi nhằm thiết kế hàm băm thay thế cho SHA-2, nó sẽ có tên là
SHA-3 và trở thành một tiêu chuẩn FIPS vào năm 2012.
12./ Phương pháp Secure Hash Standard:
Phương pháp Secure Hash Standard (SHS) do NIST và NSA xây dựng được công
bố trên Federal Register vào ngày 31 tháng 1 năm 1992 và sau đó chính thức trở thành
phương pháp chuẩn từ ngày 13 tháng 5 năm 1993. Nhìn chung, SHS được xây dựng trên
cùng cơ sở với phương pháp MD4 và MD5. Tuy nhiên, phương pháp SHS lại áp dụng
trên hệ thống big-endian thay vì little-endian như phương pháp MD4 và MD5. Ngoài ra,
thông điệp rút gọn kết quả của hàm băm SHS có độ dài 160 bit (nên phương pháp này
thường được sử dụng kết hợp với thuật toán DSS).
13./ Một số hàm băm nổi tiếng:
• Hàm băm MD4 (Message Digest 4)
Hvth: Lê Thúc Quốc Anh - Mã số: CH1301002 Trang 20
Bài thu hoạch môn học Toán Cho Khoa Học Máy Tinh Gvhd: PGS.TS Đỗ Văn Nhơn
• Hàm băm MD5 (Message Digest 5)
• SHS (Secure Hash Standard)
• Hàm băm Davies-Mayer
• Hàm AES-Hash
• Hàm băm Davies-Mayer và AES-Hash
• SHA-1…
14./ Hàm băm MD5:
a./ Giới thiệu:

MD5 (viết tắt của tiếng Anh Message-Digest algorithm 5, giải thuật Tiêu hóa tin
5) là một Bộ tạo Hash mật mã được sử dụng phổ biến với giá trị 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. Một bảng băm MD5 thường
được diễn tả bằng một số hệ thập lục phân 32 ký tự.
MD5 được thiết kế bởi Ronald Rivest vào năm 1991 để thay thế cho hàm băm
trước đó, MD4. Vào năm 1996, người ta phát hiện ra một lỗ hổng trong MD5; trong khi
vẫn chưa biết nó có phải là lỗi nghiêm trọng hay không, những chuyên gia mã hóa bắt
đầu đề nghị sử dụng những giải thuật khác, như SHA-1 (khi đó cũng bị xem là không an
toàn). Trong năm 2004, nhiều lỗ hổng hơn bị 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.
MD5 có 2 ứng dụng quan trọng:
• MD5 được sử dụng rộng rải trong thế giới phần mềm để đảm bảo rằng tập tin tải
về không bị hỏng. Người sử dụng có thể so sánh giữa thông số kiểm tra phần mềm
bằng MD5 được công bố với thông số kiểm tra phần mềm tải về bằng MD5. Hệ
điều hành Unix sử dụng MD5 để kiểm tra các gói mà nó phân phối, trong khi hệ
điều hành Windows sử dụng phần mềm của hãng thứ ba.
• MD5 được dùng để mã hóa mật khẩu. Mục đích của việc mã hóa này là biến đổi
một chuổi mật khẩu thành một đoạn mã khác, sao cho từ đoạn mã đó không thể
nào lần trở lại mật khẩu. Có nghĩa là việc giải mã là không thể hoặc phải mất một
khoãng thời gian vô tận (đủ để làm nản lòng các hacker).
b./ Thuật giải:
Hvth: Lê Thúc Quốc Anh - Mã số: CH1301002 Trang 21
Bài thu hoạch môn học Toán Cho Khoa Học Máy Tinh Gvhd: PGS.TS Đỗ Văn Nhơn
MD5 biến đổi một thông điệp có chiều dài bất kì thành một khối có kích thước cố
định 128 bits. Thông điệp đưa vào sẻ được cắt thành các khối 512 bits. Thông điệp được
đưa vào bộ đệm để chiều dài của nó sẻ chia hết cho 512. Bộ đệm hoạt động như sau:
• Trước tiên chèn bit 1 vào cuối thông điệp.
• Tiếp đó là hàng loạt bit Zero cho tới khi chiều dài của nó nhỏ hơn bội số của 512
một khoảng 64 bit.

• Phần còn lại sẽ được lấp đầy bởi một số nguyên 64 bit biểu diển chiều dài ban đầu
của thông điệp. Thuật toán chính của MD5 hoạt động trên một bộ 128 bit. Chia
nhỏ nó ra thành 4 từ 32 bit, kí hiệu là A, B, C và D. Các giá trị này là các hằng số
cố định. Sau đó thuật toán chính sẻ luân phiên hoạt động trên các khối 512 bit.
Mỗi khối sẻ phối hợp với một bộ. Quá trình xữ lý một khối thông điệp bao gồm 4
bước tương tự nhau, gọi là vòng ("round"). Mỗi vòng lại gồm 16 quá trình tương
tự nhau dựa trên hàm một chiều F, phép cộng module và phép xoay trái…
Hình dưới mô tả một quá trình trong một vòng. Có 4 hàm một chiều F có thể sử
dụng. Mỗi vòng sử dụng một hàm khác nhau.
Hình 6: Một thao tác MD5
Hàm băm MD5 (còn được gọi là hàm tóm tắt thông điệp - message degests) sẻ trả
về một chuổi số thập lục phân gồm 32 số liên tiếp.
Hvth: Lê Thúc Quốc Anh - Mã số: CH1301002 Trang 22
Bài thu hoạch môn học Toán Cho Khoa Học Máy Tinh Gvhd: PGS.TS Đỗ Văn Nhơn
Dưới đây là các ví dụ mô tả các kết quả thu được sau khi băm.
• MD5("The quick brown fox jumps over the lazy dog")
= 9e107d9d372bb6826bd81d3542a419d6
Thậm chỉ chỉ cần một thay đổi nhỏ cũng làm thay đổi hoàn toàn kết quả trả về:
• MD5("The quick brown fox jumps over the lazy cog")
= 1055d3e698d289f2af8663725127bd4b
Ngay cả một chuổi rổng cũng cho ra một kết quả phức tạp:
• MD5("") = d41d8cd98f00b204e9800998ecf8427e
c./ Khả năng bị tấn công:
Vì MD5 chỉ dò qua dữ liệu một lần, nếu hai tiền tố với cùng bảng băm được xây
nên, thì cùng một hậu tố có thể cùng được thêm vào để khiến cho đụng độ dễ xảy ra. Tức
là hai dữ liệu vào (input) X và Y hoàn toàn khác nhau nhưng có thể ra (output) được một
md5 hash giống nhau. Tuy nhiên xác suất để xảy ra điều này là khá nhỏ.
Vì những kỹ thuật tìm đụng độ hiện nay cho phép các trạng thái băm trước đó
được xác định một cách ngẫu nhiên, có thể tìm thấy xung đột đối với bất kỳ tiền tố mong
muốn nào; có nghĩa là, đối bất kỳ một chuỗi các ký tự X cho trước, hai tập tin đụng độ có

thể được xác định mà đều bắt đầu với X.
Tất cả những gì cần để tạo ra hai tập tin đụng độ là một tập tin mẫu, với một khối
dữ liệu 128 byte được xếp trên giới hạn 64 byte, có thể thay đổi tự do bằng giải thuật tìm
va chạm.
Vừa rồi, một số dự án đã tạo ra "bảng cầu vồng" MD5 có thể dễ dàng tiếp cận trực
tuyến, và có thể được dùng để dịch ngược nhiều bảng băm MD5 thành chuỗi mà có thể
đụng độ với đầu nhập gốc, thường dùng với mục đích bẻ mật khẩu.
III./ XÂY DỰNG ỨNG DỤNG MÔ PHỎNG THUẬT TOÁN MD5:
1./ Mã giả cho thuật toán MD5:
Hvth: Lê Thúc Quốc Anh - Mã số: CH1301002 Trang 23
Bài thu hoạch môn học Toán Cho Khoa Học Máy Tinh Gvhd: PGS.TS Đỗ Văn Nhơn
//Chú ý: Tất cả các biến đều là biến không dấu 32 bit và bao phủ mô
đun 2^32 khi tính toán
var int[64] r, k
//r xác định số dịch chuyển mỗi vòng
r[ 0 15]:= {7,12,17,22,7,12,17,22,7,12,17,22,7,12,17,22}
r[16 31]:= {5,9, 14,20,5,9, 14,20,5,9, 14,20,5,9, 14,20}
r[32 47]:= {4,11,16,23,4,11,16,23,4,11,16,23,4,11,16,23}
r[48 63]:= {6,10,15,21,6,10,15,21,6,10,15,21,6,10,15,21}
//Sử dụng phần nguyên nhị phân của sin của số nguyên làm hằng số:
for i from 0 to 63
k[i]:= floor(abs(sin(i + 1)) × (2 pow 32))
//Khởi tạo biến:
var int h0:= 0x67452301
var int h1:= 0xEFCDAB89
var int h2:= 0x98BADCFE
var int h3:= 0x10325476
//Tiền xử lý:
append "1" bit to message
append "0" bits until message length in bits ≡ 448 (mod 512)

append bit (bit, not byte) length of unpadded message as 64-bit
little-endian integer to message
//Xử lý mẩu tin trong đoạn 512-bit tiếp theo:
for each 512-bit chunk of message
break chunk into sixteen 32-bit little-endian words w[i], 0 ≤ i ≤ 15
//Khởi tạo giá trị băm cho đoạn này:
var int a:= h0
var int b:= h1
var int c:= h2
var int d:= h3
//Vòng lặp chính:
for i from 0 to 63
if 0 ≤ i ≤ 15 then
f:= (b and c) or ((not b) and d)
g:= i
else if 16 ≤ i ≤ 31
f:= (d and b) or ((not d) and c)
g:= (5×i + 1) mod 16
else if 32 ≤ i ≤ 47
Hvth: Lê Thúc Quốc Anh - Mã số: CH1301002 Trang 24
Bài thu hoạch môn học Toán Cho Khoa Học Máy Tinh Gvhd: PGS.TS Đỗ Văn Nhơn
f:= b xor c xor d
g:= (3×i + 5) mod 16
else if 48 ≤ i ≤ 63
f:= c xor (b or (not d))
g:= (7×i) mod 16

temp:= d
d:= c
c:= b

b:= b + leftrotate((a + f + k[i] + w[g]), r[i])
a:= temp
//Thêm bảng băm của đoạn vào kết quả:
h0:= h0 + a
h1:= h1 + b
h2:= h2 + c
h3:= h3 + d
var int digest:= h0 append h1 append h2 append h3 //(expressed as
little-endian)
//định nghĩa hàm dịch trái
leftrotate (x, c)
return (x << c) or (x >> (32-c));
2./ Chương trình minh họa:
a./ Công cụ & yêu cầu cài đặt:
• Chương trình được viết bằng Visual Studio CSharp 2008.
• Yêu cầu: Net Frameworks 3.5
b./ Minh họa chương trình:
Hvth: Lê Thúc Quốc Anh - Mã số: CH1301002 Trang 25

×