Phép nhân với 0Eh

Một phần của tài liệu Ứng dụng FPGA trong bảo mật thông tin (Trang 63)

Phép nhân với 0Eh ( E = 8 + 4 + 2 ) thực hiện như sau :

Hình 3.17. Phép nhân 0Eh

Thực hiện tương tự như bộ mã hóa với các phương trình sau :

0, 0, 1, 2, 3, 1, 0, 1, 2, 3, 2, 0, 1, 2, 3, 3, 0, 1, 2, 3, '0 ' '0 ' '0 ' '09 ' '09 ' '0 ' '0 ' '0 ' '0 ' '09 ' '0 ' '0 ' '0 ' '0 ' '09 ' '0 ' c c c c c c c c c c c c c c c c c c c c b e a b a d a a b a e a b a d a b d a a e a b a b b a d a a e a = • ⊕ • ⊕ • ⊕ • = • ⊕ • ⊕ • ⊕ • = • ⊕ • ⊕ • ⊕ • = • ⊕ • ⊕ • ⊕ •

Kết quả cuối cùng là khối InverseMixColumn có kết cấu tương tự như MixColumn của bộ mã hóa :

Hình 3.18. Khối InverseMixColumn 3.4. Thiết kế chi tiết cho khối KeyExpansion

Sơ đồ thiết kế khối KeyExpansion trên VHDL :

Hình 3.19.Sơ đồ khối KeyExPansion

Chi tiết các khối như sau :

3.4.1. Khối RotWord

Khối RotWord được thực hiện đơn giản theo đoạn code VHDL sau:

d_out(7 downto 0) <= d_in(15 downto 8) ;

d_out(15 downto 8) <= d_in(23 downto 16) ;

d_out(23 downto 16) <= d_in(31 downto 24) ;

d_out(31 downto 24) <= d_in(7 downto 0) ;

end behavior ;

Hình 3.20.Khối RotWord

3.4.2. Khối SubWord

Khối SubWord chính là bốn khối SubByte ghép lại với nhau

Hình 3.21. Khối SubWord

3.4.3. Khối Rcon

Đoạn code VHDL sau thực hiện chức năng của khối Rcon : process (req_key_in) begin case req_key_in is when “1” => rcon_out <= “01000000” ; when “2” => rcon_out <= “02000000” ; when “3” => rcon_out <= “04000000” ; when “4” => rcon_out <= “08000000” ; when “5” => rcon_out <= “10000000” ;

when “6” => rcon_out <= “20000000” ; when “7” => rcon_out <= “40000000” ; when “8” => rcon_out <= “80000000” ; when “9” => rcon_out <= “1b000000” ; when “10” => rcon_out <= “36000000” ; when others => null ;

end case; end process;

Hình 3.22.Khối Rcon

3.4.4. Khối KeyStorage

Khối KeyStorage có chức năng lưu trữ từ khóa gốc và các tứ khóa phái sinh tạo ra. Đồng thời nó cũng có nhiệm vụ đưa ra các từ khóa thích hợp theo yêu cầu của bộ mã hóa hay giải mã.

Hình 3.23.Khối KeyStorage

Đoạn chương trình sau mô tả hoạt động của khối KeyStorage : key_process: process(clk,req_key_in)

begin

if clk’event and clk=’1’ then key0 <= O_key; (adsbygoogle = window.adsbygoogle || []).push({});

case req_key_out is

when “0010” => key2 <= S_key; …

when “1010” => key10 <= S_key;

when others => null ; end case;

end if; end process;

data_process: process (clk, mode,req_key_out) begin

if mode = ‘0’ then --Ma hoa

if clk’event and clk =’1’ then case req_key_out is

when “0001” => key_out <= key1 ;

when “0010” => key_out <= key2 ;

when “1010” => key_out <= key10 ;

when others => null ; end case;

end if;

else --Giai ma

if clk’event and clk =’1’ then case req_key_out is

when “0001” => key_out <= key10 ;

when “0010” => key_out <= key9 ;

when “1010” => key_out <= key1 ;

when others => null ; end case;

end if; end process;

3.4.5. Khối DemuxKey

Khối DemuxKey có nhiệm vụ nhận chìa khóa gôc (O_key) và các từ khóa phái sinh hồi tiếp rồi phân chia chúng thành các word cho vòng sinh khóa tiếp theo.

Hình 3.24. Khối DemuxKey

3.5. Khối diều khiển bộ giải mã và bộ giao tiếp với máy tính3.5.1. Khối CPU - điều khiển bộ giải mã 3.5.1. Khối CPU - điều khiển bộ giải mã

Khối CPU có nhiệm vụ nhận dữ liệu từ khối giao tiếp với máy tính, phân loại dữ liệu thành hai đường: data và key dựa trên tín hiệu select. Sau đó CPU tạo ra các tín hiệu req_key_in và req_key_out để điều khiển khối KeyExpansion và khối Data. Ngoài ra khi nhận được tín hiệu Reset thì khối CPU sẽ trở về trạng thái khơi tạo ban đầu :

Hình 3.25.Khối CPU

Trường hợp select = “01” – Quá trình xử lí Key.

Hình 3.26.Giản đồ thời gian điều khiển vòng key (adsbygoogle = window.adsbygoogle || []).push({});

Trường hợp select = “10” – Quá trính xử lí Data

Hình 3.27. Giản đồ thời gian điều khiển vòng data

Chương trình VHDL của CPU như sau : cpu_process: process(select) begin case select is when “01” => temp_key <= ‘1’ ; temp_data <= ‘0’; when “10” => temp_key <= ‘0’ ; temp_data <= ‘1’ ; when others => null ;

end process ;

key_process: process(temp_key, clk) begin

temp_req_key_in <= ‘0000’ ; if temp_key = ‘1’ then

if clk’event and clk = ‘1’ then

if temp_req_key_in = “1111” then null ;

else if temp_req_key_in = “1010” then temp_req_key_in <= “1111” ; else temp_req_key_in <= temp_req_key_in +1 ; end if ; end if ; end if ; end process ; data_process: process(temp_data, clk) begin temp_req_key_out <= ‘0000’ ; if temp_key = ‘1’ then

if clk’event and clk = ‘1’ then

if temp_req_key_out = “1111” then null ;

else if temp_req_key_out = “1010” then temp_req_key_out <= “1111” ; else

temp_req_key_out <= temp_req_key_out +1 ; end if ;

end process ;

req_key_in <= temp_req_key_in ; req_key_out <= temp_req_key_out ;

3.5.2. Khối giao tiếp với máy tính

Hệ thống AES giao tiếp với máy tính thông qua cổng RS232. Dữ liệu cần mã hóa ( giải mã ) và từ khóa tương ứng sẽ được truyền từ máy tính xuống Kit thông qua cổng COM. Sau khi hoàn tất quá trình mã hóa ( giải mã ) dữ liệu Ta xây dựng khối giao tiếp với máy tính dựa trên khối RX có sẵn của Xilinx Inc. Sau khối RX là khối đệm dữ liệu. Như ta đã biết đầu vào của khối AES là 128 bit trong khi dữ liệu nhận từ cổng COM là 8 bit do đó cần có khối đệm dữ liệu này. Để phân biệt đâu là từ chìa khóa đâu là dữ liệu cần mã hóa ( giải mã ) ta phải gửi thêm một byte đồng bộ: Nếu là byte “01”h thì đó là từ khóa, nếu là byte “02”h thì đó là dữ liệu.

Hình vẽ sau mô tả khối giao tiếp với máy tính:

KẾT LUẬN

Sau khi tìm hiểu và hoàn thành đồ án em đã bước đầu nắm bắt được kiến thức cơ bản về FPGA và ngôn ngữ mô tả phần cứng VHDL. Bên cạnh đó đồ án cũng giúp em hiểu thêm về mã hoá AES mà ngày được ứng dụng rất rộng rãi trong các lĩnh vực công nghệ số hoá .

Các ứng dụng của FPGA ngày càng trở nên phong phú : 1. Trong giao dịch điện tử:

- Thương mại điện tử; - Ngân hàng;

- Giao dịch an toàn; - Các điểm bán lẻ. 2. Trong thông tin liên lạc:

- Mạng lưu trữ vùng; - Mạng riêng ảo; - Hội nghị truyền hình; - Các dịch vụ thoại. 3. Môi trường bảo mật:

- Thông tin vệ tinh;

- Hệ thống mạng bảo mật.

Tuy nhiên, do thời gian cũng như khả năng nghiên cứu còn có hạn nên bản đồ án này cũng không tránh khỏi thiếu sót, vì vậy em mong rằng sẽ nhận được sự đóng góp của các thầy cô để đề tài này được hoàn thiện hơn.

Một lần nữa em xin bày tỏ lòng biết ơn tới các thầy cô giáo trong khoa Điện Tử Viễn Thông đã tạo điều kiện cho em hoàn thành đồ án.

TÀI LIỆU THAM KHẢO

[1] Xilinx Inc, Programmable Logic Design - Logic Hand Book.pdf 2003 [2] Peter J.Anshenden, VHDL cook book , 1990 (adsbygoogle = window.adsbygoogle || []).push({});

[3] NIST, Anouncing Advanced Encryption Standard Federal, Information Processing Standard 2001.

[4] Cryptography Research, DPA Workstation Factsheet 2005. [5] http://en.wikipedia.org/wiki/Advanced_Encryption_Standard [6] http://en.wikipedia.org/wiki/ VHDL

[7] http://www.xilinx.com/support/library.htm [8] http://www.fpga4fun.com

Một phần của tài liệu Ứng dụng FPGA trong bảo mật thông tin (Trang 63)