Trong bối cảnh đó, thuật toán SHA-256 Secure Hash Algorithm 256-bit được sử dụng rộng rãi như một công cu mã hóa bảo mật và xác thực dữ liệu.. RISC-V là bộ kiếntrúc tập lệnh mã nguồn mở
Trang 1ĐẠI HỌC QUOC GIA TP HO CHÍ MINH TRUONG DAI HOC CONG NGHE THONG TIN
KHOA KY THUAT MAY TÍNH
NGUYEN DUC HY - 19521653
TRAN DUY QUOC VIET - 19520353
KHOA LUAN TOT NGHIEP
THIET KE VA HIEN THUC THUAT TOAN MA HOA
Trang 2LOI CAM ON
Lời đầu tiên, nhóm chúng em chân thành gửi lời cảm ơn sâu sắc đến cô hướngdẫn — Thạc sĩ Hồ Ngọc Diễm Trong suốt quá trình thực hiện khóa luận cô đã luôntận tình giúp đỡ, hướng dẫn, góp ý nhóm em để nhóm em có thể hoàn thành đề tài
khóa luận này.
Kế đến, nhóm em xin gửi lời cảm ơn đến quý Thầy/Cô trường Đại học Côngnghệ Thông tin — Đại học Quốc Gia Thành phó Hồ Chí Minh nói chung và các thay
cô thuộc khoa Kỹ thuật máy tính nói riêng đã tận tình chỉ dẫn, truyền đạt nhữngkinh nghiệm và kiến thức quý báu cho chúng em trong suốt 4 năm học vừa qua.Những kiến thức và kinh nghiệm quý báu đó là những hành trang vững chãi giúp
chúng em trong quãng đường tương lai của nhóm.
Bên cạnh đó, nhóm em cũng xin dành lời cảm ơn đến ba mẹ, gia đình vànhững người bạn đã luôn sát cánh, động viên, hỗ trợ chúng em trong suốt quá trình
học tập và nghiên cứu.
Trong suốt quá trình thực hiện dé tài khóa luận, nhóm không thể tránh khỏi saisót Vì thế, mong các quý Thầy/Cô và các bạn thông cảm và đóng góp ý kiến dé đề
tài khóa luận được hoàn thiện hơn.
Một lần nữa nhóm chúng em xin chân thành cảm ơn
TP Hô Chí Minh, ngày 27 tháng 06 năm 2023
Sinh viên thực hiện
Nguyễn Đức Hy
Trần Duy Quốc Việt
Trang 3MỤC LỤC
Chương 1 GIỚI THIỆU DE TÀI 22¿22222+¿z222E2+++t2EE+eretrrvecree 21.1 Tổng quan đề tài -¿ 2+2¿+2222+222222111222111122221122271112221112 E111 cce 2
1.1.1 _ Tình hình nghiên cứu ngoài nưỚC - + + c+x+x+xsxeveererexee 3
1.1.2 _ Tình hình nghiên cứu trong nưỚC - - «+ + +sc+x+x+x+errerexexee 4
2.2.1 Lệnh MU Type nae sqạm, , à.c.c.cccceeiie 8
2.2.2 Lệnh J— Type eecceecesssssssssssssssossssstssssninsennssessessssscceceesssssssssssnssunennesesees 8 2.23 LAMB B— TypE§ ”< 8 2.2.4 Lệnh [— Type ceeececcceccccceccsesecscneseseseseesessseeneneasseseeeesensseseseeessseeeaees 0
2.2.5 Lénh S — Type càng HH Hư 2
2.2.6 Lệnh R— Type 6 TT HH Hết 3
2.3 Thuật toán SHA256 2-5222 2t t2 H21 5
2.3.1 Giới thiệu thuật toán SHA256 - -2- 55c ccccccccccrsrrrreerreer 5
2.3.2 Các bước trong thuật toán SHA256 ¿- 55c Sccsx+ecercry 6
2.4 Các lệnh hỗ trợ cho việc thực hiện thuật toán SHA256 [2] - 21
2.4.1 Lệnh chuyền đổi sha256sig0 -cccccc+22cvvvveererrrrr 212.4.2 Lệnh chuyền đổi sha256sigl -cccccc+++cccvvcecrerrrrrr 21
Trang 42.4.3 Lệnh chuyển đổi sha256sum0 - -: c¿222v+z+22cvvvrvrcrvvcee 212.4.4 Lệnh chuyển đổi sha256sum1
2.5 Hiện thực phần mém thuật toán SHA256 -.-¿ zc5s2czz+ 22Chương 3 | THIET KE HE THONG
3.1 Thiết kế hệ thống tổng quát -.: +¿222+++++22E++++ttrrxxrrsrrrreerrrr 243.1.1 _ Khối Instruction Memory
3.1.2 Khối Data Memory -22+¿+222E2++tEEEEEEtESEEEEEtrtrrkrrrrrrrrcee 253.2 Thiết kế hệ thống chỉ tiết
3.2.1 Khối Program Counter -c:+++22++zt+ccrvvrrrrrsrree 273.2.2 Khối Control Unit -52222cc22222zseccvvrrerrrverrrrrrrree 283.243 Khối RegisterFile ccciisrrrrrrrrrerrrer 303.2.4 Khối ALU vovccccccrrrrrrrrrrrrrrrrrereerrrer 323.2.5 Khối MU come, cv ựa 4 343.2.6 Khối Store cceccecrreeececeeer 353.27 Khối Add eecccccreeerreeeerrrerercerrrrece 3Õ3.2.8 Khối Crypto_Fu cccc2222vcreErkrrrrerrktrrrrrrtrrrrrrrrvee 37Chương 4 MÔ PHONG VÀ ĐÁNH GIÁ KET QUẢ - - 39
4.1 Mô phỏng 222¿:-222EEEE2222+122222111112122212111112.2221211111 E1 .e 39
4.1.1 Mô phỏng các lệnh thuộc kiến trúc RV321 -+ 39
4.1.2 Mô phỏng thuật toán SHA256 -2c++52222vvvccreerrrrg 44
4.2 Đánh giá kết quả ¿-+222+2+t22221121222111222111112121112.2111 E1 crrree 414.2.1 Kết quả tần số của ÏP -22:cv222+vvrtErvvrrrrrrrvrrerrrrrrrerg 474.2.2 So sánh kết quả với các bài báo khác -: ccc+ccvsvceccz 48
Trang 5Chương 5 THIẾT KE BLOCK DESIGN TREN VIVADO VỚI GIAO THỨC
AXT4 -= - 43442ø—œằHẦ HHĂHĂHHHẢ 49
5.I Tổng quan giao thức AXI4
5.2 Kiến trúc khối thiết kế tổng quan giao tiếp qua AXI4
5.3 Thiết kế trên Vivado
5.4 Các IP của Xilinx dùng trong Block Design -.- : -5-5- 54 5.4.1 IP Microblaze
5.4.2 IP AXI UART LITE cccccececceeesesteseesesneseeessesesnessessssesesesnesseneseeeeseeses 55
5.5 Kết qua tổng hợp thực thi của Block Design
5.6 Kết quả hiện thực thiết kế trên board Xilinx VC707 - 56Chương 6 KÉT LUẬN VÀ HƯỚNG PHÁT TRIEN
6.1 Kết luận đ6 e e À Ề ciiiiiiiiiie 586.2 Hướng phát triỀn -:¿52222+++22E2+++22223++t22EEEvtEEEEvrrrrrrkrrrrrrkee 58TÀI LIEU THAM KHAO cccsssccssssssssssosssessesssscscssssecssssssecssssssessasssecesssisesessseescesssecsea 60
Trang 6DANH MỤC HÌNH
Hình 2.1: Các thanh ghi trong RV321[L 552522222 + tzekererrrrrererrree 7
Hình 2.2: Dinh dang các lệnh trong R`V321 - ¿+ - 5S +EkekekeEerkrkekekerree 7
Hình 2.3: Các giá trị hằng số cho SHA256 -.2 -2222222222cv222vvrrecrvvrrrrrr 18
Hình 2.5: Dinh dạng lệnh sha256sig Ì ¿+ + + St +k+E*‡EeEkEkekeErkrkrkrkeree 21
Hình 2.6: Dinh dạng lệnh sha256sum0 ¿- - - 2525252 +‡££££‡ztzk+£exerrkrkexee 21
Hình 2.7: Định dạng lệnh sha256suim | + ¿5+5 *v£v+vEeveteterererererexee 21
Hình 2.8: Sơ đô giải thuật SHA256 - 22222222 22222222 rrtrrrrrrrrrrrrrrrrrrrree 22Hình 2.9: Sơ đồ giải thuật hàm CalculafOT() ¿+ ¿5+ cS*k‡‡ssrexsrerrkexex 23Hình 3.1: Sơ đồ khối tổng quát hệ thống ¿:-+z22v+z++2cvvvrrsrrvsree 24Hình 3.2: Khối Instruction MeImOry -¿-¿¿©22+z22EE+++22EESSzzvvEveerrrrrscee 25Hình 3.3: Khối Data Memory
Hình 3.4: Thiết kế hệ thống chỉ tiết
K Ki
Tl
Hình 3.5: Khối Program CounIer :-¿2222222+22222E22S2++rrt2tE22vvrrrrrrrrrrrrrer 27Hình 3.6: Khối Control Unit +:+ccc22522tttreeeevtttrrtrrrirrrktrrrrrrrrrrie 28Hình 3.7: Khối Register Eile - 2222222:c¿+222222 vvvt2222211111 211.1 Etrrrree 31Hình 3.8: Khối ALU -cccccccccc2 2222 2E Ettrrrtrrrrrirriiiiriio 32Hình 3.9: Khối Load -:cccccssceertrrreierrrrrrrrrrro.24Hình 3.10: Khối Store -: Hee 35Hình 3.11: Khối Add -:::ccccccccc tt Eiriio 36Hình 3.12: Khối Crypto_Fu -cccc¿£22222SSvvrreetrrrrxrxerrrrrrrrrrkeerrrerrrrrrvee.TŸ 7Hình 4.1: Các lệnh assembly trong Test case 1 (tính tích hai số) 39
Hình 4.2: Waveform Output của Test case Ì 6 5552 5<cc+c+xsccce+ 40
Hình 4.3: Kết quả mô phỏng Test case | trên Venus và trên ModelSim 40
Hình 4.4: Các lệnh assembly trong Test case 2 (tính giai thừa) -. 4I
Hình 4.5: Waveform Output của Test Case 2 5- 252522 Al
Hình 4.6: Kết qua mô phỏng Test case 2 trên Venus và trên ModelSim 42Hình 4.7: Các lệnh assembly trong Test case 3 (Tính cấp số nhân)
Trang 7Hình 4.8: Waveform Output của Test case 3 5c Set tre 43
Hình 4.9: Kết quả mô phỏng Test case 3 222: ©2222zt222222zt2EEEEzerrrrrseee 43Hình 4.10: Giá trị băm ban đầu (Hạ, , H;) -¿¿+++222++z++222xvzscrvseez 44Hình 4.11: các giá trị hằng số (Ko, , Køa) -::ccccvvvvvveiiirrrrrrrrrrirrriiu 44Hình 4.12: Input được chia thành các khối -z++22++z++22z+zerrrrrseez 45
Hình 4.13: Thông điệp được lưu vào Data MeImOry - - + +++x+c+xererzxecsz 45
Hình 4.14: Kết quả tạo ra từ SCTÏpV -2¿-2222++222222+t2E2EEEttEEEEErrrtrrkrrrrrrkrvee 45
Hình 4.15: Assembly mô phỏng thuật toán SHA256 - + +5 c+cs<++ 46
Hình 4.16: Output thuật toán SHA256 mô phỏng trên ModelSim - 47
Hình 4.17: Kết quả mô phỏng phần mềm .-2:- ¿2222222222222 41Hình 4.18: Tần số IP -::+ccccctriririii 47Hình 5.1: Kiến trúc chung của giao thức AXI4 - ccc¿ -222cscccce+ccccvvsee 50
Hình 5.2: Quá trình đọc của giao thức AX14 „51
Hình 5.3: Quá trình ghi của giao thức AXI4 51
Hình 5.4: Thiết kế tong quan của Block Design 53Hinh 5.5: Block Design trén phan mém Vivado 54Hình 5.6: IP Microblaze giao tiếp với IP Local memory 54
Hình 5.7: IP AXI UART LITE - - 5 5c SESEk‡kEEEEEEEkSEEEEEEkrkrkerrrkek 55
Hình 5.8: Tài nguyên sử dụng trong Block Design - ¿55-5 5+<+s<++ 55
Hình 5.9: Năng lượng tiêu thụ của Block Design ¿ «c5 + sxcseeerexeex 56 Hình 5.10: Board Xilinx VC707 «+12 TT HH it 56
Hình 5.11: Kết quả hiện thực trên board và kết quả mô phỏng trên ModelSim 57
Trang 8DANH MỤC BANG
Bảng 2.1: Ví dụ về đệm thông điệp .22-2222222222222cEEEEEEtEEEEErrerrrrrrrrrr 17Bảng 3.1 Tín hiệu khối COre 2222222++++2222++22223112221112222211 22212 ecrer 24Bảng 3.2: Tín hiệu khối Instruction Memory -: ¿2225222 25Bang 3.3: Tín hiệu khối Data Memory -2222222++2222222vvvzrrtrrrrrrrrrerree 26Bảng 3.4: Tín hiệu khối Program COunIeT 22£©222+22222+z++2222+zz+tvvszcezrr 27Bảng 3.5: Trạng thái hoạt động của khối Program Counter - 28Bảng 3.6: Các tín hiệu của khối Control Unit -¿+z++22++zz+22szcz+rr 29Bảng 3.7: Tín hiệu khối Register Eile .22-22222+22222++cEEEEEErtrEEkrrerrrkerrrrr 31Bảng 3.8: Trạng thái hoạt động của khối Register Eile -+ 32Bảng 3.9: Tín hiệu của khối ALLU - ¿-222222+2222SS++ttEESSvvettErvrrerrrrrrrrrr 33Bang 3.10: Tín hiệu điều khiển thực hiện các phép toán của khối ALU 33Bảng 3.11: Tín hiệu khối Load .: ©2¿22222++222ES++t2EEES+vetvvxvrrerrrserrrrr 34Bảng 3.12: Tín hiệu size trong khối Load -¿¿zz+22vvz++22vvvzz+tcvsvceerx 35Bang 3.13: Tín hiệu của khối Store cccccz222ccvvvsccrrerrrrsveeercerrrrrseec 35Bảng 3.14: Tín hiệu size trong khối Store -ccccc¿+cccsscssccvscrccrssecc.- 36Bảng 3.15: Tín hiệu của ÔN ZZ NT“ 37Bảng 3.16: Tín hiệu của khối Crypto_EU - ¿22222++222Ev++etvvvvrerrrsrrecrr 37
Bang 4.1: So sánh clock cycle COUHI - ¿5-5 552 S*2E‡E‡+‡Ee£zkzEexerrrkrkrkerrree 48
Bang 4.2: So sánh tần số và thiết kế 2:22 2 vvrirtEEEEEkrrrrrrrrrrrrrrrrree 48
Trang 9DANH MỤC TU VIET TAT
Dạng viết tắt Dạng đầy đú
RISC-V Reduced Instruction Set Computer
FPGA Field Programmable Gate Array
ALU Arithmetic Logic Unit
SHA Secure Hash Algorithm
AES Advanced Encryption Standard
IP Intellectual Property
Trang 10TÓM TÁT KHÓA LUẬN
Đối với thế giới ngày nay, chúng ta càng phụ thuộc vào công nghệ thông tin
và mạng, việc bảo vệ thông tin quan trọng và đảm bảo tính toàn vẹn dữ liệu trở nên
cực kỳ quan trọng Trong bối cảnh đó, thuật toán SHA-256 (Secure Hash Algorithm
256-bit) được sử dụng rộng rãi như một công cu mã hóa bảo mật và xác thực dữ
liệu Đồng thời, kiến trúc vi xử lý RISC-V đang ngày càng thu hút sự quan tâm vàphát triển trong cộng đồng mã nguồn mở
Khóa luận này sẽ tập trung chính vào chủ đề là triển khai bộ vi xử lý RISC-V32-bit và triển khai thuật toán mã hóa SHA256 trên bộ vi xử lý RISC-V là bộ kiếntrúc tập lệnh mã nguồn mở nên được sử dụng rất nhiều trong nghiên cứu học thuật
Bộ vi xử lý kiến trúc tập lệnh RISC-V cơ bản bao gồm các khối: Control Unit,
Program Counter, Instruction Memory, Register File, Algorithm and Logic Unit,
Data Memory.,
Bên cạnh đó thuật toán SHA256 là một trong những thuật toán băm phổ biếnđược sử dụng trong nhiều ứng dụng bảo mật như: băm mật khẩu, xác thực và lưutrữ giao dịch, Do đó việc thực hiện thuật toán này trên các thiết bị nhúng RISC-Vđang trở nên ngày càng phổ biến
Trong quá trình nghiên cứu, khóa luận đã thực hiện phân tích chỉ tiết cấu trúccủa thuật toán SHA256, từ đó nhóm tiến hành xây dựng demo thuật toán SHA256trên kiến trúc RISC-V và kiểm tra độ chính xác của thuật toán khi chạy trên kiến
trúc RISC-V.
Bộ vi xử lý RISC-V 32 bits sẽ được thiết kế để thực thi 37 lệnh thuộc kiếntrúc RV32I, bên cạnh đó vi xử lý sẽ được bổ sung lệnh SHA256 để có thé thực thithuật toán mã hóa SHA256 Bộ vi xử lý được thiết kế bằng ngôn ngữ mô tả phancứng Verilog, quá trình mô phỏng kết quả sẽ được thực hiện bằng cách mô phỏng
chức năng và thời gian thực thi thông qua waveform trên ModelSim và Vivado Sau
đó, nhóm sẽ tiễn hành kiểm tra quá trình hoạt động của bộ xử lý trên kit Virtex 7thông qua giao thức AXI4 bằng phần mềm Vivado và Vitis
Trang 11Chương 1 GIỚI THIỆU ĐÈ TÀI
1.1 Tổng quan đề tài
RISC-V là một kiến trúc tập lệnh mã nguồn mở (ISA) được giới thiệu lần đầutiên vào năm 2010 tại Đại học California, Berkeley Kể từ đó, RISC-V đã trở nênphổ biến trong giới nghiên cứu, học thuật và nghiên cứu nhờ tính đơn giản, tính mởrộng và tính linh hoạt của nó RISC-V được thiết kế dé có tính mở rộng, có nghĩa là
nó có thể được sử dụng trong nhiều thiết bị, từ các hệ thống nhúng nhỏ đến các
trung tâm dữ liệu quy mô lớn.
RISC-V ISA được dựa trên triết lý Reduced Instruction Set Computing(RISC) tập trung vào việc giảm độ phức tạp của các tập lệnh để cải thiện hiệu suất,hiệu quả năng lượng và dễ dàng thiết kế RISC-V được thiết kế đề có tính mô-đun,với một tập lệnh cơ bản và các tập mở rộng tùy chọn có thé được thêm vào dé đápứng các yêu cầu cụ thể của các ứng dụng khác nhau Phương pháp mô-đun này chophép RISC-V được tùy chỉnh cho các trường hợp sử dụng khác nhau, chang hạnnhư các thiết bị IoT, điện thoại thông minh, máy chủ và tính toán hiệu năng cao
Một trong những lợi thế chính của RISC-V là tính mở nguồn của nó, có nghĩa
là bất kỳ ai cũng có thé sử dụng, chỉnh sửa và phân phối ISA mà không cần phải trảcác khoản phí hoặc hạn chế về giấy phép Điều này đã dẫn đến sự phát triển của một
hệ sinh thái phong phú xung quanh RISC-V, với một số lượng ngày càng tăng cáccông ty và tổ chức đóng góp cho sự phát triển của ISA và các công cụ, thư viện vàphần mềm liên quan
Nhu cầu ngày càng tăng về bảo mật các hệ thống máy tính nên việc sử dụngcác thuật toán mật mã đang thúc đây sự quan tâm đến độ hiệu quả của các thuậttoán mật mã pho biến Mặc dù các thuật toán có thé được triển khai trong phần mềmnhưng có thể giảm chỉ phí bộ nhớ và cải thiện tốc độ bằng cách sử dụng các lệnhchuyên dụng và triển khai trên phần cứng
Trang 12Việc triển khai các thuật toán mã hóa trên phần cứng có các ưu điểm sau: mãhóa dựa trên phần cứng nhanh hơn mã hóa dựa trên phần mềm vì nó giảm tải quátrình mã hóa và giải mã từ CPU sang phần cứng chuyên dụng, mã hóa dựa trên phầncứng an toàn hơn, tiết kiệm năng lượng hơn so với mã hóa dựa trên phần mềm vì nó
sử dụng các mạch chuyên dụng được thiết kế dành riêng cho mã hóa và giải mã, mãhóa dựa trên phần cứng có thể mở rộng hơn mã hóa dựa trên phần mềm vì nó có thể
dễ dàng tích hợp vào các thiết kế phần cứng hiện có, điều này đặc biệt quan trọngđối với các triển khai quy mô lớn
Trong đề tài này chúng em hiện thực thuật toán mã hóa SHA-256 trên
RISC-V SHA-256 là hàm băm mật mã được sử dụng dé tạo đầu ra có kích thước có định
là 256 bit (32 byte) Đây là một trong những hàm băm được sử dụng rộng rãi nhấttrên thế giới và là một phần của họ hàm băm mật mã SHA-2, cũng bao gồm SHA-
224, SHA-384 và SHA-512 SHA-256 thường được sử dụng trong nhiều ứng dụngbảo mật, bao gồm chữ ký số, lưu trữ mật khẩu và kiểm tra tính toàn vẹn của đữ liệu
Nó cũng được sử dụng làm khối xây dựng cho các giao thức mã hóa khác, chẳnghạn như giao thức Bảo mật tầng vận chuyền (TLS) được sử dụng để liên lạc an toàn
qua Internet.
1.1.1 Tinh hình nghiên cứu ngoài nước
Trên thế giới hiện nay, có nhiều những nghiên cứu và cải tiến về kiến trúc tậplệnh RISC-V Điểm mạnh của RISC-V là tính mã nguồn mở, kiến trúc linh hoạt vàhiệu năng cao, đã thu hút sự quan tâm lớn từ cộng đồng nghiên cứu toàn cầu Có rấtnhiều tổ chức, trường đại học, viện nghiên cứu, và doanh nghiệp đang hoạt độngtrong lĩnh vực này Các nhà nghiên cứu đang tiếp tục phát triển và tối ưu kiến trúcRISC-V để cải thiện hiệu suắt, tính tin cậy và bảo mật Các phiên bản RISC-V mớiđược giới thiệu để đáp ứng nhu cầu đa dạng của các ứng dụng mới Các thuật toánmật mã cũng được quan tâm và phát trién trên hệ thống của RISC-V RISC-V đượcthiết kế để tối ưu hóa hiệu năng, cho phép thuật toán mật mã chạy nhanh và hiệuquả trên các hệ thống dựa trên kiến trúc này Việc tận dụng hiệu năng cao này giúp
Trang 13cải thiện khả năng xử lý và thời gian phản hồi của các ứng dụng mật mã Năm 2022,Gorkem Nisanci, Paul G Flikkema và Tolga Yalcin đã công bố nghiên cứu về đánh
giá hiệu năng của các thuật toán mã hóa trên RISC-VPI, Nghiên cứu tập trung vào
việc triển khai các thuật toán mã hóa như: SHA256, AES, trên các kiến trúcRISC-V Mục đích của nghiên cứu nhằm đánh giá được lợi ích và chi phí của việctriển khai các thuật toán và thực hiện các thuật toán trong ít chu kỳ hơn bằng cách
sử dụng các lệnh mã hóa và các đơn vị chức năng được bổ sung
1.1.2 Tinh hình nghiên cứu trong nước
Nghiên cứu RISC-V ở Việt Nam được nghiên cứu và phát triển trong cộngđồng kỹ sư, nhà nghiên cứu và sinh viên trong lĩnh vực công nghệ thông tin và viễnthông Việc tăng cường giáo dục và đào tạo về RISC-V tại các trường đại học và tổchức giáo dục đã thúc day sự quan tâm và nghiên cứu trong lĩnh vực này Bên cạnh
đó sự quan tâm đến bảo mật thông tin và thuật toán mật mã đã thúc đây việc đào tạo
và học tập về lĩnh vực này trong các trường đại học và tổ chức giáo dục tại ViệtNam Các nghiên cứu về thuật toán mật mã trên RISC-V đang được quan tâm vàtiến hành nghiên cứu trong thời gian gần đây
1.2 Mục tiêu đề tài
- _ Nghiên cứu kiến trúc tập lệnh RV32I cho lõi vi xử lý RISC-V 32 bit
- Thiết kế phần cứng cho bộ vi xử lý RISC-V 32 bit bằng ngôn ngữ mô tả
phần cứng Verilog
- Nghiên cứu thuật toán mã hóa SHA256
- Tích hợp các tập lệnh cho SHA256 vào thiết kế
- _ Tiến hành hiện thực thuật toán SHA256 trên phần cứng đã cải tiến
- Hién thực thiết kế trên kit FPGA (Virtex VC707)
- IP hoạt động ở tan số 100MHz
1.3 Giới hạn đề tài
Hệ thống hoạt động tốt ở tần số 100MHz Vi xử lý có thể thực hiện các phéptính toán số nguyên chưa thực hiện các phép tính dấu chấm động
Trang 14Chương 2 CƠ SỞ LÝ THUYET
2.1 Kiến trúc tập lệnh RISC-V
2.1.1 Giới thiệu RISC-V
Hiện tại những công ty thành công với kiến trúc tập lệnh của mình đang thốngtrị thị trường vi xử lý như Intel, ARM, IBM đều có những bằng sáng chế trênkiến trúc tập lệnh (ISA) mà họ đang sở hữu, do đó các công ty này đồng thời ngăncấm việc thiết kế các bộ vi xử lý sử dung ISA của họ nếu không được họ cấp phép.Bat kì một thỏa thuận nào liên quan đến bản quyền sử dung ISA đều phải tốn từ 6 -
24 tháng trao đổi va chi phí phải tốn chừng từ một đến mười triệu đô la Mỹ, và tat
nhiên thỏa thuận với trường đại học hay những công ty có quy mô nhỏ lẻ thường bị
loại trừ Việc độc quyền đã cản trở sự cạnh tranh và đổi mới bằng việc không chonhiều người thiết kế và chia sẻ những vi xử lý có những ISA tương thích với nhau.Ngoài ra, mỗi ISA của mỗi hãng sử dụng một hệ sinh thái phần mềm riêng, làmtăng chi phi phát triển Thậm chí trên cùng một thiết bị lại sử dụng nhiều phần mềm
khác nhau của những ISA khác nhau.
Những thách thức đó là tiền đề, là động lực để cho ra đời những vi xử lý mãnguồn mở đi cùng là những ISA miễn phí nhưng thống nhất Một trong số đó làRISC-V, là một ISA mở được xây dựng dựa trên những nguyên tắc của kiến trúc
tập lệnh RISC (Reduced Instruction Set Computer), đã và đang thu hút được sự phát
triển và ứng dụng từ các nhà khoa cũng như các công ty sử dụng vi xử lý trên thếgiới Trái ngược với hầu hết các ISA khác, RISC-V hoàn toàn miễn phí cho bat kỳmục đích sir dụng nào Nó cho phép bat kỳ ai có thể thiết kế, sản xuất va bán cácsản phẩm phần cứng và phần mềm sử dụng RISC-V RISC-V được phát triển lầnđầu tiên bởi Đại học California, Berkeley vào năm 2010 Cho đến nay đã có hàngchục bộ vi xử lý được phát triển dựa trên ISA này nhằm vào nhiều mục đích ứng
dụng và phân khúc khác nhau.
RISC-V ISA được định nghĩa dựa trên cơ sở integer, một chuẩn có mặt trongbất kỳ hiện thực nào Chuẩn cơ bản integer được giới hạn bởi một bộ lệnh để phù
Trang 15hợp cho trình biên dịch, trình hợp ngữ, trình liên kết và hệ điều hành RISC-V thựcchất là một họ gồm các ISA có liên quan Mỗi bộ lệnh integer trong họ đấy được kýhiệu bằng độ rộng của thanh ghi integer, kích thước vùng nhớ địa chỉ và số lượngthanh ghi integer trong kiến trúc Có hai biến thé chính của chuẩn integer cơ bản là
RV32I và RVó64I, có kích thước vùng nhớ địa chỉ tương ứng là 32-bit va 64-bit.
Cụm từ XLEN được dùng để chỉ độ rộng của thanh ghi integer theo bit (32-bit hoặc
64-bit).
Để hỗ trợ cho việc phát triển phần mềm, một tập các chuẩn mở rộng được địnhnghĩa để cung cấp các phép tính phức tạp hơn Chuẩn cơ bản integer có tên là “I”(đi kèm với tiền tố RV32 hoặc RV64 tùy độ rộng thanh ghi integer), cùng với đó làcác lệnh tính toán integer, nạp integer, lưu trữ integer, và các lệnh điều khiển luồng.Tùy theo nhu cầu mà chuẩn I có thể đi kèm một hoặc nhiều chuẩn mở rộng Chuẩn
hỗ trợ nhân chia integer “M” bồ sung thêm lệnh dé thực hiện phép nhân và phépchia các giá trị có trong thanh ghi integer Chuẩn nguyên tử “A” bổ sung thêm lệnhđọc, ghi, chỉnh sửa vùng nhớ cho việc đồng bộ liên bộ xử lý Chuẩn floating point
độ chính xác đơn “F” bổ sung thêm tập thanh ghi floating point, lệnh tính toán vànạp lưu floating point chính xác đơn Chuẩn floating point độ chính xác kép mởrộng thanh ghi và các lệnh floating point lên chính xác kép Chuẩn “C” cung cấpkhả năng nén dữ liệu để thu hẹp lệnh sang dạng 16-bit Ngoài ra còn có nhữngchuan mở rộng khác ít phổ biến hơn
Trang 16Hình 2.1: Các thanh ghi trong RV32I
Trong chuẩn RV32I, có bốn định dạng lệnh chính (R/I/S/U) Tat cả đều có độđài 32-bit và được lưu trữ trong vùng nhớ bốn byte RISC-V ISA giữ trường giá trịcủa thanh ghỉ nguồn (rs1 và rs2) và thanh ghi dich (rd) ở cùng một vị trí cho tat cảcác định dạng lệnh nhằm đơn giản hóa việc giải mã Ngoài ra còn có hai biến thể
định dạng lệnh (B/J) dựa trên cách xử lý trường immediate (hằng số) như Hình 2.2
31 30 25 24 21L 20 19 15 14 1211 8 7 6 0
Funct? TD ni Tunct3 Td opcode | R-type
imm{11:0] rs] funct3 rd opcode | I-type
ïmm[TT] IS mĩ amct3 imm|[40) opcode | S-type
imim[12] | ñmm[105] n2 TSI funct3_| imm[4:1] | imm[1l] | opcode | B-type
imm|[31-12] Td opcode | U-type
imm/20] imm[10:1] 1mm 11] imm/[19:12] rd opcode | J-type
Hình 2.2: Dinh dạng các lệnh trong RV32I
Trang 172.2 Các lệnh chuẩn RV32I được sử dụng trong hệ thống [1]
2.2.1 Lệnh U- Type
Lệnh LUI:
- Định dang: lui rd,imm
- Mô tả: Lấy 32 bit gồm 20 bit cao là giá trị imm, 12 bit thấp gán bằng 0 Giá
trị này lưu vào thanh ghi rd.
- Thực thi: x[rd] = {immediate[31:12], 12’b0)
Lénh AUIPC:
- Định dang: auipc rd, imm
- Mô tả: Lay 32 bit gồm 20 bit cao là giá trị imm, 12 bit thấp gán bằng 0 Giá
trị này cộng với địa chỉ của PC hiện tại sau đó lưu kết quả vào thanh ghi rd
- Thực thi: x[rd] = {immediate[31:12], 12’b0}
2.2.2 Lệnh J — Type
Lénh JAL:
- Dinh dang: jal rd, immediate
- Mô tả: Lưu địa chi PC+4 vào thanh ghi rd (địa chi trả về), sau đó nhảy Dia
chỉ nhảy có được bằng cách lấy địa chỉ PC hiện tại cộng immediate(được
mở rộng dấu).
- Thực thi: x[rd] = pc+4; pe = pc + sext(immediate)
2.2.3 Lệnh B- Type
Lệnh BEQ:
- Dinh dạng: beq rs1, rs2, immediate
- Mô tả: So sánh có dấu giá trị thanh ghi rs1 và rs2, rẽ nhánh nếu rs1 bằng
rs2 Địa chỉ rẽ nhánh có giá tri bằng immediate*2(được mở rộng dấu)
- Thực thi: if (rsl ==rs2) pc = pc + sext(immediate)
Trang 18Lệnh BNE:
- Định dang: bne rsl, rs2, offset
- Mô tả: So sánh có dấu giá trị thanh ghi rs1 và rs2, rẽ nhánh nếu rs1 không
bằng rs2 Địa chỉ rẽ nhánh có giá trị bằng offset*2(được mở rộng dấu)
- Thực thi: if (rsl !=rs2) pe += sext(offset)
Lénh BLT:
- Định dang: blt rs1, rs2, offset
- Mô tả: So sánh có dau giá trị thanh ghi rs1 va rs2, rẽ nhánh nếu rs1 bé hơn
rs2 Dia chỉ rẽ nhánh có giá tri bằng offset*2(được mở rộng dấu)
- Thực thi: if (rsl <rs2) pc += sext(offset)
Lénh BGE:
- Định dang: bge rsl, rs2, offset
- Mô tả: So sánh có dau giá trị thanh ghi rs1 va rs2, rẽ nhánh nếu rs1 lớn hơn
hoặc bằng rs2 Địa chỉ rẽ nhánh có giá trị bằng offset*2(được mở rộng
dấu).
- Thực thi: if(rsl >=rs2) pc += sext(offset)
Lệnh BLTU:
- Định dạng: bltu rs1, rs2, offset
- Mô tả: So sánh không dấu giá trị thanh ghi rsl và rs2, rẽ nhánh nếu rsl bé
hơn rs2 Địa chỉ rẽ nhánh có giá trị bằng offset*2(được mở rộng dấu).
- Thực thi: if (rsl <rs2) pc += sext(offset)
Lénh BGEU:
- Định dang: bgeu rs], rs2, offset
- Mô tả: So sánh không dấu giá trị thanh ghi rs1 và rs2, rẽ nhánh nếu rs1 lớn
hơn hoặc bằng rs2 Địa chỉ rẽ nhánh có giá tri bằng offset*2(được mở rộngdấu).
- Thực thi: if(rsl >=rs2) pc += sext(offset)
Trang 192.2.4 Lệnh I- Type
Lệnh JALR:
- Định dạng: jalr rd, rs1, offset
- Mô tả: Luu địa chi PC+4 vào thanh ghi rd (dia chỉ tra về), sau đó nhảy Địa
chỉ nhảy có được bằng cách lấy giá trị rsI cộng offset(được mở rộng dấu)sau đó đặt bit thấp nhất của kết quả đấy bằng 0
- Thực thi: t=pc+4; pc=x[rsl]+sext(offset); x[rd]=t
Lệnh LB:
- Định dang: Ib rd, offset(rsl)
- Mô ta: Luu 8 bit giá tri(mo rộng có dấu) từ bộ nhớ có địa chi rs1+offset
vào thanh ghi rd Các bit trống của rd gán bằng 0
- Thực thi: x[rd] = sext(M[x[rs1] + sext(offset)][7:0])
Lệnh LH:
- Định dang: lh rd, offset(rsl)
- Mô tả: Luu 16 bit giá trị(mở rộng có dấu) từ bộ nhớ có địa chỉ rs1+offset
vào thanh ghi rd Các bit trống của rd gán bằng 0
- Thực thi: x[rd] = sext(M[x[rsl] + sext(offset)][15:0])
Lệnh LW:
- Định dang: Iw rd, offset(rs1)
- Mô tả: Luu 32 bit giá trị có dấu từ bộ nhớ có dia chỉ rsI+offset vào thanh
ghi rd Các bit trống của rd gan bằng 0
- Thực thi: x[rd] = sext(M[x[rs1] + sext(offset)][31:0])
Lệnh LBU:
- Định dang: lbu rd, offset(rs1)
- Mô tả: Lưu 8 bit giá trị(mở rộng không dấu) từ bộ nhớ có địa chi rs1+offset
vào thanh ghi rd Các bit trống của rd gán bằng 0
- Thực thi: x[rd] = M[x[rs1] + sext(offset)][7:0]
10
Trang 20Lệnh LHU:
- Định dạng: lhu rd, offset(rs1)
- Mô tả: Lưu 16 bit giá trị(mở rộng không dấu) không dấu từ bộ nhớ có địa
chỉ rsI+offset vào thanh ghi rd Các bit trống của rd gan bằng 0
- Thực thi: x[rd] = M[x[rs1] + sext(offset)][15:0]
Lệnh ADDI:
- Định dang: addi rd, rs1, imm
- Mô tả: Lưu kết quả cộng của giá trị thanh ghi rs! cộng imm(được mở rộng
dau) vào thanh ghi rd
- Thực thi: x[rd] = x[rs1] + sext(immediate)
Lénh SLTI:
- Định dang: slti rd, rs1, imm
- Mô tả: So sánh có dấu giá trị thanh ghi rsl với imm(được mở rộng dấu)
Thanh ghi rd bằng 1 nếu rs! bé hơn imm, ngược lại rd bằng 0
- Thực thi: x[rd] = x[rsl] < s_sext(immediate)
Lệnh SLTIU:
- Dinh dạng: sltiu rd, rs1, mm
- Mô tả: So sánh không dấu giá trị thanh ghi rs! với imm(được mở rộng
dau) Thanh ghi rd bằng 1 nếu rs1 bé hơn imm, ngược lại rd bằng 0
- Thực thi: x[rd] = x[rsl]<u_sextimmediate)
Lệnh XORI:
- Định dang: xori rd, rsl, imm
- Mô tả: Lưu kết quả xor giữa thanh ghi rs] và imm(được mở rộng dau) vao
Trang 21Mô tả: Lưu kết quả or giữa thanh ghi rs] và imm(được mở rộng dấu) vào
Dinh dang: andi rd, rs1, imm
Mô ta: Lưu kết quả and giữa thanh ghi rs1 và imm(được mở rộng dấu) vào
Dinh dang: srli rd, rsl, shamt
Mô ta: Dịch phải logic giá trị thanh ghi rs1, số lượng bit cần dich lay từ 5
bit shamt.
Thực thi: x[rd] = x[rs1] >> shamt
Lénh SRAI:
2.2.5.
Dinh dang: srai rd, rs1, shamt
Mô tả: Dich phải số học giá trị thanh ghi rs1, số lượng bit cần dich lay từ 5
bit shamt.
Thực thi: x[rd] = x[rs1] >> shamt
Lệnh S — Type Lệnh SB:
Dinh dang: sb rs2, offset(rs1)
12
Trang 22- Mô tả: Lưu 8 bit thấp giá trị trong thanh ghi rs2 vào trong bộ nhớ có địa chỉ
- Mô tả: Dich trái logic giá trị thanh ghi rs1, số lượng bit cần dich lấy từ 5 bit
thấp của thanh ghi rs2 Lưu kết quả vào thanh ghi rd
-_ Thực thi: x[rd] = x[rsl] << x[rs2]
Trang 23Lệnh SLT:
- Định dang: slt rd, rs1, rs2
- Mô tả: So sánh có dấu giá trị thanh ghi rs] với rs2 Thanh ghi rd bằng 1 nếu
rsl bé hơn rs2, ngược lại rd bằng 0
- Thực thi: x[rd] = x[rsl] < x[rs2]
Lệnh SLTU:
- Định dang: sltu rd, rs1, rs2
- Mô tả: So sánh không dấu giá trị thanh ghi rs! với rs2 Thanh ghi rd bằng |
nếu rs1 bé hơn rs2, ngược lại rd bằng 0
- Mô tả: Dịch phải logic giá trị thanh ghi rs1, số lượng bit cần dich lấy từ 5
bit thấp của thanh ghi rs2 Lưu kết quả vào thanh ghi rd
-_ Thực thi: x[rd] = x[rsl] >> u_x[rs2]
Lénh SRA:
- Dinh dang: sra rd, rsl, rs2
- Mô tả: Dịch phải số học giá trị thanh ghi rs1, số lượng bit cần dich lay từ 5
bit thấp của thanh ghi rs2 Lưu kết quả vào thanh ghi rd
Trang 24Lệnh AND:
- Định dang: and rd, rs1, rs2
- Mô tả: Lưu kết quả and giữa giá trị thanh ghi rs1 và rs2 vào thanh ghi rd
- Thực thi: x[rd] = x[rsl] & x[rs2]
2.3 Thuật toán SHA256
2.3.1 Giới thiệu thuật toán SHA256
Thuật toán SHA-256 (Secure Hash Algorithm 256-bit) là một trong những
thuật toán băm (hash) phổ biến và được sử dụng rộng rãi trong lĩnh vực bảo mậtthông tin Nó là một phần của họ thuật toán SHA-2, được phát triển bởi Cơ quan Anninh Quốc gia Hoa Ky (NSA) và công bố bởi Viện Tiêu chuẩn và Công nghệ Quốc
gia Hoa Kỳ (NIST) vào năm 2001.
Mục đích chính của thuật toán SHA-256 là tạo ra một giá trị băm duy nhất chomột dữ liệu đầu vào, không thể dễ dàng suy ra dữ liệu gốc từ giá trị băm Giá trịbăm này có độ dài 256 bit, tức là 32 byte, và thường được biểu diễn dưới dạng một
chuỗi ký tự hexa.
Thuật toán SHA-256 hoạt động bằng cách chia dữ liệu đầu vào thành các khối
có độ dài có định, sau đó tiền hành xử lý từng khối một dé tao ra giá trị băm cuối
cùng.
Thuật toán SHA-256 đạt được sự bảo mật bằng cách sử dụng các phép toánlogic phức tạp và tính toán ngược Nó được thiết kế để chống lại các cuộc tấn côngphổ biến như tìm kiếm ngược (brute-force), tấn công chọn ngẫu nhiên (birthdayattack) và tim kiém va cham (collision attack)
Một trong những ứng dụng chính của thuật toán SHA-256 là xác thực tính toàn
vẹn của dữ liệu Khi một tập tin hoặc thông điệp được băm bằng SHA-256, kết quảbăm (giá trị băm) có thể được lưu trữ hoặc chuyển đi một cách an toàn Bat kỳ thayđổi nào trong nội dung của tập tin sẽ dẫn đến một giá trị băm khác Nhờ vào tínhchất này, chúng ta có thể xác thực xem liệu dữ liệu đã bị sửa đổi hay không bằng
15
Trang 25cách so sánh giá trị băm của dữ liệu ban đầu với giá trị băm hiện tại Nếu hai giá trịbăm khác nhau, điều này cho thấy dữ liệu đã bị thay đổi và tính toàn vẹn của nó
không còn được đảm bảo.
Thuật toán SHA-256 cũng có thể được sử dụng để xác định một định danh duynhất cho dữ liệu Mỗi khối dữ liệu hoặc tệp tin có thé được băm bằng SHA-256 dé
tạo ra một giá trị băm duy nhất Giá trị băm này có khả năng duy nhất và không thé
dễ dàng tái tạo trở lại dữ liệu gốc Do đó, nó có thể được sử dụng như một định
danh duy nhất cho dữ liệu trong các hệ thống quản lý và tra cứu thông tin
Thuật toán SHA-256 cũng được sử dụng trong kỹ thuật chứng thực số (digitalsignature) và xác thực thông tin Khi một tài liệu được ký kết số (digital signature),một giá trị băm của tài liệu đó được tạo ra bằng SHA-256 và sau đó được mã hóabằng khóa riêng tư của người ký Khi người nhận muốn xác thực chữ ký số, họ cóthể sử dụng khóa công khai tương ứng để giải mã giá trị băm và so sánh nó với giátrị băm tính toán lại từ tài liệu nhận được Nếu hai giá trị băm khớp nhau, điều nàycho thấy tài liệu không bị thay đổi và chữ ký số là hợp lệ
Thuật toán SHA-256 là một công cụ mạnh mẽ trong việc bảo mật thông tin và
xác thực dữ liệu Các ứng dụng của SHA-256 từ việc xác thực tính toàn vẹn dữ liệu,
bảo mật mật khâu, xác định định danh duy nhất cho dữ liệu và kỹ thuật chứng thực
số đã đóng góp quan trọng trong việc đảm bảo tính bảo mật và tin cậy trong thế giới
kỹ thuật số ngày nay Với tính bảo mật cao và khả năng tạo ra giá trị băm duy nhất,SHA-256 tiếp tục đóng vai trò quan trọng trong việc bảo vệ thông tin và ứng dụngrộng rãi trong nhiều lĩnh vực khác nhau
2.3.2 Các bước trong thuật toán SHA256
- Bước 1: Padding the Message
Mục đích của phần đệm này là để đảm bảo rằng thông điệp được đệm là bội
số của 512 hoặc 1024 bit, tùy thuộc vào thuật toán
16
Trang 26Xác định N sao cho độ dài chuỗi gốc nhỏ hơn hoặc bằng N*512 — 64 bits.Đệm thêm một bit 1 vào sau chuỗi gốc và các bit còn lại là 0, 64 bits cuối sẽ là độ
dài của chuỗi.
Ví dụ:
Chuỗi ban đầu có 1000 bits, áp dụng công thức trên 1000 <= 512*N
-64, vậy M=3
- Vậy số bit cần đệm là: 512 * 3 — 1000 - 64 = 472 bits Ví dụ về đệm
bit được thé hiện trong Bảng 2.1
Bang 2.1: Vi du vé dém théng diép
Message 1 | 000000 (Remaining all 0’s)
1000 bit message 472 bit padding
Vi dụ, chuỗi “abc” (biểu diễn dưới dang 8-bit ASCII sẽ có độ dài là 8x3=24
bit, nên N = 1, chuỗi “abc” sau khi đệm sẽ có dang sau:
- Bước 2: Chia thông điệp thành các khối
Thông điệp sau khi được đệm sẽ được chia thành N khối mỗi khối có độ dài
512 bit: M?, M®, , M9, Trong mỗi khối 512 bits sẽ được chia thành 16 khối mỗikhối nhỏ hơn có độ dài 32 bits: Mo, MỊ®), Mis®
17
Trang 27- Bước 3: Khởi tạo giá trị băm ban đầu (H9)
Trước khi tính toàn bat đầu ta cần phải khởi tạo các giá trị băm TrongSHA256 giá trị băm ban đầu sẽ gồm 8 giá trị băm có độ dài 32 bit:
- Bước 4: Khởi tai các giá trị hằng số cho SHA256
SHA256 sử dụng 64 hang số 32 bit Ko, Ki, , Kes Các hằng số này là 32 bitđầu tiên của phần thập phân của căn bậc 3 sáu mươi tư số nguyên tố đầu tiên Cácgiá trị hằng số sử dụng trong SHA256 được thê hiện trong Hình 2.3
b5c0fbcf 243185be 0£c19dc6 b00327c8 432c6dfc c24b8b70 2748774c 84c87814
e9b5dba5 550c7dc3 240calcc b£597fc7 53380d13 c76c51a3 34b0bcb5 8cc70208
3956c25b 72be5d74 2de92c6£
c6e00b£f3 650a7354 d192e819 391c0cb3 90befffa
59f111£f1 80deblfe 4a7484aa d5a79147 766a0abb 6990624 4ed8aa4a a4506ceb
Hình 2.3: Các giá trị hằng số cho SHA256
923£82a4 9bdc06a7 5cb0a9dc 06ca6351 81c2c92e
£40e3585 5b9cca4£f be£f9a3f7
ablc5ed5 c19bf174 76£988da 14292967 92722c85 106aa070 682e6ff3 c67178£2
18
Trang 28Bước 5: Tính toán hàm băm SHA256
Mỗi khối thông điệp M©), M®, , M® sẽ được xử lý theo trình tự sau:
Trang 29Hy® = e + Hy)
Hs = f+ Hs)
He = g+ Ho) Hy? = h+ Hye)
}
Bước 6:
Sau khi lặp di lặp lại các bước trên N lần (MỸ), kết quả 256-bit thông điệp
Ho) H¡£)|I H2? |I Hạ) | H2®|I H:® || Ho IH
Giải thích một số ký hiệu đặc biệt trong thuật toán:
ROTR*(x) Rotate Right, Xoay phải n bit x có độ dài là w-bit, ta có n với
0 <=n< w, phép tính được định nghĩa như sau: ROTR"(x) = (x << n) v
(x >> w - n)
e SHR"(x): Shift Right, dịch phải n bit
© d(x) = ROTR7(x) ® ROTR'*(x) ® SHR*(x)
© =64(x) = ROTR!(x) ® ROTR'*(x) ® SHR'°%(x)
© L554) = ROTR(x) @ ROTR'3x) @ ROTR*(x)
© Ch(x,y,z) = (x Ay) (x Az)
© Maj(x,y,Z) =(x Ay) ® (x Az) ® (y Az)
20
Trang 302.4 Các lệnh hỗ trợ cho việc thực hiện thuật toán SHA256 [2]
2.4.1 Lệnh chuyển đổi sha256sig0
31 30 29 25 24 20 19 15 14 12 11 7 6 0
[o s[o + o 0 ofo o 01 0| 1 [o 2s 4] d oo10011
Hình 2.4: Dinh dang lệnh sha256sig0
- Mô tả: Thực hiện phép chuyền đổi Sigma0 được sử dụng trong SHA256
- Thực thi: sha256sig0 rd, rs1
- Hoạt động: rd = ROTR7(s1) ® ROTR'(rs1) ® SHR*(rs1)
2.4.2 Lệnh chuyển đổi sha256sig1
- Hoạt động: rd = ROTR!”(s1) ® ROTR'?(s1) @ SHR!?%(rs1)
2.4.3 Lệnh chuyển đổi sha256sum0
- Hoạt động: rd = ROTR?(rs1) @ ROTR'?(rs1) @ ROTR*(rs1)
2.4.4 Lệnh chuyển đổi sha256sum1
Trang 312.5 Hiện thực phần mềm thuật toán SHA256
Nhằm so sánh kết quả với thiết kế phần cứng, nhóm tiến hành hiện thực thiết
func_stringtobin() I lính độ dài của message (bit) và:
chuyển sang binary
func_bitpadding() lÌ + Tính số bit cần padding
iThuc hiện padding và chia thành `
- Func_bitpaddingQ: Tính số bit cần đệm vào trong chuỗi thông điệp
- Func_createblockQ: Thực hiện đệm các bit và chia thông điệp thành các
block khác nhau.
22
Trang 32- CalculatorQ: Thực hiện tính toán SHA256 Sơ đồ giải thuật hàm
Calculator() được mô tả như trong Hình 2.9.
HS =F + HS
Hồ =G + Hệ H7 =H+HT
Wit) = BLOCK (i[32t : 32tx31]
Wt) = ø]ÑW-(-Z)) + W_t-7) + e0/W (-18)) + W_{e-16) |
TÍ=H+E 16) + ChE EG) +K + Wt T2 = š_0(4) + Mgj(AB,C)
H
Hình 2.9: Sơ đồ giải thuật hàm Calculator()
Sơ đồ giải thuật hàm CalculatorQ trong hình trên được vẽ dựa theo “bước 6:
tính toán hàm băm SHA256” tại mục “2.3.2 Các bước trong thuật toán SHA256”.
23
Trang 333.1 Thiết kế hệ thống tổng quát
Chương 3 THIET KE HỆ THONG
Bộ vi xử lý cơ bản bao gồm các khối chính: khối Core, Khối InstructionMemory và khối Data Memory như Hình 3.1
INSTRUCTION
MEMORY
{>} insn_adar instruction
tin ok
dout
addr din
ck DATA MEMORY
Trong đó, khối Core sẽ
Counter, khối Control Unit,
Bảng 3.1 Tín hiệu khối Core
Tín hiệu Loại tín hiệu | Độ rộng Mô tả
clk input 1 bit Tín hiệu clock tích cực mức cao
rst input 1 bit Tin hiệu reset mức thấp
instruction input 32 bit Giá trị các lệnh thực thi
mem_ out input 32 bit Giá tri đữ liệu nhận được từ DMEM
pc_out output 32 bit Gia tri Program Counter
alu_out output 32 bit Kết quả của phép tính toán
rs2_val output 32 bit Gia tri doc ra tir rs2
mem_we_in output 4 bit Tín hiệu cho phép ghi vào DMEM
24
Trang 343.1.1 Khối Instruction Memory
Khối Instruction Memory sẽ nhận dia chỉ lệnh từ Core và đọc ra các câu lệnh
và truyền cho khối Core để thực thi Cấu trúc khối Instruction Memory được mô tả
Bảng 3.2: Tín hiệu khối Instruction Memory
Tín hiệu Loại tín hiệu Độ rộng Mô tả
insn_addr input 32 bit Dia chi của câu lệnh
instruction output 32 bit Giá trị của câu lệnh đọc ra
3.1.2 Khối Data Memory
Sau khi khối Core thực hiện tính toán từ các câu lệnh nhận được từ khốiInstruction Memory Khối Core sẽ truyền các tín hiệu, địa chỉ và dữ liệu để lưu vàokhối Data Memory hoặc đọc dữ liệu từ khối Data Memory Khối Data Memorynhận địa chỉ, là dữ liệu được tính toán từ khối Core và lưu dữ liệu vào theo địa chỉ.Cấu trúc khối Data Memory được mô tả như Hình 3.3