Đồ án thiết kế hệ thống số: Xây dựng bộ mã hóa và giải mã dữ liệu dựa trên thuật toán Aes trên nền tảng công nghệ Fpga

31 258 0
Đồ án thiết kế hệ thống số: Xây dựng bộ mã hóa và giải mã dữ liệu dựa trên thuật toán Aes trên nền tảng công nghệ Fpga

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

Để nghiên cứu thuật toán AES, ta sẽ nghiên cứu tới những khái niệm có liên quan là nền tảng để xây dựng nên bộ cấu trúc và giải mã trước. Sau khi có được những khái niệm cơ bản đó, chúng ta sẽ tìm hiểu về cách xây dựng bộ mã hóa và giải mã dựa trên thuật toán AES trên nền tảng FPGA. Sau đó chúng ta sẽ tìm hiểu cách thiết kế phần cứng, và việc truyền và nhận qua cổng UART.

ĐỒ ÁN THIẾT KẾ HỆ THỐNG SỐ ĐỀ TÀI XÂY DỰNG BỘ MàHĨA VÀ GIẢI MàDỮ LIỆU DỰA  TRÊN THUẬT TỐN AES TRÊN NỀN TẢNG CƠNG  NGHỆ FPGA Nhóm:     6 Sinh viên thực hiện: Trần Quốc Tn B13DCDT082 Đỗ Thị Thảo B13DCDT122 Đỗ Thanh Huy B13DCDT063 Cù Quang Anh B13DCDT046 MỤC LỤC LỜI NÓI ĐẦU  .2 PHẦN I : LÝ THUYẾT CƠ SỞ I. Tổng quan về PLD và FPGA  1.  Giới thiệu về cấu kiện logic khả trình (PLD)  2.  FPGA  3.  Các bước thiết kế cho FPGA  4.  Giới thiệu chung về FPGA của Xilinx  5.  Tìm hiểu về phần mềm ISE của Xilinx II. UART  1.  UART nhận .9  2.  UART truyền 10 III. Thuật toán AES .11  1.  Giới thiệu về chuẩn mã hóa tiên tiến AES .11  2.  Quy trình mã hóa  11  3.  Quy trình giải mã .17 PHẦN II: XÂY DỰNG BỘ  MàHÓA VÀ GIẢI MàDỮ  LIỆU DỰA TRÊN  THUẬT   TOÁN   AES   TRÊN   NỀN   TẢNG   CÔNG   NGHỆ   FPGA 18 I. Đặt vấn đề 18 II. Thiết kế phần cứng 19  1.  UART Receiver 20  2.  UART Transmitter 25  3.  AES encoder/decoder .29 III. Kiểm tra kết quả 35 LỜI NĨI ĐẦU Trong mật mã học, AES (viết tắt của từ tiếng Anh: Advanced Encryption  Standard, hay Tiêu chuẩn mã hóa tiên tiến) là một thuật tốn mã hóa  khối được chính phủ Mỹ áp dụng làm tiêu chuẩn mã hóa. AES được kỳ vọng áp  dụng trên phạm vi thế giới ,đã được nghiên cứu rất kỹ lưỡng và được chấp thuận  làm tiêu chuẩn liên bang bởi Viện tiêu chuẩn và cơng nghệ quốc gia Hoa kỳ (NIST)  sau một q trình tiêu chuẩn hóa kéo dài 5 năm . Vậy nên thuật tốn AES là một  thuật tốn có thể áp dụng cho nhiều mục đích .  Để nghiên cứu thuật tốn AES, ta sẽ nghiên cứu tới những khái niệm có liên quan  là nền tảng để xây dựng nên bộ cấu trúc và giải mã trước.  Sau khi có được những  khái niệm cơ bản đó, chúng ta sẽ tìm hiểu về cách xây dựng bộ mã hóa và giải mã  dựa trên thuật tốn AES trên nền tảng FPGA. Sau đó chúng ta sẽ tìm hiểu cách thiết  kế phần cứng, và việc truyền và nhận qua cổng UART Cuối cùng là chương trình mơ phỏng việc mã hóa và giải mã dựa trên thuật tốn  AES dựa trên nền tảng FPGA, thơng qua ví dụ cụ thể, qua đó chúng ta sẽ thấy  được khả năng ứng dụng của cơng nghệ này trong thực tế PHẦN I: LÝ THUYẾT CƠ SỞ I Tổng quan về PLD và FPGA Giới thiệu về cấu kiện logic khả trình (PLD) Vào cuối thập kỷ 70 thế kỷ XX, các thiết bị logic chuẩn xuất hiện ồ ạt, đi kèm   với đó là sự  xuất hiện mạch in. Người ta đặt ra câu hỏi: “Chuyện gì xảy ra nếu  người thiết kế có thể thực hiện các kết nối khác nhau trong một thiết bị lớn hơn?”   Điều này cho phép người thiết kế tích hợp nhiều thiết bị logic chuẩn trong một linh   kiện. Để  có thiết kế  linh hoạt nhất, nhà sản xuất Ron Cline từ  Signetics đưa ta ý   tường dùng hai ma trận kết nối khả trình. Hai ma trận kết nối khả trình này có thể  tổ  hợp tùy ý giữa các cổng AND và cổng OR, đồng thời cho phép nhiều cổng OR   cùng sử  dụng chung một cổng AND. Kiến trúc này rất linh hoạt, nhưng tại thời   điểm đó, trễ lan truyền từ đầu vào tới đầu ra khá cao nên thiết bị hoạt động tương   đối chậm và dạng cơng nghệ  logic khả  trình đầu tiên xuất hiện đó chính là SPLD.  Sau này cơng nghệ CPLD và FPGA ra đời có mật đọ tích hợp cao hơn, cấu trúc linh   hoạt hơn cho phép tạo ra nhiều mạch logic phức tạp hơn Cấu kiện logic khả  trình, viết tắt là PLD là loại cấu kiện điện tử  có nhiều  ưu  điểm và hiện nay đang được phát triển rất mạnh. Về ngun lý, chúng có cấu tạo  rất giống với PROM. Việc lập trình cho PLD có thể được thực hiện bằng các cơng  nghệ khác nhau, dựa trên cơ sở bẻ cầu trì hoặc chuyển mạch. Tuy nhiên, ứng dụng  PLD lại rất khác với PROM. Một PLD, được tạo thành bằng một số  cổng AND,  OR, XOR hoặc cả các Flip­Flop, có thể thực hiện nhiều hàm Boole khác nhau FPGA Năm   1985,  cơng ty Xilinx đưa ra ý tưởng hồn tồn mới, đó là kết hợp thờ gian hồn thành sản  phẩm và khả năng điều khiển được của PLD với mật đọ và ưu thế về chi phí của   GateArray. Từ đó, FPGA ra đời Cấu trúc FPGA đơn giản gồm các tế bào logic, các khối cách đều nhau, liên kết   nhờ  các đường kết nối có thể  thay đổi được theo u cầu của người thiết kế   Nghĩa là người thiết kế  có quyền thiết kế, lập trình và thay đổi mạch điện. Hiện  nay FPGA có mật độ  khá cao, lên tời hàn trăm tỷ  cổng và cấu trúc cũng đa dạng   phức tạp hơn. Nhiều chức năng phức tạp đã đượ tích hợp sẵn để tằn hiệu quả  sử  dụng FPGA Có hai loại FPGA cơ bản: Loại lập trình lại được, dựa trên cơng nghệ SRAM và  loại lập trình một lần.  Các bước thiết kế cho FPGA Bước 1: Nhập thiết kế (Design Entry) Các cơng cụ thiết kế cho phép nhập thiết kế theo các cách: ­ Nhập thiết kế theo sơ đồ  ngun lý Schematic: Người thiết kế  sử dụng các  mơ­đun sẵn có trong thư  viện Schematic để  ghép nối chúng với nhau tạo  thành bản thiết kế theo u cầu. Từ  sơ đồ  ngun lý đã thiết kế  được cơng   cụ phần mềm sẽ chuyển đổi sang file ngơn ngữ  mơ tả  phần cứng HDL, mà  phổ biến là VHDL hoặc Verilog ­ Nhập thiết kế  sử  dụng ngôn ngữ  mô tả  phần cứng HDL (VHDL):   Người  thiết kế  sử  dụng chương trình soạn thảo để  thực hiện việc mơ tả  tồn bộ  bản thiết kế của mình dưới dạng ngơn ngữ HDL ­ Nhập thiết kế dưới dạng sơ đồ: Cơng cụ  thiết kế  còn cho phép nhập thiết  kế  vào dưới dạng sơ  đồ  mà điển hình là đồ  hình trạng thái FSM, sau đó   chúng cũng được chuyển đổi sang HDL Bươc 2: Kiểm tra thiết kế (Design Verification) Thực hiện kiểm tra, mơ phỏng chức năng hoạt động của thiết kế HDL đã tạo ra  ở trên. Bước này có thể khơng cần phải thực hiện trong khi thiết kế Bước 3: Tổng hợp thiết kế (Design Synthesis) Sau khi hồn thành mơ phỏng thiết kế, bước tổng hợp tiếp theo có nhiệm vụ  chuyển thiết kế dưới dạng file văn bản HDL thành dạng file Netlist, thực hiện mơ  tả mạch thực ở mức thấp dưới dạng cổng logic và kết nối chúng với nhau Bước 4: Thực hiện thiết kế (Design Implementation) Bước   này sử   dụng file  Netlist    file   ràng buộc   “constrains  file”  (mơ   tả  các  ngun tắc thiết kế, các ràng buộc về vật lý như  gán vị  trí cho các đầu vào/ra trên   chip, các ràng buộc về  tốc độ, thời gian, tần số…) để  tạo thiết kế  sử  dụng tài   nguyên có sẵn của FPGA. Bước này bào gồm các bước:  Translate, Map, Place and   Routing ­ Translate:  Bước   này  nhằm  thực   hiện  kiểm  tra   thiết   kế     đảm   bảo  file   Netlist   phù   hợp   với   kiến   trúc   FPGA     chọn,   kiểm   tra   file   ràng   buộc  “constraints file” của người sử dụng để phát hiện các lỗi mâu thuẫn với tham  số của FPGA đã chọn. Translate thường bao gồm các quá trình: Tối  ưu hóa,  biên dịch thành các thành phần vật lý của cấu kiện; kiểm tra ràng buộc thiết   kế. Khi kết thúc Translate , sẽ có một bản báo cáo về các chương trình được  sử  dụng, danh sách các cổng I/O và các cấu kiện được sử  dụng trong thiết  kế ­ Map: Tạo bản phân bố  thiết kế  tới các tài ngun cụ  thể  trong FPGA. Nếu   thiết kế  q lớn so với thiết bị  được chọn, quy trình này khơng thể  hồn   thành nhiệm vụ của mình. Q tình Map có các tham số rạng buộc của thiết  kế, ví dụ  như  tham số  tốc độ, thời gian của thiết kế  và đơi khi quyết định   gắn thêm các thành phần logic để  đáp  ứng các u cầu về  thời gian. Bước  này nhằm đưa mạch thiết kế vào một thiết bị cụ thể. Bước này cũng tạo ra   báo cáo xác nhận các tài ngun sử  dụng trong chip, mơ tả  chính xác các   thành phần trong thiết kế được đặt ở vị trí nào trong chip thực tế ­ Place and Routing: Place là q trình lựa chọn vị  trí phù hợp của mỗi khối   chức năng trong thiết kế  và đưa các cổng logic của phần đó vào các khối  logic hay các mơ­đun cụ  thể  trong FPGA trên cở  sở  tối  ưu việc kết nối và  đảm bảo về các ràng buộc về thòi gian. Route là q trình tạo liên kết vật lý  giữa các khối logic. Sau bước này tạo ra được file mơ tả cấu hình dạng *.jed Bước 5: Mơ phỏng định thời (Timing Simulation) Sau bước Place and Routing người thiết kế có thể thực hiện mơ phỏng thiết kế  ở mức cổng logic đã được định vị trí và định tuyến trên FPGA, phần mềm sử dụng   file cấu hình đã được tạo ra và kết hợp với thư  viện về mơ hình thời gian của các  họ FPGA (ví dụ ISE của xilinx dùng thư viện VITAL), để thực hiện mơ phỏng hoạt  động của thiết kế  mà có tính đến các tham số  thời gian trễ, thời gian thiết lập…   của các cổng logic trong FPGA. Bước này rất quan trong với những thiết kế phức   tạp, tốc độ lớn Bước 6: Cấu hình (Configuration) Gọi chương trình điều khiển việc nạp cấu hình, thực hiện kết nối thiết bị nạp   đến FPGA và nạp file cấu hình cho FPGA. Khác với CPLD, FPGA có thêm bước   “Creat Bit file” để tạo ra file “luồng bit” để nạp vào bộ  nhớ  cấu hình trong FPGA   thường là bộ nhớ tạm như SRAM Giời thiệu chung về FPGA của xilinx Cơng nghệ FPGA đang được phát triển rất mạnh trên thế giới. Hiện nay Xilinx  là hãng đi đầu trong cơng nghệ FPGA, sản phẩm của Xilinx bao gồm: các vi mạch  CPLD và FPGA, phần mềm thiết kế, các dịnh vụ  hỗ  trợ  thiết kế  và các chương  trình nguồn Xilinx cung cấp 2 dòng FPGA là Spartan và Virtex FPGA Spartan sử dụng trong những  ứng dụng với số lượng lớn giá thành thấp,  thương sử  dụng để  thay thế  cho mảng cổng logic cố  định và cho các sản phẩm   dùng cho từng ứng dụng cụ thể a) Spartan­3 Dòng FPGA Spartan­3 được thiết kế cho các ứng dụng tiết kiệm chi phí. So với  các dòng FPGA trước đó, dòng Spartan­3 được tăng thêm về  tài ngun logic, dung   lương RAM, số I/O và khả năng quản lý tín hiệu clock Các tính năng chính: ­ Giá thành thấp ­ Mật độ logic cao, có thể lên tới 74.880 cells ­ Số lương I/O lớn, tối đa 784 chân ­ Tốc độ truyền dữ liệu I/O lớn ­ Hỗ trợ nhiều chuẩn giao tiếp ­ Kết cuối bằng DCI (trở kháng điều khiển số) ­ Hỗ trợ DDR, DDR2 SDRAM ­ Có các bộ chân nhúng 18X18 ­ Có quản lý tín hiệu clock DCM ­ Hỗ trợ các nhân vi xử lý nhúng MicroBlaze và PicoBlaze Các đặc điểm kiến trúc: Cấu tạo của Spartan­3 có các thành phần tương tự như các FPGA khác: ­ Các khối logic có thể cấu hình được là các khối LUT dang RAM. Chức năng   của các khối này là để thiết lập các logic và các khối lưu trữ có thể là Flip­ Flop hoặc Latch ­ Các khối I/O (IOB) có chắc năng điều khiển dữ liệu giữa các chân I/O và các   khối logic bên trong cấu kiện. Mỗi khối IOB có thể  hỗ  trợ  dữ  liệu 2 chiều   hoặc hoạt động ở 3­trạng thái ­ Các khối RAM ở dạng 18kbit Ngồi ra Spartan­3 có thêm các thành phần ­ Các khối nhân nhúng cứng 18X18bit ­ Các khối quản ls tín hiệu clock số  DCM cung câp các khả  năng phân phối,  trễ, nhân, chia và điều khiển pha của tín hiệu clock Tìm hiểu về phần mềm ISE của xilinx Khơng chỉ là nhà cung cấp các chip logic khả trình CPLD/FPGA, Xilinx còn cung  cấp các cơng cụ  thiết kế  điện tử  hồn chỉnh, cho phép thực hiện thiết kế  trên các   thiết bị logic khả trình của hãng. Các cơng cụ này kết hợp cơng nghệ CAD tiên tiến   với giao diện đồ họa linh hoạt, dễ sử dụng để người thiết kế có được thiết kế tối   ưu. Bộ cơng cụ phần mềm hiện đang được sử dụng rộng rãi là ISE II UART 10 MixColumns đã tạo ra tính chất khuyếch tán cho thuật tốn. Mỗi cột được xem như  một đa thức trong trường hữu hạn và được nhân với đa thức  c ( x )   = 3x3 + x2  +   x  + 2  (modulo  x4  + 1)  Vì thế, bước nàycó thể  được xem là phép nhân ma trận trong   trường hữu hạn.  Bước này được mở  rộng và thực hiện nhân ma trận từ  bước shiftrows với ma   trận các hệ số như quy tắc trên để thu được ma trận 128 bít đầu ra. Ma trận nhân: d) Thao tác AddRoundKey Tại   bước   này,  khóa con được kết hợp với các khối. Khóa con trong mỗi chu trình được tạo ra từ  khóa chính với q trình tạo khóa con Rijndael; mỗi khóa con có độ  dài giống như  các khối. Q trình kết hợp được thực hiện bằng cách XOR từng bít của khóa con   với khối dữ liệu e) thuật tốn sinh khóa (KeyExpansion) Là q trình tạo các vòng khóa từ khóa chính, mỗi khóa con chứa 4 byte  Giả sử  ta có khóa ban đầu. Mạch tạo khóa sử dụng 128 bít khóa của vòng mã hóa trước làm   đầu vào để tạo khóa 17  Q trình tạo khóa như sau: Lấy cột cuối cùng trong ma trận khóa và dịch byte đầu xuối dưới cùng. Và thế  các byte trong cột này bằng các byte trong S­box như  bước subbytes, sau đó được   xor từng bít với cột đầu tiên và cột thứ  i  ứng với vòng mã hóa thứ  i của ma trận  Rcon. Kết quả là cột đầu tiên trong ma trận khóa kết quả của vòng i+1 Tiếp đến ta xor lần từng bít của các cột 2­>4 của ma trận khóa đầu vào, với cột  vừa tạo để tạo ra các cột còn lại cho ma trận khóa vòng i+1 Quy trình giải mã Quy trình giải mã được thực hiện qua các giai đoạn sau: Thực hiện thao tác AddRoundKey đầu tiên trước khi thực hiện các chu kỳ  giải mã Nr ­ 1 chu kỳ giải mã bình thường: mỗi chu kỳ  bao gồm bốn biến đổi liên  tiếp nhau: InvShiftRows, InvSubBtes, AddRoundKey, InvMixColumns Thực     chu   kỳ   giải   mã   cuối     Trong   chu   kỳ   này,   thao   tác  InvMixColumns được bỏ qua a) Phép biến đổi InvShifRows InvShiftRows chính là phép biến đổi ngược của phép biến đổi ShiftRows. Bước  này dịch vòng ngược lại với bước ShifRows b) Phép biến đổi InvSuBytes Phép biến đổi ngược của thao tác SubBytes, ký hiệu là InvSubBytes  Bước này  hoạt động tương tự  như  bước SubBytes nhưng sử  dụng ma trận invS­box là ma   trận nghịch với S­box 18 c) Phép biến đổi InvMixColumns InvMixColumns là biến đổi ngược của phép biến đổi MixColumns. Bước này  thực hiện tương tự bước MixColumns nhưng ma trận nhân là nghịch đảo nhân trong   bước MixColumns PHẦN II: XÂY DỰNG BỘ MàHĨA VÀ GIẢI MàDỮ LIỆU DỰA TRÊN  THUẬT TỐN AES TRÊN NỀN TẢNG CƠNG NGHỆ FPGA I Đặt vấn đề Trong thời đại tồn cầu hóa hiện nay, vấn đề bảo mật an tồn thơng tin internet  trở nên hết sức cấp thiết. Có nhiều thuật tốn được đưa ra nhằm bảo đảm an tồn  thơng tin trao đổi trên mạng internet. Tuy nhiên theo thời gian các thuật tốn này dễ  dàng bị  các đối tượng xấu khám phá và có thể  vơ hiệu hóa với các mục đích khác  nhau. AES (Advanced Encryption Standard) hay chuẩn mã hóa tiên tiến, là một thuật   tốn mã hóa khối  được chính phủ  Hoa Kỳ   áp dụng làm tiêu chuẩn mã hóa cho  những giao dịch dân sự  qua internet được sử  dụng phổ  biến gần đây và vẫn thể  hiện những  ưu việt của nó. Từ  đó việc thiết kế  IC thực hiện mã hóa/giải mã dựa   trên thuật tốn AES là rất cần thiết Mạch xây dựng về  cơ  bản u cầu một khối có nhiệm vụ  mã hóa và giải mã   dựa trên thuật tốn AES. Dữ  liệu mã hóa được đưa vào từ  Máy tính và gửi lên từ  FPGA để  hiện thị kết quả nên cần một chuẩn giao tiếp giữa FPGA và PC để  trao  đổi dữ liệu. Chuẩn giao tiếp được sử dụng trong thiết kế này là RS232.  Chuẩn giao tiếp RS232 là một trong những kỹ  thuật được sử  dụng rộng rãi   hiện nay để  nối ghép các thiết bị  ngoại vi với máy tính. Nó là một chuẩn giao  19 tiếp nối tiếp dùng định dạng khơng đồng bộ, kết nối nhiều nhất là hai thiết bị ,  chiều dài kết nối lớn nhất cho phép để đảm bảo dữ liệu là 15m, tốc độ  20kbit/s.  Các máy tính thường có một hoặc hai cổng nối tiếp theo chuẩn RS232 được gọi  là cổng COM  Để  làm việc với cổng RS232 ta sử  dụng bộ  truyền và nhận   UART điểu khiển ghép nối PC và FPGA Thiết kế  được hồn thiện sử  dụng VHDL và được thực thi trên Spartan­3 sử  dụng cơng cụ thiết kế ISE 14.7 II Thiết kế phần cứng Sơ đồ khối: Giải thích các chân tín hiệu: rx  :  Chân đầu vào dữ liệu qua cổng nối tiếp tx  :  Chân đầu ra dữ liệu qua cổng nối tiếp clk  :  Tín hiệu đồng bộ hệ thống rst :  Khởi động lại hệ thống.  en  :  Chân cho phép truyền / nhận dữ liệu edsel  :  Chân lựa chọn mã hóa / giải mã dữ liệu Mạch bao gồm 3 khối cơ bản là: UART Transmitter, UART Receiver, AES. Sau   đây ta sẽ đi sâu vào thiết kế các khối cơ bản cho mạch mã hóa và giải mã 20 UART Receiver Để  thuận tiện cho việc thay đổi trong tương lai, hai hằng số  được sử  dụng là   numdbit và numstopbit tương ứng là số bít data được truyền và số mẫu cho bit stop.  Số mẫu cho bit stop có thể là 16, 24 và 32 tương ứng với thời gian của bit stop là 1,   1.5 và 2 bít. Trong thiết kế của đề tài này numdbit = 8 và numstopbit = 16 Thuật tốn bao gồm 4 trạng thái chính là idle, start, data, stop tương  ứng biểu   diễn giai đoạn xử lý của các bit start, data, stop. Tín hiệu s_tick là tín hiệu cho phép  bộ tạo tốc độ  baud tạo ra tín hiệu lấy mẫu. Ở đây có hai bộ  đếm được biểu diễn   bởi các thanh ghi s và n. Thanh ghi s duy trì theo dõi số lần lấy mẫu và đếm đến 7   trong trạng thái start, tới 15 trong trạng thái data, và tới numstopbit trong trạng thái  stop. Thanh ghi n duy trì theo dõi số bít dữ liệu đã nhận trong trạng thái data. Các bít   nhận được được dịch vào và tập hợp lại trong thanh ghi b. Tín hiệu trạng thái  rx_done_tick được thêm vào. Nó xác nhận cho một chu kỳ nhận đã hồn thành.  Sơ đồ khối của bộ UART nhận Giải thích các khối: Khối “baud rate generator” tạo tốc độ baud để truyền và nhận  các bít dữ liệu (19200 baud = 19200 bits/s). UART truyền thơng khơng đồng   do đó khơng có tín hiệu clock đồng bộ  đi kèm, như  vậy q trình nhận  phải được thỏa thuận trước thơng qua tập các tham số. Để lấy mẫu các bít,    nhận tạo ra một tín hiệu clock để  xác định điểm giữa của các bít đã  truyền. Khối bau rate generator tạo ra một tín hiệu lấy mẫu tần số bằng 16  lần tốc độ baud 21 Khối “receiver” xác định các bits start, data, stop và chuyển bit     liệu   vào     ghi   dịch     bit   Sau     nhận   xong     bits   tín   hiệu   rx_done_tick được thiết lập báo đã nhận xong 8 bits, cần chuyển tới bộ mã   hóa Khối “register” là một bộ  đệm tránh tình trạng ghi đè dữ  liệu  trong khi chưa xử lý xong 8 bits dữ liệu trước đó Khối AES kiểm tra xem khi nào có 8 bits dữ  liệu mới gửi tới    mã hóa bằng cách kiểm tra tín hiệu “rx_empty” xem đã được thiết lập   hay chưa. Sau khi đã đọc xong 8 bits khối AES sẽ thiết lập tín hiệu rd_uart  để xóa “rx_empty” Thuật tốn thiết kế bộ nhận UART trong FPGA: Giải thích thuật tốn:  Ban đầu kênh   trạng thái nghỉ, tín hiệu Rx= ‘1’. Bộ  UART nhận liên tục lấy mẫu tín hiệu Rx gửi tới từ PC với tốc độ lấy mẫu bằng 16  lần tốc độ  Baud, tốc độ  baud chọn trong thiết kế  này là 19200 baud, q trình lấy   mẫu tiếp tục cho đến khi mẫu đã lấy = ‘0’, lúc này PC báo cho bộ  nhận biết bắt   đầu q trình trao đổi dữ liệu. Bộ UART nhận sẽ tiếp tục lấy mẫu tín hiêu Rx để  khơi phục dữ  liệu đến. Sau khi Rx=’0’, bộ  nhận chuyển sang trạng thái START.  Nếu tín hiệu s_tick=’1’, bộ  nhận thực hiện lấy mẫu bit start, bộ đếm được khởi   động tăng thanh ghi s. Khi s=7 nghĩa là q trình lấy mẫu đã lấy mẫu đến điểm giữa  của bit start. Thì bít start được khơi phục tại bộ  nhận, và khởi động lại bộ  đếm  (s=0, n=0). Bộ nhận chuyển sang trạng thái data. Nếu tín hiệu cho phép s_tick=’1’,   bộ nhận bắt đầu q trình lấy mẫu các bit dữ liệu. Ban đầu khi mỗi mẫu được lấy,   22 thanh ghi s sẽ tăng 1 cho đến khi tăng đến s=15, mẫu được lấy ở điểm giữa bit dữ  liệu đầu tiên (do 8 mẫu trước đó của bít start chưa lấy nên cần 16 mẫu để bắt đầu  từ điểm giữa của bit start đến điểm giữa của bit dữ liệu đầu tiên), bit dữ  liệu đầu   tiên được khơi phục và dịch vào thanh ghi b, thanh ghi n tăng 1 cho biết đã nhận  được 1 bit, bộ  đếm được khởi đơng lại (s=0). Q trình tiếp tục và các bit khơi  phục được dịch dần vào thanh ghi b cho đến khi nhận được numdbit dữ liệu tương   ứng với n=numdbit­1. Sau đó bộ nhận chuyển qua trạng thái STOP. Tùy thuộc vào   số mẫu được lấy cho bit stop được quy định trong numstopbit, mà bộ đếm được lựa  chọn cho phù hợp. Với số  mẫu là 16, bộ  nhận sẽ  khởi động bộ  đếm và đếm số  mẫu để xác định điểm giữa của bit stop. Sau khi khơi phục lại bit stop, bộ nhận set   tín hiệu rx_done_tick lên ‘1’ để báo q trình nhận đã xong. Sau đó bộ nhận quay về  trạng thái nghỉ để đợi tín hiệu chuyển đổi tiếp theo Tín hiệu rx_done_tick sẽ báo cho khối mã hóa biết khi nào thì bộ nhận đã nhận  xong numdbit dữ liệu. Khi đó khối mã hóa sẽ lấy dữ liệu từ thanh ghi đệm của bộ  UART nhận, sau khi lấy xong, khối mã hóa sẽ  thiết lập tín hiệu rd_uart để xóa tín  hiệu rx_done_tick của bộ UART nhận để bộ  nhận báo cho khối mã hóa nếu nhận  được các bít dữ liệu tiếp theo Clock hệ thống là 50MHz, do đó để có tần số lấy mẫu bằng 16 lần tốc độ baud  (16*19200 = 307200) ta tạo một bộ chia tần sử dụng bộ đếm mod­163. Để tránh lỗi   ghi đè dữ  liệu (dữ  liệu cũ chưa xử  lý xong nhưng bị  ghi đè bởi dữ  liệu mới) ta sử  dụng một bộ đệm để lưu dữ liệu gửi tới vào, bộ đếm có thể là một thanh ghi dịch   hoặc một stack hoạt động theo cơ chế FIFO. Thiết kế này có q trình xử lý dữ liệu  tương đối nhanh (dữ  liệu đưa vào bộ  mã hóa theo tín hiệu đồng bộ  là clock hệ  thống còn dữ  liệu được nhận trên kênh theo tốc độ  lấy mẫu) nên ta sử  dụng một   thanh ghi dịch đơn giản để đệm dữ liệu Chương trình VHDL mơ tả bộ nhận có 4 process chính: Chiatan : process(clk,rst); ­­ có nhiệm vụ  chia clock hệ  thống   để tạo tốc độ lấy mẫu 23 Capnhat : process (clk,tick); ­­ có nhiệm vụ cập nhật các trạng   thái mới cho thanh ghi b, n, s Uart : process (cst,s_reg,n_reg,b_reg,rx_done_tick,rx); ­­ đây là  process chính của bộ nhận có nhiệm vụ cập nhật các trạng thái của bộ nhận   và khơi phục lại các bit nhận được Flag : process  (rx_done_tick,rd_uart,rst); ­­  đây là  process  để  thiết lập các tín hiệu giao tiếp với khối mã hóa: báo cho bộ mã hóa biết khi  nào nhận được numdbit dữ liệu thơng qua tín hiệu rx_done_tick và nhận tín  hiệu rd_uart từ  khối mã hóa để  xóa tín hiệu rx_done_tick cho lần nhận dữ  liệu tiếp theo UART Transmitter Bộ UART truyền tương tự như bộ nhận. Nó bao gồm các khối truyền, tạo tốc  độ  baud và mạch giao diện. UART truyền cũng sử  dụng các hằng số  numdbit và   numstopbit với chức nằng tương tự như bộ nhận để tiện thay đổi trong tương lai Thuật tốn bao gồm 4 trạng thái chính là idle, start, data, stop tương  ứng biểu   diễn giai đoạn truyền các bit start, data, stop. Tín hiệu s_tick là tín hiệu cho phép bộ  tạo tốc độ baud tạo ra tín hiệu lấy mẫu. Ở đây có hai bộ đếm được biểu diễn bởi  các thanh ghi s và n. Thanh ghi s duy trì theo dõi số  lần lấy mẫu và đếm đến 15   trong trạng thái start, tới 15 trong trạng thái data, và tới numstopbit trong trạng thái  stop. Thanh ghi n duy trì theo dõi số bít dữ liệu đã truyền trong trạng thái data. Các  bít truyền sẽ được được dịch dần ra ngồi sau 16 lần lấy mẫu. Tín hiệu trạng thái  tx_done_tick được thêm vào. Nó xác nhận cho một chu kỳ truyền đã hồn thành.  Sơ đồ khối của bộ UART truyền: 24 Giải thích các khối: Khối “baud rate generator” tạo tốc độ  baud để  truyền các bít   liệu (19200 baud = 19200 bits/s). Tạo ra một tín hiệu lấy mẫu tần số  bằng 16 lần tốc độ baud Khối “Transmitter” truyền lần lượt các bits  start,  data, stop.  Sau khi truyền xong 8 bits, tín hiệu   tx_done_tick được thiết lập báo đã  truyền xong 8 bits, cần truyền 8 bits tiếp theo Khối “register” là một bộ  đệm tránh tình trạng ghi đè dữ  liệu  trong khi chưa xử lý xong 8 bits dữ liệu trước đó Sau khi truyền xong tín hiệu tx_empty được thiết lập. Khối   AES sẽ gửi 8 bits tiếp theo tới bộ đệm và thiết lập tín hiệu wr_uart báo hiệu  cho bộ truyền thực hiện truyền ­  Thuật tốn thiết kế bộ nhận UART trong FPGA:  Giải thích thuật tốn: Ban đầu bộ UART truyền ở trạng thái nghỉ và liên tục lấy   mẫu với tốc độ  mẫu là 16 lần tốc độ  baud đồng thời liên tục kiểm tra tín hiệu  tx_start xem đã được thiết lập chưa,  ở trạng thái nghỉ  bộ  truyền thiết lập tín hiệu  tx= ‘1’ để truyền lên kênh. Khi khối mã hóa u cầu truyền bằng cách thiết lập tín  hiệu wr_uart thì tín hiệu tx_start được thiết lập. Lúc này bộ  truyền chuyển sang   trạng thái START, và chuyển tín hiệu tx = ‘0’, nếu tín hiệu cho phép s_tick được  thiết lập, bộ lấy mẫu sẽ tạo tín hiệu mẫu và bộ  đếm được khởi động để  đếm số  mẫu đã lấy (s=0), mỗi mẫu được lấy s sẽ  tăng 1 khi s=15, tức nghĩa là số  mẫu đã  lấy là 16 thì kết thúc bit start (1 bit bằng 16 lần lấy mẫu), bộ truyền chuy ển sang   trạng thái data, bộ đếm được khởi động lại (s=0, n=0). Bộ truyền tiếp tục lấy mẫu  và đếm các mẫu đã lấy, nếu s=15 thì dịch một bít dữ liệu từ thanh ghi b ra ngồi và  25 n tăng 1, tiếp tục khởi động lại bộ đếm. Khi n= numdbit­1, bộ truyền đã truyền hết  các bit dữ  liệu, bộ truyền chuyển sang trạng thái stop. Các mẫu tiếp tục được lấy  và bộ đếm sẽ  đếm số mẫu, nếu số  mẫu băng numstopbit­1 thì bộ  truyền quay lại   trạng thái nghỉ  đợi tín hiệu từ  khối mã hóa truyền numdbit tiếp theo đồng thời tín   hiệu tx_done_tick được thiết lập để  xóa tín hiệu tx_start cho lần truyền tiếp theo   đồng thời tín hiệu tx_done_tick cũng được đưa tới đầu ra để  báo cho khối mã hóa   biết khi nào thì sẵn sàng gửi dữ liệu Tương tự  như  bộ nhận bộ truyền cũng cần một mạch chia tần để  tạo tín hiệu  lấy mẫu từ clock hệ thống Chương trình VHDL mơ tả bộ nhận có 4 process chính: Chiatan : process(clk,rst); ­­ có nhiệm vụ  chia clock hệ  thống   để tạo tốc độ lấy mẫu Capnhat : process (clk,tick); ­­ có nhiệm vụ cập nhật các trạng   thái mới cho thanh ghi b, n, s Uart   :   process   (cst1,c_reg,n_reg,b_reg,tx_done_tick,tx_start)­­  đây là process chính của bộ truyền có nhiệm vụ cập nhật các trạng thái của  bộ truyền và gửi đi các bit dữ liệu Flag : process (tx_done_tick,wr_uart,rst); ­­  đây là process để  thiết lập các tín hiệu giao tiếp với khối mã hóa: báo cho bộ mã hóa biết khi  nào có thể  gửi được numdbit dữ  liệu thơng qua tín hiệu tx_done_tick và  nhận tín hiệu wr_uart từ khối mã hóa để xóa tín hiệu tx_start cho lần nhận   dữ liệu tiếp theo AES encoder/decoder Sơ đồ khối của bộ mã hóa/giải mã AES: 26 Giải thích các khối: Từ các bước thực hiện mã hóa và giải mã ta có thể xậy dựng bộ mã hóa/giải mã  AES như  một máy trạng thái hữu hạn FSM. Với 7 trạng thái start, init, subbytes,  shiftrows, mixclumns, getroundkey, addroundkey.  Datain buf : AES chỉ làm việc với các khối dữ liệu (đầu vào và  đầu ra) 128 bít và khóa có độ  dài 128, 192 hoặc 256 bít. Do đó cần chuyển  các bits thành các khối 128 bit trước khi thực hiện mã hóa, khối datain buf   thực hiện nhiệm vụ này Dataout buf : tương tự với khối datain buf khối này thực hiện  chuyển từng byte của khối 128 bits đã mã hóa ra khối uart transmitter để  chuyển tới PC AES : Khối này thực hiện mã hóa và giải mã theo thuật tốn  AES. Khối này là một máy trạng thái hữu hạn với các trạng thái tương ứng  với các bước thực hiện mã hóa trong thuật tốn AES : subbytes, shiftrows,   mixcolumns,  addroundkey Sơ đồ máy trạng thái hữu hạn FSM: Giải thích sơ đồ trạng thái : Máy trạng thái có 6 trạng thái là: Idle, Init, SubBytes, ShiftRaws, MixColumn,   GetRoundKey, AddRoundKey.  Idle: Đây là trạng thái nghỉ của bộ mã hóa và giải mã. Ở trạng thái này AES   khơng hoạt động và thiết lập các tham số cần thiết cho q trình hoạt động   tùy  thc  vào  q  trình  là  mã  hóa  hay giải mã.  Khi  cờ  flag=’1’ thì AES   chuyển sang trạng thái Init. Cờ  flag được bật sau khi bộ  đệm đầu vào đã   nhận đủ 128 bit dữ liệu 27 Init: Đây là trạng thái khởi tạo của q trình mã hóa. Trạng thái này thực   hiện xor từng bit của đầu vào với khóa gốc SubBytes: Thực hiện bước SubBytes trong thuật tốn AES ShiftRaws: Thực hiện bước ShiftRaws trong thuật tốn AES MixColumns: Thực hiện bước MixColumns trong thuật tốn AES GetRoundKey:  Ở  trạng thái bày AES thực hiện tạo khóa cho vòng mã hóa   tương ứng theo thuật tốn tạo khóa AddRoundKey: Thực hiện bước AddRoundKey trong thuật tốn AES Q trình mã hóa được thực hiện như sau: Khi bộ  UART nhận nhận dữ  liệu thơng qua cổng COM, sẽ  dịch từng bít vào   thanh ghi cho đến khi thanh ghi được dịch đầy thì UART nhận sẽ gửi một tín hiệu   báo cho khối AES biết đã nhận xong numdbit dữ  liệu, khối mã hóa sẽ  lấy byte đó   và chuyển vào bộ  đệm đầu vào. Thực chất bộ  đệm đầu vào là một mảng dữ  liểu  bao gồm 128 bit, khối AES sẽ liên tiếp nhận từng numdbit dữ liệu và đặt vào khối  128 bit dữ  liệu này. Sau khi bộ  đệm đầy, nó sẽ  thiết lập một tín hiệu để  bật cờ  flag Ban đầu khối mã hóa AES sẽ    trạng thái nghỉ  trong khi các dữ  liệu đầu vào   được ghi vào bộ đệm đầu vào, trạng thái này sẽ thiết lập các tham số cần thiết cho  q trình mã hóa hoạc giải mã (khóa ban đầu rkey, khợi tạo biến đếm, ma trận nhân   mulm).  Sau khi bộ đệm đầy và cờ flag được thiết lập, một thanh ghi dtinbuf 128 bit  sẽ lấy dữ liệu từ bộ đệm. Thanh ghi này là thanh ghi chính trong khối mã hóa, nó sẽ  thay đổi theo q trình mã hóa hoặc giải mã. Thanh ghi này biểu diễn cho ma trận    liệu đầu vào trong thuật tốn AES với mỗi byte tương  ứng với giá trị  của hàng   và cột tính theo từ trái sang phải từ trên xuống dưới Sau khi cờ flag được thiết lập khối mã hóa sẽ chuyển sang trạng thái khởi tạo,  đây là bước đầu tiên trong q trình mã hóa, thực hiện xor từng bít với khóa ban  đầu. dtinbuf

Ngày đăng: 15/01/2020, 03:57

Từ khóa liên quan

Mục lục

  • a) Phép biến đổi SubBytes

  • b) Phép biến đổi ShiftRows

  • c) Phép biến đổi MixColumns

  • d) Thao tác AddRoundKey

  • e) thuật toán sinh khóa (KeyExpansion)

  • 3. Quy trình giải mã

    • a) Phép biến đổi InvShifRows

    • b) Phép biến đổi InvSuBytes

    • c) Phép biến đổi InvMixColumns

Tài liệu cùng người dùng

Tài liệu liên quan