Nghiên Cứu Thực Hiện Cài Đặt Thuật Toán AES 256 Sử Dụng Công Nghệ FPGA “ Nghiên cứu thực hiện cài đặt thuật toán AES sử dụng công nghệ FPGA” nhằm xem xét khả năng cứng hóa thuật toán AES sử dụng công nghệ FPGA và ứng dụng trong các thiết bị có sử dụng máy 2 tính nhúng. Nội dung của đồ án tốt nghiệp gồm ba chương: Chương 1: Tổng quan về công nghệ FPGA và KIT phát triển, bao gồm những hiểu biết cơ bản về công nghệ FPGA, lịch sử ra đời, phát triển của công nghệ FPGA, cấu trúc và các loại FPGA phổ biến cùng với các công nghệ, quy trình thiết kế và ngôn ngữ dùng để lập trình FPGA. Khái niệm KIT phát triển và cấu tạo Chương 2: Tìm hiểu về thuật toán AES và khả năng thực hiện thuật toán AES trên FPGA, bao gồm cấu trúc cơ bản, đầu vào ra cho mã hóagiải mã, các phép biến đổi trong biến đổi vòng trong mã hóagiải mã, lược đồ tạo khóa và thuật toán giải mã của AES, khả năng và phương hướng để thực hiện thuật toán AES trên FPGA và thực tế thực hiện. Chương 3: Thực hiện thuật toán AESCBC trên FPGA bằng ngôn ngữ verilog, gồm phân tích thiết kế cùng kết quả mô phỏng và kiểm tra
ĐẠI HỌC BÁCH KHOA HÀ NỘI LUẬN VĂN THẠC SĨ NGHIÊN CỨU THỰC HIỆN CÀI ĐẶT THUẬT TOÁN AES SỬ DỤNG CÔNG NGHỆ FPGA Nguyen Thanh Long Hà Nội - 2023 MỤC LỤC LỜI CẢM ƠN i LỜI CAM ĐOAN ii MỤC LỤC iii DANH MỤC TỪ VIẾT TẮT v DANH MỤC HÌNH VẼ vii DANH MỤC BẢNG BIỂU ix MỞ ĐẦU CHƯƠNG 1: TỔNG QUAN VỀ CÔNG NGHỆ FPGA 1.1 Lịch sử đời FPGA 1.2 Sự phát triển FPGA, cấu trúc phân loại FPGA 1.2.1 Sự phát triển FPGA 1.2.2 Cấu trúc FPGA 1.2.3 Phân loại FPGA 1.3 Các lĩnh vực ứng dụng công nghệ FPGA 1.4 Qui trình thiết kế FPGA 1.5 Ngơn ngữ lập trình FPGA 11 1.5.1 Ngôn ngữ Verilog 11 1.6 Tổng quan KIT ZC706 Zynq-7000 XC7Z045-2FFG900C AP SoC 15 CHƯƠNG 2: TÌM HIỂU VỀ THUẬT TOÁN AES-CBC VÀ KHẢ NĂNG THỰC HIỆN THUẬT TOÁN AES TRÊN FPGA 19 2.1 Cơ sở lý thuyết thuật tốn mã hóa AES-CBC 19 2.1.1 Tiêu chuẩn mật mã hóa tiên tiến - Advanced Encrytion Standard (AES) 19 2.1.2 Chế độ xích liên kết khối mã - Cipher Block Chaining (CBC) 29 2.2 Khả thực thuật toán AES FPGA 31 2.2.1 Khối AES Encryption 32 2.2.2 Khối AES Decryption 33 2.2.3 Khối Key Expansion 34 2.2.4 Khối Controller 35 CHƯƠNG 3: THỰC HIỆN THUẬT TOÁN AES-CBC TRÊN FPGA BẰNG NGÔN NGỮ VERILOG 37 3.1 Thiết kế lõi AES-CBC tổng 37 Phân tích thiết kế 37 3.1.1 Chức 37 3.1.2 Cấu trúc 37 3.1.3 Mơ tả tín hiệu 38 3.2 Thiết kế khối bên lõi IP AES-CBC 40 3.2.1 Thiết kế khối RRCrypto 40 3.2.2 Thiết kế khối AES-CBC-Encryption/AES-CBC-Decryption 45 3.3 Kết mô kiểm tra 62 TÀI LIỆU THAM KHẢO 66 DANH MỤC TỪ VIẾT TẮT Viết tắt Tiếng anh Tiếng việt FPGA Field-Programmable Gate Array Mạch tích hợp cổng lập trình AES Advanced Encryption Standard Chuẩn mã hóa tiên tiến PLA Programmable Logic Array Vi mạch lập trình dùng mảng logic dùng điện tử học Máy sóng lưu trữ kỹ thuật DSP Digital Storage Oscilloscop số Ramdom Access Memory Bộ nhớ truy cập ngẫu nhiên RAM ROM Read - only Memory Bộ nhớ đọc DLL Delay Locked Loop Vịng lặp bị khóa ADC Analog-to-Digital Converter số ASIC Application-Specific Integrated Circuit Mạch tích hợp dành riêng cho ứng dụng Bộ chuyển đổi tương tự sang Complex Programmable Logic Thiết bị lập trình logic phức CPLD Device tạp Simple Programmable Logic Device Thiết bị lập trình logic đơn SPLD Digital - to - Analog Converter Bộ chuyển đổi số sang tương DAC CBC Cipher Block Chaining Mã hóa chuỗi khối giản tự DRAM Dynamic Ramdom Access Memory Electrically Erasable EEPROM Programmable Read - Only Memory FIFO First In First Out Hardware Description HDL I/O Language Input/Output Bộ nhớ truy cập ngẫu nhiên động Bộ nhớ đọc không bị điện xóa Vào đầu đầu Ngơn ngữ mơ tả phần cứng Đầu vào/đầu DANH MỤC HÌNH VẼ Hình 1.1 Cấu trúc FPGA .5 Hình 1.2 Các loại cấu trúc FPGA Hình 1.3 Sơ đồ quy trình thiết kế FPGA .9 Hình 1.4 Mơ hình cấu trúc mơ tả kết nối thực thể 12 Hình 1.5 Mơ hình dồn kênh 14 Hình 1.6 Sơ đồ khối mơ tả ZC706 15 Hình 1.7 Các vị trí thành phần Bảng thànhphần ZC706 15 Hình 2.1 Cấu trúc tổng thể thuật tốn AES 20 Hình 2.2 Mơ tả q trình mã hóa AES 21 Hình 2.3 Thủ tục biến đổi AddRoundKey() 21 Hình 2.4 Thủ tục biến đổi SubBytes() 22 Hình 2.5 Thủ tục biến đổi ShiftRows() 23 Hình 2.6 Phép nhân ma trận thủ tục biếnđổi MixColumns() 24 Hình 2.7 Mơ tả q trình giải mã AES 24 Hình 2.8 Thủ tục biến đổi InvShiftRows() 25 Hình 2.9 Phép nhân ma trận thủ tục biếnđổi InvMixColumns() 26 Hình 2.10 Thiết lập ma trận khóa khởi tạo 27 Hình 2.11 Thủ tục biến đổi RotWord() 28 Hình 2.12 Cơ chế thực q trình mở rộng khóa thuật tốn AES với độ dài khóa 128 bit 29 Hình 2.13 Mã hóa chế độ CBC 30 Hình 2.14 Giải mã chế độ CBC 30 Hình 2.15 Sơ đồ khối ví dụ thiết kế FPGA thực thuật toán AESCBC 32 Hình 2.16 Sơ đồ khối khối AES Encryption thiết kế AES-CBC ví dụ 33 Hình 2.17 Sơ đồ khối khối AES Decryption thiết kế AES-CBC ví dụ 34 Hình 2.18 Sơ đồ khối khối Key Expansion thiết kế AES-CBC ví dụ 35 Hình 3.1 Sơ đồ giao diện lõi IP AES-CBC 37 Hình 3.2 Cấu trúc module AES-CBC 38 Hình 3.3 Sơ đồ tín hiệu module RoundRobinCrypto 40 Hình 3.4 Cấu trúc module RoundRobinCrypto 41 Hình 3.5 Máy trạng thái module RoundRobinCrypto 43 Hình 3.6 Sơ đồ tín hiệu module AES-CBC-Encryption/AES-CBCDecryption 46 Hình 3.7 Sơ đồ khối chức module AES-CBC-Encryp/Decryp 48 Hình 3.8 Sơ đồ khối AES-Top 49 Hình 3.9 Sơ đồ khối AES Transformation 49 Hình 3.10 Sơ đồ khối AES Key Expander 54 Hình 3.11 Sơ đồ khối AES Key RAM 62 Hình 3.12 Mơ hình kiểm thử lõi IP AES-CBC 64 Hình 3.13.Dạng sóng tín hiệu vào/ra module AES-CBC-Encryp 65 Hình 3.14.Dạng sóng tín hiệu vào/ra module AES-CBC-Decryp 65 DANH MỤC BẢNG BIỂU • Bảng 1.1 Bảng thành phần ZC706 16 Bảng 2.1 Các thông số thuật toán AES 19 Bảng 2.2 Hộp S thuận 23 Bảng 2.3 Hộp S đảo 26 Bảng 2.4 Các từ Hằng số vòng (RCON) 28 Bảng 3.1 Bảng mơ tả tín hiệu lõi IP AES-CBC 38 Bảng 3.2 Bảng mô tả tín hiệu module RoundRobinCrypto 41 Bảng 3.3 Bảng mơ tả tín hiệu module AES-CBC-Encryp/Decryp 46 MỞ ĐẦU Vào năm 1997, thi xây dựng chuẩn mã hóa liệu thay cho chuẩn mã hóa liệu cũ DES Viện tiêu chuẩn cơng nghệ quốc gia (NIST), thuật tốn AES đời với tên gọi thuật toán Rijndael Khác với DES sử dụng mạng Feistel, AES sử dụng mạng thay - hoán vị ngày 26 tháng 11 năm 2001, mã khối Rijndael thức cơng nhận Chuẩn mã liệu tiên tiến AES (được công bố chuẩn FIPS 197) sau trải qua tuyển chọn kéo dài năm Viện tiêu chuẩn công nghệ quốc gia Mỹ (NISTNational Institute of Standards and Technology) Mục đích đời AES nhằm thay cho chuẩn mã hóa liệu DES cũ Sau cơng nhận thức, AES sử dụng để bảo vệ thông tin nhạy cảm, khơng thuộc phạm vi bí mật phủ Mỹ Sau đó, AES nhanh chóng trở thành chuẩn mã hóa liệu Thế giới sử dụng rộng rãi cho nhiều lĩnh vực tài chính, thương mại, ứng dụng phần mềm phần cứng có sử dụng mã hóa AES Ủy ban An ninh quốc gia Mỹ công nhận số mã pháp có độ an tồn cao Tại thời điểm đó, NIST dự đốn AES cịn an tồn cho 20 đến 30 năm Ngày AES trở thành hệ mật sử dụng rộng rãi giới AES dễ dàng thực với tốc độ cao phần mềm phần cứng mà khơng địi hỏi nhiều nhớ.Việc cứng hóa thuật tốn mã hóa AES giúp tăng tốc độ q trình mã hóa giải mã liệu, từ nâng cao hiệu hoạt động hệ thống Bên cạnh đó, cơng nghệ thiết kế số FPGA công nghệ hiệu mang thuộc tính thích hợp cho an tồn mật mã (như cấu trúc chip đốt vật lý, đảm bảo tồn vẹn, chống cơng thám thiết kế khơng phụ thuộc vào hệ điều hành ) đồng thời có tính mềm dẻo phù hợp để phát triển Do em chọn đề tài “ Nghiên cứu thực cài đặt thuật toán AES sử dụng cơng nghệ FPGA” nhằm xem xét khả cứng hóa thuật tốn AES sử dụng cơng nghệ FPGA ứng dụng thiết bị có sử dụng máy tính nhúng Chính vậy, em chọn đề tài “ Nghiên cứu thực cài đặt thuật toán AES sử dụng công nghệ FPGA” nhằm xem xét khả cứng hóa thuật tốn AES sử dụng cơng nghệ FPGA ứng dụng thiết bị có sử dụng máy tính nhúng Nội dung đồ án tốt nghiệp gồm ba chương: Chương 1: Tổng quan công nghệ FPGA KIT phát triển, bao gồm hiểu biết công nghệ FPGA, lịch sử đời, phát triển công nghệ FPGA, cấu trúc loại FPGA phổ biến với công nghệ, quy trình thiết kế ngơn ngữ dùng để lập trình FPGA Khái niệm KIT phát triển cấu tạo Chương 2: Tìm hiểu thuật tốn AES khả thực thuật toán AES FPGA, bao gồm cấu trúc bản, đầu vào cho mã hóa/giải mã, phép biến đổi biến đổi vòng mã hóa/giải mã, lược đồ tạo khóa thuật tốn giải mã AES, khả phương hướng để thực thuật toán AES FPGA thực tế thực Chương 3: Thực thuật toán AES-CBC FPGA ngơn ngữ verilog, gồm phân tích thiết kế kết mô kiểm tra input [127:0] output [127:0] I_round_key; O_data_out; reg [127:0] wire I_ O_data_out; load_sbox; wire wire wire wire reg SBOX_INV_IN; ADDKEY_DEC_OUT; SBOX_INV_OUT; INV_MIX_OUT; ADDKEY_DE_IN; [127:0] [127:0] [127:0] [127:0] [127:0] // reg DATA_BUFFER_SELECT_DEL; // ======================= Decode =================== always @( I_add_round_key_sel or I_data_in or SBOX_INV_OUT ) endcase ADDROUNDKEY_DE A1 ( I_KEY (I_round_key), I_DATA(ADDKEY_DE_IN ), O_DATA(ADDKEY_DEC_OUT) ); INV_MIX M1 ( I_DATA(ADDKEY_DEC_OUT), O_DATA(INV_MIX_OUT) ); assign SBOX_INV_IN = (I_add_round_key_sel == 2'b10)? ADDKEY_DEC_OUT: INV_MIX_OUT; INVSHIFTSUB S1 ( I_clk(I_clk), I_rst_n(I_rst_n), I_load_sbox(I_load_sbox), I_DATA(SBOX_INV_IN), O_DATA(SBOX_INV_OUT) ); 52 always @(posedge I_clk) begin if(!I_rst_n) begin 53 Thiết kế khối xử lý mở rộng khóa AES Key Expander Thủ tục AES Key Expander dùng để tạo khố mở rộng Số lượng khóa tạo tùy thuộc vào số vịng cần thiết để thuật tốn AES thực mã hố giải mã Trong vịng q trình mã hố hay vịng cuối q trình giải mã lấy khố gốc, vòng biến đổi lại sử dụng khóa mở rộng thủ tục tạo Trong q trình biến đổi mở rộng khóa, có sử dụng thủ tục thành phần sau: SubWord(), RotWord(), RCON(), thực phép biến đổi tương ứng AES KEY EXPANDER l_key_in (Khoá ban đầu ) 256 KEY BUFFER Các tín hiệu điều khiển ROTWORD SUBWORD RoudKey(đưa đến Key RAM) RCON Hình 3.10 Sơ đồ khối AES Key Expander • Mã nguồn khối xử lý mở rộng khóa AES Key Expander module AES_KEY_EXPANDER(I_clk, I_rst_n, I_start, //I_start signal I_load_key_buffer, //enable for I_key_sel register (K0 K7) O_write_ena, //enable write action for RAM temp O_write_192, I_key_sel, // 00: 128b, 01: 192b, 10: 256b I_key_in, //origin I_key_in 256b O_wo_0, O_wo_1, O_wo_2, O_wo_3, O_wo_4, 54 O_wo_5, O_wo_6, O_wo_7 ); input I_clk; wire I_clk; input I_start; wire I_start; input I_rst_n; wire I_rst_n; input I_load_key_buffer; wire I_load_key_buffer; output O_write_ena; output O_write_192; input [1:0] I_key_sel; wire [1:0] I_key_sel; input [255:0] I_key_in; wire [255:0] I_key_in; output[31:00] O_wo_0, O_wo_1, O_wo_2, O_wo_3, O_wo_4, O_wo_5, O_wo_6, O_wo_7; wire [31: 00] O_wo_0, O_wo_1, O_wo_2, O_wo_3, O_wo_4, O_wo_5, O_wo_6, O_wo_7; // Assign the internal variables //reg r_clk_keybuffer; reg r_clk_subbyte; reg r_clk_subbyte_1; reg [2:0] r_state_ena; reg I_write_ena_ 192_256; wire W_NOT_RST; assign W_NOT_RST = !I_rst_n; assign O_write_ena = (I_key_sel == 2'b00) ? r_clk_subbyte_1 : I_write_ena_192_256; 55 assign O_write_192 = r_clk_subbyte_1; reg [31:00] w[7:0]; wire [31:00] tmp_w 1; wire [31:00] tmp_w2; wire [31:00] subword; wire [31:00] subword_1; wire [31:00] in_xor_4; wire [31: 00] xor3_out; wire [31:00] rcon; assignO_wo_0 = w[0]; assignO_wo_1 = w[1]; assignO_wo_2 = w[2]; assignO_wo_3 = w[3]; assignO_wo_4 = w[4]; assignO_wo_5 = w[5]; assignO_wo_6 = w[6]; assignO_wo_7 = w[7]; //assign tmp_w1 = w[7]; assign tmp_w1 = (I_key_sel == 2'b00) ? w[3]:((I_key_sel == 2'b01) ? w[5]:w[7]); assign xor3_out = w[0]Aw[1]Aw[2]Aw[3]AsubwordArcon; assign in_xor_4 = (I_key_sel == 2'b10) ? subword_1 : xor3_out; assigntmp_w2 = w[0]Aw[1]Aw[2]Aw[3]AsubwordArcon; always @(posedge I_clk) begin if (!I_rst_n) begin //I_rst_n r_state_ena