Download as pdf or txt
Download as pdf or txt
You are on page 1of 30

TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN

KHOA KỸ THUẬT MÁY TÍNH


-----🙞🙜🕮🙞🙜-----

BÁO CÁO CUỐI KỲ MÔN THIẾT KẾ HỆ THỐNG SỐ HDL


ĐỀ TÀI: HIỆN THỰC GIẢI THUẬT MÃ HÓA SHA-1
Lớp: CE213.M11

GVHD: TS Lâm Đức Khải


Thực hiện: Nguyễn Đức Hy
Phạm Trọng Huỳnh
Tô Quang Huấn

TP. HỒ CHÍ MINH, THÁNG 1 NĂM 2022


MỤC LỤC
Chương 1. INTRODUCTION .................................................................... 1

1.1. Hash function overview................................................................................ 1

1.2. General structure of Hash function. ............................................................. 2

1.3. Applications of data encryption. .................................................................. 2

1.4. Encryption method. ...................................................................................... 3

1.4.1. SHA algorithm.................................................................................... 3

1.4.2. SHA-1 algorithm ................................................................................ 4

1.5. Step-by-step of SHA-1 algorithm. ............................................................... 4

1.5.1. Step 1: Message Padding. .................................................................. 4

1.5.2. Step 2: Append length ........................................................................ 5

1.5.3. Step 3: Divide input into 512 bits block ............................................. 5

1.5.4. Step 4: Initialize chaining variable ..................................................... 5

1.5.5. Step 5: Process block .......................................................................... 6

1.5.6. Step 6: Process each block ................................................................. 6

1.5.7. Step 7: Process output ........................................................................ 7

1.6. SHA-1 algorithm review .............................................................................. 7

Chương 2. SOFTWARE IMPLEMENTATION .................................... 10

2.1. Software Introduction ................................................................................. 10

2.2. Algorithm flowchart of SHA-1 algorithm .................................................. 11

2.3. SHA-1 algorithm testing results by software ............................................. 12

Chương 3. HARDWARE IMPLEMENTATION .................................. 13

i
3.1. Datapath Hardware architecture ................................................................. 13

3.1.1. Functional block ............................................................................... 13

3.1.2. RTL design architecture ................................................................... 16

3.1.3. Sharing techniques............................................................................ 16

3.1.4. Pipeline techniques ........................................................................... 17

3.2. Controller .................................................................................................... 19

3.3. Verilog HDL Design .................................................................................. 19

3.4. Verification ................................................................................................. 20

3.4.1. Pre-synthesis verification vs Software implementation ................... 20

3.4.2. Post-synthesis verification vs Software implementation ................. 22

REFERENCES ................................................................................................ 24

ii
DANH MỤC HÌNH
Hình 1-1 Quá trình padding [5] ............................................................................... 5
Hình 1-2 Quá trình append length [5] ..................................................................... 5
Hình 1-3 Phân chia input [5] ................................................................................... 5
Hình 1-4 Xử lý bên trong một block [5] ................................................................. 6
Hình 1-5 Quá trình tính toán [6] .............................................................................. 7
Hình 1-6 So sánh các giải thuật [7] ......................................................................... 8
Hình 2-1 Website GDB Online ............................................................................. 10
Hình 2-2 Cửa số làm việc của GDB Online .......................................................... 10
Hình 2-3 Lưu đồ giải thuật SHA-1 ........................................................................ 11
Hình 2-4 Kết quả phần mềm mô phỏng thuật toán SHA-1 ................................... 12
Hình 3-1 Length Counter Unit .............................................................................. 13
Hình 3-2 Padding Unit .......................................................................................... 13
Hình 3-3 Create Block Unit................................................................................... 13
Hình 3-4 Process Block Unit ................................................................................. 13
Hình 3-5 Counter Loop Unit ................................................................................. 14
Hình 3-6 w0 – w15 Unit ........................................................................................ 14
Hình 3-7 w0 – w19 Unit ........................................................................................ 14
Hình 3-8 Save w Stage .......................................................................................... 15
Hình 3-9 Calculator Unit ....................................................................................... 15
Hình 3-10 Chi tiết bên trong Calculator Unit ........................................................ 15
Hình 3-11 Mô hình thiết kế RTL [8] ..................................................................... 16
Hình 3-12 Sharing Register techniques ................................................................. 16
Hình 3-13 Pipeline techniques .............................................................................. 17
Hình 3-14 Pipeline techniques .............................................................................. 18
Hình 3-15 Controller ............................................................................................. 19
Hình 3-16 Verilog HDL design ............................................................................. 20

iii
Hình 3-17 Đo số chu kỳ thực hiện xong một block .............................................. 20
Hình 3-18 File Input .............................................................................................. 21
Hình 3-19 Kết quả mô phỏng Pre-Synthesis ......................................................... 21
Hình 3-20 File Output ........................................................................................... 21
Hình 3-21 Kết quả so sánh Pre-Synthesis với Software ....................................... 21
Hình 3-22 Kết quả mô phỏng Post-Synthesis ....................................................... 22
Hình 3- File Output ............................................................................................... 22
Hình 3-24 Đo chu kỳ xung clock .......................................................................... 22
Hình 3-25 Kết quả so sánh Post-Synthesis với Software ...................................... 23

iv
Chươ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 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:
o Đối số của hàm hash là bản tin có chiều dài bất kỳ.
o Giá trị của hàm hash có chiều dài không đổi.
o 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.
o 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.
o 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
1.2. General structure of Hash function.
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).
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:
o Khởi tạo H0, bằng vectơ khởi tạo nào đó.
o Thực hiện trộn: Hi=F(Hi-1,Mi), i[1,s]. [1]

1.3. Applications of data encryption.


Xác minh một tệp đã được thay đổi hay chưa:
o Đượ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.
o 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.
o Cách giải quyết: Giả sử trang web cung cấp một checksum từ giải thuật
SHA-1 “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]
Mã xác thực thông báo HMAC

2
o Dùng để tạo ra HMAC (Hashed Message Authentication Code) có dạng
như sau: HMAC = hashFunction(message + key)
o 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ọ.
o 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.
o 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 khẩ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=3902ed847ff28930b5f141abfa8b47
1681253673
o 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]

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 264 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 264 bits.
Đầu ra: Chuỗi đã được mã hóa, có độ dài 160 bits.
1.5.1. Step 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 đượ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.
4
▪ 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. Step 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: 1000dec = 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.

Data to be hased

Hình 1-2 Quá trình append length [5]


1.5.3. Step 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. Step 4: Initialize chaining variable
Chúng ta có 5 chuỗi ban đầu được khởi tạo như sau:
o H0: 0x67452301

5
o H1: 0xEFCDAB89
o H2: 0x98BADCFE
o H3: 0x10325476
o H4: 0xC3D2E1F0 [4]
1.5.5. Step 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. Step 6: Process each block
Khởi tạo:
o 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]

6
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. Step 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
Lặp lại bước 6 cho đến khi xử lý hết tất cả các khối 512 bits.
Ta được một chuỗi output 160 bits được biểu diễn bởi 5 word: H0H1H2H3H4 [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

7
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.
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 So sánh các giải thuật [7]

8
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 SHA-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 estimation 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]

9
Chươ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 Website 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

10
2.2. Algorithm flowchart of SHA-1 algorithm

Hình 2-3 Lưu đồ giải thuật 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á 264 bit. Đầu ra sẽ là kết quả được tính toán, đó là 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.
11
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.
o Từ đâ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ị H0H1H2H3H4
để phục vụ cho các block tiếp theo.
▪ Kết quả là các giá trị cuối cùng của H0H1H2H3H4.

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

12
Chương 3. HARDWARE IMPLEMENTATION

3.1. Datapath Hardware architecture


3.1.1. Functional block
Length Counter Unit: Khối này tính toán độ dài của message. Với input là
message, output là độ dài của message.

Hình 3-1 Length Counter Unit


Padding Unit: Khối này có nhiệm vụ tính toán số bit cần thêm vào message và
thực hiện việc thêm vào message để tạo thành data_hashes có độ dài 1024 bit. Có 2
ngõ vào là message và độ dài của message.

Hình 3-2 Padding Unit


Create Block Unit: Thực hiện việc chia data_hashed thành các block nhỏ hơn
với độ lớn 512 bit.

Hình 3-3 Create Block Unit


Process Block Unit: Khối này thực hiện việc chia nhỏ hơn nữa các kết quả được
tạo ra từ Cretae Block Unit thành 16 block con có độ lớn 32bit.

Hình 3-4 Process Block Unit


Counter Loop Unit: Thực hiện việc tính số vòng lặp cho thuật toán.
13
Hình 3-5 Counter Loop Unit
w0 – w15 Unit: Khối này thực hiện việc chọn lần lượt các giá trị w0 – w15 để
đưa vào khối w0 – w19.

Hình 3-6 w0 – w15 Unit


w0 – w19 Unit: Thực hiện việc chọn giá trị từng block lưu vào thanh ghi. Khối
này sẽ lưu các giá trị từ w0 → w19 tương đương với tầng 1 của pipeline. Đồng thời
khối này cũng thực hiện tính toán các giá trị của w(t).

Hình 3-7 w0 – w19 Unit


Save w Stage: Khối này sẽ lưu các giá trị w(t). Nó tương tự như register tạm
trong pipline, lưu giá trị của tầng trước để phục vụ cho tầng tiếp theo.

14
Hình 3-8 Save w Stage
Calculator Unit: Khối thực hiện công việc tính toán chính của thuật toán. Quy
trình và các bước tính toán tương tự như phần nhóm đã trình bày tại mục 1.5.

Hình 3-9 Calculator Unit

Hình 3-10 Chi tiết bên trong Calculator Unit

15
3.1.2. RTL design architecture
Đây là mô hình thiết kế RTL cho giải thuật mã hóa SHA-1 với một khối đường
dữ liệu và một khối điều khiển. Khối đường dữ liệu có thường có 2 loại cổng I/O.
Loại cổng I/O thứ nhất là cổng dữ liệu, được dùng để truyền và nhận dữ liệu đi và
đến. Loại cổng I/O khác là các cổng điều khiển, được dùng bởi khối điều khiển để
điều khiển khối dữ liệu thực thi việc tính toán và để nhận thông tin. [8]

Hình 3-11 Mô hình thiết kế RTL [8]


3.1.3. Sharing techniques
Việc hiện thực giải thuật SHA-1 sử dụng rất nhiều thanh ghi để lưu trữ các giá
trị tính toán. Vì các biến và thanh ghi có thời gian truy cập để đọc ghi khác nhau nên
có thể thực hiện gom nhóm chúng lại để sử dụng chung. Đây được gọi là chia sẻ thanh
ghi. Các giá trị từ W0 – W79 sẽ được lưu vào 16 thanh ghi của Shift Register như
hình bên dưới:

Hình 3-12 Sharing Register techniques

16
3.1.4. Pipeline techniques
Chúng ta thấy rằng có thể chia Datapath thành nhiều tầng thực thi bởi vì các khối
chức năng trong Datapath thực hiện một nhiệm vụ nhất định. Vì mã hóa SHA-1 bao
gồm 4 giai đoạn với các giá trị F0 – F4 và K0 – K4 khác nhau nên sử dụng 4 SHA-1
core để pipeline 4 tầng. Sau khi input được xử lý và chia thành nhiều khối nhỏ và
được chuyển dần vào các Shift Register đồng thời cũng lưu lại vào Register File để
tính toán các giá trị W của tầng khác. Các giá trị A, B, C, D, E cũng sẽ được chuyển
giao qua lại giữa các tầng, tới khi có các giá trị H0 – H4 thì ta lưu vào các tệp thanh
ghi để phục vụ việc thực hiện tính toán các block khác của input.
Các giá trị input sẽ được chuyển giao qua các tầng và cho ra kết quả theo thứ tự
như hình phía dưới:

Hình 3-13 Pipeline techniques

17
Hình 3-14 Pipeline techniques

18
3.2. Controller
Bảng điều khiển gồm có tổng cộng 32 trạng thái với các tín hiệu điều khiển
chuyển trạng thái là START và LOOP. Hệ thống chỉ bắt đầu hoạt động khi tín hiệu
START = 1. Mỗi khi chuyển trạng thái thì Controller cung cấp những tín hiệu điều
khiển khác nhau cho khối điều khiển.

Hình 3-15 Controller


3.3. Verilog HDL Design
Các ngõ vào của khối điều khiển gồm tín hiệu START, CLK, LOOP để quyết
định trạng thái tiếp theo khi xung clock tích cực. Nếu đang ở trạng thái S0, nếu START
= 1 sẽ chuyển sang trạng thái S1 và nếu START = 0 sẽ giữ nguyên trạng thái hiện tại.
Các ngõ ra của khối điều khiển gồm EN1, LOAD, STATE, BLOCK1, BLOCK2,
S_H_1, LOAD_H_1, LOAD_H_2, S_H_2, S_STAGE2, S_STAGE3, S_STAGE4,
LOAD_234, STATE_234, DONE là các tín hiệu điều khiển dùng để điều khiển khối
dữ liệu cần làm công việc gì ở trạng thái đó. Tín hiệu LOOP là ngõ ra của khối dữ liệu
được truyền ngược lại khối điều khiển để điều khiển, ngoài ra tín hiệu DONE còn để
thông báo rằng khi nào Output được phép xuất ra.

19
Hình 3-16 Verilog HDL design
3.4. Verification
Khi tín hiệu block2 = 1 thì hệ thống sẽ chuyển sang xử lý block khác. Giả sử
ta cho một chu ký CLK = 0.1 ns vậy ta đo được khoảng thời gian để xử lý một block
là 0.85ns tương đương với 85 chu kỳ máy, trong đó 80 chu kỳ thực hiện việc tính toán
và 5 chu kỳ để chuyển giao dữ liệu giữa các tầng.

Hình 3-17 Đo số chu kỳ thực hiện xong một block


3.4.1. Pre-synthesis verification vs Software implementation
Dữ liệu Input đưa vào mô phỏng sẽ được đọc từ file Read.txt với nội dung là
message cần được mã hóa.

20
Hình 3-18 File Input
Khi tín hiệu START = 1 thì sẽ bắt đầu thực hiện mã hóa, quá trình thực thi nạp
lần lượt input vào bộ nhớ và xử lý từng input tuần tự. Sau một thời gian thực hiện
tính toán thì sẽ cho ra kết quả khi tín hiệu DONE = 1.

Hình 3-19 Kết quả mô phỏng Pre-Synthesis


Kết quả sẽ là chuỗi mã hexa có độ dài 160 bit biểu diễn cho đoạn message đã
được mã hóa. Output sẽ được lưu tại file Write.txt.

Hình 3-20 File Output


Dưới đây là kết quả so sánh output của Hàm SHA-1 được xây dựng sẵn trong
ngôn ngữ Perl và File Write.txt vừa tạo ra sau khi chạy mô phỏng Pre-Synthesis. Ta thấy
kết quả giống nhau và chính xác.

Hình 3-21 Kết quả so sánh Pre-Synthesis với Software

21
3.4.2. Post-synthesis verification vs Software implementation
Post-Synthesis cũng thực hiện tương tự như Pre-Synthesis. Message input cũng
được lấy từ file Read.txt và output được ghi ra tại file Write.txt. Tuy nhiên khi thực
hiện Post-Synthesis thì sẽ có một chút delay nên việc timing cần phải được chú ý.

Hình 3-22 Kết quả mô phỏng Post-Synthesis


Đây là kết quả của Post-Synthesis khi được ghi ra file Write.txt:

Hình 3-23 File Output


Ta thấy từ cạnh lên CLK đến khi có output dài nhất là gần 7ns, vậy chu kỳ xung
clock là xấp xỉ 7ns, tương đương 142,85 MHz.

Hình 3-24 Đo chu kỳ xung clock Post-synthesis

22
Dưới đây là kết quả so sánh output của Hàm SHA-1 được xây dựng sẵn trong
ngôn ngữ Perl và File Write.txt vừa tạo ra sau khi chạy mô phỏng Post-Synthesis. Ta
thấy kết quả giống nhau và chính xác.

Hình 3-25 Kết quả so sánh Post-Synthesis với Software

23
REFERENCES
[1] T. L. H. Dũng, “Khoa CNTT, Học viện Kỹ Thuật Quân Sự, Mã Hóa, Chương 11:
Hàm băm,” [Trực tuyến]. Available: http://fit.mta.edu.vn/~dunglh/course-102.
[Đã truy cập 8 11 2021].
[2] S. Soderstrom, “The wonderful applications of HMAC,” 11 12 2015. [Trực
tuyến]. Available: https://by.com.vn/zawF3I. [Đã truy cập 10 11 2021].
[3] J.-w. Kim, H.-u. Lee và Y. Won, “Design for high throughput SHA-1 hash
function on FPGA,” 4-6 July 2012. [Trực tuyến]. Available:
https://ieeexplore.ieee.org/document/6261737. [Đã truy cập 10 11 2021].
[4] Safaa S. Omran, Laith F. Jumma, Computer Engineering Techniques College of
Electrical and Electronic Techniques Baghdad, Iraq, “Design Of SHA-1 & SHA-
2 MIPS Processor Using FPGA, Annual Conference on New Trends in
Information & Communications Technology Applications-(NTICT'2017),” 7 - 9
March 2017. [Trực tuyến]. Available:
https://ieeexplore.ieee.org/document/6261737. [Đã truy cập 10 11 2021].
[5] T. G. L. G. N. B. F. L. Schott, “Springer Link, Comparative Analysis of the
Hardware Implementations of Hash Functions SHA-1 and SHA-512, pp. 76-78,”
5 9 2002. [Trực tuyến]. Available: https://link.springer.com/chapter/10.1007/3-
540-45811-5_6. [Đã truy cập 18 11 2021].
[6] “Wikipedia,” [Trực tuyến]. Available:
https://upload.wikimedia.org/wikipedia/commons/e/e2/SHA-1.svg. [Đã truy cập
10 11 2021].
[7] N. V.Jayswal, “Lecture in Computer Engineering, Shri K . J. Pilytechnic,
Bharuch. CNS: Unit 3: Lecture 9: Secure Hash Algorithm - 1 (SHA-1),” 11 8
2017. [Trực tuyến]. Available: https://bitly.com.vn/mij0c1. [Đã truy cập 18 11
2021].
[8] H. N. D. T. Đ. D. Lâm Đức Khải, Giáo trình Thiết kế luận lý số 2, TP Hồ Chí
Minh: Nhà xuất bản ĐHQG-HCM, 2019.

24
25

You might also like