文獻標識碼: A
DOI:10.16157/j.issn.0258-7998.190618
中文引用格式: 張海峰,劉俊,種挺,等. 基于芯片仿真器的程序訪問權限配置方案[J].電子技術應用,2019,45(10):80-82,87.
英文引用格式: Zhang Haifeng,Liu Jun,Chong Ting,et al. Solution of program access rights configuration based on chip simulator[J]. Application of Electronic Technique,2019,45(10):80-82,87.
0 引言
隨著科技的進步,芯片作為信息化、智能化建設的核心部件之一, 大量應用在人工智能、物聯網、大數據等領域[1],并在安全、通信、運算方面起著重要作用。由于芯片應用場景的多樣化、復雜化,芯片上的嵌入式軟件程序的規模及復雜度也越來越高,如何提高嵌入式軟件程序的開發效率和質量成為熱點問題[2]。
芯片仿真器,本文特指通過使用FPGA仿真芯片硬件邏輯[3]的硬件仿真器,作為一種嵌入式程序調試工具,與集成開發環境配合使用,通過對程序進行單步調試、斷點調試、變量查看、寄存器查看等調試手段,實現對問題的追蹤、定位。從一定程度上說,調試操作直接影響到程序的質量和開發周期[4-5]。
嵌入式程序的規模及復雜度的提高導致程序開發的難度越來越大。為解決這一問題,嵌入式程序開發一般采用分層程序設計方法,一般依據功能自底向上分為驅動層、系統層和應用層。分層設計在降低設計開發難度的同時,便于廠商之間實現協作開發,專注于各自擅長的領域。一般由不同的廠商負責不同層次的軟件開發,低層程序通過提供函數接口供上層程序調用,為統一描述,將提供函數接口的程序統稱為應用編程接口(Application Programming Interface,API)程序,使用API的程序稱為用戶程序。這種開發模式使得程序層次清晰,設計明確,維護方便,加快了產品的開發周期。
然而,在使用芯片仿真器進行調試時也面臨著一些問題。在調試用戶程序時,需要將API程序一并下載到仿真器,而API程序提供者出于知識產權的保護,一般不會直接提供程序源碼。如果以Intel 十六進制編碼(Hexadecimal,HEX)文件形式提供[6],仍存在查看匯編代碼及反匯編的風險。目前有一種方法是提供相應的調試版本的HEX文件,調試版本程序的接口與實際版本相同,而把算法、認證等關鍵操作進行修改,導致用戶程序雖然可以完成接口的正常調用,但程序調試時的執行結果與實際預期不符,調試的真實性受到了很大的影響,存在程序問題不能及時被發現或誤報的風險。還有一種常用的方法,在實際芯片投片生產時,API程序預先掩模到芯片中,用戶程序通過特定的下載通道下載到芯片,然后通過直接操作芯片接口進行程序測試,此種方法雖然與芯片的應用場景一致,可以發現問題,但不容易進行問題定位,一般用于項目后期程序功能相對穩定的階段,不適用于程序開發初期階段。
為兼顧調試的真實性及知識產權的保護,本文提出一種程序訪問權限可配置的方法,此方法基于芯片仿真器提供的程序訪問權限配置(簡稱為“權限配置”)機制及程序下載保護機制,實現API程序在仿真器中進行安全下載、調試。此方案能夠較好地對敏感程序進行保護,且可靈活配置,對軟件協同開發、調試提供了一種安全方案。
1 系統結構模型
普通的芯片仿真器系統是由硬件和軟件兩部分構成的。硬件部分主要由芯片仿真電路、調試協議轉換電路及其他接口電路組成[7],其中芯片仿真電路通過FPGA實現芯片邏輯;調試協議基于聯合測試工作組(Joint Test Action Group,JTAG)實現;軟件部分主要由軟件集成開發環境(Integrated Development Environment,IDE)及調試驅動接口組成,其中IDE主要包括程序編譯、鏈接、調試等功能,調試驅動接口以動態鏈接庫(Dynamic Link Library,DLL)形式存在,主要包括軟件與硬件進行交互的接口函數。
為實現在芯片仿真器上程序訪問權限可配置的功能,除了具有普通仿真器的功能外,仿真器硬件包括一個訪問權限控制模塊,仿真器軟件包括程序加密模塊、程序加密下載模塊、權限配置生成模塊、權限配置下載模塊。
程序加密模塊主要實現對HEX格式的API程序文件進行加密,并生成密文格式的文件。權限配置生成模塊主要實現對程序的訪問權限以配置文件的形式進行靈活配置,并生成密文格式的文件。程序加密下載模塊和權限配置下載模塊位于調試驅動接口DLL中,分別完成密文格式的API程序及權限配置文件的下載操作。
系統框圖如圖1所示。
使用IDE進行用戶程序調試時,IDE首先調用DLL接口,將訪問權限配置文件及密文程序文件進行解析,然后通過通用串行總線(Universal Serial Bus,USB)接口[8]發送到調試協議轉換模塊,調試協議轉換模塊通過JTAG[9]通道將程序數據及訪問權限配置信息寫入芯片仿真模塊。
完成API程序的寫入及訪問權限配置后,將用戶程序下載到芯片仿真模塊,即可啟動正常的調試流程。出于安全考慮,程序加密、程序訪問權限配置實現原理及工具對用戶程序開發者嚴格保密。API程序開發者將生成好的密文文件傳遞給用戶程序開發者。
2 設計及實現
本節主要對程序加密、訪問權限配置生成、程序及權限配置下載的設計及實現方法進行說明。
2.1 程序加密
程序加密模塊采用可視化工具的方式實現,通過對API程序進行加密處理,輸入的原始數據為HEX格式的程序文件,輸出的目標數據為加密后的數據,并支持程序地址范圍檢查和空白區域的填充功能。
程序加密模塊的處理流程如圖2所示。
設定的地址范圍通過界面輸入,如果程序數據實際地址范圍小于設定的地址范圍,可以選擇是否進行空白區域填充:如果不選擇填充,空白區域將不會填充數據;如果選擇填充,將以一字節為單位重復進行填充,填充值可以通過界面指定,如圖3所示。
2.2 訪問權限配置信息生成
程序訪問權限配置信息以配置記錄的形式存在于配置文件中,每條配置記錄通過索引對應于芯片硬件中程序訪問控制模塊中的配置區。配置文件通過將明文配置記錄按索引號從小到大順序進行組合,加密處理后生成密文配置文件。訪問權限配置信息生成流程如圖4所示。
每條配置記錄以界面的形式進行輸入,如圖5所示。
權限配置內容包括程序地址范圍配置、讀寫權限配置、調試權限配置,其中讀寫權限是指調試過程中是否允許讀、寫操作,調試權限是指調試過程中是否允許單步和斷點調試。
通過配置文件生成訪問權限配置信息,可以對配置信息進行靈活的修改,并支持多條記錄同時配置,滿足不同的配置需求。其中配置文件以密文形式存儲,隱藏了配置細節。
2.3 程序及權限配置下載
芯片仿真模塊提供程序訪問權限控制的配置接口及硬件實現,配置接口主要以寄存器的形式提供,DLL通過寫寄存器完成配置操作。密文API程序數據由DLL進行解析后下載仿真器硬件中的芯片仿真模塊。如果有多段API程序數據需要保護,可以生成多個加密后的程序數據,DLL分別進行解析、下載。下載順序為先進行訪問權限配置下載,然后再執行程序下載。具體操作流程如圖6所示。
在獲取每條配置記錄信息時,對配置記錄信息的合法性進行檢查,主要包括不同的配置記錄的地址范圍不能重疊;在進行API程序下載時,對程序數據的合法性進行檢查,包括不同程序的地址范圍不能重疊、單個程序的地址必須位于一條配置記錄的地址范圍內。如果合法性檢查階段出錯,則進行報錯提示并終止流程。
2.4 應用舉例
API程序及權限配置信息下載操作完成后,芯片仿真模塊重新上電,權限配置信息生效,然后執行正常的用戶程序調試即可。
本例中程序地址范圍為0x10000~0x100FF,訪問權限配置為不可讀、不可寫、不可調試,在調試用戶程序時,如果執行到調用該API程序的用戶代碼時,則無法進入API程序內部執行,并且無法通過IDE存儲器窗口查看實際內容,讀出來的數據將以全0顯示,如圖7所示。
3 結束語
本文提供芯片仿真器上API程序保護的一種實現方案,通過對程序加密及權限配置控制,實現在下載及調試階段對程序進行保護,在一定程度上達到了對API程序安全調試的目的。
參考文獻
[1] 劉青龍,董家山.物聯網無人機應用關鍵技術研究[J].電子技術應用,2017,43(11):22-26.
[2] 姚遠.基于仿真開發環境的嵌入式調試的研究與實現[D].成都:電子科技大學,2008.
[3] 謝長生,徐睿.FPGA在ASIC設計流程中的應用[J].微電子技術,2001,29(6):50-52.
[4] 張欣.基于ARM芯片的嵌入式調試系統的研究與實現[D].青島:中國海洋大學,2007.
[5] 陳崢.基于動態連續數據的GPU調試系統設計和實現[J].電子技術應用,2018,44(6):8-10,14.
[6] 魏忠,蔡勇,雷紅衛.嵌入式開發詳解[M].北京.電子工業出版社,2003.
[7] 王永生,葉以正,肖立伊,等.采用JTAG結構實現SoC芯片的片上仿真器及接口[J].計算機工程與應用,2002,38(16):240-243.
[8] 陳云飛.基于USB2.0的邊界掃描控制器的研制[D].武漢:武漢理工大學,2007.
[9] IEEE.1149.1-2013-IEEE standard for test access port and boundary-scan architecture[S/OL].(2013-05-13)[2019-05-28].https://standards.ieee.org/standard/1149_1-2013.html.
作者信息:
張海峰1,2,劉 俊1,2,種 挺1,2,原義棟1,2
(1.北京智芯微電子科技有限公司 國家電網公司重點實驗室電力芯片設計分析實驗室,北京100192;
2.北京智芯微電子科技有限公司 北京市電力高可靠性集成電路設計工程技術研究中心,北京100192)