Tải bản đầy đủ (.doc) (64 trang)

Nghiên cứu độ an toàn của hàm băm MD55

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 (858.41 KB, 64 trang )

ĐẠI HỌC THÁI NGUYÊN
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THÔNG

NGUYỄN HỮU HOÀNG

NGHIÊN CỨU
ĐỘ AN TOÀN CỦA HÀM BĂM MD5

LUẬN VĂN THẠC SĨ KHOA HỌC MÁY TÍNH

Thái Nguyên - 2013


ĐẠI HỌC THÁI NGUYÊN
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THÔNG

NGUYỄN HỮU HOÀNG

NGHIÊN CỨU
ĐỘ AN TOÀN CỦA HÀM BĂM MD5
Chuyên ngành: Khoa học máy tính
Mã số: 60 48 01

LUẬN VĂN THẠC SĨ KHOA HỌC MÁY TÍNH

NGƯỜI HƯỚNG DẪN KHOA HỌC

TS. Hồ Văn Canh

Thái Nguyên - 2013



i

MỤC LỤC
1.1. Định nghĩa hàm băm.......................................................................................................................... 2
1.3. Xung đột băm.................................................................................................................................... 3
1.5. Một số hàm băm phổ biến................................................................................................................. 4
1.5.1. Hàm băm MD4......................................................................................................................................5
1.5.2. Hàm băm SHA-1....................................................................................................................................6
1.5.3. Hàm băm SHA-256................................................................................................................................8
1.5.4. Hàm băm SHA-384, SHA-512..............................................................................................................10

CHƯƠNG 2...........................................................................................................15
HÀM BĂM MD5..................................................................................................15
CHƯƠNG 3........................................................................................................... 25
ĐÁNH GIÁ ĐỘ AN TOÀN MD5........................................................................25
DỰA TRÊN THỬ NGHIỆM TẤN CÔNG.........................................................25
3.1. Tấn công hàm băm........................................................................................................................... 25
3.2. Các phương pháp tấn công hàm băm phổ biến.................................................................................25
3.2.1. Tấn công dựa trên lý thuyết ngày sinh................................................................................................25
3.2.3. Tấn công thuật toán............................................................................................................................29
3.2.4. Tấn công theo nguyên lý vét cạn.........................................................................................................36
3.3.3. Kết luận về độ an toàn MD5................................................................................................................48

KẾT LUẬN...........................................................................................................52


ii

LỜI CẢM ƠN

Đầu tiên, tôi xin gửi lời cảm ơn chân thành và sắc nhất tới Tiến sỹ Hồ
Văn Canh, thầy đã tận tình chỉ bảo và giúp đỡ tôi trong suốt quá trình làm
luận văn. Bên cạnh những kiến thức tôi còn học hỏi được ở thầy tinh thần làm
việc khoa học và nghiêm túc.
Tôi xin chân thành cám ơn tới Khoa CNTT Trường Đại học Công nghệ
thông tin và Truyền thông, các thầy cô đã giúp đỡ và tận tình truyền đạt các
kiến thức cho tôi trong suốt quá trình học tập và nghiên cứu. Tôi xin cảm ơn
ban chủ nhiệm khoa và các cán bộ đã tạo điều kiện tốt nhất cho chúng tôi
trong quá trình học tập và hoàn thành luận văn của mình.
Tôi xin bày tỏ lòng biết ơn tới gia đình, bạn bè, đồng nghiệp và những
người thân đã động viên khích lệ tinh thần và giúp đỡ tôi hoàn thành luận văn này.


iii

LỜI CAM ĐOAN
Tôi xin cam đoan, toàn bộ nội dung liên quan tới đề tài được trình bày
trong luận văn là bản thân tôi tự tìm hiểu và nghiên cứu, dưới sự hướng dẫn
của Thầy giáo TS. Hồ Văn Canh.
Các tài liệu, số liệu tham khảo được trích dẫn đầy đủ nguồn gốc. Tôi
xin chịu trách nhiệm trước pháp luật lời cam đoan của mình.

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

Nguyễn Hữu Hoàng


iv

THUẬT NGỮ VIẾT TẮT


Số thứ tự

Thuật Ngữ

Tên Đầy Đủ

1

MAC

Message Authentication Code

2

HMAC

Keyed-Hash Message Authentication Code

3

opad

Outer pad

4

ipad

Inner pad


5

SHA

Secure Hash Algorithm

6

MD

Merkle-Damgård

7

TLS

Transport Layer Security

8

CA

Certification Authority

9

IPSec

Internet Protocol Security


10

GPU

Graphic Proccessing Unit

11

SM

Streaming Multiprocessor

Ý NGHĨA CÁC KÝ HIỆU

Số thứ tự

Ký hiệu

Ý nghĩa


v

1



Phép toán XOR


2

<<<

Phép dịch bít vòng

3

||

Phép ghép chuỗi

4



Phép OR

5



Phép AND

6



Phép phủ định


7

+

Phép cộng module 2 32

8

ROTR n (x)

Dịch xoay vòng x sang bên phải n bít

9

SHR n (x)

Dịch bít của số x sang bên phải n bít

DANH MỤC HÌNH VẼ

HÌNH 1.1. CẤU TRÚC LẶP CỦA HÀM BĂM MD.............................................5
HÌNH 2.2. THUẬT TOÁN MÔ TẢ MD5/SHA-1................................................19


vi

HÌNH 3.3. CẤU TRÚC LẶP MERKLE-DAMGÅRD (SAO CHÉP TỪ
WIKIPEDIA).........................................................................................................28
HÌNH 3. 4. TẤN CÔNG MỞ RỘNG CHIỀU DÀI.............................................28
HÌNH 3. 5. BIỂU ĐỒ SO SÁNH SỰ PHÁT TRIỂN CỦA GPU VÀ CPU........38

HÌNH 3.6. SO SÁNH SỐ NHÂN CỦA GPU VÀ CPU........................................38
HÌNH 3.7. MÔ TẢ CHIẾN LƯỢC KIỂM TRA MẬT KHẨU SONG SONG..40
HÌNH 3. 8. CHIA MẬT KHẨU VÀO CÁC NHÓM...........................................41
HÌNH 3.9. TẠO GIÁ TRỊ BĂM CHO MẬT KHẨU..........................................49
HÌNH 3.10. ADD GIÁ TRỊ BĂM CỦA MẬT KHẨU VÀO PHẦN MỀM........50
HÌNH 3.11. QUÁ TRÌNH TẠO VÀ KIỂM TRA MẬT KHẨU.........................50
HÌNH 3.12. TÌM KIẾM MẬT KHẨU THÀNH CÔNG.....................................51


vii


viii

DANH MỤC BẢNG BIỂU
BẢNG 1. 1.BẢNG SO SÁNH CÁC LOẠI HÀM BĂM......................................13
BẢNG 3.2. KIỂU TẤN CÔNG CÁC HÀM BĂM...............................................27
BẢNG 3. 3. MODIFY MULTIPLE MESSAGE M.............................................35
BẢNG 3.4. SO SÁNH TỐC ĐỘ CỦA TẠO VÀ KIỂM TRA CÁC KHÓA
TRÊN CPU / GPU.................................................................................................47
BẢNG 3.5. THỜI GIAN CHO PHỤC HỒI MẬT KHẨU TRÊN GPU.............47


1

MỞ ĐẦU
Ngày nay, các giao dịch thương mại qua mạng internet trở nên rất phổ
biến và do đó cần phải có biện pháp để đảm bảo an toàn cho các giao dịch
này. Một trong các biện pháp đó là việc sử dụng hàm băm (hash function)
trong công tác bảo an. Hàm băm không những đảm bảo được sự toàn vẹn của

các giao dịch mà còn có thể đảm bảo sự bí mật về dữ liệu của các bên giao
dịch[1][2]. Người ta đã khẳng định rằng: “sự ra đời của các hệ mật mã khóa
công khai cùng với các hàm băm là một cuộc cách mạng của kỹ thuật mật mã
và được coi như một phương thức mật mã không dùng khóa”[2]. Hàm băm
cũng đóng vai trò hết sức quan trọng trong việc ứng dụng chứng chỉ số mà cụ
thể nhất là trong chữ kí số. Ngoài ra, hàm băm còn là một công cụ hữu hiệu
để bảo vệ các passwords người dùng và bảo vệ dữ liệu có hiệu quả trong các
cơ sở dữ liệu phân tán. Hiện nay, hàm băm được sử dụng nhiều ở Việt Nam
cũng như trên thế giới là MD5 và họ SHA. Do tầm quan trọng của hàm băm
mà hiện nay đã có nhiều công trình nghiên cứu về hàm băm và mức độ an
toàn của chúng[3][4][5][6].
Vậy, một câu hỏi được đặt ra hiện nay là: Mức độ an toàn của các hàm
băm đến đâu trong thực tế khi mà công nghệ tính toán ngày càng phát triển
mạnh mẽ như hiện nay? Trong Luận văn này tôi trình bày một cách tiếp cận
mới đó là việc sử dụng các bộ xử lý đồ họa đa lõi hiện đại để tính toàn khôi
phục thông điệp MD5[14][16][17].


2

Chương 1
LÝ THUYẾT VỀ HÀM BĂM

1.1.

Định nghĩa hàm băm

Hàm băm H nhận đầu vào là chuỗi dữ liệu M có chiều dài bất kỳ và tạo
ra chuỗi đầu ra (hay còn gọi là "hash value") có chiều dài cố định theo công
thức sau.

h = H (M).
Ví dụ minh họa về hàm băm.

Hình 1.1. Minh họa về hàm băm
- h được gọi là giá trị đầu ra của hàm băm, có chiều dài cố định (h còn
gọi là message digest hoặc hash value).
- M là bức thông điệp có chiều dài bất kỳ hữu hạn (chiều dài của M
không vượt quá 2 64 bít, nếu chiều dài của M vượt quá 2 64 bít thì chỉ có 2 64
bít đầu được sử lý, còn tất cả các bít được bỏ qua trong quá trình tính toán của
hàm băm).


3

- Hàm băm được sử dụng trong việc mã hóa password, chữ ký số, giao
dịch điện tử, kiểm tra sự toàn vẹn của một file, v.v. Hàm băm được sử dụng
phổ biến nhất là hàm băm một chiều (one-way) MD5 và SHA-*[9][12]

1.2.

Các tính chất của hàm băm
Tính chất 1:
Hàm băm H là không va chạm yếu.
Hàm băm H phải có phi xung đột yếu (weak-collision) cao, điều đó có
nghĩa là cho trước M ta khó có thể tìm được bức thông điệp M’ ≠ M sao cho
H(M) = H(M’) .
Tính chất 2: Hàm băm H là không va chạm mạnh.
Hàm băm H có tính phi đụng độ cao (strong collision), điều đó có nghĩa
là ta khó có thể tìm được cặp thông điệp (M, M’) M’ ≠ M sao cho
H(M)=H(M’).

Tính chất 3: Hàm băm H là hàm một chiều.
Hàm băm H có tính một chiều (one-way) có nghĩa là cho trước M việc
tính H(M) được thực hiện nhanh chóng nhưng nếu cho trước giá trị H(M) thì
sẽ khó có thể tìm được giá trị M[9].

1.3.

Xung đột băm

Có nghĩa là hai thông điệp khác nhau khi băm thì chúng tạo ra cùng giá
trị băm. Gọi M, M’ là hai thông điệp sao cho M ≠ M’, H là hàm băm, xung đột
băm xảy ra khi H(M)=H(M’).
Về mặt lý thuyết thì hoàn toàn ta có thể tìm được hai thông điệp khác
nhau mà chúng cho ra cùng một giá trị băm, nhưng thực tế việc này làm rất
khó khăn, và ngay cả khi chúng ta tạo được hai thông điệp với nội dung khác
nhau nhưng chúng cùng tạo ra giá trị băm, nhưng nội dung đó không có ý
nghĩa với con người có nghĩa là nếu cho trước một thông điệp ta hoàn toàn có
thể tìm được thông điệp thứ hai khác tạo ra cùng giá trị băm nhưng chúng ta
khó có thể điều khiển được nội dung thông điệp này sao cho nó có ý nghĩa với
con người, do vậy có thể kết luận các hàm băm hiện tại vẫn đủ an toàn[9].


4

1.4.

Ứng dụng

Hàm băm đượ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 Hàm băm được công bố với thông số kiểm tra phần
mềm tải về bằng Hàm băm. 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.
Hàm băm cũng đượ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ó có thể 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).
Tạo mã chứng thực thông điệp ứng dụng trong chứng chỉ số, sự ra đời
của các hệ mật mã khóa công khai cùng với các hàm băm là một cuộc cách
mạng của kỹ thuật mật mã. Chính vì vậy nhiều người nói rằng hàm băm là
một phương thức mật mã không dùng khóa.
Một ứng dụng quan trọng không thể thiếu đối với hàm băm là ứng dụng
trong chữ ký số[2][12][13].

1.5.

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ứ 2 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
bit). Ở thời điểm bắt đầu các “chaining variable” có giá trị khởi tạo (giá trị



5

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 [1][2][4][5].
Thuật toán chung cho các hàm băm này như sau.

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 bít (chiều dài các block
message là 512 hay 1024 bít là tùy thuộc vào thuật toán) và giá trị của
chainging variable của vòng trước, ta có thể mô hình như sau:

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

1.5.1.

Hàm băm MD4

MD4 (Message-Digest thuật toán 4) là một thuật toán (thứ tư trong loạt
a) được thiết kế bởi Giáo sư Ronald Rivest của MIT vào năm 1990. Nó thực


6

hiện một hàm băm mật mã để sử dụng trong kiểm tra tính toàn vẹn thông
điệp. Chiều dài của giá trị băm là 128 bit.
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 [9].

1.5.2.

Hàm băm SHA-1

Thuật toán cho hàm băm này nhận đầu vào là bức thông điệp có chiều
dài hữu hạn bất kỳ cho đầu ra là chuỗi có chiều dài cố định, hàm băm SHA-1
có chiều dài đầu ra là 160 bit.
- Việc đệm được thực hiện tương tự việc đệm trong thuật toán cho hàm
băm MD5.
- Chia bức thông điệp thành các khối 512 bit.
- Thực hiện việc khởi tạo cho các biến chaining variable như sau:
( 0)

H 0 =0x67452301
H 1( 0) =0xefcdab89


7


H (20) =0x98badcfe
( 0)

H 3 =0x10325476
H (40) =0xc3d2e1f0.
- Thực hiện sử lý các khối.
Xây dựng hàm biến đổi khối đầu vào theo công thức sau.

- Khởi tạo các biến làm việc như sau ở vòng thứ i-1.
( i −1)

a=H 0

b=H 1(i −1)
c=H (2i −1)
( i −1)

d=H 3

e=H (4i −1)
- Thực hiện việc biến đổi như sau.
For (t=0; t<=79; t++)
{
5
T = ROLT (a) + f t (b, c, d) + e + K t +W t

e=d
d=c
c= ROLT 30 (b)

b=a
a=T
}
- Tính toán chuỗi đầu ra như sau.


8

H (0i ) = a + H (0i −1)
H 1(i ) = b + H 1(i −1)
H (2i ) = c + H (2i −1)
H 3(i ) = d + H 3(i −1)
H (4i ) = e + H (4i −1)

1.5.3.

Hàm băm SHA-256

Thuật toán này nhận chiều vào là bức thông điệp có chiều dài bất kì
hữu hạn cho đầu ra là chuỗi có chiều dài cố định là 256 bít.
- Việc đệm được thực hiện tương tự việc đệm trong thuật toán cho hàm
băm MD5.
- Chia bức thông điệp thành các khối 512 bit.
- Thực hiện việc khởi tạo cho các biến chaining variable như sau:
( 0)

H 0 =0x6a09e667
H 1( 0) =0xbb67ae85
H (20) =0x3c6ef372
( 0)


H 3 =0xa54ff53a
H (40) =0x510e527f.
( 0)

H 5 =0x9b05688c
( 0)

H 6 =0x1f83d9ab
( 0)

H 7 =0x5be0cd19
Thực hiện sử lý các khối.
- Xây dựng hàm biến đổi khối đầu vào theo công thức sau

- Khởi tạo các biến làm việc như sau .


9

( i −1)

a=H 0

b=H 1(i −1)
c=H (2i −1)
( i −1)

d=H 3


e=H (4i −1)
( i −1)

f=H 5

( i −1)

g=H 6

( i −1)

h=H 7

- Thực hiện việc biến đổi như sau
For (i=0; i<=63; i++)
{
{256}

T 1 = h+

∑ (e)

+ Ch (e, f, g) +K {t 256} +W t

1

{ 256}

T2 =


∑ (a) +Maj (a, b, c)
0

h=g
g=f
f=e
e=d + T 1
d=c
c=b
b=a
a= T 1 + T 2
}
- Tính toán kết quả cuối cùng như sau.
H (0i ) = a + H (0i −1)


10

H 1(i ) = b + H 1(i −1)
H (2i ) = c + H (2i −1)
H 3(i ) = d + H 3(i −1)
H (4i ) = e + H (4i −1)
H 5(i ) = f + H 5(i −1)
H (6i ) = g + H (6i −1)
H (7i ) = e + H (7i −1)
Trong đó:
Ch(x, y, z) = (x ^ y) ⊕ (⌐x ⊕ z)
Maj(x, y, z) = x ^ y) ⊕ (y ^ z) ⊕ (z ^ x).
{ 256}


∑ (x) = ROTR

2

(x) ⊕ ROTR 13 (x) ⊕ ROTR 22 (x)

6

(x) ⊕ ROTR 11 (x) ⊕ ROTR 25 (x)

0

{ 256}

∑ (x) = ROTR
1

σ0

{256}

= ROTR 7 (x) ⊕ ROTR 18 (x) ⊕ SHR 3 (x)

σ 1{256} = ROTR 17 (x) ⊕ ROTR 19 (x) ⊕ SHR 10 (x)

1.5.4.

Hàm băm SHA-384, SHA-512

Các thuật toán này nhận đầu vào là bức thông điệp có chiều dài bất kỳ

hữu hạn cho đầu ra (message digest) là chuỗi có chiều dài cố định (SHA-384,
SHA-512 là 1024 bit).
-

Việc đệm được thực hiện tương tự việc đệm trong thuật toán cho hàm
băm MD5.

-

Chia bức thông điệp thành các khối 1024 bit.

-

Thực hiện việc khởi tạo cho các biến chaining variable như sau:
Với hàm băm SHA-384 các giá trị chaining variable được khởi tạo như
sau:


11

( 0)

H 0 =0xcbbb9d5dc1059ed8
H 1( 0) =0x629a292a367cd507
H (20) =0x9159015a3070dd17
( 0)

H 3 =0x152fecd8f70e5939
H (40) =0x67332667ffc00b31
( 0)


H 5 =0x8eb44a8768581511
( 0)

H 6 =0xdb0c2e0d64f98fa7
( 0)

H 7 =0x47b5481dbefa4fa4
Với hàm băm SHA-512 các giá trị chaining variable được khởi tạo như sau:
( 0)

H 0 =0x6a09e667f3bcc908
H 1( 0) =0xbb67ae8584caa73b
H (20) =0x3c6ef372fe94f82b
( 0)

H 3 =0xa54ff53a5f1d36f1
H (40) =0x510e527fade682d1
( 0)

H 5 =0x9b05688c2b3e6c1f
( 0)

H 6 =0x1f83d9abfb41bd6b
( 0)

H 7 =0x5be0cd19137e2179.
- Thực hiện tiền sử lý các khối theo công thức sau:

- Khởi tạo các biến làm việc như sau.

a = H (0i −1)


12

b = H 1(i −1)
c = H (2i −1)
d = H 3(i −1)
e = H (4i −1)
f = H 5(i −1)
g = H (6i −1)
h = H (7i −1)
For (i=0; i<=79; i++)
{
{512}

T 1 = h+

∑ (e) + Ch (e, f, g) +K
1

{512}

T2 =

∑ (a) +Maj (a, b, c)
0

h=g
g=f

f=e
e=d + T 1
d=c
c=b
b=a
a= T 1 + T 2
}
Tính toán kết quả cuối cùng như sau.
H (0i ) = a + H (0i −1)
H 1(i ) = b + H 1(i −1)
H (2i ) = c + H (2i −1)

{512}
t

+W t


13

H 3(i ) = d + H 3(i −1)
H (4i ) = e + H (4i −1)
H 5(i ) = f + H 5(i −1)
H (6i ) = g + H (6i −1)
H (7i ) = e + H (7i −1)
Trong đó
Ch(x, y, z) = (x ^ y) ⊕ (⌐x ⊕ z)
Maj(x, y, z) = (x ^ y) ⊕ (y ^ z) ⊕ (z ^ x).
{512}


∑ (x) = ROTR

28

(x) ⊕ ROTR 34 (x) ⊕ ROTR 39 (x)

14

(x) ⊕ ROTR 18 (x) ⊕ ROTR 41 (x)

0

{512}

∑ (x) = ROTR
1

σ0

{512}

= ROTR 1 (x) ⊕ ROTR 8 (x) ⊕ SHR 7 (x)

σ 1{512} = ROTR 19 (x) ⊕ ROTR 61 (x) ⊕ SHR 6 (x)
Tổng kết về các hàm băm trên [6]
Tên hàm
băm
MD4
SHA-1
SHA-384

SHA-512

Chiều dài khối
dữ liệu
512
512
1024
1024

Độ dài Chiều dài đầu
từ
32
32
64
64

ra
128
160
384
512

Số

Năm công

vòng
64
80
80

80

bố
1990
1995
2002
2002

Bảng 1. 1.Bảng so sánh các loại hàm băm
Kết luận chương 1
Nội dung chương 1 tập trung vào cơ sở lý thuyết của hàm băm, các
định nghĩa, tính chất, điều kiện xảy ra đụng độ và ứng dụng của hàm băm
trong thực tế.


14

Giới thiệu, khảo sát một số hàm băm được sử dụng nhiều trong thực tế
hiện nay như SHA-1, SHA-384, SHA-512...và đưa ra sự so sánh.


15

Chương 2
HÀM BĂM MD5
2.1.

Giới thiệu

Hàm băm MD4 (Message Digest 4) được Giáo sư Rivest đề nghị vào

năm 1990. Vài năm sau, phiên bản cải tiến MD5 của thuật toán này ra đời.
Cùng với phương pháp SHA, đây là ba phương pháp có ưu điểm tốc độ xử lý
rất nhanh và độ an toàn cao nên được áp dụng trong thực tế đối với các thông
điệp dài.
Hàm băm MD5 chuyển thông điệp đầu vào có chiều dài bất kì thành
chuỗi đầu ra có chiều dài cố định 128 bit. Thông điệp đầu vào được chia
thành nhiều block message 512 bit rồi được truyền vào hàm băm MD5, sau
đó thông điệp đầu vào được đệm (padding) sao cho chiều dài của nó chia hết
cho 512, điều đó có nghĩa là, giả sử chiều dài của bức thông điệp là l bit,
chúng ta cần đệm thêm k bit sao cho thỏa mãn điều kiện l+k+64=n*512(l, k, n
là các số nguyên không âm, 64 là số biểu diễn chiều dài của thông điệp, điều
đó có nghĩa là chiều dài của bức thông điệp không vượt quá 2 64 bít). Việc
đệm được thực hiện như sau: đầu tiên thêm bit 1, tiếp theo là dãy các bit 0
được thêm vào sao cho thỏa mãn điều kiện l+k+64=n*512. [9][12].
2.2.

Khái niệm

MD5 (Message-Digest algorithm 5) là một hàm băm để mã hóa với giá
trị băm là 128 bit, từng được xem là một chuẩn trên Internet. MD5 đã được
sử dụng rộng rãi trong các chương trình an ninh mạng, và cũng thường được
dùng để kiểm tra tính nguyên vẹn của tập tin và chữ ký số.
MD5 được thiết kế bởi Ronald Rivest vào năm 1991 để thay thế cho


×