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

Nghiên cứu về các thuật toán băm dữ liệu từ đó viết đặc tả và vẽ lưu đồ thuật toán

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 (305.62 KB, 22 trang )

Trêng §¹i häc S ph¹m kü thuËt Hng Yªn
Khoa C«ng nghÖ th«ng tin

TiÓu luËn
Môn: AN TOÀN VÀ BẢO MẬT THÔNG TIN
Đề tài: Nghiên cứu về các thuật toán băm dữ liệu từ đó
viết đặc tả và vẽ lưu đồ thuật toán
Giảng viên hướng dẫn: Nguyễn Duy Tân
Sinh viên thực hiện : Trần Thị Thu
Lớp : TK6LC_1
Hng yªn 01/2010
1
I.Các hàm Hash ( hay còn gọi là hàm băm)
I.1 Các yêu cầu
Nén mẩu tin bất kỳ về kích thước cố định và giả thiết hàm hash là công khai
và không dung khóa Hash chỉ phụ thuộc mẩu tin.
Hash được sử dụng để phát hiện thay đổi của mẩu tin Hash có thể sử dụng
nhiều cách khác nhau với mẩu tin, Hash thường được kết hợp dùng để tạo chữ ký
trên mẩu tin.
Hàm hash có các tính chất sau:
+ Tạo nên dấu vân tay ( tức là thong tin đặc trưng) của
một tệp, mẩu tin hay dữ liệu h = HCM.
+ Nén mẩu tin có kích thước tùy ý về dấu vân tay có
kích thước cố định. Hàm hash được giả thiết là công khai, mọi nguời đều
biết cách sử dụng.
Các yêu cầu của hàm Hash:
+ Có thể áp dụng cho mọi mẩu tin có kích thước tùy ý.
Tuy nhiên phải tạo đầu ra h có kích thước cố định, thường là 128 bit đến
1024 bit.
+ Dễ tính h = HCM cho mọi mẩu tin M, hàm H tính
toán nhanh, hiệu quả phụ thuộc chặt vào mẩu tin M và không tính tóan


ngược lại.
+ Cho trước h không thể tìm được ( rất khó ) x sao cho
H(x) = h. Tính chất này gọi là tính chất 1 chiều, tìm chiều nghịch ảnh rất
khó khăn, tuy chiều tìm ảnh lại dễ.
+ Cho x không tìm được y sao cho H(y) = H(x). Đây
là tính chất chống đỡ va chạm yếu, không tìm được mẩu tin có cùng hash
với mẩu tin đã cho.
2
+ Và không thể tìm được x,y sao cho H(y) = H(x).
Đây là tính chất va chạm mạnh, đây là yêu cầu cao hơn tính chống đỡ va
chạm yếu.
+
I.2.Các hàm hash đơn giản
Có một số để xuất cho một số hàm hash đơn giản. Chẳng hạn biểu diễn mẩu
tin dưới dạng bit sau đó chia chúng thành các khối bit có kích thước bằng kích
thước mong muốn của Hash rồi dựa trên phép toán XOR các bit thong tin ở cùng vị
trí tương ứng của các khối, kết quả nhận được là Hash của cả mẩu tin. Hàm Hash
trên là không an toàn vì đối với mẩu tin bất kì có thể tìm được mẩu tin mà có cùng
hàm Hash. Cần phải có hàm mạnh hơn, ta không xét ở đây.
Tấn công ngày sinh nhật:
Có thể nghĩ hash 64 bit là an toàn, có nghĩa là khó tìm được bản tin có cùng
hash. Nhưng không phải vì vậy vì nghịch lý ngày sinh nhật như sau: trong lớp có ít
nhất bao nhiêu sinh viên để xác xuất có ít nhất 2 sinh viên trùng ngày sinh nhật là
lớn hơn 0,5. Theo thuyết xác xuất thống kê gọi số sinh viên ít nhất trong lớp là k,
khi đó xác suất q để không có hai người nào trùng ngày sinh nhật là tỷ số giữa cách
chọn k ngày khác nhau trong 365 ngày trên số cách chọn k ngày bất kì trong 365
ngày.
Vậy q = C
k
365

/ 365
k
Do đó, xác suất p để có ít nhất 2 người trùng ngày sinh nhật là:
P= 1 – q = 1 - C
k
365
/ 365
k
Để p > 0,5 thì k > 22 hay k = 23, cụ thể khi đó p = 0,5073. Khi chưa tính toán
chi tiết chúng ta nghĩ là trong lớp phải có ít nhất khoảng 365/2 tức 184 sinh viên.
Nhưng dựa trên thực tế con số đó ít hơn rất nhiều chỉ cần 23 sinh viên, chính vì vậy
ta gọi đây là nghịch lý ngày sinh nhật.
3
Điều đó muốn nói lên rằng trong nhiều trường hợp xác suất để 2 mẩu tin có
cùng bản hash là không nhỏ như chúng ta tưởng.
Tấn công ngày sinh nhật hoạt động như sau:
Kẻ thám mã tạo ra 2
m/2
biến thể của mẩu tin đúng mà tất cả đều có bản chất
ngữ nghĩa như nhau, với m ở đây là độ dài của bản mã hash.
Kẻ thám mã cũng có thể tạo ra 2
m/2
biến thể khác nhau của mẩu tin lừa dối, là
có ngữ nghĩa ngược lại.
Hai tập tin được so sánh với nhau để tìm cặp có cùng bản hash( xác suất
>=0,5 dựa vào nghịch lý ngày sinh nhật)
Người dùng kí vào mẩu tin đúng, sau đó bị thay thế bằng mẩu tin giả mà cũng
có chữ ký đúng.
I.3. Mã khối như hàm hash
Có thể sử dụng mã khối như hàm hash

Sử dụng H
0
= 0 và bộ đệm không cho khối cuối.
Tính H
i
= E
Mi
[H
i – 1
]
Và sử dụng khối cuối cùng như giá trị hàm hash
Giống chế độ CBC nhưng không có khóa
Hash kết quả quá nhỏ (64 bit)
Cả về tấn công sinh nhật trực tiếp
Cả tấn công ở giữa chừng
Các phương án khác cũng dễ bị tấn công
Kẻ thám mã cũng có thể tạo ra 2
m/2
biến thể khác nhau của mẩu tin.
I.4. Tính an toàn của hàm Hash
Giống như đối với mã khối, hàm hash cũng có tấn công vét cạn, cụ thể: Hash
chống va chạm mạnh có giá 2
m/2
, có nghĩa là với m là độ dài mã hash thì 2
m/2
xác
định sức mạnh của nó chống đối lại tấn công vét cạn. Ta cần lựa chọn m đủ lớn để
việc duyệt tìm 2
m/2
phương án là không khả thi. Có đề xuất Hash 128 bit cho MD5

4
phần cứng. Nhưng có thể tìm được va chạm sau 24 ngày. Do đó có thể coi là hash
128 bit có thể có lỗ hổng, không an toàn, tốt hơn dùng hash 160 bit.
Thám mã tấn công có cấu trúc:
Giống như mã khối muốn dùng tấn công vét cạn có một số các tấn công thám
mã là lựa chọn tôt nhất hiện có.
Chẳng hạn:
Nếu CV
i
= f [CV
i – 1
,M
i
] ; H(M) = CV
N

Thì ở đây thong thường khai thác sự va chạm của hàm f.
Giống mã khối thường gồm 1 số vòng lặp
Khi đó tấn công sử dụng các tính chất có hàm vòng.
II.Các thuật tóan Hash
Hàm hash: thực hiện việc nén mẩu tin về kích thước cố định bằng cách xử lí
mẩu tin theo từng khối dùng một hàm nén nào đó mà có thể sử dụng mã khối dùng
một hàm nén nào đó và chỉ có thể sử dụng mã khối.
Cấu trúc thuật toán Hash
5
II.1 Thuật toán Hash an toàn SHA ( Secure Hash Algorithm)
SHA có nguồn gốc từ Viện chuẩn công nghệ quốc gia Hoa Kì – NIST & NSA
vào năm 1993, sau đó được nâng cấp vào năm 1995 theo chuẩn US và chuẩn là
FIPS 180 – 11995 và Internet RFC3174, được nhắc đến như SHA – 1. Nó được sử
dụng với sơ đồ chữ kí điện tử DSA ( Digital Signature Algorithm).

Thuật toán là SHA dựa trên thiết kế MD4 với một số khác biệt tạo nên giá trị
Hash 160 bit. Các kết quả nghiên cứu 2005 về an toàn cuả SHA – 1 đề xuất sử
dụng nó trong tương lai.
II.1.1 Thuật toán SHA – 1
II.1.1.1 Mô tả thuật toán
Đầu vào của thuật toán là một thông điệp có chiều dài bất kì nhỏ hơn 2
64
bit,
SHA – 1 cho ra kết quả là một thông điệp rút gọn có độ dài là 160 bit
II.1.1.2 Mở rộng thông điệp
f(t;B,C,D) được định nghĩa như sau:
f(t;B,C,D) = (B AND C) OR ((NOT B) AND D) (0≤t≤19)
f(t;B,C,D) = B XOR C XOR D (20≤t≤39)
f(t;B,C,D) = (B AND C) OR (B AND D) OR (C AND D) (40≤t≤59)
f(t;B,C,D) = B XOR C XOR D (60≤t≤79)
Thông điệp M được mở rộng trước khi thực hiện băm. Mục đích của việc mở
rộng này là để đảm bảo cho thông điệp mở rộng có độ dài là bội số của 512.
Giả sử độ dài của thông điệp là 1 bit. Thêm 1 bit vào cuối thông điệp, theo sau
là k bit 0 ( k là số dương không am nhỏ nhất sao cho 1 + 1 + k = 448(mod 512).
Sau đó them cuối 64 bit là biểu diễn nhị phân của 1.
Phân tích thông điệp mở rộng :
Sau khi thông điệp đã được mở rộng, thông điệp mở rộng được phân
tích thành N khối 512 bit M(1), M(2),…,M(n). Trong đó 512 bit của khối dữ liệu
đầu vào có thể được thể hiện bằng 16 từ 32 bit.
6
Khởi tạo giá trị băm:
Giá trị băm là một chuỗi bit có kích thước của thông điệp băm ( từ SHA
– 384) gồm các từ ghép lại. Trong đó H
j
(i)

là từ j trong giá trị băm ở lần lặp i với
0≤i≤N ( số block có được sau khi chia văn bản được đệm) và 0≤j≤( số từ trong giá
trị băm - 1). Trước khi thực hiện giá trị băm, với mỗi thuật toán băm an toàn, giá
trị băm ban đầu H(0) phải được thiết lập. Kích thước và số lượng từ trong H(0) tùy
thuộc vào kích thước thông điệp rút gon.
SHA -1 sử dụng dãy hằng số K(0),…,K(79) có giá trị như sau:
K(t) = 5A827999 (0≤t≤19)
K(t) = 6ED9EBA1 (20≤t≤39)
K(t) = 8F1BBCDC (40≤t≤59)
K(t) = CA6 2C1D6 (60≤t≤79)
II.1.1.3 Thuật toán cuả bước tính giá trị băm SHA – 1
SHA – 1 được sử dụng để băm thông điệp M có độ dài l bit thỏa mãn điều
kiện 0≤l≤2
64
. Thuật toán sử dụng :
- Một bảng phân bố thông điệp gồm 80 từ 32 bit
- 5 biến 32 bit
- Một giá trị băm gồm 5 từ 32 bit
Kết quả của SHA – 1 là một thông điệp rút gọn có độ dài 160 bit. Các từ của
bảng phân bố thông điệp được kí hiệu W(0), W(1),…,W(79). 5 biến được kí hiệu là
a,b,c,d,e. Các từ của giá trị băm kí hiệu H
0
(i)
, H
1
(i)
, H
2
(i)
, H

3
(i)
, H
4
(i)
. H(0) giữa giá trị
băm ban đầu và được thay thế bằng các giá trị băm thành công. H(i) sau mỗi khối
thông điệp được xử lí và kết thúc bằng giá trị băm cuối cùng H(N).
Tính toán thông điệp băm
Định nghĩa S
n
(X) = (X<<n) or (X >> 32 – n) X <<n có nghĩa là loại bỏ từ trái
sang phải n bit và them vào kết quả n số 0 bên phải. X>>32 –n có nghĩa là loại bỏ
từ phải qua trái n bit và thêm vào kết quả n số 0 vào bên trái.
7
Khởi tạo H:
H0 = 67452301; H1 = EFCDAB89
H2 = 98BADCEF ; H3 = 103254 76
H4 = C3D2E1F0.
Chia M(i) thành 16 từ W(0), W(1),…,W(15)
For t = 16 to 79
− W(t) = S
l
(W(t-3) XOR W(t -8) XOR W( t – 14) XOR (t -16)).
− Đặt a = H0, b = H1, c = H2, d = H3, E = H4
− For t = 0 to 79 do
− TEMP = S
5
(A) + f(t; B,C,D) + E + W(t) + K(t);
− e = d; d = c; c = S

30
(b); b = a; a = TEMP
− Đặt H0 = H0 + a, H1 = H1 + b, H2 = H2 + c, H3 = H3 + d, H4 = H4 + e
Sauk hi tính toán được hết M(n), thông điệp rút gọn là chuỗi 160 bit biểu diễn
của 5 từ:
H0 H1 H2 H3 H4
II.1.1.4 Đánh giá thuật toán
− SHA – 1 được xem như là an toàn đối với trường hợp đụng độ vì
rất khó tìm đuợc 2 thông điệp khác nhau có gía trị băm giống nhau.
− SHA -1 được coi là chuẩn của việc bảo vệ các kênh liên lạc trực
tuyến tồn tại trong 9 năm qua.
− SHA – 1 được thiết kế cho bộ xử lí 32 bit, thế hệ sắp tới cuả máy
tính dùng bộ xử lí 64 bit mà SHA – 1 không hiệu quả trên bộ xử lí này.
− Tháng 2 năm 2005 SHA -1 bị tấn công bởi 3 chuyên gia người
Trung Quốc. Thuật toán này đã bị giải mã thông qua phương pháp tính phân
bổ.
II.1.1.4 Các phiên bản
8
Viện chuẩn công nghệ quôc gia NIST xuất bản sửa FIPS 180 -2 vào năm
2002, đề nghị bổ sung 3 phiên bản mới của SHA : SHA – 256, SHA – 384, SHA –
512. Các phiên bản trên được thiết kế tương thích với việc tăng độ an toàn cung cấp
bởi chuẩn mã nâng cao AES. Về cấu trúc và chi tiết giống SHA -1, suy ra việc phân
tích cũng tương tự, nhưng mức độ an toàn cao hơn nhiều so với SHA – 1.
So sánh các phiên bản SHA
Các giá trị có đơn vị là bit
III. Tổng quan về SHA – 512
512384256160Kích thước giá trị băm
25619212880Độ an toàn
80806480Số bước mã hóa
64643232Kích thước Word

10241024512512Kích thước khối
<2
128
<2
128
<2
64
<2
64
Kích thước thông báo
SHA-
512
SHA-
384
SHA-
256
SHA-1
9
Hàm nén SHA-512
− Là trái tim của thuật toán
− Nén mỗi khối dữ liệu 1024-bit thành 512 bit
− Bao gồm 80 bước, tại mỗi bước:
Cập nhật bộ đệm 512-bit
Sử dụng 64 bit Wt lấy ra từ khối dữ liệu hiện tại
Một hằng số là 64 bit đầu tiên của căn bậc ba của 80 số nguyên
tố đầu tiên
Đảm bảo tính ngẫu nhiên
10
Network security 2009
11

SHA-512 Round Function
12
IV. Thuật toán MD5
MD5 (Message-Digest algorithm 5) là một hàm băm để mã hóa với giá trị
băm là 128bit. 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.
MD5 được thiết kế bởi Ronald Rivest vào năm 1991 để thay thế cho hàm băm
trước đó, MD4( cũng do ông thiết kế, trước đó nữa là MD2)
MD5 có hai ứ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 1 đ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)
IV.1 Thuật giải
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ó chia hết cho 512 )
Bộ đệm hoạt động như sau:
-Trước tiên nó được 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
13

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 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 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 được dựa trên hàm một chiều F, phép cộng modul và phép xoay trái.
Hình bên 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à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. 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”) =
9e107d9d372bbd81d3542a419d6. Thậm chí một thay đổi nhỏ cũng làm thay đổi
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(“ ”) =
d41d8cd98f00b204e980099aefc8427e
Những lỗ hổng:
Bất cứ thuật toán mã hóa nào rồi cũng bị giải mã. Với MD5, ngay từ năm
1996, người ta đã tìm thấy lỗ hổng của nó. Mặc dù lúc đó còn chua rõ rang lắm
nhưng các chuyên gia mã hóa đã nghĩ đến việc phải đưa ra một thuật giải khác, như
là SHA -1.
Và rồi gần đây, giới mã hóa đã xôn xao với thông tin các thuật tóan bên trong
nhiều ứng dụng bảo mật thông dụng, như chữ ký điện tử, cũng… có lỗ hổng( trong
đó có MD5)
Mọi chuyện bắt đầu từ năm, khi nhà khoa học máy tính người Pháp Antoine
Joux phát hiện ra một lỗ hổng trong thuật tóan phổ biến MD5, thường dùng trong
công nghệ chữ kí điện tử. Ngay sau đó, bốn nhà nghiên cứu người Trung Quốc lại
14
phát hành công trình nghiên cứu chỉ ra cách xuyên phá thuật toán thứ 2 có tên SHA
– 0. Tuy chỉ mới ở giai đoạn nghiên cứu sơ bộ song những phát hiện này có thể tạo

điều kiện để kẻ xấu cài những chương trình cửa sau (backdoor) bí mật vào trong
mã máy tính, hoặc giả mạo chữ kí điện tử. Trừ phi một thuật toán mới bảo mật hơn
được xây dựng và đưa vào sử dụng.
Một phát hiện thứ ba, được đón đợi và đánh giá rất cao được công bố trong
hội thảo Grypto. Hai nhà nghiên cứu EliBiham và Rafi Chen của viện công nghệ
Israel đã diễn thuyết vễ cách nhận dạng các hình thức tấn công vào chức năng bảo
mật của thuật toán SHA – 0 một thuật toán có sơ hở.
Những lỗ hổng bảo mật được cho là “ nghiêm trọng” bên trong thuật toán
SHA – 1, tùy thuộc vào mức độ chi tiết của phần trình bày, có thể làm chấn động cả
nghành bảo mật. Từ trước tới nay, SHA – 1 vẫn được coi là chuẩn mực “vàng” về
thuật toán. Nó được tích hợp bên trong rất nhiều chương trình thông dụng như PGP
và SSL, được chứng thực bởi viện công nghệ quốc gia và là thuật toán chữ ký điện
tử duy nhất được cơ quan Chuẩn Chữ kí số của chính phủ Mĩ phê chuẩn.
Cả ba thuật toán MD5,SHA – 0 và SHA – 1 đều được giới khoa học máy tính
coi là “ đa chức năng”. Chúng có thể nhận mọi dạng dữ liệu đầu vào, từ tin nhăn
email cho đến hạt nhân(kernel) của hệ điều hành, cũng như tạo ra một dấu vân tay
số duy nhất chỉ thay đổi một kí tự bất kì bên trong file đầu vào cũng tạo ra dấu vân
tay hoàn toàn khác nhau. Các ứng dụng bảo mật đều dựa vào tính năng “dấu vân
tay duy nhất” này làm nền. Tuy nhiên, nếu kẻ tấn công có thể tạo ra một dấu vân
tay “Dolly” với một dòng dữ liệu đầu vào khác, dấu vân tay “ sinh sản vô tính” này
sẽ khiến phần mềm bị gài backdoor nhận dạng nhầm. Kết quả là chúng có thể tạo ra
chữ kí giả để vét sạch tài khoản ngân hang của người sử dụng không may.
Tất nhiên từ rất lâu, giới nghiên cứu đã hiểu rằng không có thuật toán mã hóa
thực tiễn nào là tuyệt đối an toàn và bảo mật. Tuy vậy, họ vẫn nỗ lực thiết kế ra
những thuật toán mà thời gian cần để tạo ra một dấu vân tay “ Dolly” là vô tận, với
15
hy vọng kẻ tấn công sẽ nản lòng. Thế nhưng nếu những sơ hở tương tụ như của
SHA – 0 cũng được tìm thấy trong SHA – 1, điều này đồng nghĩa với việc tốc độ
giả mạo một dấu vân tay sẽ được đẩy nhanh lên…500 triệu lần, hoàn toàn trong
tầm tay của một mạng máy tính tốc độ cao.

Tuy mức độ tác hại ít trầm trọng hơn song sơ hở bảo mật trong thuật toán
MD5 có lẽ lại gây hậu quả ngay tức thì. Sản phẩm máy chủ Aphache Web nguồn
mở đang sử dụng MD5 để kiểm duyệt những Website có mã nguồn chưa bị chỉnh
sửa, từ đó sẽ an toàn khi chạy trong máy tính. Tương tự sẽ là cơ sở dữ liệu Solaris
của Sun Microsystems, với khả năng mà theo hãng tự nhận là “ xác minh một file
đích thực chứ không phải phiên bản bị điều chỉnh để hạ gục hệ thống bảo mật”
Lỗ hổng với phát hiện trong MD5 sẽ cho phép kẻ tấn công tạo ra file giả mạo
trong vài giờ với một máy tính đạt chuẩn. “ Giờ đây, người ta đã chứng minh được
các thuật toán này có lỗ hổng. Trước khi kẻ tấn công lợi dụng khai thác được, đã
đến lúc phải thôi dần việc sử dụng MD5” – nhà phân tích Hughes của viện Chuẩn
Công nghệ Quốc gia nhận định.
IV.2 Mục đích
Tài liệu này mô tả thuật toán số hóa thông điệp MD5. Thuật toán nhận vào
một thông điệp độ dài tùy ý và tạo ra một số 128 bit, là một dạng “ vân tay” hay “
mã số thông điệp” (message digest) của đầu vào.
Người ta cho rằng không khả thi về mặt tính toán để tạo ra 2 thông điệp có
cùng mã số thông điệp, hoặc tạo ra một thông điệp với mã số cho trước. Thuật toán
MD5 được dự tính áp dụng cho những ứng dụng chữ kí điện tử, ở đó một file lớn
phải được “ nén” một cách an toàn khi mã hóa với một khóa cá nhân ( primary key)
dưới một hệ mã hóa công khai như RSA.
Thuật toán MD5 là sự mở rộng của thuật toán MD4. MD5 chậm hơn một chút
so với MD4 nhưng an toàn hơn. MD5 được thiết kế vì người ta thấy có thể MD4 đã
được chấp nhận trong sử dụng quá nhanh so với sự đánh giá nó. MD4 được thiết kế
16
để chạy rất nhanh nó đã “ nằm trên ranh giới” theo cách nói về nguy cơ của sự
thành công trong việc phá mã – MD5 đã lùi lại một chút tốc độ cho sự bảo mật. Nó
kết hợp một số ý kiến đóng góp của các chuyên gia, thuật toán MD5 hiện đang
đựoc đánh giá và có thể được chấp nhận như một chuẩn.
IV.3 Thuật ngữ và ngữ nghĩa
Trong tài liệu này một “ word” là một lượng 32 bit và một “ byte” là một

lượng 8 bit. Một dãy các bit có thể được xem như dãy các byte, trong đó mỗi nhóm
8 bit liên tiếp được xem như một byte với bit cao của mỗi byte đặt trước. Tương tự,
mỗi dãy các byte có thể xem như một dãy các word 32 bit, trong đó mỗi nhóm 4
byte liên tiếp được xem như một word với byte thấp đặt trước.
Kí hiệu x – i nghĩa là phần tử x thứ i (“ x sub i ”). Nếu số thứ tự đó là một
biểu thức ta viết nó trong ngoặc nhọn, ví dụ như x – {i + 1}; ^ kí hiệu cho số mũ.
Kí hiệu “ + ” cho phép cộng các word, nghĩa là cộng theo module 2
32
. X<<< s kí
hiệu giá trị 32 bit nhận được bằng cách dịch chuyển các bit của X ( theo kiểu quay
vòng sang trái s vị trí.
Not ( X ) kí hiệu phép đối lập ( NOT ) các bit
X v Y kí hiệu phép OR các bit
X xor Y kí hiệu phép XOR các bit
XY kí hiệu phép AND.
IV.4 Mô tả thuật toán MD5
Giả sử chúng ta có thông điệp b bit ở đầu vào, và ta muốn tìm mã số thông
điệp. Ở đây b là số không âm bất kì; b có thể bằng 0 và không cần chia hết cho 8,
độ lớn có thể bất kì. Tưởng tượng rằng các bit của thông điệp được viết như sau: m
-0 m – 1 m-2….m – {b – 1}.
17
Mã số thông điệp được tính qua 5 bước sau:
Bước 1 : Các bit gắn thêm
Thông điệp được mở rộng, thêm bit vào phía sau sao cho độ dài của nó
( tính theo bit ) đồng dư với 448 theo môđun 512. Nghĩa là thông điệp được
mở rộng sao cho nó còn thiếu 64 bit nữa thì sẽ có một độ dài chia hết cho
512. Việc này thực hiện như sau: Thêm bit “1“ được vào sau thông điệp.
Tiếp đó các bit “0“ được thêm vào để có một độ dài đồng dư với 448 môđun
512. Trong tất cả các trường hợp, có ít nhất 1 và nhiều nhất 512 bit được
thêm vào.

Bước 2: Gắn thêm độ dài
Dạng biểu diễn 64 bit độ dài b của chuỗi ban đầu được thêm vào phía sau kết
quả của bước 1. Trong trường hợp b lớn hơn 2^64 thì chỉ có 64 bit thấp của b được
sử dụng. ( Các bit này được thêm vào phía sau dưới dạng 2 word 32 bit, gắn word
thấp trước theo quy ước ở trên )
Bước 3: Khởi tạo bộ đệm MD
Một bộ đệm 4 word (A,B,C,D) được dùng để tính mã số thông điệp. Ở đây
mỗi A,B,C,D là một thanh ghi 32 bit. Những thanh ghi này được khởi tạo theo
những giá trị hex sau (các byte thấp trước ) :
word A : 01 23 45 67
word B : 89 ab cd ef
word C : fe dc ba 98
word D : 76 54 32 10
Bước 4 : Xử lý thông điệp theo từng khối 16 word
Trước hết ta định nghĩa các hàm phụ, các hàm này nhận đầu vào là 3 word 32
bit và tạo ra một word 32 bit.
F(X,Y,Z) = XY v not(X) Z
G(X,Y,Z)= XZ v Y not(Z)
18
H(X,Y,Z) = X xor Y xor Z
I(X,Y,Z) = Y xor (X v not(Z))
Với mỗi bit, F hoạt động như một điều kiện: nếu X thì Y nếu không thì Z .
Hàm F có thể định nghĩa bằng phép + thay vì v bởi vì XY và not(X)Z không bao
giờ có “1“ ở cùng 1 vị trí bit. Các hàm G,H và I tương tự như F, chúng tác động
theo từng bit tương ứng để tạo ra kết quả từ các bit của X,Y và Z.
Bước này sử dụng một bảng 64 giá trị T[1 64] được tạo ra từ hàm sin.Gọi T
là phần tử thứ i của bảng thì T là phần nguyên của 4294967296*|sin(i)| , i được tính
theo radian
Làm như sau:/* Xử lý mỗi khối 16 word */
For i = 0 to N/16-1 do

/* Copy block i into X. */
For j = 0 to 15 do
Set X[j] to M.
end /* of loop on j */
// Lưu A vào AA, B vào BB, C vào CC, D và DD
AA = A
BB = B
CC = C
DD = D
/* Vòng 1* /
/* Ký hiệu [abcd k s i] nghĩa là thực hiện như sau :
a = b + ((a + F(b,c,d) + X[k] + T) <<< s). */
/* Thực hiện */
[ABCD 0 7 1] [DABC 1 12 2] [CDAB 2 17 3] [BCDA 3 22 4]
[ABCD 4 7 5] [DABC 5 12 6] [CDAB 6 17 7] [BCDA 7 22 8]
19
[ABCD 8 7 9] [DABC 9 12 10] [CDAB 10 17 11] [BCDA 11 22 12]
[ABCD 12 7 13] [DABC 13 12 14] [CDAB 14 17 15] [BCDA 15 22 16]
/* Vòng 2 */
/* Ký hiệu [abcd k s i] nghĩa là thực hiện như sau */
/* a = b + ((a + G(b,c,d) + X[k] + T) <<< s). */
/* Thực hiện : */
[ABCD 1 5 17] [DABC 6 9 18] [CDAB 11 14 19] [BCDA 0 20 20]
[ABCD 5 5 21] [DABC 10 9 22] [CDAB 15 14 23] [BCDA 4 20 24]
[ABCD 9 5 25] [DABC 14 9 26] [CDAB 3 14 27] [BCDA 8 20 28]
[ABCD 13 5 29] [DABC 2 9 30] [CDAB 7 14 31] [BCDA 12 20 32]
/* Vòng 3 */
/* Ký hiệu [abcd k s t] nghĩ là làm như sau
a = b + ((a + H(b,c,d) + X[k] + T) <<< s). */
/* Thực hiện :*/

[ABCD 5 4 33] [DABC 8 11 34] [CDAB 11 16 35] [BCDA 14 23 36]
[ABCD 1 4 37] [DABC 4 11 38] [CDAB 7 16 39] [BCDA 10 23 40]
[ABCD 13 4 41] [DABC 0 11 42] [CDAB 3 16 43] [BCDA 6 23 44]
[ABCD 9 4 45] [DABC 12 11 46] [CDAB 15 16 47] [BCDA 2 23 48]
/* Vòng 4 */
/* Ký hiệu [abcd k s t] nghĩa là làm như sau
a = b + ((a + I(b,c,d) + X[k] + T[I]) <<< s). */
/* Thực hiên: */
[ABCD 0 6 49] [DABC 7 10 50] [CDAB 14 15 51] [BCDA 5 21 52]
[ABCD 12 6 53] [DABC 3 10 54] [CDAB 10 15 55] [BCDA 1 21 56]
[ABCD 8 6 57] [DABC 15 10 58] [CDAB 6 15 59] [BCDA 13 21 60]
20
[ABCD 4 6 61] [DABC 11 10 62] [CDAB 2 15 63] [BCDA 9 21 64]
/* Sau đó làm các phép cộng sau. ( Nghĩa là cộng vào mỗi thanh ghi giá trị của nó
trước khi vào vòng lặp ) */
A = A + AA
B = B + BB
C = C + CC
D = D + DD
end /* of loop on i */
Bước 5 : In ra
Mã số thông điệp được tạo ra là A,B,C,D. Nghĩa là chúng ta bắt đầu từ byte thấp
của A, kết thúc với byte cao của D.
Đến đây đã mô tả xong thuật toán MD5. Mã nguồn tham khảo viết bằng C.
IV.5 Tổng kết
Thuật toán số hóa thông điệp MD5 khá đơn giản để thực hiện, cung cấp một
dạng “ vân tay ” hay mã số của thông điệp với độ dài tùy ý. Người ta cho rằng độ
khó để tìm được 2 thông điệp có cùng mã số là khoảng 2
64
bước tính, và độ khó để

tìm được một thông điệp với mã số cho trước là 2
18
bước tính. Thuật toán MD5 đã
được dò tìm điểm yếu một cách cẩn thận. Tuy nhiên đây là một thuật toán tương
đối mới và việc phân tích cẩn thận về sự an toàn là cần thiết.
IV.6 Sự khác nhau giữ MD4 và MD5
− Vòng 4 đã được thêm vào
− Mỗi bước đều được thêm vào một hằng số duy nhất
− Hàm G ở vòng 2 được đổi từ (XY v XZ v YZ ) thành ( XZ vY not
( Z )) để làm giảm sự đối xứng trong G
− Mỗi bước đều sử dụng kết quả từ bước trước. Điều này nhằm tạo
ra “ hiệu ứng dây truyền ” nhanh hơn
21
− Thứ tự các word đầu vào ở vòng 2 và 3 được thay đổi, để làm cho
hai mẫu này ít giống nhau hơn
− Số bit dịch chuyển ở mỗi vòng được tối ưu hóa, để tạo ra “ hiệu
ứng dây truyền ” nhanh hơn. Lượng dịch chuyển ở mỗi vòng là khác nhau.
IV.7 Đánh giá thuật toán MD5
Về tốc độ sinh ra chuỗi cốt yếu thì MD5 chậm hơn so với MD4 nhưng nó lại
an toàn hơn rất nhiều so với MD4. Thuật toán số hóa thông điệp MD5 khá đơn giản
để thực hiện cung cấp một giá trị băm của thông điệp với độ dài tùy ý. Người ta cho
rằng độ khó để tìm được 2 thông điệp có cùng giá trị băm là khoảng 2
64
bước tính,
và độ khó để tìm được một thông điệp với giá trị băm cho trước là 2
128
bước tính.
Tuy nhiên lỗ hổng mới phát hiện trong thuật toán MD5 sẽ cho phép kẻ tấn công có
thể tạo ra file giả mạo trong vòng vài giờ với loại máy tính đạt chuẩn.
IV.7 Chuẩn Hash an toàn nâng cao

Viện chuẩn công nghệ quốc gia NIST xuất bản sửa FIPS 180 – 2 vào năm
2002, đề nghị bổ sung 3 phiên bản mới của SHA: SHA – 256, SHA -384, SHA –
512. Các phiên bản trên được thiết kế tương thích với việc tăng độ an toàn được
cung cấp bởi chuẩn mã nâng cao AES. Về cấu trúc và chi tiết giống SHA -1, suy ra
việc phân tích cũng tương tự nhưng mức độ an toàn hơn nhiều SHA -1.
22

×