●Hàm Hx cần phải có tính toán hiệu quả, tức là thuật toán Hash khi thực hiện trên phần cứng và phần mềm cần phải có công suất lớn.. ●Cho y là giá trị của hàm hash, thì khó về mặt tính to
Trang 1TR ƯỜ NG Đ I H C CÔNG NGH THÔNG TIN Ạ Ọ Ệ KHOA K THU T MÁY TÍNH Ỹ Ậ
-BÁO CÁO Đ ÁN CU I KỲ Ồ Ố MÔN THI T K H TH NG S HDL Ế Ế Ệ Ố Ố
L p: CE213.M11 ớ
TP H CHÍ MINH, THÁNG 11 NĂM 2021 Ồ
Trang 2M C L C Ụ Ụ
1.5.3 Bước 3: Divide input into 512 bits block 4
2.3 SHA-1 algorithm testing results by software 11
Trang 33.4.2 Post 15
Trang 4Ch ươ ng 1 Introduction
1.1 Hash function overview.
- Thu t toán Cryptography đ c p đ n ngành khoa h c nghiên c u v mã hóa vàậ ề ậ ế ọ ứ ề
gi i mã thông tin C th h n là nghiên c u v cách chuy n đ i thông tin tả ụ ể ơ ứ ề ể ổ ừ
d ng rõ (Clear text) sang d ng m (cipher text) và ngạ ạ ờ ượ ạc l i
- M t thu t toán Hashing là m t hàm băm m t mã Đâу là m t thu t toán toán h cộ ậ ộ ậ ộ ậ ọ ánh х d li u có kích thạ ữ ệ ước tùу ý thành hàm băm có đ dài c đ nh Nó độ ố ị ược thi t k đ mã hóa m t chi u à không th mã hóa ngế ế ể ộ ề ᴠ ể ượ ạc l i
- Hàm băm lý tưởng c n có nh ng у u t ѕau:ầ ữ ế ố
o Nó r t nhanh.ấ
o Nó có th tr ể ả ᴠề ộ m t ph m i l n các giá tr băm.ạ ᴠ ớ ị
o Nó t o ra m t giá tr đ u ra duу nh t cho m t giá tr đ u ào.ạ ộ ị ầ ấ ộ ị ầ ᴠ
o Nó t o ra các giá tr băm không gi ng nhau cho các giá tr đ u ào tạ ị ố ị ầ ᴠ ương
t ự
o Các giá tr băm đị ượ ạc t o ra không có m u rõ ràng.ẫ
Đ t o ra hàm Hash thì hàm hash ph i th a mãn các yêu c u sau: ể ạ ả ỏ ầ
●Đối số của hàm hash là bản tin có chiều dài bất kỳ
●Giá trị của hàm hash có chiều dài không đổi
●Hàm H(x) cần phải có tính toán hiệu quả, tức là thuật toán Hash khi thực hiện trên phần cứng và phần mềm cần phải có công suất lớn Phải đảm bảo được rằng quá trình ký và kiểm tra lên giá trị của hàm hash nhanh hơn so với quá trình ký và kiểm tra trên bản thân bản tin
●Cho y là giá trị của hàm hash, thì khó về mặt tính toán để tìm được x thỏa H(x)=y, tức là hàm hash phải là hàm một chiều
●Hàm hash là hàm không va chạm, tức là khi cho trước bản tin x, không thể thực hiện được về mặt tính toán để tìm được bản x’x sao cho H(x)=H(x’) [1]
1.2 General structure of Hash function.
1 Cho trước m t thông đi p M có đ dài b t kỳ Tùy theo thu t toán độ ệ ộ ấ ậ ượ ửc s
d ng, chúng ta có th c n thêm thông đi p các bit đ nh n đụ ể ầ ệ ể ậ ược thông đi pệ
có đ dài là b i s c a chi u dài c đ nh cho trộ ộ ố ủ ề ố ị ước đ ph c v cho vi cể ụ ụ ệ tính toán Chia thông đi p thành t ng kh i có kích thệ ừ ố ướ ằc b ng nhau t c là Mứ
= (M1, M2, …Ms)
2 G i Hi là tr ng thái có kích thọ ạ ước n bit, n là chi u dài c a giá tr hàm băm, Fề ủ ị
là hàm nén th c hi n thao tác tr n kh i d li u v i tr ng thái hi n hành:ự ệ ộ ố ữ ệ ớ ạ ệ
- Kh i t o H0, b ng vect kh i t o nào đó.ở ạ ằ ơ ở ạ
- Th c hi n tr n: Hi=F(Hi-1,Mi), i[1,s] [1]ự ệ ộ
1
Trang 51.3 Applications of data encryption.
- Các ng d ng c a mã hóa: ứ ụ ủ
o Xác minh m t t p đã độ ệ ược thay đ i hay ch a: ổ ư
▪ Được th c hi n b ng cách t o ra m t checksum khi t p đự ệ ằ ạ ộ ệ ược truy n và sau đó m t l n n a khi nó đ n đích T p đề ộ ầ ữ ế ệ ược truy n chề ỉ
có th để ược coi là không thay đ i n u c hai checksum gi ng h tổ ế ả ố ệ nhau
▪ Gi s mu n t i xu ng m t b n c p nh t ph n m m l n, sau khiả ử ố ả ố ộ ả ậ ậ ầ ề ớ
t i xu ng làm sao đ bi t đả ố ể ế ượ ằc r ng t p đệ ượ ảc t i xu ng là đúng?ố
Đi u gì s x y ra n u m t bit b m t trong quá trình t i xu ng vàề ẽ ả ế ộ ị ấ ả ố
t p b n có trên máy tính c a mình ngay bây gi không chính xácệ ạ ủ ờ
nh d đ nh Vi c áp d ng b n c p nh t cho m t chư ự ị ệ ụ ả ậ ậ ộ ương trình không chính xác theo cách mà nhà phát tri n đã t o ra có th s gâyể ạ ể ẽ
ra cho b n nh ng v n đ l n ạ ữ ấ ề ớ
▪ Cách gi i quy t: Gi s trang web cung c p m t checksum t gi iả ế ả ử ấ ộ ừ ả
“A9993E364706816ABA3E25717850C26C9CD0D89D” cho t pệ
b n t i xu ng Sau đó b n s d ng công c t o checksum c aạ ả ố ạ ử ụ ụ ạ ủ riêng mình đ t o checksum b ng cách s d ng m t hàm băm m tể ạ ằ ử ụ ộ ậ
mã SHA-1 N u c hai checksum trên trùng nhau thì c hai t p làế ả ở ả ệ
t p c a web và t p đã t i v máy là gi ng nhau N u hai checksumệ ủ ệ ả ề ố ế không kh p có nghĩa là ai đó đã thay th t p t i xu ng b ng th gìớ ế ệ ả ố ằ ứ
đó đ c h i mà b n không bi t [2]ộ ạ ạ ế
o Mã xác th c thông báo HMACự
▪ Dùng đ t o ra HMAC (Hashed Message Authentication Code) cóể ạ
d ng nh sau: HMAC = hashFunction(message + key)ạ ư
▪ Gi s b n mu n cho phép ngả ử ạ ố ười dùng ch n "quên m t kh u" vàọ ậ ẩ
g i m t liên k t đ t l i m t kh u đử ộ ế ặ ạ ậ ẩ ượ ử ếc g i đ n đ a ch e-mail c aị ỉ ủ
h ọ
▪ B n đã t o m t khóa bí m t mà ch b n m i bi t Hãy g i đây làạ ạ ộ ậ ỉ ạ ớ ế ọ K
Xây d ng m t chu i bao g m đ a ch e-mail c a ngự ộ ỗ ồ ị ỉ ủ ười dùng, th iờ gian hi n t i c a máy ch , mã băm c a m t kh u ngệ ạ ủ ủ ủ ậ ẩ ười dùng hi nệ
t i Hãy g i tin nh n này là M Tính HMAC c a M, s d ng K làmạ ọ ắ ủ ử ụ khóa bí m t T o m t URL ch a đậ ạ ộ ứ ường d n đ n trang đ t l i m tẫ ế ặ ạ ậ
2
Trang 6kh u c a b n và dẩ ủ ạ ướ ại d ng các tham s , đ a ch e-mail c a ngố ị ỉ ủ ười dùng, th i gian hi n t i và HMAC đờ ệ ạ ượ ạ ở ước t o b c trước, ví d :ụ https://www.example.com/forgotPassword?user=user
%40example.com&time=20151205T131159Z&hmac=3902ed847ff2 8930b5f141abfa8b471681253673
▪ Khi người dùng nh n đậ ược e-mail, h s theo dõi URL và truy c pọ ẽ ậ vào trang forgetPassword c a b n Đ đủ ạ ể ược phép đ t m t kh uặ ậ ẩ
m i, ngớ ười dùng ph i tr i qua quá trình xác minh N u các tham sả ả ế ố sau khi tr i qua các bả ước tính toán đ c bi t mà không b xáo tr nặ ệ ị ộ thì thì đây là m t liên k t h p l và an toàn đ ngộ ế ợ ệ ể ười dùng có thể
đ i m t kh u [2]ổ ậ ẩ
1.4 Encryption method.
1.4.1 SHA algorithm.
- SHA là i t t t c a Thu t toán Haѕh an toàn (Secure Hash Algorithm) Phiên b nᴠ ế ắ ủ ậ ả
đ u tiên c a thu t toán là SHA-1 ra đ i năm 1995, à ѕau đó là SHA-2 SHA-1ầ ủ ậ ờ ᴠ
t o ra hàm băm 160 bit (20 bуte) Trong đ nh d ng th p l c phân, nó là m t ѕạ ị ạ ậ ụ ộ ố nguуên dài 40 ch ѕ Nó đữ ố ược thi t k cho các ng d ng m t mã, nh ng cũngế ế ứ ụ ậ ư
ѕ m b phát hi n có l h ng Vì th các phiên b n SHA khác đớ ị ệ ỗ ổ ế ả ược xây d ng vàự phát tri n ngay sau đó Cho đ n ngày nay đã có nhi u phiên b n gi i thu t SHAể ế ề ả ả ậ khác nhau được cho ra đ i [3]ờ
1.4.2 SHA-1 algorithm
- SHA-1 là m t hàm băm m t mã độ ậ ược thi t k b i C quan An ninh Qu c giaế ế ở ơ ố Hoa Kỳ và được NIST công b nh m t thu t toán c i ti n c a SHA-0 vào nămố ư ộ ậ ả ế ủ
1995 Và nó đượ ử ục s d ng trong nhi u giao th c và ng d ng b o m t, baoề ứ ứ ụ ả ậ
g m TSL, SSL, SSH và IPsec Khi m t message nh h n 2ồ ộ ỏ ơ 64 bit được đ a vào,ư giá tr đ u ra có đ dài 160-bit t vi c th c hi n các thao tác và đị ầ ộ ừ ệ ự ệ ược thêm vào
mã băm trước đó là mã băm cu i cùng ố
- Ba thu t toán SHA có c u trúc khác nhau và đậ ấ ược phân bi t là: SHA-0, SHA-1,ệ SHA-2 SHA-1 g n tầ ương t nh SHA-0, nh ng s a ch a m t l i trong các đ cự ư ư ử ữ ộ ỗ ặ
t k thu t g c c a hàm băm SHA [3]ả ỹ ậ ố ủ
1.5 Step-by-step of SHA-1 algorithm.
Đ u vào: Chu i có đ dài t i đa 2ầ ỗ ộ ố 64 bits
Đ u ra: Chu i đã đầ ỗ ược mã hóa, có đ dài 160 bits.ộ
1.5.1 B ướ c 1: Message Padding.
- Tin nh n ho c t p d li u ban đ u đắ ặ ệ ữ ệ ầ ược coi là m t chu i bit (có th bi u di nộ ỗ ể ể ễ
dướ ại d ng s HEXA) M c đích c a vi c đ m tin nh n là làm cho chu i sau khiố ụ ủ ệ ệ ắ ỗ
3
Trang 7đượ ệc đ m là m t b i s c a 512 vì các bộ ộ ố ủ ở ước sau s th c hi n vi c chia chu iẽ ự ệ ệ ỗ thành t ng kh i 512 bits Chúng tôi s trình bày chi ti t các bừ ố ẽ ế ước làm ngay dưới đây Nh ng tóm l i, chúng ta s thêm 1 bit “1” và r t nhi u s “0” vào sau chu iư ạ ẽ ấ ề ố ỗ
g c Còn s lố ố ượng s “0” bao nhiêu thì ph i tính Và cu i cùng là s thêm 2ố ả ố ẽ word(64 bits) vào cu i dãy, 2 word này bi u di n cho đ dài c a tin nh n g c.ố ể ễ ộ ủ ắ ố [4]
- V y công vi c c n ph i làm là gì?ậ ệ ầ ả
o Chúng ta c n ph i tìm s t nhiên n sao cho đ dài c a chu i g c nhầ ả ố ự ộ ủ ỗ ố ỏ
h n n*512 - 64 bits (v i n nh nh t đ đ t đơ ớ ỏ ấ ể ạ ược đi u ki n này).ề ệ
o V y s bit c n đ m là: 512*n - đ dài chu i g c - 64.ậ ố ầ ệ ộ ỗ ố
o Đ m thêm 1 bit “1” vào sau chu i g c và các bit c n đ m còn l i là “0”.ệ ỗ ố ầ ệ ạ
o Ví d : ụ
▪ Chu i ban đ u có 1000 bits.ỗ ầ
▪ Áp d ng công th c trên: 1000 <= 512*n - 64 => n = 3.ụ ứ
▪ V y s bit c n đ m là: 512 * 3 - 1000 - 64 = 472 bits.ậ ố ầ ệ
Hình 1.1: Quá trình padding [5]
1.5.2 B ướ c 2: Append length
- Chúng ta s quy đ i đ dài c a chu i d li u g c(Ký hi u là L) thành d ng sẽ ổ ộ ủ ỗ ữ ệ ố ệ ạ ố
h th p l c phân 64 bit r i sau đó thêm vào sau chu i đã thu đệ ậ ụ ồ ỗ ượ ừ ước t b c 1 [4]
- Ví d :ụ
o Đ dài chu i g c là 1000 bits.ộ ỗ ố
o Đ i: 1000ổ dec = 0x0000000000003E8hex
o Thêm vào chu i có đỗ ược sau bước 1
o Chu i cu i cùng thu đỗ ố ượ ẽc s là input cho vi c hash.ệ
Hình 1.2: Quá trình append length [5]
4
Data to be hased
Trang 81.5.3 B ướ c 3: Divide input into 512 bits block
- T i bạ ước này chúng ta s chia chu i input có đẽ ỗ ượ ạ ước t i b c 2 thành t ng kh iừ ố
nh h n M i kh i s có đ l n là 512 bits [4]ỏ ơ ỗ ố ẽ ộ ớ
Hình 1.3: Phân chia input [5]
1.5.4 B ướ c 4: Initialize chaining variable
- Chúng ta có 5 chu i ban đ u đỗ ầ ược kh i t o nh sau:ở ạ ư
o H0: 0x67452301
o H1: 0xEFCDAB89
o H2: 0x98BADCFE
o H3: 0x10325476
o H4: 0xC3D2E1F0 [4]
1.5.5 B ướ c 5: Process block
- V i m i block 512 bits đớ ỗ ược chia t i bạ ước 3, ta chia thành 16 kh i nh , m iố ỏ ỗ
kh i có đ l n 32 bits đố ộ ớ ược ký hi u nh sau: w(0), w(1), …, w(79) [4]ệ ư
o V i w(0) - w(15) tớ ương ng v i 16 kh i nh 32 bits đã chia đứ ớ ố ỏ ượ ủc c a
t ng kh i 512 bits.ừ ố
Hình 1.4: Xử lý bên trong một block [5]
o V i w(16) - w(79): Ta th c hi n vi c tính toán v i công th c dớ ự ệ ệ ớ ứ ưới đây: w(t) = (w(t-3) XOR w(t-8) XOR w(t-14) XOR w(t-16)) <<< 1
1.5.6 B ướ c 6: Process each block
- Kh i t o:ở ạ
5
Data to be hased
512 bits block
Trang 9o A = H0, B = H1, C = H2, D = H3, E = H4.
- Mô t chi ti t quá trình tính toán:ả ế
o A = (A <<< 5) + F (B, C, D) + E + w(t) + Kt
o B = A
o C = B <<< 30
o D = C
o E = D [4]
Hình 1.5: Quá trình tính toán [6]
- Th c hi n 80 l n theo nh hình trên v i 4 giai đo n:ự ệ ầ ư ở ớ ạ
o GĐ 1 (0 <= t <= 19) : Ft = (B AND C) OR ((NOT B) AND D) và Kt = 5A827999
o GĐ 2 (20 <= t <= 39) : Ft = B XOR C XOR D và Kt = 6ED9EBA1
o GĐ 3 (40 <= t <= 59) : Ft = (B AND C) OR (B AND D) OR (C AND D) và
Kt = 8F1BBCDC
o GĐ 4 (60 <= t <= 79) : Ft = B XOR C XOR D và Kt = CA62C1D6 [4]
1.5.7 B ướ c 7: Process output
- Ta th c hi n vi c c p nh t l i giá tr co các chu i s H:ự ệ ệ ậ ậ ạ ị ỗ ố
o H0 = H0 + A
o H1 = H1 + B
o H2 = H2 + C
o H3 = H3 + D
o H4 = H4 + E
6
Trang 10- L p l i bặ ạ ước 6 cho đ n khi x lý h t t t c các kh i 512 bits.ế ử ế ấ ả ố
- V y ta đậ ược m t chu i output 160 bits độ ỗ ược bi u di n b i 5 word: Hể ễ ở 0H H H H1 2 3 4
[4]
1.6 SHA-1 algorithm review
- SHA-1 và SHA-256 có nhiều điểm chung Cả hai đều có thể xử lý message với độ dài tối đa lên đến 264-1 bit, có kích thước khối message là 512bit và có cấu trúc bên trong dựa trên việc xử lý các từ 32 bit SHA-384 và SHA-512 thậm chí còn có nhiều điểm tương đồng hơn Chúng xử lý các thông điệp có độ dài tối đa lên đến 2 128-1 bit, có kích thước khối thông báo là 1024bit và có cấu trúc bên trong dựa trên việc xử lý các từ 64 bit Trên hết, định nghĩa của SHA-384 gần như giống với định nghĩa của SHA-512, ngoại trừ sự lựa chọn khác của véc tơ khởi tạo và cắt bớt kết quả 512bit cuối cùng thành 384 bit Tất cả các chức năng đều có cấu trúc bên trong rất giống nhau và xử lý từng message nhiều vòng Số lượng vòng là như nhau đối với SHA-1, SHA-384 và SHA-512, và nhỏ hơn 20% ở SHA-256 [7]
- SHA-1 yêu cầu ít toán hạng hơn cho mỗi phép cộng so với ba hàm còn lại Ký hiệu
k + 1 được sử dụng trong bảng, có nghĩa là số toán hạng được thêm vào là k trong tất cả trừ vòng cuối cùng và k + 1 trong vòng cuối cùng Ngoài ra, một số toán hạng có thể bằng k trong tất cả các vòng và một vòng đơn giản bổ sung có thể được giới thiệu cho phép cộng đơn lẻ còn lại [7]
Hình 1.6: Bảng so sánh các giải thuật [7]
7
Trang 11- Các kết luận sau đây có thể được rút ra từ sự so sánh từ bảng trên này Việc triển khai phần cứng của SHA-384 và SHA-512 có cùng hiệu suất, vì vậy chỉ một trong
số chúng cần được thực hiện cho mục đích phân tích so sánh Lưu ý rằng kích thước message size trong SHA-512 lớn gấp đôi so với SHA-1, số lượng vòng là như nhau và đường dẫn tới hạn chỉ dài hơn một chút trong 512 Do đó,
SHA-512 (chức năng mạnh nhất) có thể nhanh hơn đáng kể so với SHA-1 (chức năng yếu nhất), đây sẽ là một kết quả rất tích cực nếu đúng Thông lượng của SHA-256
có thể nằm trong cùng một phạm vi với thông lượng của SHA-1 và nhỏ hơn thông lượng của SHA-512 Có tính đến các esti mation này, chúng tôi đã quyết định triển khai hai trong số các hàm băm đã khảo sát, SHA-1 và SHA-512, nằm ở hai đầu đối diện của phổ cả về độ bền và tốc độ, với SHA- 1 là hàm yếu nhất và chậm nhất, và SHA-512 là hàm mạnh nhất và nhanh nhất trong số bốn hàm băm được khảo sát [7]
8
Trang 12Ch ươ ng 2 Software implementation
2.1 Software Introduction
- Trong đồ án này, chúng em sử dụng môi trường GDB online để xây dựng, kiểm thử thuật toán SHA-1 bằng phần mềm
Hình 2.1: Logo của trang web GDB Online
- GDB Online là một công cụ compiler và debugger online dành cho rất nhiều ngôn ngữ lập trình như: C, C++, Python, Java, PHP, Ruby, Perl, C#, VB, Swift, Pascal, Fortran, Haskell, Objective-C, Assembly, HTML, CSS, JS, SQLite, Prolog
- GDB Online cho phép lập trình viên có thể code , Compile, Debug trược tiếp ở bất
kì đâu trên thế giới, chỉ cần có kết nối internet mà không cần tải hay cài đặt bất kì gói tin nào
- Làm việc với GDB Online rất đơn giản, chỉ cần truy cập vào đường dẫn
www.onlinegdb.com và chọn ngôn ngữ lập trình thích hợp và sau đó code thôi
Hình 2.2: Cửa sổ làm việc của GDB Online
9
Trang 132.2 Algorithm flowchart of SHA-1 algorithm
Hình 2.3: Lưu đồ giải thuật thuật toán SHA-1
● Giải thích lưu đồ
Hình 2.3 là lưu đồ giải thuật cho thuật toán băm SHA-1, đây là giải thuật cho việc
xây dựng phần mềm để kiểm chứng thuật toán bằng ngôn ngữ lập trình Perl
Chúng tôi xây dựng phần mềm với quy trình thực thi tương tự như các bước thuật thoán thực thi trong Chương 1 phần 1.5 Đầu vào sẽ là một message là chuỗi cần được mã hóa có độ dài không quá 2 bit Đầu ra sẽ là kết quả được tính toán, đó là 64
một mã băm 160 bit
o Đầu tiên thì sẽ nhận message input
o Tiếp theo sẽ tính độ dài của message rồi chuyển message từ dạng string sang dạng binary, tiếp đó sẽ đến hàm thực hiện việc padding Ở đây sẽ tính
số bit cần thêm vào và thêm vào cuối message tạo thành một chuỗi Data
o Từ chuỗi Data đã được tạo sẽ được chia thành các Block sao cho mỗi khối
có độ dài là 512 bit và số khối là nguyên
10
Trang 14Từ đây sẽ thực hiện vòng lặp để duyệt từng khối, với mỗi khối xử lý các công việc nhỏ hơn, thực hiện 80 vòng lặp trong một khối như sau:
▪ Chúng ta sẽ chia Block 512 bit thành 16 block nhỏ hơn, mỗi block có
độ lớn là 32 bit và được đặt tên là w0 → w15
▪ Với các khối từ 16 –> 79 thì chúng ta tính với công thức:
w(t) = (w(t-3) XOR w(t-8) XOR w(t-14) XOR w(t-16)) <<< 1
▪ Tiếp theo chúng ta lại chia thành từng giai đoạn để xử lý như từ vòng lặp từ 0→19, 20 →39, 40→59 và 60→79 Mỗi giai đoạn sẽ sử dụng những công thức của hàm F(t) và K(t) khác nhau
▪ Sau mỗi vòng lặp sẽ tổng hợp lại các giá trị ABCDE Và sau khi xử
lý xong 1 block thì sẽ thực hiện cập nhật lại các giá trị H0H1H H2 3H4
để phục vụ cho các block tiếp theo
▪ Kết quả là các giá trị cuối cùng của H0H1H H2 3H4.
2.3 SHA-1 algorithm testing results by software
K t qu c a gi i thu t SHA-1 mô ph ng qua ph n m m đế ả ủ ả ậ ỏ ầ ề ược th hi n trong hình ể ệ 2.4 Đ u tiên là chu i các message input là các chu i ký t màu xanh Ti p theo là k t ầ ỗ ỗ ự ế ế
qu mã băm tính đả ượ ằc b ng gi i thu t đả ậ ược trình bày theo l u đ trong ph n 2.3 Sau ư ồ ầ
đó là giá tr tính b ng hàm h tr s n trong Perl Theo nh quan sát thì chúng ta có th ị ằ ỗ ợ ẵ ư ể
th y r ng k t qu tính đấ ằ ế ả ượ ằc b ng thu t toán v i k t qu c u hàm đậ ớ ế ả ả ược cung c p s n ấ ẵ
là gi ng nhau Đi u đó ch ng t gi i thu t mà nhóm xây d ng là đúng ố ề ứ ỏ ả ậ ự
Hình 2.4: Kết quả phần mềm mô phỏng thuật toán SHA-1
11