3.2 Tối ưu hóa tài nguyên phần cứng
3.2.1.3. Phân tích và đánh giá kết quả
Sự linh động và tiết kiệm tài nguyên cho hệ thống có thể được giải thích như sau: - Bởi vì sau các bước thiết kế ban đầu, các mơ-đun từng phần có thể phát triển một
cách độc lập. Điều đó có nghĩa các bộ mã hóa AES và xác thực SHA có thể được phát triển, nâng cấp và tái sử dụng một cách linh động mỗi khi có yêu cầu mà khơng cần phải thiết kế lại tồn bộ hệ thống.
- Việc giải phóng các bộ mã hóa và xác thực khỏi v ng logic phần cứng khi không sử dụng sẽ làm cho hệ thống sử dụng tối ưu tài nguyên và giảm được năng lượng tiêu thụ hơn so với việc thiết kế các bộ mã hóa và xác thực này cố định trong phần cứng của FPGA. Như số liệu trong Bảng 3.1, ta thấy tài nguyên sử dụng cho AES- 256 và SHA-512 chiếm một phần đáng kể trong FPGA Spartan-6 của Xilinx. Việc giải phóng các phần tài nguyên này thực sự cần thiết và hữu ích.
Bảng 3.1 Sử dụng phần cứng của AES-256 và SHA-512
Lõi IP
Tài nguyên sử dụng
Registers LUTs Slice
AES-256 3.096 (5,67%) 3.751 (13,74%) 1.293 (18,95%)
SHA-512 2.246 (4,11%) 2.299 (8,42%) 848 (12,48%)
3.2.2. Tối ƣu vùng nhớ lƣu trữ
Từ số liệu cho trong Bảng 2.1 ở Chương 2. Ta thấy kích thước bitstream tăng dần theo các thế hệ FPGA. Kích thước này tiếp tục tăng nhanh trong các FPGA hiện đại và như vậy sẽ cần nhiều bộ nhớ hơn để lưu trữ các bitstream này.
64 Một trong những thách thức của việc sử dụng FPGA lớn là sự cần thiết phải lưu trữ dữ liệu cấu hình một cách đáng tin cậy, đặc biệt là đối với các FPGA sử dụng trong môi trường bức xạ khắc nghiệt. Bộ nhớ không bay hơi được sử dụng để lưu trữ các bitstream khởi tạo phải “cứng” với bức xạ (RAD-HARD). Vì bộ nhớ RAD-HARD thường có mật độ thấp hơn nhiều so với bộ nhớ thông thường, nên c ng với một dung lượng lưu trữ sẽ cần nhiều chip RAD-HARD hơn, dẫn đến tăng không gian của board. Hơn nữa, bộ nhớ RAD- HARD đắt hơn nhiều so với những bộ nhớ thông thường, kết quả chi phí hệ thống rất tốn kém chỉ để lưu trữ bitstream. Bởi vì các chi phí này, các nhà thiết kế hệ thống ln ưu tiên tìm giải pháp để giảm kích thước của bitstream càng nhiều càng tốt.
Nén bitstream là một công việc quan trọng trong thiết kế hệ thống cấu hình lại vì nó làm giảm kích thước bitstream để giảm yêu cầu về bộ nhớ lưu trữ. Nó cũng cải thiện băng thơng truyền tải trên mạng và do đó giảm được thời gian cập nhật hệ thống. Đặc biệt là trong các hệ thống cấu hình lại được từng phần.
Tỉ số nén thường được sử dụng để tính tốn hiệu quả của các kỹ thuật nén và được định nghĩa như sau:
CR CP OP
(3.1)
Trong đó CR (Compression Ratio) là tỉ số nén, CP (Compressed Program) kích thước
chương trình đã nén, OP (Original Program) kích thước chương trình gốc ban đầu. Như
vậy, thuật tốn nén tốt sẽ có tỉ số nén càng nhỏ.
Đã có một số nghiên cứu điều tra tính hiệu quả của nén bitstream FPGA. Andreas Dandalis và K Prasanna [95] đề xuất thuật toán nén bitstream dựa trên hệ thống nhúng. Họ đã đề xuất một kỹ thuật nén để giảm thiểu bộ nhớ u cầu để chứa thơng tin cấu hình của FPGA và có hiệu năng giải nén cao. Kỹ thuật này dựa trên kỹ thuật nén từ điển và được bắt nguồn từ thuật toán nén LZW. Hạn chế của thuật toán là cần một phần cứng giải nén đắt tiền. Seong và cộng sự [97] đề xuất một kỹ thuật nén sử dụng các mặt nạ bits (bitmask). Kỹ thuật này dung hòa được cả tỉ số nén và hiệu quả khi giải nén. Đây là kỹ thuật cải tiến của kỹ thuật nén từ điển. Kỹ thuật này được thiết kế để giảm kích thước của từ điển.
Ta thấy, tất cả những kỹ thuật nén trên yêu cầu mạch bổ sung để thực hiện việc giải nén. Phần cứng này cần không gian board bổ sung, làm tăng kích thước của thiết kế hệ thống. Căn cứ vào tính chất của bitstream và với framework như đã đề xuất và phân tích ở Chương 2, luận án này đề xuất và xây dựng thuật toán nén RLE (Run-Length Encoding) [98],[99] cho hệ thống của mình. Đây là thuật tốn nén khơng tổn hao rất ph hợp cho ứng dụng nén bitstream.
Kỹ thuật nén RLE sẽ loại bỏ các các ký tự lặp lại liên tiếp. Các ký tự lặp lại này được gọi là “run”, một từ mã hóa điển hình của kỹ thuật nén RLE bao gồm có hai bytes. Byte
65 đầu tiên thể hiện số lượng các ký tự “run” và được gọi là “run count”. Byte thứ hai biểu diễn ký tự được lặp lại, giá trị của ký tự này nằm trong khoảng từ 0 đến 255, và nó được gọi là “run value”.
Ví dụ: Với một chuỗi sau gồm 15 ký tự “AAAAAAAAAAAAAAA” thì cần đến 15 bytes bộ nhớ để lưu trữ. Nhưng khi nén với RLE thì sẽ được “15A” và bộ nhớ yêu cầu chỉ là 2 bytes. Giá trị “15A” được gọi là một gói RLE (RLE packet).
Như vậy, nén RLE là hiệu quả với các tập tin có chứa rất nhiều dữ liệu lặp đi lặp lại như các tin văn bản, các hình ảnh có chứa v ng màu trắng hoặc đen lớn. Bitstream FPGA cũng có thể cho một tỷ lệ nén tốt đặc biệt là các là bitstream của một hệ thống thiết kế không đầy đủ.
3.2.2.1. Xây dựng thuật toán nén RLE trên máy chủ cập nhật
Thuật tốn chương trình nén chạy trên máy tính chạy trên máy chủ cập nhật được thể hiện như lưu đồ sau. Dữ liệu đầu vào là file bitstream và đầu ra là file *.bit đã nén. Như đã được trình trong framework ở Chương 2, tất cả bitstream trong máy chủ cập nhật đều được nén và lưu trữ trong kho dữ liệu của mình. Chương trình nén này được xây dựng bằng phần mềm Visual C++.
66
3.2.2.2. Xây dựng thuật toán giải nén RLE trên hệ thống nhúng
Thuật toán giải nén là thuật tốn ngược lại thuật nén như đã mơ tả ở trên và được thực hiện thành cơng trên hệ thống nhúng cấu hình lại được từng phần dựa trên FPGA. Luận án này thực hiện đánh giá giải nén các bitstream có kích thước khác nhau, rồi tính thời gian giải nén. Kết quả đạt được như Bảng 3.2 sau:
Bảng 3.2 Kết quả giải nén bitstream trên hệ nhúng dựa trên FPGA
Dung lượng
bitstream nén (KB) Thời gian giải nén (s) Tốc độ giải nén (KB/s) 44 3.125 14.08 77 8.981 8.57 84 11.232 7.48 319 44.934 7.10 450 119.587 3.76
Bảng 3.2 thể hiện mối quan hệ giữa thời gian giải nén và kích thước của các bitstream đã nén. Chúng ta có thể thấy rằng với những bitstream có kích thước lớn thì tốc độ giải nén giảm. Lý do ở đây là vì những file bitstream kích thước lớn thường đạt được tỉ lệ nén thấp. Điều này hoàn toàn ph hợp với lý thuyết về các thuật toán nén đã nêu ở trên, “tỉ lệ nén tốt thì thời gian giải nén sẽ tăng hay tốc độ giải nén sẽ chậm”.
3.2.2.3. Đánh giá kết quả
Kết quả khảo sát về sự phụ thuộc của tỉ số nén CR vào dung lượng file bitstream đầu vào như Bảng 3.3.
Bảng 3.3 Kết quả nén bitstream trên máy tính
Dung lượng bitstream gốc (KB) Dung lượng bitstream nén (KB) Tỉ lệ nén (%) 72 44 61.11 278 77 27.70 469 84 17.91 1450 319 22.00 9017 450 4.99
67 Như vậy theo số liệu trong Bảng 3.3, ta có thể thấy rằng tỉ số nén có xu hướng giảm khi mà kích thước của file bitstream đầu vào tăng. Điều này là hồn tồn có lợi bởi lẽ khi đó dung lượng của bộ nhớ lưu trữ sẽ giảm đi đáng kể. Tỉ số nén giảm có thể được giải thích như sau: khi kích thước file bitstream tăng thì số lượng các bit 0 và 1 lặp lại liên tiếp lớn hơn nhiều, đặc biệt là đối với các thiết kế không sử dụng hết tài nguyên của FPGA.
Thuật toán nén RLE là rất dễ thực hiện và khơng địi hỏi nhiều tốc độ tính tốn của CPU. Hơn nữa, nén RLE là thuật tốn nén khơng tổn hao. Nó đảm bảo tính tồn vẹn của dữ liệu sau quá trình nén và giải nén. Đây là một trong những yêu cầu của nén bitstream. Vì vậy, đối với các hệ thống nhúng cấu hình lại được từng phần dựa trên FPGA, nén RLE là rất ph hợp để thực hiện và thực hiện một cách dễ dàng.
Về bảo mật, việc thêm thuật toán nén bitstream vào trong hệ thống mang lại nhiều lợi ích thiết thực như: giảm dung lượng bộ nhớ lưu trữ và băng thông truyền tải, giảm được thời gian mã hóa và giải mã, dẫn đến giảm được năng lượng tiêu thụ của hệ thống. Điều này đồng nghĩa với việc, c ng với một chi phí như khi thực hiện bảo mật với bitstream không nén, việc thực hiện bảo mật với bitstream nén có thể đạt được mức độ bảo mật cao hơn bằng cách sử dụng thuật toán mã phức tạp hơn hay độ dài khóa dài hơn. Ví dụ, thay vì sử dụng AES-128, ta sử dụng AES-256.
3.3 Nâng cao hiệu năng của hệ thống
Hệ thống bảo mật với mục đích là bảo vệ tính bí mật, tính tồn vẹn của dữ liệu đồng nghĩa với việc bảo vệ quyền sở hữu tài sản trí tuệ cũng như bảo đảm sự an toàn của hệ thống. Để đáp ứng yêu cầu về bảo mật, các nhà thiết kế cần phải thêm một số chức năng đặc biệt vào hệ thống. Tuy nhiên, việc thực hiện bảo mật này trong đa số trường hợp phải đánh đổi với việc giảm hiệu năng, tăng tài nguyên và tăng chi phí của hệ thống. Trong phần này luận án trình bày một phương pháp nâng cao hiệu năng của hệ thống nhúng cấu hình lại được từng phần dựa trên FPGA. Hệ thống được miêu tả ở đây có khả năng cập nhật từ xa thông qua Internet hoặc từ các thiết bị lưu trữ bên ngoài như một thẻ nhớ Compact Flash (CF).
Như đã trình bày trong mục 3.2, thiết kế các bộ giải mã AES-256 và bộ xác thực SHA- 512 trong phần cứng cấu hình lại được từng phần để sử dụng tối ưu tài nguyên hệ thống trong khi vẫn đáp ứng được yêu cầu về bảo mật và hiệu năng thực hiện. Sự đóng góp chính của mục này là việc áp dụng hệ thống kiến trúc BUS AXI4 tốc độ cao cho phép đọc ghi bitstream giữa các khối và xây dựng bộ AXI Master giúp tăng tốc độ thực hiện các thuật tốn mật mã và cấu hình lại hệ thống.
68
3.3.1. Xây dựng hệ thống
Để nâng cao hiệu năng của hệ thống, luận án này thiết kế và bố trí các khối chức năng như miêu tả trong Hình 3.4 dưới đây. Trong đó các khối mã hóa và xác thực được thực hiện trong khu vực cấu hình lại được từng phần và giao tiếp với DDRAM thông qua hai FIFO được quản lý bởi khối AXI Master.
Hình 3.4 Sơ đồ khối của hệ thống
3.3.1.1. Mô tả hoạt động của hệ thống
Khi nhận được bản tin thơng báo cập nhập từ phía máy chủ, Microblaze sẽ thực hiện các công việc cần thiết cho quá trình thiết lập giao thức truyền nhận và cập nhật an toàn bitstream.
Nhờ khối DMA, luồng dữ liệu sẽ đi trực tiếp từ khối Ethernet đến DDRAM thông qua hệ thống bus AXI4 tốc độ cao, điều này có ý nghĩa rất lớn trong việc tăng tốc độ hoạt động của hệ thống do giảm được thời gian nhận bistream đồng thời giải phóng cho vi xử lý Microblaze có thể thực hiện các chức năng khác. Lúc này MicroBlaze đóng vai trị của bộ điều khiển và thiết lập các tham số cần thiết trong quá trình truyền nhận dữ liệu.
Khi quá trình nhận bitstream kết thúc, MicroBlaze thiết lập các tham số cần thiết cho các khối SHA-512 và AES-256 bắt đầu hoạt động. Các dữ liệu vào các khối này được lấy từ DDRAM, thực hiện giải mã và xác thực rồi lưu lại vào trong DDRAM dưới sự điều khiển của AXI Master.
MicroBlaze sẽ so sánh mã xác thực được thực hiện bởi SHA-512 và mã xác thực nhận được từ máy chủ. Nếu kết quả là như nhau, MicroBlaze sẽ ghi tín hiệu chipSelect cho phép ICAP hoạt động, và quá trình cấu hình lại sẽ bắt đầu.
69
3.3.1.2. Xây dựng các khối chức năng
Bộ xử lý lõi mềm MicroBlaze điều khiển và kiểm soát các khối trong hệ thống và
giao tiếp với máy chủ cập nhật thông qua cổng giao tiếp Ethernet.
MicroBlaze [100] là một bộ vi xử lý lõi mềm 32bit loại RISC (Reduced Instructions Set Computer - Máy tính với tập lệnh đơn giản hóa). Kiến trúc bộ vi xử lý bao gồm 32
thanh ghi 32-bit. Vì nó là một bộ xử lý lõi mềm nên các đơn vị chức năng tích hợp vào kiến trúc bộ vi xử lý có thể được t y chỉnh để ph hợp với mục tiêu ứng dụng. Luận án này thiết lập MicroBlaze vào hệ thống bằng cách sử dụng công cụ phát triển nhúng của Xilinx EDK (Embedded Development Kit) phiên bản 14.1.
Khối Ethernet nhận và lưu dữ liệu từ máy chủ cập nhật vào DDRAM.
Thành phần chính của khối trao đổi dữ liệu là một lõi IP AXI Ethernet [101], được hỗ trợ bởi Xilinx. Lõi này hoạt động ở ba chế độ 10/100/1000 Mb/s, và cung cấp một giao diện điều khiển các thanh ghi nội bộ bằng cách sử dụng một giao diện AXI4-Lite 32bit. Giao diện AXI4-Lite này hỗ trợ đọc và ghi dữ liệu nhịp đơn.
Khối AXI-DMA điều khiển truy nhập bộ nhớ DDRAM một cách trực tiếp.
AXI-DMA [8] là một lõi IP mềm của Xilinx được tích hợp trong các bộ phát triển
phần mềm nhúng. Nó cung cấp một sự truy nhập băng thơng cao giữa bộ nhớ với các thiết bị ngoại vi sử dụng kiểu Bus AXI4-Stream. AXI-DMA giúp giảm tải các luồng dữ liệu đi qua CPU. Việc thiết lập ban đầu, điều khiển, đọc trạng thái lõi để quản lý được thực hiện dựa vào các thanh ghi qua kiểu bus AXI-Lite ph hợp cho các ứng dụng phát triển dựa trên vi xử lý Microblaze.
Khối SHA-512 thực hiện xác thực các tập tin bitstream từng phần.
Khối SHA-512 được xây dựng theo mơ hình FSMD [102] với 2 khối con là khối SHA_512_Contr đóng vai trị là khối điều khiển và khối SHA_512_Func là khối đường dữ liệu. SHA_512_Contr làm nhiệm vụ xử lý các tín hiệu trạng thái (status signals) nhận được từ khối SHA_512_Func đồng thời điều khiển quá trình giao tiếp với DDRAM qua FIFO.
Khối AES-256 thực hiện giải mã các tập tin bitstream từng phần.
Khối AES-256 cũng được xây dựng theo mơ hình FSMD, nó bao gồm hai khối con là khối AES_256_Contr đóng vai trị làm mạch điều khiển trạng thái và khối AES_256_Func đóng vai trị là khối đường dữ liệu. Khối AES_256_Contr nhận các tín hiệu trạng thái làm đầu vào sau đó quyết định để đưa ra các tín hiệu điều khiển cho khối AES_256_Func chính là khối thực hiện đường dữ liệu, đồng thời nó cũng đóng vai trị điều khiển việc trao đổi dữ liệu với FIFO thông qua các chân đọc và ghi FIFO.
Khối AXI-Master kiểm soát việc truyền nhận dữ liệu giữa DDRAM và các khối
70 Khối AXI-Master được xây dựng với hai bộ đệm FIFO để tăng tốc độ trao đổi dữ liệu giữa DDRAM và các khối khối AES-256, SHA-512, và ICAP. Cách thực hiện của nó như sau:
Khối AXI-Master [103] được thêm vào hệ thống bằng cách sử dụng công cụ của hãng cung cấp FPGA (trong luận án này tác giả sử dụng bộ công cụ ISE của Xilinx). Khối này cung cấp một giao diện hai chiều giữa lõi IP của người d ng và giao diện AXI4 tiêu chuẩn. Nó cũng cung cấp một giao diện truyền dữ liệu giữa các khối chức năng và DDRAM thơng qua một FIFO.
Tuy nhiên, rất khó để kiểm sốt q trình đọc và ghi dữ liệu của cả phần cứng và phần mềm trong một FIFO duy nhất. Giải pháp của luận án này sử dụng hai bộ FIFO, trong đó mỗi FIFO đảm nhận một chức năng khác nhau và được điều khiển bởi hai tín hiệu đọc/ghi riêng lẽ: FIFO thứ nhất nhận dữ liệu theo chiều từ DDRAM xuống các mô-