《電子技術(shù)應(yīng)用》
您所在的位置:首頁(yè) > 可編程邏輯 > 解決方案 > Xilinx Zynq-7000如何保護(hù)客戶的知識(shí)產(chǎn)權(quán)

Xilinx Zynq-7000如何保護(hù)客戶的知識(shí)產(chǎn)權(quán)

2013-07-11

摘要:本文描述了Xilinx Zynq-7000如何通過芯片內(nèi)嵌的AES-256解密引擎和HMAC (Keyed-hashed message authentication code)認(rèn)證引擎來保護(hù)客戶的知識(shí)產(chǎn)權(quán),,防止拷貝,、抄板等損害客戶知識(shí)產(chǎn)權(quán)事件的發(fā)生。

 

基本原理:

Xilinx Zynq-7000內(nèi)含AES-256解密引擎和HMAC認(rèn)證引擎,,并支持Secure Boot啟動(dòng)方式,,用于保護(hù)客戶的設(shè)計(jì)(包括軟件的二進(jìn)制可執(zhí)行代碼,數(shù)據(jù)以及FPGA的bitstream編程文件)不被竊取和使用,。

 

客戶在完成設(shè)計(jì)后,,可以使用Xilinx ISE軟件為設(shè)計(jì)添加用于認(rèn)證的256-bit的校驗(yàn)碼,然后再用256-bit密鑰AES算法進(jìn)行加密,。

 

256-bit AES密鑰由客戶生成,,保存在FPGA內(nèi)部,不能被外部讀取,。

 

啟動(dòng)時(shí),,Zynq-7000首先執(zhí)行芯片內(nèi)部ROM中的代碼。BOOTROM代碼首先通過AES-256解密引擎對(duì)對(duì)被保護(hù)的設(shè)計(jì)進(jìn)行解密,,然后通過HMAC引擎認(rèn)證完整性,,只有通過認(rèn)證的設(shè)計(jì)才能被加載并執(zhí)行。

 

對(duì)于試圖通過“抄板”竊取知識(shí)產(chǎn)權(quán)的行為,,因?yàn)槿鄙俸虵LASH內(nèi)容相對(duì)應(yīng)的AES密鑰,,F(xiàn)LASH中內(nèi)容將不會(huì)被加載并執(zhí)行。256-bit AES密鑰對(duì)應(yīng)的組合達(dá)到1.15×1077種,可以充分保證客戶知識(shí)產(chǎn)權(quán)的安全,。

 

Xilinx Zynq-7000內(nèi)含的硬件安全引擎的特點(diǎn):

 

1. HMAC硬件認(rèn)證引擎

  • 在內(nèi)層保護(hù)客戶設(shè)計(jì)不被非法篡改,,保證客戶設(shè)計(jì)的完整性。
  • 使用美國(guó)國(guó)家標(biāo)準(zhǔn)技術(shù)研究所的SHA256 FIPS PUB-182-2算法和HMAC FIPS PUB-198 算法,,這些算法由美國(guó)國(guó)家標(biāo)準(zhǔn)技術(shù)研究所(National Institute of Standards and Technology, NIST)提供

http://csrc.nist.gov/publications/fips/fips180-2/fips180-2withchangenotice.pdf

http://csrc.nist.gov/publications/fips/fips198-1/FIPS-198-1_final.pdf

  • HMAC簽名保存在Boot Image中,。

 

2. AES-256硬件解密引擎

  • 在外層保護(hù)客戶設(shè)計(jì)不被反向工程,不被分析破解,,不被拷貝,。
  • 密鑰保存在片上的eFuse或者BBRAM(battery-backed RAM),不能被JTAG或者FPGA邏輯讀取,。eFuse僅支持一次可編程,,掉電內(nèi)容不丟失。BBRAM可支持反復(fù)編程,,但是掉電內(nèi)容丟失,,因此需要外接電池。
  • AES算法是美國(guó)國(guó)家標(biāo)準(zhǔn)技術(shù)研究所(National Institute of Standards and Technology, NIST)和美國(guó)商務(wù)部的正式標(biāo)準(zhǔn)(http://csrc.nist.gov/publications/fips/fips197/fips-197.pdf ),。Xilinx支持最高安全等級(jí)的256-bit密鑰加解密方式,。

 

通過Xilinx ISE保護(hù)客戶設(shè)計(jì)

Xilinx SDK用于生成Boot Image的工具支持SHA-256算法校驗(yàn)碼生成和AES-256算法加密:

1. 啟動(dòng)Xilinx SDK

2. 點(diǎn)擊Xilinx Tools->Create Boot Image,SDK彈出如下窗口

 

1.png

 

3. 在Tab Basic里面配置好輸入的文件位置和生成的image的位置后,,在Tab Advanced里面可以配置是否加密,、密鑰的存放位置以及密鑰等內(nèi)容:

 

2.png

 

在生成的Boot Image里面,偏移量0x28位置的內(nèi)容決定了Boot Image是否加密:

 

Boot Image Header 0x028位置的內(nèi)容

描述

0xA5C3C5A3

密鑰保存在eFuse中

0x3A5C3C5A

密鑰保存在BBRAM中

其他值

Boot Image未加密

 

Boot Image的文件頭和分區(qū)頭不參與加密,,被加密的只有各個(gè)分區(qū)的數(shù)據(jù),。Boot Image的格式如下圖所示:

 

3.png

 

注意:

如果選擇加密Boot Image,將對(duì)所有分區(qū)(Partition)的數(shù)據(jù)進(jìn)行加密,。

Zynq-7000的啟動(dòng)過程

Zynq-7000上電后首先執(zhí)行芯片內(nèi)部BootRom中的代碼。BootRom中的代碼由Xilinx開發(fā)并保證安全,;代碼保存在只讀存儲(chǔ)器中,,用戶無法修改。

 

BootRom支持三種啟動(dòng)模式:

  • Secure, encrypted image, master mode
  • Non-secure master mode
  • Non-secure slave mode via JTAG

 

BootRom通過Boot Image文件頭0x28位置的內(nèi)容判斷Boot Image是否加密,,代碼執(zhí)行流程如下:

 

4.png

 

注意:

在Secure Boot Mode下,,Boot Rom不會(huì)使能JTAG接口,這時(shí)無法通過JTAG讀取Zynq-7000內(nèi)部的信息,,無論是軟件二進(jìn)制可執(zhí)行代碼,,AES密鑰,還是FPGA的配置信息,。

 

Boot Image只有在認(rèn)證了FSBL(First Stage Boot Loader)的完整性后,,才會(huì)認(rèn)為它是安全的,并將控制權(quán)移交給FSBL代碼,。 FSBL需要加載的Second Stage Boot Loader, 操作系統(tǒng)和應(yīng)用可以是明文的,,也可以是加密的,。 一般不建議客戶使用明文的PS (Processing System) Image。如果必須要這樣做,,需要充分考慮系統(tǒng)級(jí)別的安全性,。如果這些內(nèi)容是加密的,系統(tǒng)不允許切換AES密鑰,。

 

Secure Boot Mode僅限于NOR, NAND, SDIO, 和Quad-SPI flash,,不支持JTAG或任何其他對(duì)外接口。

 

密鑰的管理

256-bit AES密鑰可以由用戶指定,,用Xilinx BitGen工具生成加密的bitstream,,也可以由工具生成隨機(jī)密鑰。

 

AES密鑰由Xilinx iMPACT軟件通過JTAG寫入Zynq-7000芯片中,。

 

寫入AES密鑰時(shí),,所有FPGA中的存儲(chǔ)器(密鑰存儲(chǔ)器和配置存儲(chǔ)器)都會(huì)被清空。密鑰寫入后,,沒有任何辦法可以重新讀出寫入的密鑰,,也不可能在不清空全部存儲(chǔ)器的情況下改寫密鑰。

 

當(dāng)采用BBRAM保存密鑰時(shí),,需要在VCCBATT上外接電池,,確保系統(tǒng)掉電的情況下BBRAM中的內(nèi)容不會(huì)丟失。系統(tǒng)正常工作時(shí),,由VCCAUX對(duì)BBRAM供電,,而不會(huì)使用VCCBATT上的電池供電。當(dāng)系統(tǒng)掉電時(shí),,VCCBATT需要的電流很?。╪A級(jí)別),一塊手表紐扣電池可以使用很長(zhǎng)時(shí)間,。

其他Zynq-7000的安全要點(diǎn)

除了上面的內(nèi)容,,Xilinx還充分考慮了其他各種復(fù)雜情況下的如何保證用戶知識(shí)產(chǎn)權(quán)的安全。

 

BootROM檢測(cè)到Boot Image未加密后,,進(jìn)入非安全狀態(tài),。AES解密引擎和HMAC認(rèn)證引擎被關(guān)閉,只有上電復(fù)位才能使能它們,。沒有任何機(jī)制可以從非安全狀態(tài)轉(zhuǎn)換到安全狀態(tài)(除了上電復(fù)位),。如果在加載未加密數(shù)據(jù)后試圖加載加密數(shù)據(jù),將導(dǎo)致系統(tǒng)鎖定,,只有重新上電后才能復(fù)位,。

 

當(dāng)PS或者PL檢測(cè)到以下非法狀態(tài)時(shí),將清空OCM,系統(tǒng)緩存,,復(fù)位PL,,然后PS進(jìn)入鎖定狀態(tài)。只有重新上電復(fù)位才能清楚系統(tǒng)鎖定狀態(tài):

  • Non-secure boot and eFuse secure boot set
  • PS DAP enabled and JTAG chain disable eFuse set
  • SEU error tracking has been enabled in the PS and the PL reports an SEU error
  • A discrepancy in the redundant AES enable logic
  • Software sets the FORCE_RST bit of the Device Configuration Control register

 

Xilinx Zynq-7000 BootRom支持fall-back功能:在當(dāng)前的Boot Image不可用的情況下,,會(huì)搜索并運(yùn)行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時(shí),,可以配置DISABLE_JTAG選項(xiàng)(see UG628, Command Line Tools User Guide for more information)

,,禁止通過JTAG訪問PL。

 

 

小結(jié)

通過以上的分析,,我們可以看到Xilinx Zynq-7000提供了充分的安全措施,,來保證客戶的知識(shí)產(chǎn)權(quán)和設(shè)計(jì)的安全性,是客戶設(shè)計(jì)的重要選擇,。

 

 

參考文獻(xiàn):

UG585, Zynq-7000 EPP Technical Reference Manual

UG470, 7 Series FPGAs Configuration User Guide

 

本站內(nèi)容除特別聲明的原創(chuàng)文章之外,,轉(zhuǎn)載內(nèi)容只為傳遞更多信息,并不代表本網(wǎng)站贊同其觀點(diǎn),。轉(zhuǎn)載的所有的文章,、圖片、音/視頻文件等資料的版權(quán)歸版權(quán)所有權(quán)人所有,。本站采用的非本站原創(chuàng)文章及圖片等內(nèi)容無法一一聯(lián)系確認(rèn)版權(quán)者,。如涉及作品內(nèi)容、版權(quán)和其它問題,,請(qǐng)及時(shí)通過電子郵件或電話通知我們,以便迅速采取適當(dāng)措施,,避免給雙方造成不必要的經(jīng)濟(jì)損失,。聯(lián)系電話:010-82306118;郵箱:[email protected],。