趙長(zhǎng)青,盧起斌,侯亞輝
(中國(guó)傳媒大學(xué)廣播電視數(shù)字化教育部工程研究中心,北京 100024)
自現(xiàn)場(chǎng)可編程門陣列(FPGA)問(wèn)世以來(lái),其生產(chǎn)工藝已經(jīng)達(dá)到28 nm,與專用集成電路ASIC(Application Specific Integrated Circuit)昂貴的設(shè)計(jì)費(fèi)用相比,F(xiàn)PGA 以其成本優(yōu)勢(shì)與編程靈活性促進(jìn)了其在電子產(chǎn)品中日益廣泛的應(yīng)用[1]。然而,基于SRAM 技術(shù)的FPGA 在系統(tǒng)斷電后其內(nèi)部配置數(shù)據(jù)就會(huì)消失,所以系統(tǒng)上電時(shí)必須給FPGA 重新加載配置文件以讓系統(tǒng)正常運(yùn)行。在配置過(guò)程中,可以利用一定的電路對(duì)配置信號(hào)引腳采樣獲取設(shè)計(jì)者的配置信息,從而達(dá)到克隆設(shè)計(jì)的目的[2],因此,對(duì)重要的FPGA 設(shè)計(jì)采取必要的加密認(rèn)證技術(shù)成為設(shè)計(jì)者必須解決的問(wèn)題。
為防止非法機(jī)構(gòu)對(duì)FPGA 配置進(jìn)行拷貝和克隆,保護(hù)設(shè)計(jì)者的知識(shí)產(chǎn)權(quán),Xilinx 公司Virtex 系列和Altera 公司Stratix 系列這類高端FPGA 支持對(duì)配置數(shù)據(jù)比特流加密操作。只有當(dāng)FPGA 中含有相同的密鑰時(shí),這些數(shù)據(jù)流才可以被解密而運(yùn)行。但是這種加密方法對(duì)低成本的FPGA 應(yīng)用不適用。因此,這里采用了將FPGA和外置安全存儲(chǔ)器結(jié)合,利用敵我識(shí)別IFF(Identification Friend or Foe)技術(shù)保證其設(shè)計(jì)安全的一個(gè)解決方案[3]。這種方法對(duì)所有FPGA 系列都適用,成本低廉。本文在Altera 公司的EP3C16F484C6 低端FPGA 中進(jìn)行編程和調(diào)試,驗(yàn)證了這種方法的可行性,防止了克隆設(shè)計(jì)。
真正安全的認(rèn)證系統(tǒng)必須能夠證明它的發(fā)起者是可信的?;赟HA-1 算法的安全存儲(chǔ)器利用其算法不可逆特性將其加入到需要受保護(hù)的電子系統(tǒng)中,可以起到保護(hù)電子產(chǎn)品的作用[4]。本設(shè)計(jì)采用DS2432 安全存儲(chǔ)器構(gòu)建了一種可靠的安全認(rèn)證系統(tǒng),對(duì)單總線技術(shù)、偽隨機(jī)數(shù)以及安全散列算法(SHA-1)進(jìn)行了分析。整個(gè)認(rèn)證系統(tǒng)通過(guò)1-Wire 總線完成FPGA 與DS2432 的通信,同時(shí)將DS2432 的SHA-1 引擎計(jì)算的信息認(rèn)證碼(MAC)與FPGA 內(nèi)部IFF模塊計(jì)算的MAC結(jié)果進(jìn)行匹配以完成可信認(rèn)證。
IFF(Identification Friend or Foe)為朋友或者敵人識(shí)別,圖1所示為IFF 認(rèn)證系統(tǒng)結(jié)構(gòu)圖。系統(tǒng)配置完FPGA 后不會(huì)立即啟動(dòng)用戶設(shè)計(jì)。IFF模塊利用與安全存儲(chǔ)器中SHA-1 引擎相同的輸入和密鑰計(jì)算MAC。當(dāng)MAC 結(jié)果匹配時(shí),輸出一個(gè)朋友(Friend),IFF模塊使能用戶設(shè)計(jì),否則輸出一個(gè)敵人(Foe),禁止用戶設(shè)計(jì)[5]。這一方案可以確??寺∑骷荒苷9ぷ鳎瑥亩Wo(hù)用戶設(shè)計(jì)。
圖1 IFF 認(rèn)證系統(tǒng)圖
IFF 認(rèn)證系統(tǒng)中DS2432 是由MAXIM 公司生產(chǎn)的實(shí)現(xiàn)低成本FPGA 安全認(rèn)證功能的加密芯片,符合ISO/IEC 110118-3 安全散列算法(SHA-1)的質(zhì)詢-響應(yīng)安全認(rèn)證機(jī)制。單個(gè)芯片內(nèi)集成了1 024 bit EEPROM(分為4 頁(yè),每頁(yè)256 bit)、64 bit 密鑰、64 bit 寄存器頁(yè)、64 bit 光刻ROM、64 bit 暫存器和512 bit SHA-1 引擎。DS2432 以1-Wire 協(xié)議串行傳送數(shù)據(jù),通信速率為16.3 kbit/s(標(biāo)準(zhǔn)模式)或142 kbit/s(高速模式),只需一根數(shù)據(jù)線和一根返回地線。每個(gè)DS2432 具有的由工廠刻入的64 bit ROM 注冊(cè)碼可以確保器件唯一識(shí)別和絕對(duì)可溯。DS2432 在向存儲(chǔ)器寫數(shù)據(jù)或下載新密鑰時(shí),數(shù)據(jù)首先被寫入暫存器,并可從暫存器里讀回以驗(yàn)證寫入數(shù)據(jù)的正確性[6]。
系統(tǒng)一上電,F(xiàn)PGA 完成配置后IFF 認(rèn)證設(shè)計(jì)會(huì)規(guī)律地產(chǎn)生一系列隨機(jī)質(zhì)詢碼發(fā)送給DS2432。然后FPGA 讀取來(lái)自DS2432 的160 bit 消息認(rèn)證碼(MAC),將其與FPGA 中IFF模塊計(jì)算的MAC 結(jié)果對(duì)比以判定是否使能用戶設(shè)計(jì)。
DS2432 是一個(gè)支持單總線的EEPROM 存儲(chǔ)器,為了保證通信數(shù)據(jù)的完整性,DS2432 具有嚴(yán)格要求的信號(hào)協(xié)議。該協(xié)議定義了4種類型的信號(hào):包括復(fù)位脈沖和應(yīng)答脈沖的復(fù)位信號(hào)、寫0、寫1和讀數(shù)據(jù)[7],并且發(fā)送的所有數(shù)據(jù)和命令都是字節(jié)的低位在前。除了應(yīng)答脈沖以外,所有其它命令都是主機(jī)發(fā)出。如果沒(méi)有明確設(shè)定為高速模式通信速率,DS2432 就以標(biāo)準(zhǔn)速率通信。
DS2432 單總線器件有著嚴(yán)格的單總線命令序列,如果出現(xiàn)序列混亂,則器件就不會(huì)響應(yīng)主機(jī),主要包括4個(gè)步驟[8]:(1)初始化 基于單總線的數(shù)據(jù)傳輸過(guò)程都是以初始化開始的,主機(jī)發(fā)送復(fù)位脈沖,從機(jī)發(fā)送響應(yīng)應(yīng)答脈沖。應(yīng)答脈沖使主機(jī)知道總線上有從機(jī)設(shè)備且準(zhǔn)備就緒;(2)ROM 命令 主機(jī)檢測(cè)到應(yīng)答脈沖后發(fā)送ROM 命令,這些命令都與從機(jī)設(shè)備的ROM 注冊(cè)碼有關(guān),當(dāng)總線上僅有單個(gè)從機(jī)設(shè)備時(shí)不需要尋址,主機(jī)在發(fā)出功能命令之前,必須發(fā)送合適的ROM 命令;(3)存儲(chǔ)器或SHA操作命令 主機(jī)發(fā)送功能命令驅(qū)動(dòng)從機(jī)設(shè)備進(jìn)行相應(yīng)的動(dòng)作;(4)數(shù)據(jù)傳輸 主機(jī)設(shè)備或從機(jī)設(shè)備會(huì)把數(shù)據(jù)以串行的方式送到單總線上,最后主機(jī)發(fā)送一個(gè)復(fù)位脈沖開始下一次通信任務(wù)。
信息安全領(lǐng)域中,隨機(jī)序列起著重要的作用,密鑰的生成、認(rèn)證鑒別、數(shù)字簽名以及各種安全通信協(xié)議都需要高質(zhì)量的隨機(jī)序列。目前廣泛使用的偽隨機(jī)序列都是根據(jù)隨機(jī)化原則產(chǎn)生的周期性數(shù)字序列。實(shí)際上,偽隨機(jī)序列發(fā)生器產(chǎn)生的序列并不是真的隨機(jī)化,而且具有周期性。只不過(guò)序列發(fā)生器的周期足夠長(zhǎng),遠(yuǎn)遠(yuǎn)大于采集的隨機(jī)序列的長(zhǎng)度,那么這個(gè)偽隨機(jī)序列就可以代替真隨機(jī)序列。
本設(shè)計(jì)偽隨機(jī)序列主要由線性移位寄存器產(chǎn)生,如圖2所示,寄存器值用ai表示,ai=0或1,i=整數(shù)。用ci表示反饋的狀態(tài),ci=1 表示此路反饋;ci=0 表示此路斷開。反饋線的連接狀態(tài)不同,移位寄存器輸出序列的周期P 就可能不同。最大長(zhǎng)度移位寄存器型計(jì)數(shù)器是在移位寄存器的基礎(chǔ)上,通過(guò)線性反饋函數(shù)而得到,其模為2n-1,通常將其稱為m 序列[9]。本設(shè)計(jì)采用的偽隨機(jī)序列本原多項(xiàng)式f(x)=x24+x7+x2+x +1,每次輸出24 bit 隨機(jī)數(shù)作為DS2342 需要的質(zhì)詢碼,其偽隨機(jī)性如下[10]:(1)平衡性 一個(gè)周期內(nèi)1 出現(xiàn)的次數(shù)為2n-1次,0 出現(xiàn)的次數(shù)為2n-1-1 次;(2)游程特性 長(zhǎng)度為k 的游程數(shù)目占游程總數(shù)的2-k[1≤k≤(n-2)],連1 的游程和連0 的游程各占一半,長(zhǎng)為(n-1)的游程僅有1個(gè)連“0”游程,長(zhǎng)為n 的游程僅有1個(gè)連“1”游程。
圖2 線性反饋移位寄存器原理框圖
SHA-1 散列算法作為聯(lián)邦信息處理標(biāo)準(zhǔn)于1993年發(fā)表(FIPS PUB 180),由美國(guó)國(guó)家標(biāo)準(zhǔn)技術(shù)研究院(NIST)開發(fā);1995年修訂,作為SHA-1(FIPS PUB 180-1)發(fā)布。SHA-1 基于MD4 算法,并且在設(shè)計(jì)方面很大程度上是模仿MD4 的[11]。
表1 SHA-1 引擎輸入數(shù)據(jù)
DS2432 中SHA-1 引擎與SHA-1 散列算法稍有不同,輸入僅有一個(gè)固定的512 bit 數(shù)據(jù)塊,沒(méi)有填充位,分為16個(gè)32 bit 字Mt(0≤t≤15),如表1所示。這16個(gè)32 bit 字由32 byte 存儲(chǔ)頁(yè)(p_data),8 byte 密鑰(secret),6 byte 設(shè)備注冊(cè)號(hào)(sn),15 byte 常量,3 byte 質(zhì)詢碼(sp)以一定的順序組成用于計(jì)算讀驗(yàn)證頁(yè)命令[6,12]。SHA-1 引擎的核心是一個(gè)包含4個(gè)循環(huán)的模塊,每個(gè)循環(huán)由20個(gè)步驟組成。其詳細(xì)算法及偽碼描述見參考文獻(xiàn)[13](FIPS PUB 180-1)。最后一步驟沒(méi)有添加初始常量[IV]到輸出結(jié)果,至于SHA-1 引擎算法的其他步驟則與標(biāo)準(zhǔn)SHA-1 算法相同。
本模塊主要控制質(zhì)詢碼產(chǎn)生和匹配時(shí)間,偽隨機(jī)數(shù)模塊產(chǎn)生的質(zhì)詢碼必須同步傳送給DS2432和FPGA 中的SHA-1 引擎。由于FPGA和DS2432 計(jì)算MAC所需時(shí)間不同,所以必須等待足夠長(zhǎng)的時(shí)間以便其完成MAC 的計(jì)算。本設(shè)計(jì)采用每一秒時(shí)間匹配一次MAC,如果MAC 匹配使能用戶設(shè)計(jì),否則禁用用戶設(shè)計(jì)。
在Altera 公司Cyclone 系列FPGA 中完成編程和調(diào)試,調(diào)試工具使用SignalTap II。它可以實(shí)時(shí)顯示FPGA 工作時(shí)內(nèi)部信號(hào)的波形。
FPGA 發(fā)送Read ROM[33h]命令讀取DS2432的64 bit 光刻ROM,Read Memory[F0h]命令可以用來(lái)讀取除密鑰以外的所有存儲(chǔ)器值。圖3 顯示存儲(chǔ)器page0 頁(yè)256 bit 全為0值以及64 bit ROM 注冊(cè)碼為E40000030E32D733h。
圖3 read DS2432 SignalTap II 圖
首先FPGA 發(fā)送Skip ROM[CCh]命令,然后發(fā)送Write Scratchpad[0Fh]并指定地址(0080h)后將64 bit 密鑰(例如0123456789abcdefh)寫入暫存器。最后發(fā)送Load First Secret[5Ah],如果密鑰未加寫保護(hù)則被替換為新密鑰,替換時(shí)間最多持續(xù)10 ms,1-Wire 總線在此期間電壓不得拉低。數(shù)據(jù)復(fù)制完成之后,DS2432 在總線上將傳送交替的“1”和“0”電平。
FPGA 發(fā)送Read Authenticated Page[A5h]命令并指定目的地址,F(xiàn)PGA 將依次接收目的地址到數(shù)據(jù)頁(yè)末的存儲(chǔ)器值、FFh 字節(jié)和CRC16 反碼。FPGA 等待2ms,在此期間,DS2432 的SHA-1 引擎利用表一所示輸入數(shù)據(jù)計(jì)算MAC。然后,F(xiàn)PGA 讀取160 bit MAC和CRC16 反碼。如果FPGA 繼續(xù)讀取,讀取值為交替的“1”和“0”電平。最后,F(xiàn)PGA 將讀到的160 bit MAC與FPGA 計(jì)算的MAC 進(jìn)行匹配。圖4所示為MAC匹配結(jié)果,本次匹配顯示的160 bit MAC 結(jié)果是3766F0A0C70165D1ED10E16D981893B63A49338Fh,使能用戶設(shè)計(jì)。
圖4 MAC 匹配結(jié)果SignalTap II 圖
本設(shè)計(jì)采用SHA-1 算法引擎,其優(yōu)越性體現(xiàn)在以下幾點(diǎn):(1)算法不可逆性,從MAC 反推輸入信息是不可能的,保證了密鑰的安全性。(2)防碰撞性,對(duì)于特定MAC 只對(duì)應(yīng)于一種輸入信息,使用另外一組輸入數(shù)據(jù)產(chǎn)生是不可行的。(3)雪崩性,輸入數(shù)據(jù)的任何變化都會(huì)引起MAC 極大的變化。系統(tǒng)設(shè)計(jì)的缺點(diǎn)是FPGA 需要外置一片安全存儲(chǔ)器并占用一根IO 數(shù)據(jù)線,而且FPGA 實(shí)現(xiàn)SHA-1 算法引擎也需要一定的系統(tǒng)資源。
基于DS2432 的安全認(rèn)證系統(tǒng)實(shí)現(xiàn)了低成本FPGA 的可信認(rèn)證。系統(tǒng)通過(guò)質(zhì)詢-響應(yīng)機(jī)制匹配消息認(rèn)證碼,在沒(méi)有正確的密鑰和消息認(rèn)證碼之前,系統(tǒng)會(huì)一直禁止用戶設(shè)計(jì)正常運(yùn)行。這一方案已經(jīng)應(yīng)用于實(shí)際系統(tǒng)中,運(yùn)行穩(wěn)定,從而保護(hù)了用戶設(shè)計(jì)。
[1]王沁,孫富明,李磊,等.FPGA 設(shè)計(jì)安全性綜述[J].小型微型計(jì)算機(jī)系統(tǒng),2010,31(7):1333-1337.
[2]Wollinger T,Guajardo J,Paar C.Security on FPGAs:State-of-the-Art Implementations and Attacks.Transactions on Embedded Computing Systems,2004,3(3):534-574.
[3]Catalin Baetoniu,Shalin Sheth.FPGA IFF Copy Protection Using Dallas Semiconductor/maxim DS2432 Secure EEPROMs[Z].2005.http://www.xilinx.com/support/documentation/application_notes/xapp780.pdf.
[4]徐名揚(yáng),張衡.基于SHA-1 算法的加密認(rèn)證系統(tǒng)設(shè)計(jì)[J].中國(guó)集成電路,2011(151):37-44.
[5]Altera.An FPGA Design Security Solution Using a Secure Memory Device[EB/OL].2007.http://www.altera.com.cn/literature/wp/wp-01033_CN.pdf.
[6]Maxim Integrated Products Inc.DS2432 1kb Protected 1-Wire EEPROM with SHA-1 Engine[EB/OL].2004.http://datasheets.maxim-ic.com/en/ds/DS2432.pdf.
[7]伍家滿,虞禮貞,劉小燕,等.基于1-Wire 接口的總線技術(shù)及其應(yīng)用[J].南昌大學(xué)學(xué)報(bào)(工科版),2005,27(1):89-93.
[8]Dallas Semiconductor.DS18B20 Programmable Resolution 1-Wire Digital Thermometer[EB/OL].http://pdfserv.maxim-ic.com/en/ds/DS18B20.pdf.
[9]張海峰,段穎妮,呂虹.全狀態(tài)偽隨機(jī)序列發(fā)生器的實(shí)現(xiàn)[J].電子器件,2006,29(1):176-178.
[10]樊昌信,曹麗娜.通信原理(第六版)[M].國(guó)防工業(yè)出版社,2009:379-390.
[11]胡向東,魏琴芳,胡蓉.應(yīng)用密碼學(xué)(第二版)[M].電子工業(yè)出版社,2011:166-176.
[12]劉軍志,黃進(jìn).基于DS2432和FPGA 的IFF 加密方法[J].2007,23(6-2):201-202.
[13]FIPS PUB 180-1.Secure Hash Standard(SHA-1)[EB/OL].National Institute of Standards and Technology(NIST).http://www.itl.nist.gov/fipspubs/fip180-1.htm.