基于逆向工程的XilinxFPGA固核IP破解方法与流程

文档序号:14911686发布日期:2018-07-10 23:35阅读:6447来源:国知局

本发明属于芯片硬件安全技术领域,具体涉及一种基于逆向工程的Xilinx FPGA固核IP 破解方法的设计。



背景技术:

IP核,全称知识产权核,在集成电路设计中,IP是指可以重复使用的具有自主知识产权功能的集成电路设计模块。按照设计层次的不同,IP核可以分为三种:软核、固核和硬核。软核只完成RTL级的行为设计,以HDL的方式提交使用。为了保护这种形式的IP核,它的源代码会被加密。固核比软核具有更大的设计深度,已完成了门级综合、时序仿真并经过了硬件验证,以门级网表的形式提交使用。只要用户提供相同的单元库时序参数,一般就可以正确完成物理设计。但是网表也通常会被设计人员加密,用户难以从网表中获得具体的设计信息。硬核以IC版图的形式提交,并经过实际流片验证,在物理形态及性能上具有不可更改性。

目前,学术界已有很多关于如何防止IP核被破解的方法的研究,比如:数字水印法和测量法等。数字水印法保证了在嵌入代表IP核拥有者的签名的同时不会对IP核的功能造成影响。比如:使用未被使用的查找表(LUT)来插入水印,或者通过对电路中的非关键路径做一些改变来插入水印,这些工作都是在设计流程的布局布线阶段进行的。测量法在每个IP核实例中植入一串独特的序列号,用来识别IP核的拥有者并确定使用IP核时的优先级。此外,对软核IP进行加密也是一个有效的防护措施。比如:Xilinx使用IEEE P1735的标准来加密一些IP核。

但是,学术界关于如何破解加密IP核的相关研究很少。现有技术中仅提到了破解软核 IP的方法,该方法把软核IP的加密源代码和相关约束作为ISE综合的输入文件,以便在综合后得到相应的网表文件,并根据网表文件分析出IP的源代码。但是,该方法有较大的局限性,对固核IP而言,其网表文件往往也被设计人员加密,这使得该方法失效。



技术实现要素:

本发明的目的是为了发现侵犯Xilinx FPGA知识产权的途径,并将其提供给FPGA开发厂商,以便其设计相应的防御措施来防止IP核被侵权,提出了一种基于逆向工程的Xilinx FPGA固核IP破解方法。

本发明的技术方案为:基于逆向工程的Xilinx FPGA固核IP破解方法,包括以下步骤:

S1、建立工程,编写Verilog文件作为工程的主文件,使用内核生成器调用待破解固核IP并配置固核IP的相关参数。

S2、获取FPGA中的Wrapper文件,得到待破解固核IP的输入输出端口信息。

其中,待破解固核IP的输入输出端口信息包括待破解固核IP的输入输出端口数量、端口名称和端口位宽等信息。

S3、根据FPGA可使用输入输出端口数量M和待破解固核IP输入输出端口数量N的大小关系选择不同的破解模式对待破解固核IP进行破解。

比较FPGA可使用输入输出端口数量M和待破解固核IP输入输出端口数量N的大小,若M>N则选择直接破解模式对待破解固核IP进行破解,否则选择添加模块破解模式对待破解固核IP进行破解。

其中,直接破解模式具体为:

根据步骤S2中得到的待破解固核IP的输入输出端口信息,在步骤S1中编写的Verilog 文件中例化待破解固核IP,使得待破解固核IP的输入输出端口与主文件的输入输出端口直接相连。

添加模块破解模式具体为:

在待破解固核IP的输入端口添加mid1模块,mid1模块的输入端口与主文件的输入端口相连,其输出端口和待破解固核IP的输入端口相连;在待破解固核IP的输出端口添加 mid2模块,mid2模块的输入端口待破解固核IP的输出端口相连,其输出端口与主文件的输出端口相连。

其中,mid1模块为一个译码器,其译码方式为:将二进制码转换为m中取1码,根据待破解固核IP的输入端口数m,确定mid1模块选择的译码器类型为线/ 线译码器;mid2模块为一个编码器,其编码方式为:将n中取1码还原为二进制编码,根据待破解固核IP的输出端口数n,确定mid2模块选择的编码器类型为线/线编码器;为向下取整运算。

S4、获取工程的比特流文件。

S5、采用FPGA逆向工程工具对比特流文件进行逆向工程操作,得到工程的Verilog源代码。

S6、根据步骤S3选择的破解模式对Verilog源代码进行相应处理,得到待破解固核IP 的源代码,从而破解固核IP。

若步骤S3中选择的直接破解模式,则步骤S5中得到的Verilog源代码即为待破解固核 IP的源代码;若步骤S3中选择的添加模块破解模式,则对步骤S5中得到的Verilog源代码进行形式化验证,剔除掉mid1模块和mid2模块的代码,得到待破解固核IP的源代码,从而破解固核IP。

本发明的有益效果是:本发明可以完整破解出网表信息加密但能生成比特流的固核IP 的Verilog源代码,从而发现侵犯Xilinx FPGA知识产权的途径,并将其提供给FPGA开发厂商,以便其设计相应的防御措施来防止IP核被侵权。

附图说明

图1所示为本发明实施例提供的基于逆向工程的Xilinx FPGA固核IP破解方法流程图。

图2所示为本发明实施例提供的直接破解模式中的系统整体框图。

图3所示为本发明实施例提供的添加mid1模块时的系统整体框图。

图4所示为本发明实施例提供的添加mid2模块后的系统整体框图。

具体实施方式

现在将参考附图来详细描述本发明的示例性实施方式。应当理解,附图中示出和描述的实施方式仅仅是示例性的,意在阐释本发明的原理和精神,而并非限制本发明的范围。

本发明实施例提供了一种基于逆向工程的Xilinx FPGA固核IP破解方法,如图1所示,包括以下步骤:

S1、建立工程,编写Verilog文件作为工程的主文件,使用内核生成器(Core Generator) 调用待破解固核IP并配置固核IP的相关参数。

S2、获取FPGA中的Wrapper文件,得到待破解固核IP的输入输出端口信息。

该步骤涉及到FPGA开发软件(ISE)的两个子窗口:Source子窗口、Process子窗口。首先,在配置完固核IP的相关参数后,我们可以在Source子窗口选中该固核IP;然后,Process 子窗口会出现View HDL Function Model选项,双击后可打开该固核IP所对应的Wrapper 文件,文件中包含了固核IP的输入输出端口数量、端口名称和端口位宽等信息。

S3、根据FPGA可使用输入输出端口数量M和待破解固核IP输入输出端口数量N的大小关系选择不同的破解模式对待破解固核IP进行破解。

若M>N则选择直接破解模式对待破解固核IP进行破解。根据步骤S2中得到的待破解固核IP的输入输出端口信息,在步骤S1中编写的Verilog文件中例化待破解固核IP,使得待破解固核IP的输入输出端口与主文件的输入输出端口直接相连。本发明实施例中,假设待破解固核IP有m个输入端口和n个输出端口(m+n=N),则系统整体框图如图2所示。

若M≤N则选择添加模块破解模式对待破解固核IP进行破解。

在待破解固核IP的输入端口添加mid1模块,mid1模块的输入端口与主文件的输入端口相连,其输出端口和待破解固核IP的输入端口相连。为了防止模块在综合时被优化,需要对mid1模块赋予具体的功能。因此,本发明实施例中,设计mid1模块为一个译码器,其译码方式为:将二进制码转换为m中取1码。根据待破解固核IP的输入端口数m,确定 mid1模块选择的译码器类型为线/线译码器,如图3所示,为向下取整运算。例如:若m=7,则mid1模块选择的译码器类型为3线/8线译码器。在此基础上,在mid1模块的输入端增加一个时钟输入端口CLK和一个复位端口Reset,当时钟上升沿到来时,若复位信号有效,则所有输出为0,否则mid1模块按照译码器功能工作。

在待破解固核IP的输出端口添加mid2模块,mid2模块的输入端口待破解固核IP的输出端口相连,其输出端口与主文件的输出端口相连。本发明实施例中,假设待破解固核IP 有m个输入端口和n个输出端口(m+n=N),主文件有k个输出端口,如图4所示。同样,为了防止mid2模块在综合时不被优化,在设计mid2模块的功能时,要遵循下面的原则:在相同的输入条件下,添加mid2模块后系统整体的输出和未添加mid2模块时系统整体的输出不完全相同,即图3和图4的系统整体在相同的输入条件下,输出不完全相同。因此,设计mid2模块为一个编码器,其编码方式:将n中取1码还原成二进制编码。根据待破解固核IP的输出端口数n,确定mid2模块选择的编码器类型为线/线编码器,例如:若n=7,则mid2模块选择8线/3线编码器。

至此,我们建立了一个如图4所示的由三个模块(mid1,固核IP,mid2)组成的工程。

S4、获取工程的比特流文件。

S5、采用FPGA逆向工程工具对比特流文件进行逆向工程操作,得到工程的Verilog源代码。

S6、根据步骤S3选择的破解模式对Verilog源代码进行相应处理,得到待破解固核IP 的源代码,从而破解固核IP。

若步骤S3中选择的直接破解模式,则步骤S5中得到的Verilog源代码即为待破解固核 IP的源代码;若步骤S3中选择的添加模块破解模式,则对步骤S5中得到的Verilog源代码进行形式化验证,剔除掉mid1模块和mid2模块的代码,得到待破解固核IP的源代码,从而破解固核IP。

根据本发明实施例提供的固核IP破解方法,利用Xilinx公司的ISE软件对网表加密且能生成比特流的固核IP进行破解。首先选择两个ISE软件中的固核IP做测试,两个固核IP 都是基于芯片型号Spartan6XC6SLX9,封装FTG256这款FPGA的。

第一个固核IP名称是Multiply Accumulator,版本2.0,属于网表加密且能生成比特流类的固核IP。根据本发明内容,首先我们建立一个工程test,用Verilog语言编写一个主文件top.v,使用Core Generator找到Multiply Accumulator这个固核IP并调用它,然后对固核 IP参数进行配置。这里固核IP端口数小于15且位宽大于15的端口数小于5,所以我们编写的top.v只实例化了固核IP一个模块,将top的输入端口直接连接到固核IP的输入端口,输出端口直接连到固核IP的输出端口。然后获取比特流文件并对比特流文件进行逆向,成功得到Multiply Accumulator的Verilog源代码。

第二个固核IP选择端口比较复杂的AXI Virtual FIFO Controller版本1.1,用到AXI4 总线,属于网表加密且能生成比特流的类型。首先我们建立一个工程test,用Verilog语言编写一个主文件top.v,由于固核IP的输入输出端口很多并且很多端口位宽很大,如果使用第一个实例的方法会出现错误提示IOB资源不够,所以需要在固核IP模块的输入端口前设计一个模块mid1,其对应Verilog文件为mid1.v。该模块的输入端口与top.v的输入端口相连,输出端口和固核IP的输出端口相连。根据Wrapper文件,固核IP的输入端口数为105,所以设计mid1模块为7线/128线译码器。在此基础上,在mid1模块的输入端添加一个时钟信号输入端口CLK和一个复位信号输入端口Reset。同时在固核IP的输出端口设计一个模块mid2,其对应的Verilog文件为mid2.v,该模块的输入端口与固核IP的输出端口连接,根据Wrapper文件,固核IP的输出端口数为233,所以设计mid2模块为256线/8线编码器。这样避免了IOB资源使用过度的情况。然后获取比特流文件,经过形式化验证剔除mid1 模块和mid2模块的代码,成功得到AXI Virtual FIFO Controller的Verilog源代码。

选择芯片型号Spartan6XC6SLX9,封装FTG256这款FPGA,选择对这款FPGA中的一些固核IP进行破解,破解情况的记录表格如表1所示。

表1

本领域的普通技术人员将会意识到,这里所述的实施例是为了帮助读者理解本发明的原理,应被理解为本发明的保护范围并不局限于这样的特别陈述和实施例。本领域的普通技术人员可以根据本发明公开的这些技术启示做出各种不脱离本发明实质的其它各种具体变形和组合,这些变形和组合仍然在本发明的保护范围内。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1