本发明涉及一种安全芯片多模块组合验证方法,用于安全芯片的功能验证和安全性评估。
背景技术:
随着工业级、车轨级、物联网、安全等业务的逐渐扩大,安全芯片已经运用在各个行业,需求量也十分巨大。由于安全芯片应用广阔,场景复杂,因此考核安全芯片的功能十分重要,如果芯片存在一个功能隐患未被发现和解决,影响巨大。但是安全芯片内部的功能模块多,应用场景复杂,单一的发送命令考核安全模块的验证方法存在很多局限性,难以发现芯片潜在的问题。
目前各个安全芯片公司采用上位机发送单一命令调用安全模块验证芯片的安全功能和稳定性。安全模块运行过程中几乎不会被任何外部事件打断运行。验证结果只要正确即可。
上述的方法,属于传统方法,存在以下缺点:
1)、安全芯片应用场景多,每个用户调用的安全模块以及顺序不一致,上述方法难以覆盖如此多的场景;
2)、应用场景下,安全模块在运行过程中,会被内部和外部事件随机打断,上述方法难以覆盖这种场景;
3)、安全芯片模块的安全功能,不同用户配置不一样,上述方法单一难以遍历和考核所有配置;
从上述问题可以看出,评估安全芯片的安全功能是一项十分复杂且工作量很大的工作,因此需要一种高效的验证方法评估安全芯片的功能。
根据上述问题,本文提出一种安全芯片多模块组合验证方法。该方法主要以下三方面:首先,给芯片的安全功能模块编排命令块顺序,并在上位机中建立和命令块相应顺序的数组;其次,安全芯片和上位机能够分别产生随机数;
再次,利用上位机和安全芯片产生的随机数决定安全功能模块和芯片中断的初始化配置;
技术实现要素:
本发明的方法解决问题是:改善现有验证方法的不足,提供了一种安全芯片多模块组合验证方法,可提高安全芯片的安全性和稳定性评估效率。
本发明的方法解决方案(如图1所示):
首先:将芯片所支持的安全算法和外设(以下将安全算法和外设统称为模块)编号,并建立相应的两个数组,数组长度取决于芯片支持的安全模块个数,两个数组初始化为全零,其中两个数组分别对应模块的调用顺序和模块的调用次数;
其次:利用上位机和安全芯片产生不同的两组随机数据,上位机产生的随机数决定了模块的调用顺序,安全芯片产生的随机数决定了模块的调用次数;同时,安全芯片产生的随机数亦决定了安全模块功能配置、安全模块使用数据以及安全芯片内部中断和外部触发中断产生的时间;
再次:启动安全芯片的模块调用,并开启内部中断和外部中断,直至所有安全模块调用完毕;
最后:待所有模块调用完成之后关闭内外部中断,重新产生随机数初始化模块调用顺序、次数以及模块功能配置、内外部中断时间;反复验证直至出错或者达到验证时间结束验证。
本发明与现有技术相比的优点在于:
(1)两组随机数的组合的方式保证了安全模块的调用顺序和次数,可模拟多种用户场景。
(2)定时器和外部触发中断随机配置,提高安全模块运行过程中被随机打断的概率。
(3)安全功能配置使能随机化,进一步全面且随机验证安全模块的功能。
附图说明
图1为本发明的验证方法流程示意框图;
图2为本发明的安全芯片流程示意框图;
图3为本发明的外部触发中断流程示意框图;
具体实施方式
下面以一个示例来说明具体实施方式,以国外某一款安全芯片作为说明,其支持sha-1、sha-256、md5、des、tdes、rsa、ecc、crc等算法,具有gpio接口、rng随机数、wdt(看门狗)、timer(定时器)、systick(计数器)等功能。
在验证流程开始前做初始化工作,该芯片总共有sha-1、sha-256、md5、des、tdes、rsa、ecc、crc等n(n=8)个算法,可以建立一个数组长度为n(n=8)的数组a[n],初始化数组a[n]全部为0,即a[n]={0,0,0,0,0,0,0,0};将n个安全模块编号分别为:
sha-1:(1)
sha-256:(2)
md5:(3)
des:(4)
rsa:(5)
tdes:(6)
ecc:(7)
crc:(8)
……:(……至n)
做好上述初始化工作,验证流程开始:
第一步,初始化状态,关闭内部和外部中断(如图1所示):先关闭timer、systick、wdt和外部gpio触发中断;
第二步,产生安全模块调用顺序数组数值(如图1和图2所示):上位机初始状态时,循环产生一组数值各不相同的随机数b遍历1至n;并将其赋值给数组a[n];例如n=8时;产生的数组a[8]={7,4,1,2,8,3,6,5};要求数组内的数据遍历1至8,且在每次给数组赋值均需要给数组a[n]赋一次数值,并且保证后续的数组顺序尽量不相同;例如第二次给数组赋值时,数组a[8]={6,3,1,5,7,8,1,2,4};
第三步,外部中断初始化随机数(如图3所示)和安全模块运行随机数生成(图2所示):上位机调用安全芯片的rng模块,产生一组随机数c,利用该随机数初始化timer、wdt、systick初始化配置,以及外部gpio触发中断的初始化配置;同时从随机数c中取出部分数据建立d[n]数组,该数组确定了数组a[n]里面每个安全模块调用时的次数;从随机数c中取出部分数据建立数组e[n],e[n]确定了每个安全模块的配置使能;
第四步,启动外部中断和安全功能配置:上位机发送命令启动timer、wdt、systick、外部gpio触发中断(如图1和图2所示);并根据e[n]配置每个安全模块功能使能;
第五步,调用和执行安全模块(如图2所示):建立变量x,依次按照数组a[n]和d[n]的数值来决定安全模块的调用顺序和调用次数,直至x遍历1至n;示例:a[8]={7,4,1,2,8,3,6,5},d[8]={8,10,3,4,5,9,5,7};根据之前的编号:
当x=1时,a[1]=7,d[1]=8表明调用ecc安全模块运行8次;
当x=2时,a[2]=4,d[2]=10表明调用des安全模块运行10次;
……………………………………………………………………………
当x=8时,a[8]=5,d[8]=7表明调用rsa安全模块运行7次;
在调用安全模块运行过程中,timer、wdt、systick、外部的gpio(如图3所示)一直在产生触发中断,而安全模块所使用的数据均来自于随机数c;如果安全模块运行过程中出错停止验证;
第六步,当x遍历1至n之后,若达到验证时间或者运行次数则停止验证,否则回到第一步继续验证;
本发明说明书中未作详细描述的内容属本领域技术人员的公知技术。