摘要:本文描述了Xilinx Zynq-7000如何通過芯片內(nèi)嵌的AES-256解密引擎和HMAC (Keyed-hashed message authentication code)認(rèn)證引擎來保護(hù)客戶的知識產(chǎn)權(quán),防止拷貝、抄板等損害客戶知識產(chǎn)權(quán)事件的發(fā)生。
基本原理:
Xilinx Zynq-7000內(nèi)含AES-256解密引擎和HMAC認(rèn)證引擎,并支持Secure Boot啟動方式,用于保護(hù)客戶的設(shè)計(包括軟件的二進(jìn)制可執(zhí)行代碼,數(shù)據(jù)以及FPGA的bitstrea
客戶在完成設(shè)計后,可以使用Xilinx ISE軟件為設(shè)計添加用于認(rèn)證的256-bit的校驗碼,然后再用256-bit密鑰AES算法進(jìn)行加密。
256-bit AES密鑰由客戶生成,保存在FPGA內(nèi)部,不能被外部讀取。
啟動時,Zynq-7000首先執(zhí)行芯片內(nèi)部ROM中的代碼。BOOTROM代碼首先通過AES-256解
對于試圖通過“抄板”竊取知識產(chǎn)權(quán)的行為,因為缺少和FLASH內(nèi)容相對應(yīng)的AES密鑰,F(xiàn)LASH中內(nèi)容
Xilinx Zynq-7000內(nèi)含的硬件安全引擎的特點:
1. HMAC硬件認(rèn)證引擎
http://csrc.nist.gov/publications/fips/fips180-2/f
http://csrc.nist.gov/publications/fips/fips198-1/F
2. AES-256硬件解密引擎
Xilinx SDK用于生成Boot Image的工具支持SHA-256算法校驗碼生成和AES-256算法加密:
1. 啟動Xilinx SDK
2. 點擊Xilinx Tools->Create Boot Image,SDK彈出如下窗口
3. 在Tab Basic里面配置好輸入的文件位置和生成的image的位置后,在Tab Advanced里面可以配置是否加密、密鑰的存放位置以及密鑰等內(nèi)容:
在生成的Boot Image里面,偏移量0x28位置的內(nèi)容決定了Boot Image是否加密:
Boot Image Header 0x028位置的內(nèi)容
描述
0xA5C3C5A3
密鑰保存在eFuse中
0x3A5C3C5A
密鑰保存在BBRAM中
其他值
Boot Image未加密
Boot Image的文件頭和分區(qū)頭不參與加密,被加密的只有各個分區(qū)的數(shù)據(jù)。Boot Image的格式如下圖所示:
注意:
如果選擇加密Boot Image,將對所有分區(qū)(Partition)的數(shù)據(jù)進(jìn)行加密。
Zynq-7000上電后首先執(zhí)行芯片內(nèi)部BootRom中的代碼。BootRom中的代碼由Xilinx
BootRom支持三種啟動模式:
BootRom通過Boot Image文件頭0x28位置的內(nèi)容判斷Boot Image是否加密,代碼執(zhí)行流程如下:
注意:
在Secure Boot Mode下,Boot Rom不會使能JTAG接口,這時無法通過JTAG讀取Zynq-7000內(nèi)部的信息,無論是軟件二進(jìn)制可
Boot Image只有在認(rèn)證了FSBL(First Stage Boot Loader)的完整性后,才會認(rèn)為它是安全的,并將控制權(quán)移交給FSBL代碼。 FSBL需要加載的Second Stage Boot Loader, 操作系統(tǒng)和應(yīng)用可以是明文的,也可以是加密的。 一般不建議客戶使用明文的PS (Processing System) Image。如果必須要這樣做,需要充分考慮系統(tǒng)級別的安全性。如果這些內(nèi)容是加密的,系統(tǒng)不允許切換AE
Secure Boot Mode僅限于NOR, NAND, SDIO, 和Quad-SPI flash,不支持JTAG或任何其他對外接口。
256-bit AES密鑰可以由用戶指定,用Xilinx BitGen工具生成加密的bitstream,也可以由工具生成隨機(jī)密鑰。
AES密鑰由Xilinx iMPACT軟件通過JTAG寫入Zynq-7000芯片中。
寫入AES密鑰時,所有FPGA中的存儲器(密鑰存儲器和配置存儲器)都會被清空。密鑰寫入后,沒有任何辦
當(dāng)采用BBRAM保存密鑰時,需要在VCCBATT上外接電池,確保系統(tǒng)掉電的情況下BBRAM中的內(nèi)容不會丟失。系統(tǒng)正常工作時,由VCCAUX對BBRAM供電,而不會使用VCCBATT上的電池供電。當(dāng)系統(tǒng)掉電時,VCCBATT需要的電流很?。╪A級別),一塊手表紐扣電池可以使用很長時間。
除了上面的內(nèi)容,Xilinx還充分考慮了其他各種復(fù)雜情況下的如何保證用戶知識產(chǎn)權(quán)的安全。
BootROM檢測到Boot Image未加密后,進(jìn)入非安全狀態(tài)。AES解密引擎和HMAC認(rèn)證引擎被關(guān)閉,只有上電復(fù)位才能使能它們
當(dāng)PS或者PL檢測到以下非法狀態(tài)時,將清空OCM,系統(tǒng)緩存,復(fù)位PL,然后PS進(jìn)入鎖定狀態(tài)。只有重新
Xilinx Zynq-7000 BootRom支持fall-back功能:在當(dāng)前的Boot Image不可用的情況下,會搜索并運行g(shù)olden image。在這種情況下,系統(tǒng)要求golden image的加密狀態(tài)和FSBL的加密狀態(tài)是一致的,即:如果FSBL是加密的,golden image必須也是加密的;如果FSBL未加密,golden image必須也是不加密的。
在secure boot模式下,PS DAP和PL TAP控制器被關(guān)閉,這樣排除了通過JTAG訪問芯片內(nèi)部的可能。
PS的DAP控制器可以通過eFuse的JTAG CHAIN DISABLE永久關(guān)閉。在生成PL bitstream時,可以配置DISABLE_JTAG選項(see UG628, Command Line Tools User Guide for more information)
,禁止通過JTAG訪問PL。
通過以上的分析,我們可以看到Xilinx Zynq-7000提供了充分的安全措施,來保證客戶的知識產(chǎn)權(quán)和設(shè)計的安全性,是客戶設(shè)計的重要選擇。
參考文獻(xiàn):
UG585, Zynq-7000 EPP Technical Reference Manual
UG470, 7 Series FPGAs Configuration User Guide
通過Xilinx ISE保護(hù)客戶設(shè)計
Zynq-7000的啟動過程
密鑰的管理
其他Zynq-7000的安全要點
小結(jié)