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ự
Tên đầy đủ
Thuật ngữ
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 v i ............................................................................. 43
Hình 8: Update cột 3 và cột 4 của ma trận v i ............................................................................. 43
Hình 9: Update tất cả các cột của ma trận v i ............................................................................. 43
Hình 10: Update tất cả các đường chéo của ma trận v i ............................................................... 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á 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).
-
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
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 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à :
k 1
1
k 1
2
(1- n )(1- n )....(1- n ) =
(1
i 1
i
n
)
14
i
Với n <<1 thì
k 1
k 1
(1 ni )
i 1
e n
i
Do đó xác xuất để xảy ra đụng độ là
k 2 - k 2nlog
1
, suy ra k
1
=e
i 1
k ( k 1)
2n
=1-e
2n log
k (k 1)
2n
1
1
128
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 ln 2 * 2 2
ln2* 2 64 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ử 1038 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 1024 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ử 1019 đầ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 ( 2 32 * 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
2.3.2.
Hàm băm SHA-1
980980e9
7e42f8ec
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:
( 0)
H 0 =0x67452301
(0)
H 1 =0xefcdab89
(0)
H 2 =0x98badcfe
( 0)
H 3 =0x10325476
(0)
H 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 ) ,
𝑅𝑂𝐿𝑇 l 𝑊 t 3 𝑊 t 8 𝑊 t 14 𝑊 t 16 ,
0 t 15
16 t 79
Khởi tạo các biến làm việc như sau ở vòng thứ i-1.
( i 1)
a=H 0
( i 1)
b=H 1
( i 1)
c=H 2
( i 1)
d=H 3
( i 1)
e=H 4
- Thực hiện việc biến đổi như sau.
For (t=0; t<=79; t++)
{
T = ROLT 5 (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.
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)
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.
- Xem thêm -