75
Bảng 4.1 sau đây cho ta thấy một số thông số kỹ thuật đặc trưng của FPGA ML605 Virtex-6 XC6VLX240T của Xilinx (thuộc dòng FPGA cao cấp) và FPGA Atlys Spartan-6 LX45 (thuộc dòng FPGA chi phí thấp). Việc luận án này chọn hai dòng FPGA khác nhau giúp cho việc khảo sát và đánh giá đầy đủ hơn và để giúp cho các nhà thiết kế bảo mật có những lựa chọn phù hợp hơn.
Bảng 4.1 So sánh các thông số kỹ thuật của Virtex-6 và Spartan-6
Đặc tính k thu t ỹ ậ Xilinx ML605 Virtex-6 Digilent Atlys Spartan-6
Slices 37.880 6.822
LUTs of Slice 4 4
Registry 301.440 54.576
Clock 200MHz 100MHz
Pin 1156-pin BGA 324-pin BGA
SPI Flash 128MB 64MB
DDRAM 512MB DDR3 128MB DDR2
Ethernet 10/100/1000 10/100/1000
USB USB- -UART, USB-to A
Host, USB Mini- B
USB- -UART, USB-HID to port (for mouse/keyboard)
Video DVI connector 2 x HDMI video input ports
and 2 x HDMI output ports
4.1.2. Công c ụ thự hiệc n thi t k ế ế
Để xây dựng ệ ống h th mẫu th ử nghiệm, bên ph FPGA, ía luận án này ử ụng ộ s d b công c Embedded Development Kit (EDK) phiên b 14.1 c Xilinx. B công c n gụ ản ủa ộ ụ ày ồm c ác ph ầnchức ă n ng v c ới ácbướcthực ện hi nh sau: ư
- Công c ụ ISE Project Navigator dùng xây dđể ựng, thi k c kh IP (AES-256, ết ế ác ối
SHA-512) bằng ôn ng mô t ph cng ữ ả ần ứng HDL, Hình 4.2. Sau khi quá ình thi k tr ết ế
và chạy mô phỏng ành công, chúng ta s dth ử ụng ình t lõi IP Core Generator tr ạo để đóng gói c lõi IP nác ày cho c ácứng ụng ề d v sau. Trình mô phỏngSimulation và ình tr
t lõi IP ạo Core Generator đều được tích hợp bên trong b công c ộ ụ ISE Project Navigator.
76 Hình 4.2 Công c thi k E Project Navigator ụ ết ế IS
- Công c ụ Xilinx Platform Studio (XPS): dùng thi k n tđể ết ế ền ảng ph cần ứng cho h ệ
thống nhúng dựa ên FPGA. T tr ừ đây úng ta có ch thể tích hợp v hào ệthống c lõi IP ác ph cần ứng được ỗ trợ bởi h nhà s ảnxuất ho c lõi IP c ặc ác ủa người ử ụng s d ( er IP), Us ví d nh lõi AES-256 và SHA-512 c ụ ư ủaluận n , Hình 4.3. Sau , n tán ày đó ền ảng ph ần
cứng (Hardware Platform) n ày được xuất sang cho c thi k ác ết ế tiếp theo trong c ác công c ụXilinx PlanAhead và Xilinx Software Development Kit.
77 - Công c ụXilinx Software Development Kit h thi k c ph mỗtrợ ết ế ác ần ềm nhúng code
C, C++, Hình 4.4. Ngo ra, t b công c nài ừ ộ ụ ày ta có thể xây dựng c ình i khiác tr đ ều ển, ví d nh ình qu n lý c nh tụ ưtr ả ập ật ừng ph FPGA. ần
Hình 4.4 Công c thi k Software Development Kit ụ ết ế
- Cuối cùng là công c thi k ụ ết ế Xilinx PlanAhead, Hình 4.5 dùng thi k cho vi , để ết ế ệc
thực hi c hình l ện ấu ại được ừng t ph . Công c nần ụ ày cho ph úng ta b í khu v ép ch ốtr ực
và x ác định kích thước c phân vùng ác để chứa c mô un thành ph khi c hình ác đ ần ấu
v h ào ệthống đểthực ện hi c ác chức ă n ng mô t đã ảtrước đó .
78
4.1.3. Thiế ật l p vi x lý nhúng MicroBlaze và giao th c TCP/IP ử ứ
Trên FPGA Virtex-6 XC6VLX240T, luận án này nhúng một bộ vi xử lý lõi mềm
MicroBlaze bằng cách sử dụng bộ công cụXilinx Platform Studio (XPS) phiên bản 14.1.
Bộ công cụ XPS cho phép các nhà thiết kế dễ dàng tạo ra các nền tảng nhúng dựa trên bộ vi xử lý MicroBlaze hoặc PowerPC-405. XPS cung cấp một loạt các thiết bị ngoại vi như UARTs, bộ đếm, Ethernet, bộ điều khiển bộ nhớ, các cổng vào ra mục đích chung
GPIOs…, và một giải pháp kết nối dựa trên cấu trúc bus IBM CoreConnect [100]. Các công cụ biên dịch GNU [106] của MicroBlaze và PowerPC 405 đã được sử dụng trong các - quy trình thiết kế phần mềm. Các mã nguồn cho các ứng dụng có thể được viết bằng ngôn ngữ cấp cao như C và C + +.
Đối với hệ thống mẫu thử nghiệm hiện tại luận án này sử dụng hệ điều hành , Xilkernel [107] của Xilinx, Hình 4.6. Xilkernel là một kernel nhỏ nhưng rất mạnh mẽ. Nó có các thư viện mở được cung cấp trong công cụ EDK cho phép người dùng tùy biến mức độ cao cả về mặt kích thước lẫn chức năng. Nó đạt được các tính năng đòi hỏi cho một kernel nhúng nhỏ gọn. Xilkernel làm việc được trên Microblaze và PowerPC. Nó có thể được sử dụng để phục vụ cho các mục đích ở mức cao hơn như là kết nối mạng, xử lý hình ảnh và âm thanh.
Các đặc trưng của Xilkernel
- Là một hệ điều hành nhúng điển hình.
- Ứng dụng riêng rẽ trên hệ điều hành này rất trực quan.
- Cho phép người sử dụng lập trình ở mức độ trừu tượng.
- Có rất nhiều ứng dụng trên hệ điều hành này như: Hệ thống tập tin, quản lý thời gian.
- Có một thư viện nhỏ nhưng lại cung cấp đầy đủ các dịch vụ thiết yếu.
79
Như đã đề cập ở trên, luận án này sử dụng bộ công cụ phần mềm XPS để thực hiện và thiết lập bộ vi xử lý MicroBlaze. Sự lựa chọn các thông số và các thành phần khác nhau
cho MicroBlaze được thực hiện thông qua ình Base System Builder [tr 108]. Với nền tảng mẫu thử nghiệm luận án này lựa chọn các thông số và các thành phần như trong Bảng 4.2.,
Để thực hiện giao thức kết nối TCP/IP, luận án này sử dụng giao thức Lightweight IP (lwIP), đây là một giao thức mạng mã nguồn mở cho các hệ thống nhúng. EDK của Xilinx cung cấp lwIP tùy biến để chạy trên các hệ thống nhúng có chứa một bộ xử lý PowerPC hoặc là MicroBlaze.
Để trao đổi dữ liệu, FPGA cần xác định rõ địa chỉ IP và lắng nghe bản tin trên một cổng cụ thể. Nếu bản tin này là bản tin cập nhật một kết nối sẽ được thiết lập cho phép FPGA và máy tính giao tiếp với nhau.
Bảng 4.2 Các tham số và các thành phần của MicroBlaze
Tham số/Thành phần Giá trị
Tần số làm việc 100 MHz
I cache 16 KB
D cache 64 KB
Ethernet Controller Tri-mode EMAC
Serial interface RS232_UART lite
DRAM controller MCB_DDR3
Các bước thực hiện kết nối tại FPGA:
- Chương trình được thực hiện bắt đầu từ hàm main(). Việc cấu hình cho Xilkernel với luồng tĩnh được gọi là main_thread. Luồng này thiết lập LwIP bằng việc sử dụng các hàm lwip_init() và tạo ra một luồng mạng mới có tên là network_thread sử dụng hàm sys_thread_new(). Main () {…. sys_thread_new("main_thrd", (void(*)(void*))main_thread, 0, THREAD_STACKSIZE, DEFAULT_THREAD_PRIO); …..}
- Network_thread sẽ thiết lập cho một giao thức mạng gồm các thông số địa chỉ MAC và IP sử dụng hàm xemac_add . Hàm này () này sẽ lấy địa chỉ MAC và IP cho giao tiếp và khởi chạy nó.
80
Unsigned char mac_ethernet_address [] = {0x00,0x0a,0x35,0x00,0x01,0x02}; netif = &server_netif;
/*Khởi tạo địa chỉ IP để sử dụng*/ IP4_ADDR(&ipaddr, 192, 168, 1, 10); IP4_ADDR(&netmask, 255, 255, 255, 0); IP4_ADDR(&gw, 192, 168, 1, 1);
xemac_add(netif, &ipaddr, &netmask, &gw, mac_ethernet_address, EMAC_BASEADDR)
- Tạo ra một luồng mới để xử lý các yêu cầu được gửi tới :
sys_thread_new("testethernet",test_ethernet_thread,0,THREAD_STACKSIZE, DEFAULT_THREAD_PRIO);
- Luồng mới này sẽ lắng nghe các yêu cầu và chấp nhận chúng sử dụng hai hàm được hỗ trợ bởi thư viện Lwip làlwip_listen() lwip_accept().và
- Quá trình truyền nhận dữ liệu được thực hiện bằng hàm read(sd, recv_buf,
RECV_BUF_SIZE). Hàm này trả về số byte đã nhận được với ý nghĩa của các thông số như sa : recv_buf là địa chỉ vùng nhớ để lưu dữ liệu, u RECV_BUF_SIZE
là kích thước vùng chứa dữ liệu tạm thời.
/* đọc và lưu dữ liệu */
read_len = read(sd, recv_buf, RECV_BUF_SIZE)
- Khi toàn bộ dữ liệu được lưu trữ vào DDRAM, FPGA sẽ đóng kết nối, th hi ực ện
c lác ệnh ội ại và chờ cho những bản tin cập nhật tiếp theo. n t
Các bước thực hiện kết nối tại máy tính:
- Tạo một đối tượng Clientsocket ()với các thông số MAC và IP
/* Initialize IP */
IPAddress[] ipAddress = Dns.GetHostAddresses("192.168.1.10");
IPEndPoint ipEnd = newIPEndPoint(ipAddress[0], 9999);
Socket clientSock = newSocket AddressFamily( .InterNetwork,
SocketType.Stream, ProtocolType.IP);
- Sau khi khởi tạo các thông số máy tính sẽ xử lý dữ liệu từ một File thành dạng byte,
đóng gói chúng thành dạng mảng của byte rồi chuyển chúng tới bộ đệm.
/* Convert data to a sequence of bytes */
byte[] fileNameByte = Encoding.ASCII.GetBytes(fileName); /* read contents of the file into a byte array*/
byte[] fileData = File.ReadAllBytes(filePath + fileName);
byte[] clientData = new byte[4 + fileNameByte.Length + fileData.Length];
81 /* init buff */
fileNameLen.CopyTo(clientData, 0); fileNameByte.CopyTo(clientData, 4);
fileData.CopyTo(clientData, 4 + fileNameByte.Length);
- Máy tính sẽ gửi yêu cầu kết nối với FPGA khi FPGA chấp nhận yêu cầu thì kết nối được hình thành và bắt đầu gửi dữ liệu đi.
/* connect */
clientSock.Connect(ipEnd); /* send data */
clientSock.Send(clientData);
- Máy tính s ẽ gửi file bitstream đến FPGA và đợi cho tới khi ile được gửi thành f công thì máy tính sẽ tự động đóng luồng và socket.
/* wait for reached file and close socket */ clientSock.wait(clientdata);
clientSock.Close();
- Giao di ệnchương tr ình quản lý c nh m ập ật áy chủ SuM
Hình 4.7 ình qu lý c nh máy Tr ản ập ật chủ SuM
M khi có b tream m , trình qu lý c nh m ỗi its ới ản ập ật áy chủ SuM, Hình 4.7, s g ông ẽ ửith b áođến cho c thi b ác ết ị người dùng cuối có trong c s d ơ ở ữliệu người dùng được ư l u tr ữ ở
trong máy chủ. Khi phía thi b ết ị người dùng cuối đồng ý c nh ì hai bên chính ập ậtth thức
thực hi k n qua giao th c nh an to . Quá ện ết ối ức ập ật àn trình b tay và ắt thống nhất c thuác ật
toán mã hóa và x ác thực ành công, SuM s g b tream tth ẽ ửi its ừng ph c c nh cho ần ần ập ật
82
4.1.4. Xây dựng ệ thố h ng c u hình lấ ại đƣợ ừc t ng ph n ầ
Hình 4.8 Sơ đồ quá trình thực hiện cấu hình từng phần
Quy trình xây dựng và thiết kế hệ thống cấu hình từng phần dựa trên FPGA của Xilinx được thực hiện nhờ cô g cụ PlanAhead n [109] mà hãng cung cấp kèm theo trong bộ công cụ ISE như được trình bày trong Hình 4.8:
Trong đó
- ngc: là các tập tin dữ liệu *.ngc ở dạng netlist chứa các mô đun chức năng sau quá -
trình tổng hợp của các công cụ thiết kế như ISE, XPS của Xilinx.
- ucf: là các tập tin dữ liệu *.ucf chứa thông tin ràng buộc và gán chân cho các khối trong hệ thống.
- elf: là các tập tin ảnh *.elf chứa các chương trình phần mềm nhúng chạy trên vi xử
lý nhúng. *elf được sinh ra sau quá trình biên dịch từ bộ công cụ SDK.
- Full bitstream: là tập tin *.bit, đây là tập tin cấu hình đầy đủ cho FPGA trong hệ
thống cấu hình lại được từng phần.
- Partial bitstream: là tập tin *.bit, là tập tin từng phần, đại diện cho một mô đun từng -
phần có thể cấu hình lại được.
Các bước thực hiện cấu hình lại từng phần FPGA:
- Các tập tin *.ngc, *.ucf và *.elf được đưa vào PlanAhead để xác định vị trí các
module (Floor) trên FPGA đâu là phần tài nguyên mà các mô-đun từng phần sẽ được cấu hình lên đó.
- Sau đó, PlanAhead sẽ thực hiện hai quá trình Implement và Timing để tạo ra các tập tin “ Bitstream đầy đủ” dùng cho việc cấu hình toàn bộ FPGA và các tập tin “Bitstream từng phần” dùng để cấu hình cho các khu vực cấu hình lại được từng phần.
83
Giao diện chương trình quản lý cập nhật ừngt ph ần
Hình 4.9 ình qu lý cTr ản ập nh tật ừng ph máy ần trạm CuM
Để thực hiện mô hình th nghiử ệm, t ác gi xây dả ựng hai mô un cđ ấu hình lạiđược từng
ph là: mô un th hi ph nhân hai to hần đ ực ện ép án ạngMult và mô un th hi ph cđ ực ện ép ộng
hai to hán ạngAdder.
Hai mô un đ Mult và Adder sau khi được ập c nh t mật ừ áy chủ ập c nh s ật ẽ được ư l u vào b nh RAM trên thi b . Chúng s s dộ ớ ết ị ẽ ử ụng chung m phân vùng c hình l ột ấu ại được
từng ph ên FPGA c ần tr ủa người dùng. Trình qu lý c nh tản ập ật ừng ph mần ở áy trạm ẽ s quy ết địnhchọn và cho ph mô un ch n ng n c n v h ép đ ức ă ào ần ạp ào ệthống và đểthực ện hi nhiệm ụ ủa v c mình. N không c s dếu ần ử ụng đến, c mô un n có ác đ ày thể được giải phóng bằng cách c hình lên phân vùng m mô un ấu đó ột đ Blank.
Mô un đ Blank là m mô un trột đ ắng không th ựchiện ất ứ b c chức ă n ng n . Vì vào ậy nó ho àn toàn không tiêu th i n ng, i n s có ích trong vi ụ đ ện ă đ ều ày ẽ ệctiết ệm ăng lượng ủa ki n c h ệthống.
4.2 K t qu ế ả và đánh giá
Để thể hiện tính linh hoạt và tính đa dạng trong thực hiện bảo mật bitstream như framework đã đề xuất, luận án này xây dựng các khối mã hóa và xác thực theo hai cách:
- Hoàn toàn bằng phần mềm
84
Việc mã hóa và xác thực bitstream là bắt buộc trong framework và giao thức an toàn cập nhật của luận án này cũng như trong các hệ thống bảo mật hiện đại. Vì vậy, tốc độ thực hiện của các bộ mã hóa và xác thực có yếu tố quyết định trong toàn bộ quá trình cập nhật hệ thống. Tùy thuộc vào t nguyên cài ủa từng thiết bị và nhu cầu thực t c ế ủa người dùng,
việc lựa chọn thực hiện bằng phần cứng phần mềm , hoặc kết hợpsẽ cho một kết quả thích hợp.
4.2.1. Giải pháp b ng ph n m m ằ ầ ề
Để thực hiện phần mềm, luận án này sử dụng các bộ giải mã AES-256, bộ xác thực
SHA-512, bộ giải mã RSA và bộ giải nén RLE được cung cấp từ nguồn [110 ] và [111]. Khi thực hiện các thuật toán này trên MicroBlaze, luận án này đã có một vài sửa đổi và tối ưu để phù hợp hệ thống của mình. Bảng 4.3 tóm tắt kết quả thực hiện bằng phần mềm của các thuật toán được xem xét trong hai tham số: kích thước bộ nhớ và thông lượng của từng thuật toán.
Có thể thấy rằng tốc độ thực hiện bằng phần mềm trên hệ thống của luận án này là
tương đương với việc thực hiện AES-128 và SHA-256 chạy trên MicroBlaze của FPGA
Virtex-II Pro [112]. Mặc dù việc thực hiện bằng phần mềm là chậm hơn so với việc thực hiện bằng phần cứng, nhưng nó không tiêu thụ thêm bất kỳ nguồn tài nguyên phần cứng nào của FPGA. Trong khi việc thực hiện bằng phần cứng chiếm xấp xỉ 31,5 tài nguyên % Slice của FPGA Spartan-6 LX45, xem Bảng 4.4 Con số 31,5% cho chúng ta thấy rằng, .
việc thực hiện bằng phần cứng các thuật toán mã hóa và xác thực đối với các hệ thống dựa trên FPGA chi phí thấp là rất lớn so với tổng số tài nguyên sẵn có của nó. Trong khi đó, chi
phí về bộ nhớ dùng cho các thuật toán này khi thực hiện bằng phần mềm là khá nhỏ so với kích thước của bộ nhớ flash và DDRAM có sẵn trong các hệ thống nhúng hiện nay. Với