CN111626009A - 寄存器传输级Verilog设计的安全验证属性自动提取方法 - Google Patents
寄存器传输级Verilog设计的安全验证属性自动提取方法 Download PDFInfo
- Publication number
- CN111626009A CN111626009A CN202010362018.1A CN202010362018A CN111626009A CN 111626009 A CN111626009 A CN 111626009A CN 202010362018 A CN202010362018 A CN 202010362018A CN 111626009 A CN111626009 A CN 111626009A
- Authority
- CN
- China
- Prior art keywords
- file
- node
- tree
- control flow
- verilog
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Withdrawn
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F30/00—Computer-aided design [CAD]
- G06F30/30—Circuit design
- G06F30/32—Circuit design at the digital level
- G06F30/33—Design verification, e.g. functional simulation or model checking
- G06F30/3308—Design verification, e.g. functional simulation or model checking using simulation
Landscapes
- Engineering & Computer Science (AREA)
- Computer Hardware Design (AREA)
- Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Evolutionary Computation (AREA)
- Geometry (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Debugging And Monitoring (AREA)
Abstract
本发明公开了一种寄存器传输级Verilog设计的安全验证属性自动提取方法,包括:Verilog实例化树步骤,采用静态分析Verilog设计的方法得到实例化树,树中的每个节点代表一个模块的控制流图;Daikon生成不变量属性步骤,遍历控制流图,生成Daikon的输入文件,包括声明文件、追踪文件和条件分离文件,然后利用Daikon生成不变量属性;安全验证属性步骤,依据生成的不变量属性文件,将其中的不变量属性的语法格式转换为安全验证属性;对Verilog设计进行模型检测验证,发现硬件设计安全漏洞。本发明可以实现自动化提取安全验证属性,大大提高了安全验证效率;可以为硬件安全验证提供有力的支撑。
Description
技术领域
本发明涉及集成电路测试领域,具体涉及到一种寄存器传输级Verilog设计的安全验证属性自动提取方法。
背景技术
当前的硬件设计验证技术中使用的安全验证属性通常是验证人员手动设定的,这种方式要求验证人员对测试的硬件设计非常了解,同时需要大量的时间设定属性,而设定的属性又容易出错。为了提高安全验证属性的设定效率,提高验证属性的设定效率,需要实现安全验证属性的自动化提取技术。尤其随着硬件设计规模的不断增加,验证在硬件设计所占的比重越来越多。因此硬件设计安全验证属性的自动化提取技术在硬件设计的安全验证中具有越来越重要的作用。
本发明涉及集成电路测试领域,具体涉及到一种寄存器传输级Verilog设计的安全验证属性自动提取方法,分析Verilog设计仿真产生的VCD文件,从VCD文件中提取出Daikon的输入文件,利用Daikon产生不变量属性文件,将文件中的不变量属性转换为安全验证属性,对Verilog设计进行安全验证,从而达到检测硬件设计安全的目的。
安全验证属性可以作为断言用于仿真测试,也可以作为时序逻辑用于模型检测验证。安全验证属性的定义,是硬件设计安全验证的关键,有着非常重要的作用。另一方面,模型检测验证与仿真验证相比,不需要生成测试向量,可以对测试电路的整个状态空间进行验证。当验证属性为真时,通过验证;当验证属性为假时,模型检测工具可以生成反例,指示引发验证属性错误的一系列状态转换关系,通过对状态转换关系的分析,可以发现常规检测技术难以发现的硬件设计安全漏洞。
通常的安全验证属性是验证人员手动设定,耗时且容易出错,对此近年有文献提出自动化提取安全验证属性的技术。例如在文献“ASAX:Automatic Security AssertionExtraction forDetecting Hardware Trojans”中提出的安全断言自动提取方法。该方法围绕利用定理证明进行验证,以检测寄存器传输级设计中的硬件木马为目标,而自动提取不变量属性。首先,利用少量仿真结果从Verilog设计中选择不易激活和不易传播的信号进行标记,然后利用Daikon从仿真产生的VCD文件中挖掘不变量属性。随后,将不变量属性映射到预先定义的不变量模板进行安全验证属性的自动提取。四种类型的不变量属性模板依据预先建立的领域安全知识库定义。这种方法,一方面需要预先建立领域安全知识库,以及预先定义的不变量模板,还需要在利用Daikon前预先选择验证信号进行标记。验证信号的预先选择,可能漏掉不安全的信号变量。不变量模板的预先定义均会对安全验证属性的挖掘产生约束,影响安全验证属性的提取效率和有效性,进而影响硬件设计的安全验证。
发明内容
针对现有技术的不足,本发明旨在提供一种寄存器传输级Verilog设计的安全验证属性自动提取方法,用以解决高效自动提取安全验证属性的问题。
为了实现上述目的,本发明采用如下技术方案:
本发明公开了一种寄存器传输级Verilog设计的安全验证属性自动提取方法,包括:
Verilog实例化树步骤,采用静态分析Verilog设计的方法得到实例化树,树中的每个节点代表一个模块的控制流图;
Daikon生成不变量属性步骤,遍历控制流图,生成Daikon的输入文件,包括声明文件、追踪文件和条件分离文件,然后利用Daikon生成不变量属性;
安全验证属性步骤,依据生成的不变量属性文件,将其中的不变量属性的语法格式转换为安全验证属性;对Verilog设计进行模型检测验证,发现硬件设计安全漏洞。
更进一步,Verilog实例化树步骤:
依据RTL硬件木马测试向量的生成方法,生成寄存器传输级Verilog设计的实例化树。
更进一步,依据生成的实例化树,分析仿真Verilog设计生成的VCD文件,生成Daikon工具的输入文件,包括声明文件,追踪文件和条件分离文件。
更进一步,依据生成的声明文件、追踪文件和条件分离文件,作为Daikon的输入文件,输出生成不变量文件。
更进一步,S1.1依据RTL硬件木马测试向量的生成方法生成方法,生成Verilog设计的控制流图,每个Verilog模块对应一个控制流图。初始状态时,fatherNode节点对应顶层模块,也是整个实例化树的根root。实例化子模块insVar初始为空;步骤S1.3至S1.6是递归调用方式。
S1.2获取root节点中所有的实例化语句insVar,放置到insVar变量列表insVarList中;
S1.3如果insVarList为空,整个Verilog设计对应的实例化树生成,步骤S1结束;如果insVarList不为空,取出其中一个元素insVar;
S1.4创建childNode,此节点对应父节点fatherNode模块中包含的一个例化语句insVar。ChildNode的父节点设置为fatherNode,生成insVar对应子模块的控制流图CFG,加入到childNode中;
S1.5遍历CFG,将其中的实例化语句subInsVar加入到列表subInsVarList中;
S1.6如果subInsVarList不为空,取出一个subInsVar;fahterNode设置为insVar,insVar设置为subInsVar;跳转至S1.4;如果subInsVarList为空,退回到上一级的fatherNode节点继续处理剩余的insVar。
更进一步,步骤S2具体如下:
S2.1创建声明文件,基本信息写入声明文件头部。广度遍历实例化树,获取每个节点insVar的控制流图,每个控制流图的ENTER节点,对应着Daikon的声明文件中的ENTER程序点;控制流图的EXIT节点对应着Daikon声明文件中的EXIT程序点。从控制流图中获取模块中的变量名称、变量类型转换为变量声明写入声明文件。遍历完实例化树,生成了整个Verilog设计的声明文件;
S2.2创建追踪文件,读取仿真生成的VCD文件,从文件首部开始,首先读取到的是模块变量的符号集合。创建varList,保存变量信息。随后读取到发生数据变化的每个仿真时间点,以及符号值,符号值写入varList。VarList中的每个元素包含信息:变量名,实例化树路径,位宽,符号,仿真时间点,上一个时间点值,当前时间点值。将varList信息写入追踪文件。整个VCD文件读取完,同时追踪文件的写入完成;
S2.3生成条件分离文件,广度遍历实例化树,对于每一个节点insVar,依据insVar节点对应的控制流图中的ENTER节点设置条件分离文件中的程序入口点,写入条件分离文件。遍历控制流图,获取控制节点中的语句条件,写入条件分离文件。整个实例化树遍历完成,条件分离文件写入完成。
本发明的有益效果在于:通过利用Verilog设计的控制流图,以及仿真生成的VCD文件,生成了Daikon的输入文件。然后利用Daikon生成了不变量属性文件。整个的过程可以实现自动化提取安全验证属性,大大提高了安全验证效率。同时,提取的安全验证属性,利用强大的NuSMV模型检测工具,可以对Verilog设计的整个状态空间进行检测,发掘出常规检查技术难以发现的安全漏洞。本方法可以为硬件安全验证提供有力的支撑。
附图说明
图1为本发明的整体设计方案流程图;
图2为本发明的构建成的实例化树形式;
图3为本发明的构建实例化树的流程示意图;
图4为本发明的构建声明文件的流程示意图;
图5为本发明的构建追踪文件的流程示意图;
图6为本发明的构建条件分离文件的流程示意图。
具体实施方式
以下将结合附图对本发明作进一步的描述,需要说明的是,以下实施例以本技术方案为前提,给出了详细的实施方式和具体的操作过程,但本发明的范围并不限于本实施例。
该方法采用静态分析Verilog设计的方法得到实例化树,树中的每个节点代表一个模块的控制流图,遍历控制流图,生成Daikon的输入文件,包括声明文件、追踪文件和条件分离文件,然后利用Daikon生成不变量属性。Verilog设计中的所有信号变量均由不变量属性生成,这些属性转换成时序逻辑语法后可以直接用于Verilog设计的模型检测验证,有效发掘硬件设计安全漏洞的目的。
如图1所示,所述寄存器传输级Verilog设计的安全验证属性自动提取方法包括如下步骤
步骤1:依据已获得授权的发明专利(一种RTL硬件木马测试向量的生成方法;申请号:201710462372.X)中的控制流图为基础,生成寄存器传输级Verilog设计的实例化树,生成的实例化树如图2所示,生成实例化树的过程如图3所示。
1.1)依据已获得授权的发明专利(一种RTL硬件木马测试向量的生成方法;申请号:201710462372.X)中的控制流图生成方法,生成Verilog设计的控制流图,每个Verilog模块对应一个控制流图。初始状态时,fatherNode节点对应顶层模块,也是整个实例化树的根root。实例化子模块insVar初始为空。步骤1.4)至1.6)是递归调用方式。
1.2)获取root节点中所有的实例化语句insVar,放置到insVar变量列表insVarList中。
1.3)如果insVarList为空,整个Verilog设计对应的实例化树生成,步骤1结束。如果insVarList不为空,取出其中一个元素insVar。
1.4)创建childNode,此节点对应父节点fatherNode模块中包含的一个例化语句insVar。ChildNode的父节点设置为fatherNode,生成insVar对应子模块的控制流图CFG,加入到childNode中。
1.5)遍历CFG,将其中的实例化语句subInsVar加入到列表subInsVarList中。
1.6)如果subInsVarList不为空,取出一个subInsVar。fahterNode设置为insVar,insVar设置为subInsVar。跳转至步骤1.4)。如果subInsVarList为空,退回到上一级的fatherNode节点继续处理剩余的insVar。
步骤2.依据步骤1生成的实例化树insTree,分析Verilog设计仿真生成的VCD文件,生成Daikon的输入文件,包括声明文件,追踪文件和条件分离文件:
2.1)创建声明文件,如图4所示,声明文件依次写入如下内容:
(1)声明文件头部写入如下基本信息:
“decl-version 2.0
input-language verilog
var-comparability implicit”。
(2)广度遍历实例化树insTree,获取每个节点insVar包含的子模块控制流图,每个控制流图的ENTER节点,对应着Daikon的声明文件中的ENTER程序点,写入声明文件的内容为:
“ppt模块实例化变量名():::ENTER
ppt-type enter
parent parent上层模块实例化变量名:::OBJECT 1”。
(3)控制流图的EXIT节点对应着Daikon声明文件中的EXIT程序点,对应着Daikon的声明文件中的EXIT程序点,写入声明文件的内容为:
“ppt模块实例化变量名():::EXIT<id>
ppt-type subexit
parent parent上层模块实例化变量名:::OBJECT 1”。
(4)从控制流图中获取模块中的变量名、变量类型等信息,写入声明文件的内容为:
“variable<变量名>
var-kind variable
dec-type<变量类型>
rep-type<变量类型>”。
重复此过程,直至所有变量信息写入声明文件。
(5)重复步骤(2)至(4),直至所有insTree上的节点都处理完。声明文件生成。
2.2)创建追踪文件,如图5所示,追踪文件依次写入如下内容:
(1)读取仿真生成的VCD文件,从文件首部开始,首先读取到的是模块符号集合,当读取到“$scope module模块实例化名称$end”时,后继内容为模块中的变量符号声明。创建varList,保存变量信息,如果读取到“$var parameter位宽符号Verilog变量名$end”,则可确定“符号”代表“Verilog变量名”,类型为parameter,该变量名的位宽为“位宽”。如果读取到“$var wire位宽符号Verilog变量名$end”,则变量类型为wire。如果读取到“$var reg位宽符号Verilog变量名$end”,则变量类型为reg。即“$var”后面表明了变量的类型。当读取到“$upscope $end”,表明上一个对应的“$scope module模块实例化名称$end”结束。当读取到“$enddefinitions $end”,所有模块的变量定义结束。结束时,生成了所有变量的列表varList,列表中的每个元素包含信息:变量名,实例化树路径,位宽,符号,仿真时间点,上一个时间点值,当前时间点值。其中,实例化树路径是从根节点至本节点的路径,根节点的实例化树路径为root。
(2)随后读取到发生数据变化的每个仿真时间点,符号及其变化的值。如果读取到“#0”表明仿真开始的初始时间,后继为每个符号对应的初始值,每行一个符号及其变化值。依次读取每行,将varList中的“当前时间点值”写入“上一个时间点值”,再将读取的符号值写入varList中的“当前时间点值”。当读取到下个“#时间点”时,表明一个新的仿真时间点,则先将varList的值写入追踪文件,写入的内容为:
“<变量名>
<上一个时间点值>
<当前时间点值>”。然后开始读取下一个“#时间点”的符号值,更新varList值,写入追踪文件。重复本步骤,直至VCD文件读取完毕,追踪文件生成。
2.3)生成条件分离文件,广度遍历实例化树insTree,如图6所示,条件分离文件依次写入如下内容:
(1)获取每一个节点insVar,依据insVar对应的控制流图中的ENTER节点设置条件分离文件中的程序入口点,写入条件分离文件的内容为:
“PPT_NAME模块名”。
(2)遍历insVar包含的控制流图,获取控制流图中的控制节点,取出其中的语句条件,写入条件分离文件。
(3)所有实例化树节点重复步骤(1)至(2),直至所有节点insVar处理完,条件分离文件写入完成。
步骤3.依据步骤2生成的声明文件、追踪文件和条件分离文件,作为Daikon的输入文件,输出生成不变量属性文件。
步骤4.依据步骤3生成的不变量属性文件,属性格式为“Daikon format”,是一种与Java类似的语法,将这种语法格式转换为安全验证属性,可选属性有LTL(线性时序逻辑),CTL(计算树逻辑)和PSL(属性定义语言)。
步骤5.依据正在申请授权的发明专利(寄存器传输级Verilog代码的SMV模型构建方法;申请号:CN201910010500)中的SMV模型生成方法,生成模型检测模型。依据步骤4生成的安全验证属性,以及本步骤生成的模型检测模型,用模型检测工具NuSMV对Verilog设计进行模型检测验证。当验证结果为“true”时,验证属性通过验证。当验证结果为“false”时,生成反例。分析反例,发现硬件设计安全漏洞。
实施例1
选取Trust-Hub上的RS232-T700测试基准为分析对象,进行安全验证属性的自动提取。整个测试基准包含了三个模块:uart,u_xmit和u_rec。顶层模块uart中包含了2个子模块u_xmit和u_rec的实例化语句。子模块u_xmit和u_rec中不包含子模块例化语句。模块u_xmit中有硬件木马,以此模块为验证对象。该测试基准电路中的硬件木马包含了一个有限状态机,这个状态机检测输入变量xmit_dataH的序列,当出现序列8’hAA,8’h55,8’h00和8’hFF的时候,木马被激活,输出变量xmit_doneH被置“0”,电路出现异常。
步骤1:依据已获得授权的发明专利(一种RTL硬件木马测试向量的生成方法;申请号:201710462372.X)中的控制流图为基础,生成寄存器传输级Verilog设计的实例化树,生成的实例化树如图2所示,生成实例化树的过程如图3所示。
1.模块uart的Verilog源码如下:
源码
1.1)依据已获得授权的发明专利(一种RTL硬件木马测试向量的生成方法;申请号:201710462372.X)中的控制流图生成方法,生成Verilog设计的控制流图,每个Verilog模块对应一个控制流图。顶层模块uart实例化名为my_uart1。初始状态时,fatherNode节点对应为my_uart1,也是整个实例化树的根root,实例化子模块insVar初始为空。随后,生成顶层模块uart对应的控制流图,将控制流图包含到my_uart1节点中。步骤1.4)至步骤1.7)是基于深度遍历的递归调用处理方式。
1.2)获取my_uart1节点中的控制流图,遍历控制流图CFG,获取my_uart1中包含的2个实例化语句:
“u_xmit iXMIT(......);
u_rec iRECEIVER(......);”
放置到列表insVarList中,分别表达为“my_uart1.iXMIT”,“my_uart1.iRECEIVER”。
1.3)insVarList不为空,取出其中一个元素insVar(my_uart1.iXMIT),fatherNode设置为my_uart1。
1.4)创建my_uart1.iXMIT对应的节点childNode,设置my_uart1.iXMIT的父节点为my_uart1。生成my_uart1.iXMIT对应的控制流图,包含到my_uart1.iXMIT节点中。遍历my_uart1.iXMIT节点包含的控制流图,得到列表subInsVarList为空,返回到上一层递归。
1.5)insVarList不为空,取出其中一个元素insVar(my_uart1.iRECEIVER),fatherNode设置为my_uart1。
1.6)创建my_uart1.iRECEIVER对应的节点childNode,设置my_uart1.iRECEIVER的父节点为my_uart1。生成my_uart1.iRECEIVER对应的控制流图,包含到my_uart1.iRECEIVER节点中。遍历my_uart1.iRECEIVER节点包含的控制流图,得到列表subInsVarList为空,返回到上一层递归。
1.7)insVarList为空,整个Verilog设计对应的实例化树insTree生成,步骤1结束。
步骤2.依据步骤1生成的实例化树insTree,分析Verilog设计仿真生成的VCD文件,生成Daikon的输入文件,包括声明文件,追踪文件和条件分离文件。用ModelSim仿真Trust-Hub RS232 T700生成的VCD文件内容如下所示,其中的“top_tb”是测试文件testbench的模块名。
2.1)创建声明文件uart.decls,如图4所示,声明文件依次写入如下内容:
(1)声明文件头部写入如下基本信息:
“decl-version 2.0
input-language verilog
var-comparability implicit”。
(2)广度遍历实例化树insTree,获取my_uart1节点包含的控制流图,依据控制流图的ENTER节点,对应着Daikon的声明文件中的ENTER程序点,写入声明文件的内容为:
“ppt top_tb.my_uart1():::ENTER
ppt-type enter
parent parent top_tb:::OBJECT 1”。
(3)控制流图的EXIT节点对应着Daikon声明文件中的EXIT程序点,写入声明文件的内容为:
“ppt top_tb.my_uart1():::EXIT127
ppt-type subexit
parent parent top_tb:::OBJECT 1”。
(4)从控制流图中获取my_uart1节点中的变量名、变量类型等信息,Verilog设计中的变量“input sys_clk”写入声明文件的内容为:
“variable sys_clk
var-kind variable
dec-type int
rep-type int”。
重复此过程,直至my_uart1节点中所有变量信息写入声明文件。
(5)广度遍历实例化树insTree,获取节点my_uart1.iXMIT包含的控制流图,依据控制流图的ENTER节点,对应Daikon的声明文件中的ENTER程序点,写入声明文件的内容为:
“ppt top_tb.my_uart1.iXMIT():::ENTER
ppt-type enter
parent parent top_tb.my_uart1:::OBJECT 1”。
(6)控制流图的EXIT节点对应着Daikon声明文件中的EXIT程序点,写入声明文件的内容为:
“ppt top_tb.my_uart1.iXMIT():::EXIT170
ppt-type subexit
parent parent top_tb.my_uart1:::OBJECT 1”。
(7)从控制流图中获取my_uart1.iXMIT节点中的变量名、变量类型等信息,Verilog设计中的变量“reg xmitH”写入声明文件的内容为:
“variable xmitH
var-kind variable
dec-type int
rep-type int”。
重复此过程,直至my_uart1.iXMIT节点中所有变量信息写入声明文件。
(8)广度遍历实例化树insTree,获取节点my_uart1.iRECEIVER包含的控制流图,依据控制流图的ENTER节点,对应Daikon的声明文件中的ENTER程序点,写入声明文件的内容为:
“ppt top_tb.my_uart1.iRECEIVER():::ENTER
ppt-type enter
parent parent top_tb.my_uart1:::OBJECT 1”。
(9)控制流图的EXIT节点对应着Daikon声明文件中的EXIT程序点,写入声明文件的内容为:
“ppt top_tb.my_uart1.iRECEIVER():::EXIT152
ppt-type subexit
parent parent top_tb.my_uart1:::OBJECT 1”。
(10)从控制流图中获取my_uart1.iRECEIVER节点中的变量名、变量类型等信息,Verilog设计中的变量“reg[2:0]next_state”写入声明文件的内容为:
“variable next_state
var-kind variable
dec-type int
rep-type int”。
重复此过程,直至my_uart1.iRECEIVER节点中所有变量信息写入声明文件。声明文件生成。
2.2)创建追踪文件uart.dtrace,如图5所示,追踪文件依次写入如下内容:
(1)读取仿真生成的VCD文件,从文件首部开始,首先读取到的是模块符号集合,读取到“$scope module my_uart1$end”时,后继内容为实例化树中top_tb.my_uart1节点包含的变量声明。创建varList,保存变量信息。读取到“$var parameter 1!LO$end”,则可确定符号“!”代表“LO”,类型为parameter,位宽为“1”。读取到“$var wire 1>sys_clk$end”,则变量sys_clk的类型为wire。如果读取到“$var reg 8K rec_dataH[7:0]$end”,则变量rec_dataH的类型为reg。将变量信息写入varList。
(2)读取到“$scope module iXMIT$end”。依次读入变量声明。读取到“$upscope $end”,表明对应的“$scope module iXMIT$end”结束。将iXMIT中的变量信息写入varList。
(3)读取到“$scope module iRECEIVER $end”。依次读入变量声明。读取到“$upscope $end”,表明对应的“$scope module iRECEIVER $end”结束。将iRECEIVER的变量信息写入varList,读取到“$upscope $end”,表明对应的“$scope modu lemy_uart1 $end”结束。读取到“$upscope $end”,表明对应的“$scope module top_tb $end”结束。
(4)读取到“$enddefinitions$end”,所有模块的变量定义结束。同时生成了包含三个节点中所有变量的列表varList,列表中的每个元素包含信息:变量名,实例化树路径,位宽,符号,仿真时间点,上一个时间点值,当前时间点值。如:my_uart1节点对应的变量列表varList包含的变量sys_clk对应的节点信息有:sys_clk,my_uart1,1,>,0,null,null。
(5)随后读取到发生数据变化的每个仿真时间点,符号及其变化的值。读取到“#0”表明仿真开始时间,后继为每个符号对应的初始值,每行一个符号。读取到“1>”,将varList中符号“>”对应变量sys_clk的“当前时间点值(初始为0)”写入“上一个时间点值(初始为0)”,再将当前读取的符号值“1”写入varList中的“当前时间点值”。则my_uart1节点对应的变量列表varList包含的变量sys_clk包含的节点信息为:sys_clk,my_uart1,1,>,0,0,1。依次将所有变量的初始值写入varList中。读取到下个“#100000”,表明一个新的仿真时间点,则先将varList中每个变量的信息写入追踪文件,其中写入的变量sys_clk的内容为:
“sys_clk
0
1”。然后开始读取下一个时间点“#100000”后的符号值,更新varList值,写入追踪文件。重复本步骤,直至VCD文件读取完毕,追踪文件生成。
2.3)生成条件分离文件,广度遍历实例化树insTree,如图6所示,条件分离文件uart.spinfo依次写入如下内容:
(1)获取到my_uart1节点,依据my_uart1节点包含的控制流图中的ENTER节点设置条件分离文件中的程序入口点,写入条件分离文件的内容为:
“PPT_NAME my_uart1”。
(2)遍历my_uart1节点包含的控制流图,获取控制流图中的控制节点,取出控制节点中的语句条件,写入条件分离文件。
(3)获取到my_uart1.iXMIT节点,依据my_uart1.iXMIT节点包含的控制流图中的ENTER节点设置条件分离文件中的程序入口点,写入条件分离文件的内容为:
“PPT_NAME my_uart1.iXMIT”。
(4)遍历my_uart1.iXMIT节点包含的控制流图,获取控制流图中的控制节点,取出控制节点中的语句条件,写入条件分离文件。
(5)对于my_uart1.iRECEIVER节点,依据my_uart1.iRECEIVER节点包含的控制流图中的ENTER节点设置分离文件中的程序入口点,写入条件分离文件的内容为:
“PPT_NAME my_uart1.iRECEIVER”。
(6)遍历my_uart1.iRECEIVER节点包含的控制流图,获取控制流图中的控制节点,取出控制节点中的语句条件,写入条件分离文件。
步骤3.依据步骤2生成的声明文件uart.decls、追踪文件uart.dtrace和条件分离文件uart.spinfo,作为Daikon的输入文件,输出不变量属性文件。
步骤4.依据步骤3生成的不变量属性文件,其中的安全验证属性格式为“my_uart1.iXMIT.DataSend_ena==0”,是一种与Java类似的语法,将这种语法格式转换为CTL(计算树逻辑)形式:“CTLSPEC AG(my_uart1.iXMIT.DataSend_ena=0ud1_0)”。
步骤5.依据正在申请授权的发明专利(寄存器传输级Verilog代码的SMV模型构建方法;申请号:CN201910010500)中的SMV模型生成方法,生成Trust-Hub RS232 T700的模型检测模型。依据步骤4生成的安全验证属性“CTLSPEC AG(my_uart1.iXMIT.DataSend_ena=0ud1_0)”,以及本步骤生成的模型检测模型,用模型检测工具NuSMV对Verilog设计进行模型检测验证。验证结果为“false”时,生成反例。分析反例,发现输入信号xmit_dataH的序列,当出现序列8’hAA,8’h55,8’h00和8’hFF的时候,输出变量xmit_doneH被置“0”,导致安全验证属性为“false”,发现硬件安全漏洞。
分析结果显示,本发明方法可以快速自动提取出Verilog设计中的安全验证属性。提取的安全验证属性,可以有效发现硬件设计中的安全漏洞。
对于本领域的技术人员来说,可以根据以上的技术方案和构思,给出各种相应的改变和变形,而所有的这些改变和变形,都应该包括在本发明权利要求的保护范围之内。
Claims (6)
1.一种寄存器传输级Verilog设计的安全验证属性自动提取方法,其特征在于包括:
Verilog实例化树步骤,采用静态分析Verilog设计的方法得到实例化树,树中的每个节点代表一个模块的控制流图;
Daikon生成不变量属性步骤,遍历控制流图,生成Daikon的输入文件,包括声明文件、追踪文件和条件分离文件,然后利用Daikon生成不变量属性;
安全验证属性步骤,依据生成的不变量属性文件,将其中的不变量属性的语法格式转换为安全验证属性;对Verilog设计进行模型检测验证,发现硬件设计安全漏洞。
2.根据权利要求1所述的寄存器传输级Verilog设计的安全验证属性自动提取方法,其特征在于,Verilog实例化树步骤:
依据RTL硬件木马测试向量的生成方法,生成寄存器传输级Verilog设计的实例化树。
3.根据权利要求2所述的寄存器传输级Verilog设计的安全验证属性自动提取方法,其特征在于:依据生成的实例化树,分析仿真Verilog设计生成的VCD文件,生成Daikon工具的输入文件,包括声明文件,追踪文件和条件分离文件。
4.根据权利要求3所述的寄存器传输级Verilog设计的安全验证属性自动提取方法,其特征在于:
依据生成的声明文件、追踪文件和条件分离文件,作为Daikon的输入文件,输出生成不变量文件。
5.根据权利要求2所述的寄存器传输级Verilog设计的安全验证属性自动提取方法,其特征在于:
S1.1依据RTL硬件木马测试向量的生成方法生成方法,生成Verilog设计的控制流图,每个Verilog模块对应一个控制流图;初始状态时,fatherNode节点对应顶层模块,也是整个实例化树的根root;实例化子模块insVar初始为空;步骤S1.3至S1.6是递归调用方式;
S1.2获取root节点中所有的实例化语句insVar,放置到insVar变量列表insVarList中;
S1.3如果insVarList为空,整个Verilog设计对应的实例化树生成,步骤S1结束;如果insVarList不为空,取出其中一个元素insVar;
S1.4创建childNode,此节点对应父节点fatherNode模块中包含的一个例化语句insVar;ChildNode的父节点设置为fatherNode,生成insVar对应子模块的控制流图CFG,加入到childNode中;
S1.5遍历CFG,将其中的实例化语句subInsVar加入到列表subInsVarList中;
S1.6如果subInsVarList不为空,取出一个subInsVar;fahterNode设置为insVar,insVar设置为subInsVar;跳转至S1.4;如果subInsVarList为空,退回到上一级的fatherNode节点继续处理剩余的insVar。
6.根据权利要求5所述的寄存器传输级Verilog设计的安全验证属性自动提取方法,其特征在于:步骤S2具体如下:
S2.1创建声明文件,基本信息写入声明文件头部;广度遍历实例化树,获取每个节点insVar的控制流图,每个控制流图的ENTER节点,对应着Daikon的声明文件中的ENTER程序点;控制流图的EXIT节点对应着Daikon声明文件中的EXIT程序点;从控制流图中获取模块中的变量名称、变量类型转换为变量声明写入声明文件;遍历完实例化树,生成了整个Verilog设计的声明文件;
S2.2创建追踪文件,读取仿真生成的VCD文件,从文件首部开始,首先读取到的是模块变量的符号集合;创建varList,保存变量信息;随后读取到发生数据变化的每个仿真时间点,以及符号值,符号值写入varList;VarList中的每个元素包含信息:变量名,实例化树路径,位宽,符号,仿真时间点,上一个时间点值,当前时间点值;将varList信息写入追踪文件;整个VCD文件读取完,同时追踪文件的写入完成;
S2.3生成条件分离文件,广度遍历实例化树,对于每一个节点insVar,依据insVar节点对应的控制流图中的ENTER节点设置条件分离文件中的程序入口点,写入条件分离文件;遍历控制流图,获取控制节点中的语句条件,写入条件分离文件;整个实例化树遍历完成,条件分离文件写入完成。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010362018.1A CN111626009A (zh) | 2020-04-30 | 2020-04-30 | 寄存器传输级Verilog设计的安全验证属性自动提取方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010362018.1A CN111626009A (zh) | 2020-04-30 | 2020-04-30 | 寄存器传输级Verilog设计的安全验证属性自动提取方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN111626009A true CN111626009A (zh) | 2020-09-04 |
Family
ID=72258897
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010362018.1A Withdrawn CN111626009A (zh) | 2020-04-30 | 2020-04-30 | 寄存器传输级Verilog设计的安全验证属性自动提取方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111626009A (zh) |
-
2020
- 2020-04-30 CN CN202010362018.1A patent/CN111626009A/zh not_active Withdrawn
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109426722B (zh) | Sql注入缺陷检测方法、系统、设备及存储介质 | |
US9983984B2 (en) | Automated modularization of graphical user interface test cases | |
US7340475B2 (en) | Evaluating dynamic expressions in a modeling application | |
CN112560401B (zh) | Verilog文件转换方法、装置、存储介质及设备 | |
EP3185027B1 (en) | Information processing method and device and computer storage medium | |
CN111400724A (zh) | 基于代码相似性分析的操作系统脆弱性检测方法、系统及介质 | |
CN102567200A (zh) | 基于函数调用图的并行化安全漏洞检测方法 | |
US20090319246A1 (en) | Detection program, detecting device, and detecting method | |
CN109492337B (zh) | 一种可编程逻辑器件的信息流追踪模型生成方法 | |
CN109711159B (zh) | 一种基于信息流的ip核rtl级代码安全漏洞检测方法 | |
US6990438B1 (en) | Method and apparatus for observability-based code coverage | |
US8838559B1 (en) | Data mining through property checks based upon string pattern determinations | |
US9524366B1 (en) | Annotations to identify objects in design generated by high level synthesis (HLS) | |
CN105279086A (zh) | 一种基于流程图的自动检测电子商务网站逻辑漏洞的方法 | |
CN112199913B (zh) | 一种基于Coq的超大规模集成电路RTL漏洞形式化分析方法 | |
CN103235757B (zh) | 基于自动化造数对输入域测试对象进行测试的装置和方法 | |
CN111400169A (zh) | 一种自动化生成用于测试软硬件的网表文件的方法及系统 | |
CN109491884A (zh) | 代码性能检测方法、装置、计算机设备和介质 | |
CN109325217B (zh) | 一种文件转换方法、系统、装置及计算机可读存储介质 | |
CN113901463B (zh) | 面向概念漂移的可解释Android恶意软件检测方法 | |
CN111709026A (zh) | 静态安全检测方法、装置、计算机设备和存储介质 | |
CN105022692A (zh) | 一种死锁检测验证方法 | |
CN108647533B (zh) | 用于检测硬件木马的安全断言自动生成方法 | |
CN112231197A (zh) | 一种页面测试的方法、装置和存储介质 | |
CN101930401B (zh) | 一种基于检测对象的软件漏洞模型检测方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
WW01 | Invention patent application withdrawn after publication |
Application publication date: 20200904 |
|
WW01 | Invention patent application withdrawn after publication |