朱宇
摘 要: FPGA在定制項目和具有設計重構需求的項目開發中廣泛應用,隨著硬件設計集成度不斷提高,在一個FPGA設計中往往集成多個廠商提供的軟核設計(IPCore),IPCore知識產權保護顯得尤為重要。提出一種真隨機序列與密鑰結合,并通過安全散列算法加密驗證,實現對FPGA設計中商用IPCore知識產權保護的方法。
關鍵詞: FPGA; IPCore; 真隨機序列; 安全散列算法
中圖分類號: TN911.2?34 文獻標識碼: A 文章編號: 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規模和性能日益強大,幾乎可以實現包括高性能處理器、各種協議處理、通用和專用集成電路、接口電路在內的所有硬件電路功能[1]。FPGA強大的性能支撐硬件設計集成度不斷提高,而在一個FPGA設計中往往需要集成不同廠商提供的協議處理、專用處理等IPCore,一個廠商開發的IPCore也可能提供給多個用戶使用,與用戶設計集成,那么對IPCore進行有效的知識產權保護才能防止用戶惡意竊取,保證IPCore開發者的核心利益。
用戶集成IPCore的方法有兩種:一種是源碼級集成,該方法用戶能完全掌握IPCore詳細設計,可輕易將其直接移植甚至修改優化用于其他設計,IPCore知識產權無法保護;另一種是網表級集成[2],IPCore開發者提供IPCore編譯后生成的網表文件,用戶將IPCore網表文件與其他邏輯集成完成FPGA設計,這種方法用戶無法窺探IPCore內部詳細設計,但由于用戶熟悉IPCore使用接口,如果不加以保護,仍然可以將該網表文件在未經開發者許可的情況下用作其他設計。
相較于目前行業內其他幾種常用保護FPGA設計的方法,本文提出一種低成本,基于真隨機序列與密鑰結合,并通過安全散列算法加密驗證,實現IPCore知識產權可靠保護的方法。
1 幾種FPGA設計知識產權保護的方法及劣勢
(1) 依靠FPGA自帶加密保護功能
目前主流FPGA芯片都自帶加密保護功能,加密原理如下:FPGA內部有片128 b或者更大的非易失存儲區域用于存放密鑰,在使用FPGA bit流文件生成燒寫文件時,對密鑰進行設置,通過AES128等加密算法生成密文燒寫文件,寫入FPGA的配置芯片,同時將相同的密鑰燒寫進FPGA的密鑰寄存器,該寄存器燒寫一次之后不能讀取和修改。當FPGA啟動時,從配置芯片中加載密文配置文件,FPGA從內部密鑰寄存器中讀出密鑰,通過解密算法輸出明文完成FPGA加載[3]。
該方法能夠有效地防止通過監測FPGA加載管腳信號流實現FPGA功能設計復制,同時,由于AES128等加密算法安全等級較高,暴力破解幾乎不可能,因此能夠有效保護FPGA設計的知識產權。但是這種方法僅對完整的FPGA設計有效保護,而無法對IPCore的網表文件進行保護。
(2) 依靠外部加密芯片保護核心算法
目前市面上有數款加密芯片,能夠存儲和運行部分軟件代碼或硬件描述語言,使用者可將IPCore拆分,將部分核心算法移植加密芯片,IPCore必須依賴外部加密芯片才能正常運行[4]。
IPCore開發者只需要控制加密芯片的算法即可實現對IPCore知識產權保護。但這種方法需要將成熟的IPCore拆分,增加了額外工作量,拆分出的邏輯部分需要適配加密芯片的容量,同時,在每次進行核心運算時需要與加密芯片通信和同步,嚴重影響IPCore運算的效率。
(3) 利用外部芯片產生偽隨機碼序列驗證產生IPCore工作使能
利用在CPLD等外部芯片內實現線性反饋移位寄存器產生偽隨機碼序列輸入IPCore,IPCore中采用相同的電路產生相同的偽隨機碼序列,當IPCore驗證偽碼序列相同時,產生IPCore工作使能,否則IPCore不工作[5]。
隨著線性反饋電路級數的增加,偽碼序列周期呈指數增加,利用已知偽碼序列反推特征多項式難度較大,保護IPCore知識產權。由于線性反饋移位寄存器設計類似,目前高性能計算機通過已知偽碼序列“訓練”,“擬合”,有較大概率設計出一種在足夠長時間內產生同樣偽碼序列的特征多項式,甚至反推出相同的特征多項式,無法可靠保證IPCore的知識產權。
2 一種可靠、低成本保護FPGA設計知識產權
的方法
2.1 實現原理
FPGA IPCore加密認證系統框圖如圖1所示。FPGA IPCore中包含核心狀態控制模塊、密鑰存儲模塊、真隨機數生成模塊、加密算法模塊、通信模塊、驗證模塊和工作邏輯部分。加密算法模塊包括合成模塊和加密算法模塊,合成模塊的作用是將密鑰和隨機數合成為一個信號,加密算法模塊是對合成后的信號進行加密;通信模塊用于向存儲密鑰的芯片發送隨機數并接收其返回加密后的數據;驗證模塊用以返回加密的數據與FPGA自己加密的數據是否一致有效,有效則使能工作邏輯,否則禁能工作邏輯。核心狀態控制模塊控制加密認證系統工作流程的狀態跳轉。
外圍用于存儲密鑰和加密的芯片可選用小封裝、低成本的CPLD,例如XILINX公司coolRunner?IIA系列CPLD X2C32A,包含32個宏單元和21個I/O,5 mm×5 mm BGA封裝、僅需0.85美元。X2C64A包含64個宏單元和37個I/O,7 mm×7 mm BGA封裝,僅需1.2美元。十分適合用作外部加密芯片。
外部CPLD包含密鑰存儲器、加密算法模塊和通信模塊。存儲的密鑰,加密算法模塊與FPGA內部設計模塊一致,通信模塊用以接收FPGA發送的隨機數并向FPGA發送加密后的數據。
2.2 真隨機數生成模塊
區別于其他FPGA設計中常用偽隨機碼實現隨機碼功能,在本設計中采用一種真隨機碼生成方法——環形振蕩器隊列產生真隨機碼。真隨機數生成模塊如圖2所示。
真隨機數生成模塊分為環形振蕩源、拼接、數字化、模二加移位寄存輸出幾個部分。振蕩源由3個以上的非門首尾相接,組成一個閉合環路,得到一個高頻振蕩時鐘,該時鐘信號的周期與門延時及反向器個數有關,而與外部信號無關。將[n]組環形振蕩器拼接成一個[n]位數據,通過D觸發器采樣數字化。由于這種高頻振蕩時鐘初始態隨機,并在一定范圍內隨機抖動,通過一個較慢的時鐘采樣所得的[n]位數據也是隨機的。由于芯片內部會受到溫度、電壓的影響,特別是當采樣時鐘頻率較高時,得到的隨機數會存在一定的偏置現象,消偏的方法有很多種,模二加移位寄存在可編程邏輯器件中實現簡單,同時可以很好的消偏,經過模二加移位寄存輸出的數據是典型的隨機數據[6]。在本設計中環形振蕩源采用3級級聯,環形振蕩器8組。
2.3 加密算法模塊
加密算法模塊采用安全散列算法,該算法是基于單向函數的一種散列函數,它能夠將可變輸入長度串(預映射)轉換成固定長度的輸出串(散列值)。安全散列算法是單向工作函數,從預映射值很容易計算其散列值,但是已知其散列值得出預映射值幾乎不可能。安全散列算法具有單向性、惟一性和高雪崩效應,實現簡單,是通信領域常用的高效的加密手段[7]。
[z=f(x,y),]其中[x]為真隨機數,[y]為密鑰,共同組成預映射值,[f]為安全散列函數,[z]為加密后的密文,由于[f]和[y]均不可見,因此已知[z]和[x]無法反推外圍加密芯片設計。安全散列算法種類很多,統籌考慮算法安全等級和實現所需邏輯資源,MD2,MD5,SHA?1,SHA?256等都非常適合FPGA和CPLD實現,這里以MD5函數為例介紹加密過程。
(1) 對消息進行補位,隨機數采集長度為64位,密鑰長度為64位,在其后補充1位1和319位0,后64位用于表示原始消息長度為128,組成一個512位數據,該512位數即原始明文。該原始明文被分為16組32位數據[M0~M15。]
(2) 核心操作,按照圖3的邏輯算法,將[An,Bn,Cn,Dn]經過非線性運算、移位寄存,并加入一些非線性數值,從而生成新的[An+1,Bn+1,Cn+1,Dn+1]值。經過64次運算,得出[An,Bn,Cn,Dn]值輸出[8]。
其中[A0,B0,C0,D0]是4個32位自定義數,即算法密鑰,[n]從0~63共計64次運算,分為4組:0~15,16~31,32~47,48~63,4組運算中使用的[Ft]非線性函數為:
[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語言中,可采用case語句實現。
[Mj]即16組原始明文中的一組,j=n%16。
[Ti=232×abssin i,]由于三角函數在FPGA中較難實現,由于[0≤i≤15,]可以預先計算好,存儲在16個32位寄存器中,使用時尋址取出。
循環左移[S]位運算可采用拼接運算{P[31-S:0],P[31:31-S+1]}實現,循環位數[S]自定義。
算法按照如圖4所示的有限狀態機運算64次,得到[A63,B63,C63,D63,]將其拼接[A63,B63,C63,D63]為一個128位數據,這就是MD5算法加密所得密文。
若選擇其他安全散列算法,如SHA?1,SHA?256等實現方法類似,安全等級進一步提高,所占用邏輯稍大。
2.4 驗證使能
在FPGA IPCore中和在CPLD中加密算法實現方法一致,密鑰和原始明文分別在FPGA和CPLD中進行加密運算,CPLD運算完成后,將密文通過通信模塊發送至FPGA的驗證模塊中,與FPGA運算完成的密文進行比較,若一致則向IPCore的工作邏輯發送使能信號,IPCore開始工作,否則禁能IPCore,從而達到知識產權保護的功能。
3 結 論
本文論述了一種基于真隨機序列和安全散列算法可靠加密FPGA設計的方法。FPGA IPCore通過環形振蕩序列產生真隨機序列,每次系統上電,FPGA發送給CPLD的數據無法預測和模擬,使得偵測該數據無意義。另外,利用安全散列算法的單向性,即使能夠偵測得到CPLD加密后發送給FPGA的密文,但無法反推出密鑰和加密算法,從而可靠保護網表級FPGA設計的知識產權。同時CPLD具有體積小、成本低廉、無法暴力破解的特性,使這種方法具有較高性價比和商業價值,可廣泛應用于商用IPCore保護和大規模FPGA聯合設計中。
參考文獻
[1] 吳繼華,王誠.設計與驗證:Verilog HDL[M].北京:人民郵電出版社,2006.
[2] 何清平,劉佐濂.基于FPGA設計的綜合技術分析[J].中國科技信息,2006(11):181?183.
[3] 李正杰.高密度FPGA配置體系的設計與實現[D].成都:電子科技大學,2012.
[4] 楊春林,張春雷,高山,等.基于DS28E01的FPGA加密認證系統的設計[J].微計算機信息,2009(8):129?130.
[5] 周強,陳利學,王博,等.用CPLD實現安全可靠的FPGA加密設計[J].現代電子技術,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.應用密碼學:協議、算法與C源程序[M].吳世忠,柷世雄,張文政,等譯.北京:機械工業出版社,2000.
[8] 馬才根.基于EDA技術的MD5散列算法的硬件實現[D].南京:東南大學,2007.