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

Hàm băm an toàn và ứ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 (2.71 MB, 69 trang )

1





































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





NGUYỄN THANH HƯNG






HÀM BĂM AN TOÀN VÀ ỨNG DỤNG






LUẬN VĂN THẠC SĨ











Hà Nội-2011



2
































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





NGUYỄN THANH HƯNG






HÀM BĂM AN TOÀN VÀ ỨNG DỤNG






Ngành: CÔNG NGHỆ THÔNG TIN
Chuyên ngành: CÔNG NGHỆ PHẦN MỀM
Mã số: 60 48 10


LUẬN VĂN THẠC SĨ


NGƯỜI HƯỚNG DẪN KHOA HỌC: TS. LÊ PHÊ ĐÔ





Hà Nội-2011



3


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















4


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

Số thứ tự
Ký hiệu
Ý nghĩa
1


Phép toán XOR
2
<<<
Phép dịch bít vòng
3
||
Phép cộng 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




















[j[[pơ;;’;




5


MỤC LỤC
1. Đặt vấn đề bài toán 11
2. Tổng quan về hàm băm 12
2.1. Định nghĩa hàm băm 12
2.2. Xung đột băm 13
2.2.1. Tấn công theo nguyên lý vét cạn 13
2.2.2. Tấn công dựa trên lý thuyết ngày sinh 13
2.3. Một số hàm băm phổ biến 14

2.3.1. Hàm băm MD5 15
2.3.2. Hàm băm SHA-1 21
2.3.3. Hàm băm SHA-256 22
2.3.4. Hàm băm SHA-384, SHA-512 24
3. Tấn công hàm băm 26
3.1. Tấn công hàm băm 26
3.1.1. Tấn công MD5 27
3.1.2. Tấn công SHA-1 36
3.2. Tìm hiểu một số hàm băm mới nhất 36
3.2.1. Hàm băm NESHA-256 36
3.2.2. Hàm băm SHA-3 39
4. Ứng dụng của hàm băm an toàn trong giao dịch điện tử 53
4.1. Chữ ký điện tử 53
4.2. MAC 64
4.3. KẾT LUẬN VÀ HƯỚNG PHÁT TRIỀN 70
4.4. TÀI LIỆU THAM KHẢO 71







6


DANH MỤC HÌNH VẼ
Hình 1: Minh họa về hàm băm 12
Hình 2: Cấu trúc lặp của hàm băm MD 15
Hình 3: Thuật toán mô tả MD5/SHA-1 18

Hình 4: Thuật toán NESHA-256 37
Hình 5: Các bước làm việc của NESHA-256 38
Hình 6: Sự làm việc của hàm nén BLAKE 40
Hình 7: Update cột 1 và cột 2 của ma trận
i
v
43
Hình 8: Update cột 3 và cột 4 của ma trận
i
v
43
Hình 9: Update tất cả các cột của ma trận
i
v
43
Hình 10: Update tất cả các đường chéo của ma trận
i
v
43
Hình 11: Các bước làm việc của BLAKE-256 44
Hình 12: Kết quả chạy chương trình- phần 1 48
Hình 13: Kết quả chạy chương trình- phần 2 49
Hình 14: Kết quả chạy chương trình- phần 3 50
Hình 15: Kết quả chạy chương trình- phần 4 51
Hình 16: Ký tài liệu với BLAKE-256 52
Hình 17: Việc sử dụng chữ ký trong thực tế 53
Hình 18: Bên gửi ký vào tài liệu cần gửi 54
Hình 19: Bên nhận xác minh tài liệu 54
Hình 20: Cấu trúc X.509 cerfiticate 56
Hình 21: Việc quản lý X.509 cerfiticate trong windows 58

Hình 22: Màn hình thông báo sau khi tạo private key 59
Hình 23: Thông tin Cerfiticate 59
Hình 24: Màn hình giao diện command toolsign 59
Hình 25: Màn hình Digital Signature Wizard 60
Hình 26: Chọn tên file cần ký 60
Hình 27: Lựa chọn Cerfiticate nguồn 61
Hình 28: Lựa chọn public key 61
Hình 29: Lựa chọn private key file 62
Hình 30: Lựa chọn thuật toán dùng cho chữ ký 62
Hình 31: Digital Signature Wizard 63
Hình 32: Digital Signature Wizard-1 63
Hình 33: Verify a file-1 64
Hình 34: MAC 65
Hình 35: MAC dùng để xác thực thông điệp 67
Hình 36: MAC dùng để xác thực và bảo đảm tính bí mật của thông điệp 67
7


Hình 37: Thuật toán tính HMAC 68
Hình 38: Sử dụng HMAC trong IPSec 69

































8


DANH MỤC HÌNH VẼ
Bảng 1: Kiểu tấn công các hàm băm 14
Bảng 2: Bảng so sánh các loại hàm băm MD 26
Bảng 3: Modify multiple message m
5

30
Bảng 4: Một sự đụng độ MD5 31
Bảng 5: Mô tả các bước ở vòng 1-phần 1 31
Bảng 6: Mô tả các bước ở vòng 1-phần 2 32
Bảng 7: Mô tả các bước ở vòng 1-phần 3 32
Bảng 8: Mô tả các điều kiện ở vòng 1-phần 1 33
Bảng 9: Mô tả các bước ở vòng 1-phần 2 33
Bảng 10: Mô tả các bước ở vòng 1-phần 3 33
Bảng 11: Mô tả các bước ở vòng 2-phần 1 34
Bảng 12: Mô tả các bước ở vòng 2-phần 2 34
Bảng 13: Mô tả các bước ở vòng 2-phần 3 34
Bảng 14: Mô tả điều kiện bước ở vòng 2-phần 1 35
Bảng 15: Mô tả điều kiện bước ở vòng 2-phần 2 35
Bảng 16: Mô tả điều kiện bước ở vòng 2-phần 3 35
Bảng 17: Các hoán vị của hàm băm NESHA-256 37
Bảng 18: 16 hằng số của phép cộng của hàm băm NESHA-256 39
Bảng 19: Các nhánh sử dụng các giá trị hoán vị của hàm băm NESHA-256 39
Bảng 20: Các thuật toán BLAKE 40
Bảng 21: Các hoán vị của hàm băm BLAKE 41
















11


1. Đặt vấn đề bài toán
Trong thời đại 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 có biện pháp để đảm bảo an toàn cho các giao dịch thương mại qua
mạng. và khi các giao dịch thương mại qua mạng được đảm bảo an toàn thì đồng nghĩa
với việc số lượng giao dịch ngày càng tăng và do đó hạn chế được các giao dịch
thương mại truyền thống và do đó tiết kiệm được chi phí, thúc đẩy sự giao thương
rộng rãi hơn. Trong việc đảm bảo an toàn cho các giao dịch qua mạng internet thì hàm
băm đóng vai trò rất quan trọng, nó 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, điều này
là rất quan trọng.























12


2. Tổng quan về hàm băm
2.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ào tạo ra chuỗi đầu
ra (hay còn gọi là message degits, 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: 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á
64
2
bít, nếu chiều dài của M vượt quá
64
2
bít thì chỉ có

64
2
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).
- H là hàm băm.
- Hàm băm được sử dụng trong việc mã hóa password, giao dịch điện tử, kiểm
tra sự toàn vẹn của một file Hàm băm được sử dụng phổ biến là hàm băm
một chiều (one-way) MD5.

Các tính chất của hàm băm
- 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ông thể tìm được bức thông điệp M’

M sao cho H(M) =
H(M’) .
- Hàm băm H có tính phi đụng độ cao (strong collision), điều đó có nghĩa là ta
không thể tìm được cặp thông điệp (M, M’) M’

M sao cho H(M)=H(M’).
- Hàm băm H có tính một chiều (one-way) có nghĩa là cho giá trị H(M) sẽ là
không thể tìm được giá trị M.

13


2.2. 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 nhưng
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ông thể điều khiển được nội dung thông điệp thứ 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.
2.2.1. Tấn công theo nguyên lý vét cạn
Trong khoa học máy tính tấn công vét cạn là một cách rất tổng quát, nội dung chính
của kiểu tấn công này trong việc tấn công hàm băm là kiểm tra tất cả đầu vào sau đó
băm giá trị này bằng một hàm băm, sau đó kiểm tra giá trị này với giá trị băm cho
trước, nếu chúng bằng nhau có nghĩa là attacker đã tấn công thành công, còn nếu
không thì attacker tìm một bức thông điệp khác và băm chúng bằng hàm băm cho đến
khi nào chúng tạo ra giá trị băm mong muốn. Ta thấy kiểu tấn công này không phụ
thuộc vào cấu trúc của hàm băm mà nó chỉ phụ thuộc vào chiều dài đầu ra của hàm
băm, do đó để nâng cao tính bảo mật chúng ta cần cho đầu ra càng càng dài thì tính
bảo mật càng cao. Tuy nhiên cách tấn công này không hiệu quả vì không gian đầu vào
quá lớn, trong trường hợp xấu nhất thuật toán duyệt qua tất cả các đầu vào có thể để
tìm được nghiệm, điều này là không thể.
Yêu cầu tài nguyên cho việc tấn công này bùng nổ tổ hợp với chiều dài đầu ra của hàm
băm, như vậy có nghĩa là nếu ta tăng chiều dài đầu ra càng lớn thì khả năng để tấn
công thành công càng thấp, gọi chiều dài đầu ra là n

chúng ta cần thử 2
n
lần để tìm
được một tấn công thành công.
2.2.2. Tấn công dựa trên lý thuyết ngày sinh

Nội dung của kiểu tấn công này được minh họa bằng ví dụ sau: trong một phòng họp
có k người hãy tìm xác xuất để ít nhất có 2 người có cùng ngày sinh, bằng toán học
người ta đã chứng minh được rằng nếu có 23 người trong một phòng thì xác xuất để 2
người có cùng ngày sinh là

0.5.
Mộ t cá ch tổ ng quá t , giả sử mộ t hà m băm có n giá trị (tức n là chiều dài của chuỗi đầu
ra) băm khác nhau, nế u chúng ta có k giá trị (input) băm từ k thông tin khá c nhau được
chọn ngẫu nhiên, thì xá c suấ t để không xả y ra đụ ng độ là :
(1-
n
1
)(1-
n
2
) (1-
n
k 1
) =




1
1
)1(
k
i
n
i


14


Với
n
i
<<1 thì




1
1
)1(
k
i
n
i







1
1
k
i

n
i
e
=e
n
kk
2
)1( 

Do đó xác xuất để xảy ra đụng độ là =1-e
n
kk
2
)1( 



k
2
- k

2nlog

1
1
, suy ra k



1

1
log2n

Do đó ta thấy với hàm băm có chiều dài đầu ra là 128 bít thì chúng ta cần k

2
128
2*2ln

ln2*
64
2

10
38
đầu vào để tìm được hai thông điệp khác nhau nhưng cho cùng giá trị
băm (hash value) với xác xuất là 0.5. Có nghĩa là cho trước giá trị băm, chúng ta cần
thử
38
10
giá trị M để hash value = H(M). Để làm được điều này với máy tính có tốc độ
sử lý 1 phép tính mất 1 microsecond mất
24
10
năm.

Bằng sự suy luận chúng ta cũng thấy rằng với chiều dài giá trị băm là 128 bít chúng ta
cần thử
19
10

đầu vào M, M’ sao cho H(M) = H(M’). Để làm được điều này với máy
tính có tốc độ sử lý 1 phép tính mất 1 microsecond mất 317000 năm.

Thống kê 1 số kiểu tấn công hàm băm.

Bảng 1: Kiểu tấn công các hàm băm
Ngày nay người ta đã tìm được cách tấn công các hàm băm hiệu quả hơn nhiều, chủ
yếu bằng phương pháp different attack (sẽ trình bày ở phần tấn công hàm băm),
người ta có thể tấn công hàm băm MD5 trong khoảng 1 phút bằng máy tính để bàn.
2.3. 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
15


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ị 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.

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 2: Cấu trúc lặp của hàm băm MD
2.3.1. Hàm băm MD5

Ronald Rivest đã sáng tạo ra các hàm băm MD2, MD4, MD5. Hàm băm MD5 được
tạo ra để thay thế những lỗ hổng trong bảo mật của hàm băm MD4.
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 sau đó đượ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
16


chiều dài 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.
Giải thuật MD5 thực hiện như sau:
i. Thực hiện việc đệm vào thông điệp (việc đệm này luôn được thực hiện, ngay cả
khi chiều dài bức thông điệp đã là bội số của 512bit).
ii. Đầu vào là các khối 512 bit, các khối 512 bit này được chia thành 16 khối 32
bit.
iii. Khởi tạo 4 biến A, B, C, D(người ta thường gọi các biến A, B, C, D là các
chaining variable)có giá trị như sau:
 A = 0x67452301
 B = 0xefcdab89
 C = 0x98badcfe
 D = 0x10325476
iv. Ta định nghĩa 4 hàm phi tuyến như sau:
F(X, Y, Z) = (X


Y)

(⌐X

Z)
G(X, Y, Z) = (X

Z)

(Y

⌐Z)
H(X, Y, Z) = X

Y

Z
I(X, Y, Z) = Y

(X

⌐Z)
v. Thực hiện các bước tính toán như sau:
Trước tiên chúng ta xây dựng mảng hằng số sau:
t
i
= int (
32
2
* abs (sin (i))) 1


i

64.
Vòng 1: Ký hiệu [abcd k s t] là bước thực hiện của phép toán a = b + ((a + F(b, c, d) +
X[k] + T[t]) <<< s) chi tiết như sau:
[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 2 8]
[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]
Nhận xét về vòng 1: Vòng 1 dùng hàm F, Với giá trị t từ 1

16 và k từ 1

15.

Vòng 2: Tương tự, ký hiệu [abcd k s t] là của biểu thức: a = b + ((a + G (b, c, d) +
X[k] + T[t]) <<< s) Quá trình thực hiện 16 bước:
[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]
17


Nhận xét vòng 2: dùng hàm G, với t từ 17

32 và k = (1 + 5k) mod 16.

Vòng 3: Tương tự, ký hiệu [abcd k s t] là của biểu thức: a = b + ((a + H (b, c, d) +

X[k] + T[t]) <<< s).
Quá trình thực hiện 16 bước:
[ABCD 5 4 33] [DABC 8 11 34] [CDAB 1 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 5 16 47] [BCDA 2 23 48]
Nhận xét vòng 3: dùng hàm H, với t từ 33

48 và k = (5 + 3k) mod 16.

Vòng 4: Tương tự, ký hiệu [abcd k s t] là của biểu thức:
a = b + ((a + I (b, c, d) + X[k] + T[t]) <<< s)
Quá trình thực hiện 16 bước:
[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]
[ABCDb 4 6 61] [DABC 11 10 62] [CDAB 2 15 63] [BCDA 9 21 64]
Nhận xét vòng 4: dùng hàm I, với t từ 49

64 và k =7k mod 16.
Sau đó thực hiện phép cộng sau:
A = A + AA
B = B + BB
C = C + CC
D = D + DD
Trong đó: T[t]= 2
32
*|sin(t+1)|(1

t


64), x[k] là các khối dữ liệu 32 bít.
Ta có thể tóm tắt quá trình làm việc của MD5 như hình sau [6]:
18



Hình 3: Thuật toán mô tả MD5/SHA-1
Một số ví dụ về việc thực hiện hàm MD5.
MD5 (“”) = d41d8cd98f00b204e9800998ecf8427e
MD5(“ ”) = 7215ee9c7d9dc229d2921a40e899ec5f
MD5 (“Md5”) = 8d6c0760e7dae464f181d5fb9f6d3cb0
Để minh họa quá trình làm việc của thuật toán, chúng ta xem xét ví dụ.
M=”” (chuỗi rỗng, có chiều dài l=0).
Trước tiên chúng ta thực hiện việc đệm vào bức thông điệp để thỏa mãn điều kiện
l+k+64=n*512, do l=0 do đó chúng ta có k+64=n*512, chúng ta chọn n là số nguyên
nhỏ nhất thảo mãn điều kiện trên tức k+64=512, điều này có nghĩa là chúng ta cần đệm
448 bit vào bức thông điệp. Việc đệm được thực hiện như sau, trước tiên chúng ta
thêm một bit 1 vào message, sau đó chúng ta thực hiện thêm 448-1=447 bit 0 vào bức
thông điệp, như vậy việc đệm đã được thực hiện xong. Tiếp theo chúng ta thêm 64 bit
diễn tả chiều dài bức thông điệp vào thông điệp trên. Do đó bức thông điệp được sử lý
sẽ như sau:
80000000 00000000 00000000 00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000 00000000 00000000 00000000
00000000 00000000.
Tiếp theo chúng ta chia (break) bức thông điệp này thành 16 khối 32 bít theo hệ hexan
theo định dạng little-endian (có nghĩa là các bít quan trọng nhất sẽ ở vị trí cuối). Vậy ta
có X[k] như sau:
X [0] = 0x00000080
X [1] = 0x00000000,

X [2] = 0x00000000,
19


X [3] = 0x00000000,
X [4] = 0x00000000,
X [5] = 0x00000000,
X [6] = 0x00000000,
X [7] = 0x00000000,
X [8] = 0x00000000,
X [9] = 0x00000000,
X [10] = 0x00000000,
X [11] = 0x00000000,
X [12] = 0x00000000,
X [13] = 0x00000000,
X [14] = 0x00000000(message block mô tả chiều dài của thông điệp),
X [15] = 0x00000000(message block mô tả chiều dài của thông điệp).
Sau đó chúng ta thực hiện thao tác đầu tiên cho vòng 1 như sau:

A = 0xefcdab89 + ((0x67452301 + 0x98badcfe + 0x00000080 + 0xd76aa478) <<< 7)
= 0xefcdab89 + (0xd76aa4f7 <<< 7) = 0xefcdab89 + 0xb5527beb = 0xa5202774
Sau bước đầu tiên thì các giá trị của chaining variable như sau.
A B C D = a5202774 efcdab89 98badcfe 10325476
Tương tự cho các bước của vòng 1, 2, 3, 4 chúng ta có kết quả sau:
a5202774 efcdab89 98badcfe 10325476
a5202774 efcdab89 98badcfe f59592dd
a5202774 efcdab89 e7f06b23 f59592dd
a5202774 1b163203 e7f06b23 f59592dd
32033344 1b163203 e7f06b23 f59592dd
32033344 1b163203 e7f06b23 2f35d494

32033344 1b163203 f5b158db 2f35d494
32033344 9bc13ce9 f5b158db 2f35d494
3893b991 9bc13ce9 f5b158db 2f35d494
3893b991 9bc13ce9 f5b158db fce4a312
3893b991 9bc13ce9 e1ef0576 fce4a312
3893b991 70768a29 e1ef0576 fce4a312
f56c7cf1 70768a29 e1ef0576 fce4a312
f56c7cf1 70768a29 e1ef0576 374943a7
20


f56c7cf1 70768a29 5aa53f75 374943a7
f56c7cf1 d6819c6a 5aa53f75 374943a7
1c7d7513 d6819c6a 5aa53f75 374943a7
1c7d7513 d6819c6a 5aa53f75 7bd57a3a
1c7d7513 d6819c6a c095f13a 7bd57a3a
1c7d7513 bd782e17 c095f13a 7bd57a3a
3d1e3e6c bd782e17 c095f13a 7bd57a3a
3d1e3e6c bd782e17 c095f13a 68b7b3e3
3d1e3e6c bd782e17 eb41643e 68b7b3e3
3d1e3e6c e422531a eb41643e 68b7b3e3
306ec122 e422531a eb41643e 68b7b3e3
306ec122 e422531a eb41643e d28c77c2
306ec122 e422531a a3c663da d28c77c2
306ec122 a0572807 a3c663da d28c77c2
13707036 a0572807 a3c663da d28c77c2
13707036 a0572807 a3c663da ae7813db
13707036 a0572807 1c31c384 ae7813db
13707036 a2205f1f 1c31c384 ae7813db
df63eaa1 a2205f1f 1c31c384 ae7813db

df63eaa1 a2205f1f 1c31c384 c3689f5b
df63eaa1 a2205f1f 12f3e755 c3689f5b
df63eaa1 004b6669 12f3e755 c3689f5b
5f7a9b2e 004b6669 12f3e755 c3689f5b
5f7a9b2e 004b6669 12f3e755 abc34e16
5f7a9b2e 004b6669 91ca4cb7 abc34e16
5f7a9b2e c5dc8c15 91ca4cb7 abc34e16
4497169d c5dc8c15 91ca4cb7 abc34e16
4497169d c5dc8c15 91ca4cb7 76fd93d4
4497169d c5dc8c15 fd95f243 76fd93d4
4497169d 0fe32453 fd95f243 76fd93d4
3f55edfd 0fe32453 d95f243 76fd93d4
3f55edfd 0fe32453 fd95f243 22a31f54
3f55edfd 0fe32453 68d84ea2 22a31f54
3f55edfd ca7d2dbd 68d84ea2 22a31f54
21


93aa2577 ca7d2dbd 68d84ea2 22a31f54
93aa2577 ca7d2dbd 68d84ea2 1688dc85
93aa2577 ca7d2dbd cd85b8cb 1688dc85
93aa2577 561e0689 cd85b8cb 1688dc85
5625a114 561e0689 cd85b8cb 1688dc85
5625a114 561e0689 cd85b8cb 3450f42b
5625a114 561e0689 392ad0d0 3450f42b
5625a114 1e77fa61 392ad0d0 3450f42b
474a9c8c 1e77fa61 392ad0d0 3450f42b
474a9c8c 1e77fa61 392ad0d0 dfce00bc
474a9c8c 1e77fa61 36594b14 dfce00bc
474a9c8c 30130182 36594b14 dfce00bc

7246fad3 30130182 36594b14 dfce00bc
7246fad3 30130182 36594b14 6e10a476
7246fad3 30130182 ff4ea3eb 6e10a476
7246fad3 14e45506 ff4ea3eb 6e10a476
Và kết quả cuối cùng chúng ta có:
7246fad3 14e45506 ff4ea3eb 6e10a476
+ 67452301 efcdab89 98badcfe 10325476

d98c1dd4 04b2008f 980980e9 7e42f8ec
2.3.2. Hàm băm SHA-1
Thuật toán cho hàm băm này nhận chiề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:
H
)0(
0
=0x67452301
H
)0(
1
=0xefcdab89
H
)0(
2
=0x98badcfe
H

)0(
3
=0x10325476
H
)0(
4
=0xc3d2e1f0.
22



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


t
=


)(t
t
, 0
15 t


l


3t



8t


14t


16t

, 16
79 t


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

b=H
)1(
1
i

c=H
)1(
2
i

d=H

)1(
3
i

e=H
)1(
4
i


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

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

b=a
a=T
}
- Tính toán chuỗi đầu ra như sau.
H
)(
0
i
= a + H
)1(
0
i

H
)(
1
i
= b + H
)1(
1
i

H
)(
2
i
= c + H
)1(
2
i


H
)(
3
i
= d + H
)1(
3
i

H
)(
4
i
= e + H
)1(
4
i


2.3.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.
23


- Thực hiện việc khởi tạo cho các biến chaining variable như sau:

H
)0(
0
=0x6a09e667
H
)0(
1
=0xbb67ae85
H
)0(
2
=0x3c6ef372
H
)0(
3
=0xa54ff53a
H
)0(
4
=0x510e527f.
H
)0(
5
=0x9b05688c
H
)0(
6
=0x1f83d9ab
H
)0(

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


t
=


)(t
t
, 0
15 t


}256{
1


2t

+ 
7t
+

}256{
0



15t

+ 
16t
, 16
63 t


- Khởi tạo các biến làm việc như sau .
a=H
)1(
0
i

b=H
)1(
1
i

c=H
)1(
2
i

d=H
)1(
3
i


e=H
)1(
4
i

f=H
)1(
5
i

g=H
)1(
6
i

h=H
)1(
7
i

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

}256{
1
)(e

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

T
2
=

}256{
0
)(a
+Maj (a, b, c)
h = g
g = f
f = e
e=d + T
1

d = c
c = b
b = a
24


a= T
1
+ T
2


}
- Tính toán kết quả cuối cùng như sau.
H
)(
0
i
= a + H
)1(
0
i

H
)(
1
i
= b + H
)1(
1
i

H
)(
2
i
= c + H
)1(
2
i


H
)(
3
i
= d + H
)1(
3
i

H
)(
4
i
= e + H
)1(
4
i

H
)(
5
i
= f + H
)1(
5
i

H
)(
6

i
= g + H
)1(
6
i

H
)(
7
i
= e + H
)1(
7
i

Trong đó:
Ch(x, y, z) = (x ^ y)

(⌐x

z)
Maj(x, y, z) = x ^ y)

(y ^ z)

(z ^ x).

}256{
0
)(x

= ROTR
2
(x)

ROTR
13
(x)

ROTR
22
(x)

}256{
1
)(x
= ROTR
6
(x)

ROTR
11
(x)

ROTR
25
(x)

}256{
0
= ROTR

7
(x)

ROTR
18
(x)

SHR
3
(x)

}256{
1
= ROTR
17
(x)

ROTR
19
(x)

SHR
10
(x)

2.3.4. Hàm băm SHA-384, SHA-512
Các 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 (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:
H
)0(
0
=0xcbbb9d5dc1059ed8
H
)0(
1
=0x629a292a367cd507
H
)0(
2
=0x9159015a3070dd17
H
)0(
3
=0x152fecd8f70e5939
H
)0(
4
=0x67332667ffc00b31
25


H
)0(
5

=0x8eb44a8768581511
H
)0(
6
=0xdb0c2e0d64f98fa7
H
)0(
7
=0x47b5481dbefa4fa4

Với hàm băm SHA-512 các giá trị chaining variable được khởi tạo như sau.
H
)0(
0
=0x6a09e667f3bcc908
H
)0(
1
=0xbb67ae8584caa73b
H
)0(
2
=0x3c6ef372fe94f82b
H
)0(
3
=0xa54ff53a5f1d36f1
H
)0(
4

=0x510e527fade682d1
H
)0(
5
=0x9b05688c2b3e6c1f
H
)0(
6
=0x1f83d9abfb41bd6b
H
)0(
7
=0x5be0cd19137e2179.

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


t
=


)(t
t
, 0
15 t


}512{
1



2t

+ 
7t
+

}512{
0


15t

+ 
16t
, 16
79 t



- Khởi tạo các biến làm việc như sau.
a = H
)1(
0
i

b = H
)1(
1
i


c = H
)1(
2
i

d = H
)1(
3
i

e = H
)1(
4
i

f = H
)1(
5
i

g = H
)1(
6
i

h = H
)1(
7
i


For (i=0; i<=79; i++)
{
T
1
= h+

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

T
2
=

}512{
0
)(a
+Maj (a, b, c)
h = g
g = f
f = e
e=d + T
1


26


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
)(
0
i
= a + H
)1(
0
i

H
)(
1
i
= b + H
)1(
1

i

H
)(
2
i
= c + H
)1(
2
i

H
)(
3
i
= d + H
)1(
3
i

H
)(
4
i
= e + H
)1(
4
i

H

)(
5
i
= f + H
)1(
5
i

H
)(
6
i
= g + H
)1(
6
i

H
)(
7
i
= e + H
)1(
7
i

Trong đó
Ch(x, y, z) = (x ^ y)

(⌐x


z)
Maj(x, y, z) = (x ^ y)

(y ^ z)

(z ^ x).

}512{
0
)(x
= ROTR
28
(x)

ROTR
34
(x)

ROTR
39
(x)

}512{
1
)(x
= ROTR
14
(x)


ROTR
18
(x)

ROTR
41
(x)

}512{
0
= ROTR
1
(x)

ROTR
8
(x)

SHR
7
(x)

}512{
1
= 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
Chiều dài khối
dữ liệu
Độ dài từ
Chiều dài đầu
ra
Số vòng
Năm công bố
MD5
512
32
128
64
1992
SHA-1
512
32
160
80
1995
SHA-384
1024
64
384

80
2002
SHA-512
1024
64
512
80
2002
Bảng 2: Bảng so sánh các loại hàm băm MD
3. Tấn công hàm băm
3.1. Tấn công hàm băm
Tấn công hàm băm là việc phá vỡ các yêu cầu với hàm băm. Attacker thường tấn công
vào hai tính chất sau đối với hàm băm.
27


- Phá vỡ tính đụng độ yếu có nghĩa là người ta sẽ cố gắng tìm được hai message
M và M’ sao cho M’

M nhưng H(M)=H(M’).
- Cho trước giá trị băm h người ta sẽ tìm được message M sao cho H(M)=h.
3.1.1. Tấn công MD5
Hàm băm MD5 bị tấn công vào năm 2004 bởi Wang. Cơ sở của việc tấn công này đó
là dựa trên phép toán XOR (
X
=X’

X, X có thể là các message block, chaining
variable….) và phép trừ mod 2
32

(
X
=X’-X mod 2
32
).
Trong việc tấn công MD5 chúng ta sẽ xem xét phương pháp tấn công của Wang. Có
nghĩa là tìm hai khối message M = (M
0
, M
1
) và M’= (M’
0
, M’
1
) có chiều dài 1024 bít
(M
0
, M
1
, M’
0
, M’
1
mỗi khối có chiều dài 512 bít) mà sau khi băm hai message này
cho cùng giá trị băm.

Các ký hiệu.
- M
0
= (m

0
, m
1
, m
2
,…m
15
), M’
0
=(m’
0
, m’
1
, m’
2
,….m’
15
) diễn tả hai message.
M
= (
0
m
,
1
m
,
2
m
,…
15

m
) diễn tả sự khác nhau của hai khối message.
i
m
=m’
i
- m
i
sự khác biệt của từ thứ i.
- a
i
, b
i
, c
i
, d
i
diễn tả chaining varibale của vòng thứ 4i-3, 4i-2, 4i-1, 4i, của
message M , với i

1

16.
- x
ji,
diễn ta bít thứ j của x
i
với chú ý rằng bít có ý nghĩa nhất (the most
sigfinication bit) ở vị trí thứ 32 và bít có ít ý nghĩa nhất(the least sigfinication
bit) ở vị trí thứ 1.

-
ji
x
,

=x’
ji,
- x
ji,
=
1
sự khác biệt được tạo ra bởi sự thay đổi bít thứ j của x
i
.
Ký hiệu x
i
[j] diễn tả sự thay đổi bít thứ j từ 0 thành 1, x
i
[-j] diễn tả thay đổi bít
thứ j từ 1 thành 0.
-
i
x
[j
0
, j
1
, …, j
l
]=x

i
[j
0
, j
1
, …, j
l
] diễn tả sự khác nhau, được tạo ra bởi sự thay
đổi các bít j
0
, j
1
, …, j
l
.
Chúng ta lựa chọn sự khác biệt với hai phép lặp như sau.
0
H
 
)',(
00
MM
1
H
 
)',(
11
MM
H
= 0

Với điều kiện.
0
M
= M’
0
- M
0
= (0, 0, 0, 0, 2
31
, 0, 0, 0, 0, 0, 0, 2
15
, 0, 0, 2
31
, 0)
1
M
= M’
1
- M
1
= (0, 0, 0, 0, 2
31
, 0, 0, 0, 0, 0, 0, -2
15
, 0, 0, 2
31
, 0)
1
H
= (2

31
, 2
31
+2
25
, 2
31
+2
25
, 2
31
+2
25
)
1
H
= (
dcba  ,,,
) là sự khác biệt của bốn biến chaining variable cho vòng lặp
đầu tiên.

×