朱宇
摘 要: FPGA在定制項(xiàng)目和具有設(shè)計(jì)重構(gòu)需求的項(xiàng)目開(kāi)發(fā)中廣泛應(yīng)用,隨著硬件設(shè)計(jì)集成度不斷提高,在一個(gè)FPGA設(shè)計(jì)中往往集成多個(gè)廠商提供的軟核設(shè)計(jì)(IPCore),IPCore知識(shí)產(chǎn)權(quán)保護(hù)顯得尤為重要。提出一種真隨機(jī)序列與密鑰結(jié)合,并通過(guò)安全散列算法加密驗(yàn)證,實(shí)現(xiàn)對(duì)FPGA設(shè)計(jì)中商用IPCore知識(shí)產(chǎn)權(quán)保護(hù)的方法。
關(guān)鍵詞: FPGA; IPCore; 真隨機(jī)序列; 安全散列算法
中圖分類號(hào): TN911.2?34 文獻(xiàn)標(biāo)識(shí)碼: A 文章編號(hào): 1004?373X(2017)07?0078?03
A reliable encryption FPGA design method based on true random
sequence and security hash algorithm
ZHU Yu
(Division of Aviation, Southwest China Institute of Electronic Technology, Chengdu 610036, China)
Abstract: The FPGA is widely used in the customization project and development of the needing reconstruction project. With the continuous increase of the hardware design integration, the design of the single FPGA is often integrated with the IPCores provided by multiple manufacturers, so the intellectual property protection of the IPCore is particularly important. A method combining the true random sequence with secret key is proposed to protect the commercial IPCore intellectual property of the FPGA design by means of the encryption verification of the security hash algorithm.
Keywords: FPGA; IPCore; true random sequence; security hash algorithm
0 引 言
FPGA規(guī)模和性能日益強(qiáng)大,幾乎可以實(shí)現(xiàn)包括高性能處理器、各種協(xié)議處理、通用和專用集成電路、接口電路在內(nèi)的所有硬件電路功能[1]。FPGA強(qiáng)大的性能支撐硬件設(shè)計(jì)集成度不斷提高,而在一個(gè)FPGA設(shè)計(jì)中往往需要集成不同廠商提供的協(xié)議處理、專用處理等IPCore,一個(gè)廠商開(kāi)發(fā)的IPCore也可能提供給多個(gè)用戶使用,與用戶設(shè)計(jì)集成,那么對(duì)IPCore進(jìn)行有效的知識(shí)產(chǎn)權(quán)保護(hù)才能防止用戶惡意竊取,保證IPCore開(kāi)發(fā)者的核心利益。
用戶集成IPCore的方法有兩種:一種是源碼級(jí)集成,該方法用戶能完全掌握IPCore詳細(xì)設(shè)計(jì),可輕易將其直接移植甚至修改優(yōu)化用于其他設(shè)計(jì),IPCore知識(shí)產(chǎn)權(quán)無(wú)法保護(hù);另一種是網(wǎng)表級(jí)集成[2],IPCore開(kāi)發(fā)者提供IPCore編譯后生成的網(wǎng)表文件,用戶將IPCore網(wǎng)表文件與其他邏輯集成完成FPGA設(shè)計(jì),這種方法用戶無(wú)法窺探IPCore內(nèi)部詳細(xì)設(shè)計(jì),但由于用戶熟悉IPCore使用接口,如果不加以保護(hù),仍然可以將該網(wǎng)表文件在未經(jīng)開(kāi)發(fā)者許可的情況下用作其他設(shè)計(jì)。
相較于目前行業(yè)內(nèi)其他幾種常用保護(hù)FPGA設(shè)計(jì)的方法,本文提出一種低成本,基于真隨機(jī)序列與密鑰結(jié)合,并通過(guò)安全散列算法加密驗(yàn)證,實(shí)現(xiàn)IPCore知識(shí)產(chǎn)權(quán)可靠保護(hù)的方法。
1 幾種FPGA設(shè)計(jì)知識(shí)產(chǎn)權(quán)保護(hù)的方法及劣勢(shì)
(1) 依靠FPGA自帶加密保護(hù)功能
目前主流FPGA芯片都自帶加密保護(hù)功能,加密原理如下:FPGA內(nèi)部有片128 b或者更大的非易失存儲(chǔ)區(qū)域用于存放密鑰,在使用FPGA bit流文件生成燒寫文件時(shí),對(duì)密鑰進(jìn)行設(shè)置,通過(guò)AES128等加密算法生成密文燒寫文件,寫入FPGA的配置芯片,同時(shí)將相同的密鑰燒寫進(jìn)FPGA的密鑰寄存器,該寄存器燒寫一次之后不能讀取和修改。當(dāng)FPGA啟動(dòng)時(shí),從配置芯片中加載密文配置文件,F(xiàn)PGA從內(nèi)部密鑰寄存器中讀出密鑰,通過(guò)解密算法輸出明文完成FPGA加載[3]。
該方法能夠有效地防止通過(guò)監(jiān)測(cè)FPGA加載管腳信號(hào)流實(shí)現(xiàn)FPGA功能設(shè)計(jì)復(fù)制,同時(shí),由于AES128等加密算法安全等級(jí)較高,暴力破解幾乎不可能,因此能夠有效保護(hù)FPGA設(shè)計(jì)的知識(shí)產(chǎn)權(quán)。但是這種方法僅對(duì)完整的FPGA設(shè)計(jì)有效保護(hù),而無(wú)法對(duì)IPCore的網(wǎng)表文件進(jìn)行保護(hù)。
(2) 依靠外部加密芯片保護(hù)核心算法
目前市面上有數(shù)款加密芯片,能夠存儲(chǔ)和運(yùn)行部分軟件代碼或硬件描述語(yǔ)言,使用者可將IPCore拆分,將部分核心算法移植加密芯片,IPCore必須依賴外部加密芯片才能正常運(yùn)行[4]。
IPCore開(kāi)發(fā)者只需要控制加密芯片的算法即可實(shí)現(xiàn)對(duì)IPCore知識(shí)產(chǎn)權(quán)保護(hù)。但這種方法需要將成熟的IPCore拆分,增加了額外工作量,拆分出的邏輯部分需要適配加密芯片的容量,同時(shí),在每次進(jìn)行核心運(yùn)算時(shí)需要與加密芯片通信和同步,嚴(yán)重影響IPCore運(yùn)算的效率。
(3) 利用外部芯片產(chǎn)生偽隨機(jī)碼序列驗(yàn)證產(chǎn)生IPCore工作使能
利用在CPLD等外部芯片內(nèi)實(shí)現(xiàn)線性反饋移位寄存器產(chǎn)生偽隨機(jī)碼序列輸入IPCore,IPCore中采用相同的電路產(chǎn)生相同的偽隨機(jī)碼序列,當(dāng)IPCore驗(yàn)證偽碼序列相同時(shí),產(chǎn)生IPCore工作使能,否則IPCore不工作[5]。
隨著線性反饋電路級(jí)數(shù)的增加,偽碼序列周期呈指數(shù)增加,利用已知偽碼序列反推特征多項(xiàng)式難度較大,保護(hù)IPCore知識(shí)產(chǎn)權(quán)。由于線性反饋移位寄存器設(shè)計(jì)類似,目前高性能計(jì)算機(jī)通過(guò)已知偽碼序列“訓(xùn)練”,“擬合”,有較大概率設(shè)計(jì)出一種在足夠長(zhǎng)時(shí)間內(nèi)產(chǎn)生同樣偽碼序列的特征多項(xiàng)式,甚至反推出相同的特征多項(xiàng)式,無(wú)法可靠保證IPCore的知識(shí)產(chǎn)權(quán)。
2 一種可靠、低成本保護(hù)FPGA設(shè)計(jì)知識(shí)產(chǎn)權(quán)
的方法
2.1 實(shí)現(xiàn)原理
FPGA IPCore加密認(rèn)證系統(tǒng)框圖如圖1所示。FPGA IPCore中包含核心狀態(tài)控制模塊、密鑰存儲(chǔ)模塊、真隨機(jī)數(shù)生成模塊、加密算法模塊、通信模塊、驗(yàn)證模塊和工作邏輯部分。加密算法模塊包括合成模塊和加密算法模塊,合成模塊的作用是將密鑰和隨機(jī)數(shù)合成為一個(gè)信號(hào),加密算法模塊是對(duì)合成后的信號(hào)進(jìn)行加密;通信模塊用于向存儲(chǔ)密鑰的芯片發(fā)送隨機(jī)數(shù)并接收其返回加密后的數(shù)據(jù);驗(yàn)證模塊用以返回加密的數(shù)據(jù)與FPGA自己加密的數(shù)據(jù)是否一致有效,有效則使能工作邏輯,否則禁能工作邏輯。核心狀態(tài)控制模塊控制加密認(rèn)證系統(tǒng)工作流程的狀態(tài)跳轉(zhuǎn)。
外圍用于存儲(chǔ)密鑰和加密的芯片可選用小封裝、低成本的CPLD,例如XILINX公司coolRunner?IIA系列CPLD X2C32A,包含32個(gè)宏單元和21個(gè)I/O,5 mm×5 mm BGA封裝、僅需0.85美元。X2C64A包含64個(gè)宏單元和37個(gè)I/O,7 mm×7 mm BGA封裝,僅需1.2美元。十分適合用作外部加密芯片。
外部CPLD包含密鑰存儲(chǔ)器、加密算法模塊和通信模塊。存儲(chǔ)的密鑰,加密算法模塊與FPGA內(nèi)部設(shè)計(jì)模塊一致,通信模塊用以接收FPGA發(fā)送的隨機(jī)數(shù)并向FPGA發(fā)送加密后的數(shù)據(jù)。
2.2 真隨機(jī)數(shù)生成模塊
區(qū)別于其他FPGA設(shè)計(jì)中常用偽隨機(jī)碼實(shí)現(xiàn)隨機(jī)碼功能,在本設(shè)計(jì)中采用一種真隨機(jī)碼生成方法——環(huán)形振蕩器隊(duì)列產(chǎn)生真隨機(jī)碼。真隨機(jī)數(shù)生成模塊如圖2所示。
真隨機(jī)數(shù)生成模塊分為環(huán)形振蕩源、拼接、數(shù)字化、模二加移位寄存輸出幾個(gè)部分。振蕩源由3個(gè)以上的非門首尾相接,組成一個(gè)閉合環(huán)路,得到一個(gè)高頻振蕩時(shí)鐘,該時(shí)鐘信號(hào)的周期與門延時(shí)及反向器個(gè)數(shù)有關(guān),而與外部信號(hào)無(wú)關(guān)。將[n]組環(huán)形振蕩器拼接成一個(gè)[n]位數(shù)據(jù),通過(guò)D觸發(fā)器采樣數(shù)字化。由于這種高頻振蕩時(shí)鐘初始態(tài)隨機(jī),并在一定范圍內(nèi)隨機(jī)抖動(dòng),通過(guò)一個(gè)較慢的時(shí)鐘采樣所得的[n]位數(shù)據(jù)也是隨機(jī)的。由于芯片內(nèi)部會(huì)受到溫度、電壓的影響,特別是當(dāng)采樣時(shí)鐘頻率較高時(shí),得到的隨機(jī)數(shù)會(huì)存在一定的偏置現(xiàn)象,消偏的方法有很多種,模二加移位寄存在可編程邏輯器件中實(shí)現(xiàn)簡(jiǎn)單,同時(shí)可以很好的消偏,經(jīng)過(guò)模二加移位寄存輸出的數(shù)據(jù)是典型的隨機(jī)數(shù)據(jù)[6]。在本設(shè)計(jì)中環(huán)形振蕩源采用3級(jí)級(jí)聯(lián),環(huán)形振蕩器8組。
2.3 加密算法模塊
加密算法模塊采用安全散列算法,該算法是基于單向函數(shù)的一種散列函數(shù),它能夠?qū)⒖勺冚斎腴L(zhǎng)度串(預(yù)映射)轉(zhuǎn)換成固定長(zhǎng)度的輸出串(散列值)。安全散列算法是單向工作函數(shù),從預(yù)映射值很容易計(jì)算其散列值,但是已知其散列值得出預(yù)映射值幾乎不可能。安全散列算法具有單向性、惟一性和高雪崩效應(yīng),實(shí)現(xiàn)簡(jiǎn)單,是通信領(lǐng)域常用的高效的加密手段[7]。
[z=f(x,y),]其中[x]為真隨機(jī)數(shù),[y]為密鑰,共同組成預(yù)映射值,[f]為安全散列函數(shù),[z]為加密后的密文,由于[f]和[y]均不可見(jiàn),因此已知[z]和[x]無(wú)法反推外圍加密芯片設(shè)計(jì)。安全散列算法種類很多,統(tǒng)籌考慮算法安全等級(jí)和實(shí)現(xiàn)所需邏輯資源,MD2,MD5,SHA?1,SHA?256等都非常適合FPGA和CPLD實(shí)現(xiàn),這里以MD5函數(shù)為例介紹加密過(guò)程。
(1) 對(duì)消息進(jìn)行補(bǔ)位,隨機(jī)數(shù)采集長(zhǎng)度為64位,密鑰長(zhǎng)度為64位,在其后補(bǔ)充1位1和319位0,后64位用于表示原始消息長(zhǎng)度為128,組成一個(gè)512位數(shù)據(jù),該512位數(shù)即原始明文。該原始明文被分為16組32位數(shù)據(jù)[M0~M15。]
(2) 核心操作,按照?qǐng)D3的邏輯算法,將[An,Bn,Cn,Dn]經(jīng)過(guò)非線性運(yùn)算、移位寄存,并加入一些非線性數(shù)值,從而生成新的[An+1,Bn+1,Cn+1,Dn+1]值。經(jīng)過(guò)64次運(yùn)算,得出[An,Bn,Cn,Dn]值輸出[8]。
其中[A0,B0,C0,D0]是4個(gè)32位自定義數(shù),即算法密鑰,[n]從0~63共計(jì)64次運(yùn)算,分為4組:0~15,16~31,32~47,48~63,4組運(yùn)算中使用的[Ft]非線性函數(shù)為:
[Ft=F(B,C,D)=(B and C) or (~B) and D,0≤n≤15G(B,C,D)=(B and D) or C and (~D),16≤n≤31H(B,C,D)=B × or C× or D,32≤n≤47I(B,C,D)=C × or B or (~D),48≤n≤64]
在使用HDL語(yǔ)言中,可采用case語(yǔ)句實(shí)現(xiàn)。
[Mj]即16組原始明文中的一組,j=n%16。
[Ti=232×abssin i,]由于三角函數(shù)在FPGA中較難實(shí)現(xiàn),由于[0≤i≤15,]可以預(yù)先計(jì)算好,存儲(chǔ)在16個(gè)32位寄存器中,使用時(shí)尋址取出。
循環(huán)左移[S]位運(yùn)算可采用拼接運(yùn)算{P[31-S:0],P[31:31-S+1]}實(shí)現(xiàn),循環(huán)位數(shù)[S]自定義。
算法按照如圖4所示的有限狀態(tài)機(jī)運(yùn)算64次,得到[A63,B63,C63,D63,]將其拼接[A63,B63,C63,D63]為一個(gè)128位數(shù)據(jù),這就是MD5算法加密所得密文。
若選擇其他安全散列算法,如SHA?1,SHA?256等實(shí)現(xiàn)方法類似,安全等級(jí)進(jìn)一步提高,所占用邏輯稍大。
2.4 驗(yàn)證使能
在FPGA IPCore中和在CPLD中加密算法實(shí)現(xiàn)方法一致,密鑰和原始明文分別在FPGA和CPLD中進(jìn)行加密運(yùn)算,CPLD運(yùn)算完成后,將密文通過(guò)通信模塊發(fā)送至FPGA的驗(yàn)證模塊中,與FPGA運(yùn)算完成的密文進(jìn)行比較,若一致則向IPCore的工作邏輯發(fā)送使能信號(hào),IPCore開(kāi)始工作,否則禁能IPCore,從而達(dá)到知識(shí)產(chǎn)權(quán)保護(hù)的功能。
3 結(jié) 論
本文論述了一種基于真隨機(jī)序列和安全散列算法可靠加密FPGA設(shè)計(jì)的方法。FPGA IPCore通過(guò)環(huán)形振蕩序列產(chǎn)生真隨機(jī)序列,每次系統(tǒng)上電,F(xiàn)PGA發(fā)送給CPLD的數(shù)據(jù)無(wú)法預(yù)測(cè)和模擬,使得偵測(cè)該數(shù)據(jù)無(wú)意義。另外,利用安全散列算法的單向性,即使能夠偵測(cè)得到CPLD加密后發(fā)送給FPGA的密文,但無(wú)法反推出密鑰和加密算法,從而可靠保護(hù)網(wǎng)表級(jí)FPGA設(shè)計(jì)的知識(shí)產(chǎn)權(quán)。同時(shí)CPLD具有體積小、成本低廉、無(wú)法暴力破解的特性,使這種方法具有較高性價(jià)比和商業(yè)價(jià)值,可廣泛應(yīng)用于商用IPCore保護(hù)和大規(guī)模FPGA聯(lián)合設(shè)計(jì)中。
參考文獻(xiàn)
[1] 吳繼華,王誠(chéng).設(shè)計(jì)與驗(yàn)證:Verilog HDL[M].北京:人民郵電出版社,2006.
[2] 何清平,劉佐濂.基于FPGA設(shè)計(jì)的綜合技術(shù)分析[J].中國(guó)科技信息,2006(11):181?183.
[3] 李正杰.高密度FPGA配置體系的設(shè)計(jì)與實(shí)現(xiàn)[D].成都:電子科技大學(xué),2012.
[4] 楊春林,張春雷,高山,等.基于DS28E01的FPGA加密認(rèn)證系統(tǒng)的設(shè)計(jì)[J].微計(jì)算機(jī)信息,2009(8):129?130.
[5] 周強(qiáng),陳利學(xué),王博,等.用CPLD實(shí)現(xiàn)安全可靠的FPGA加密設(shè)計(jì)[J].現(xiàn)代電子技術(shù),2005,28(22):86?87.
[6] SCHELLEKENS D, PRENEEL B, VERBAUWHEDE I. FPGA vendor agnostic true random number generator [C]// Proceedings of 2006 IEEE Field Programmable Logic and Applications. [S.l.]: IEEE, 2006: 1?6.
[7] SCHNEIER Bruce.應(yīng)用密碼學(xué):協(xié)議、算法與C源程序[M].吳世忠,柷世雄,張文政,等譯.北京:機(jī)械工業(yè)出版社,2000.
[8] 馬才根.基于EDA技術(shù)的MD5散列算法的硬件實(shí)現(xiàn)[D].南京:東南大學(xué),2007.