文献标识码: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)