本发明涉及fpga技术领域,具体涉及一种fpga程序安全验证方法、系统、终端及存储介质。
背景技术:
fpga是可编程逻辑器件,用于实现各种算法、状态控制、数字逻辑等功能,已广泛应用于电子信息、通信工程等领域。在服务器中fpga也有着广泛的应用,例如实现电源控制、密码算法、加速单元等,是服务器中不可缺少的部分。由于fpga是易失性器件,掉电后其内部存储的程序会丢失,所以需要利用外部的非易失性存储器(例如flash)存储其程序,即二进制位流文件。如图1所示,fpga程序存储于外部的flash中,每次上电后,fpga首先读取flash中的二进制位流文件,加载到fpga内部的ram后再运行。
近年来针对服务器的攻击已经从上层软件逐渐转移到了底层的硬件和固件,使第三方恶意者向服务器fpga中植入恶意代码、病毒、木马等成为可能。fpga的程序以二进制位流的形式存储于flash存储器中,存在被黑客恶意篡改的风险,fpga程序如果被植入恶意代码,会引发控制功能失效、逻辑时序混乱等问题,从而导致服务器的拒绝服务,引起业务中断,严重情况下会使服务器被黑客从底层控制,造成系统的彻底崩溃。因此fpga的安全性影响到了服务器整机的安全性。
技术实现要素:
针对现有技术的上述不足,本发明提供一种fpga程序安全验证方法、系统、终端及存储介质,以解决上述技术问题。
第一方面,本发明提供一种fpga程序安全验证方法,包括:
设置密钥并将所述密钥存储至rom区;
将所述密钥与fpga程序一起编译并将编译文件存储至非易失性存储器;
生成随机数并根据所述随机数和rom区密钥生成第一摘要值;
将所述随机数下发至非易失性存储器,并接收非易失性存储器根据所述随机数和编译文件中的密钥返回的第二摘要值;
比对所述第一摘要值和所述第二摘要值,若两者一致则加载非易失性存储器存储的程序。
进一步的,所述生成随机数包括:
利用随机数生成器生成128bit的随机数。
进一步的,所述根据随机数和rom区密钥生成第一摘要值,包括:
将所述随机数添加至所述密钥的末尾组成字符串;
利用哈希密码杂凑算法对所述字符串进行填充和迭代压缩生成杂凑值,将所述杂凑值作为第一摘要值。
进一步的,所述比对第一摘要值和第二摘要值,包括:
利用单芯片多处理器比对第一摘要值和第二摘要值是否一致:
若是,则输出1;
若否,则输出0。
第二方面,本发明提供一种fpga程序安全验证系统,包括:
密钥设置单元,配置用于设置密钥并将所述密钥存储至rom区;
密钥绑定单元,配置用于将所述密钥与fpga程序一起编译并将编译文件存储至非易失性存储器;
摘要生成单元,配置用于生成随机数并根据所述随机数和rom区密钥生成第一摘要值;
摘要接收单元,配置用于将所述随机数下发至非易失性存储器,并接收非易失性存储器根据所述随机数和编译文件中的密钥返回的第二摘要值;
程序加载单元,配置用于比对所述第一摘要值和所述第二摘要值,若两者一致则加载非易失性存储器存储的程序。
进一步的,所述摘要生成单元包括:
随机生成模块,配置用于利用随机数生成器生成128bit的随机数。
进一步的,所述摘要生成单元包括:
字符组合模块,配置用于将所述随机数添加至所述密钥的末尾组成字符串;
杂凑计算模块,配置用于利用哈希密码杂凑算法对所述字符串进行填充和迭代压缩生成杂凑值,将所述杂凑值作为第一摘要值。
进一步的,所述程序加载单元包括:
摘要比对模块,配置用于利用单芯片多处理器比对第一摘要值和第二摘要值是否一致;
肯定输出模块,配置用于若第一摘要值和第二摘要值一致,则输出1;
否定输出模块,配置用于若第一摘要值和第二摘要值不一致,则输出0。
第三方面,提供一种终端,包括:
处理器、存储器,其中,
该存储器用于存储计算机程序,
该处理器用于从存储器中调用并运行该计算机程序,使得终端执行上述的终端的方法。
第四方面,提供了一种计算机存储介质,所述计算机可读存储介质中存储有指令,当其在计算机上运行时,使得计算机执行上述各方面所述的方法。
本发明的有益效果在于,
本发明提供的fpga程序安全验证方法、系统、终端及存储介质,通过在完成fpga程序开发后设置一个密钥(key),key与程序一起编译后进行存储。程序在加载之前由fpga生成一个随机值,分发给外部flash,由hash计算单元计算key叠加随机值后的摘要值;fpga的hash计算单元执行相同的操作得到另一个摘要值,fpga的比较单元对两个摘要值进行比对,两者一致才允许程序执行,否则拒绝程序执行。本发明可以确保fpga程序的完整性,防止因加载恶意程序后引发的系统安全风险。
此外,本发明设计原理可靠,结构简单,具有非常广泛的应用前景。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,对于本领域普通技术人员而言,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明一个实施例的方法的示意性流程图。
图2是本发明一个实施例的方法的示意性原理图。
图3是本发明一个实施例的方法的示意性流程图。
图4是本发明一个实施例的系统的示意性框图。
图5为本发明实施例提供的一种终端的结构示意图。
具体实施方式
为了使本技术领域的人员更好地理解本发明中的技术方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本发明保护的范围。
下面对本发明中出现的关键术语进行解释。
ram随机存取存储器,fapg的内存。
cmp单芯片多处理器,也指多核心其思想是将大规模并行处理器中的smp(对称多处理器)集成到同一芯片内,各个处理器并行执行不同的进程。
图1是本发明一个实施例的方法的示意性流程图。其中,图1执行主体可以为一种fpga程序安全验证系统。
如图1所示,该方法100包括:
步骤110,设置密钥并将所述密钥存储至rom区;
步骤120,将所述密钥与fpga程序一起编译并将编译文件存储至非易失性存储器;
步骤130,生成随机数并根据所述随机数和rom区密钥生成第一摘要值;
步骤140,将所述随机数下发至非易失性存储器,并接收非易失性存储器根据所述随机数和编译文件中的密钥返回的第二摘要值;
步骤150,比对所述第一摘要值和所述第二摘要值,若两者一致则加载非易失性存储器存储的程序。
为了便于对本发明的理解,下面以本发明fpga程序安全验证方法的原理,结合实施例中对fpga程序进行安全验证的过程,对本发明提供的fpga程序安全验证方法做进一步的描述。
具体的,请参考图1和图2,所述fpga程序安全验证方法包括:
s1、设置密钥并将所述密钥存储至rom区。将所述密钥与fpga程序一起编译并将编译文件存储至非易失性存储器。
开发人员完成fpga程序开发后设置一个密钥(key),将该密钥存储至fpga的ram区。同时,将密钥与fpga程序一起编译后形成二进制位流文件(image)存储于storage(非易失性存储,也可以是flash)中。
s2、生成随机数并根据所述随机数和rom区密钥生成第一摘要值。
fpga在每次加载程序之前,由随机数生成器(rng)生成一个128bit的随机值random。fpga执行sha-256杂凑运算,计算key与random的第一摘要值,得到hash_value1=sha-256(key||random)。杂凑运算为对长度为l(l<2^64)比特的消息m,sm3杂凑算法经过填充和迭代压缩,生成杂凑值,杂凑值长度为256比特。其中,填充步骤为假设消息m的长度为l比特。首先将比特“1”添加到消息的末尾,再添加k个“0”,k是满足l 1 k≡448mod512的最小的非负整数。然后再添加一个64位比特串,该比特串是长度l的二进制表示。填充后的消息m′的比特长度为512的倍数。然后对填充后的数据进行迭代压缩。
s3、将所述随机数下发至非易失性存储器,并接收非易失性存储器根据所述随机数和编译文件中的密钥返回的第二摘要值。
将步骤s2生成的随机数random下发至外部存储器。外部存储器storage中的hash计算单元接收到后,利用sha-256杂凑算法对编译文件image中的密钥key和接收的随机数random进行杂凑运算,得到一个256bit的第二摘要值,即hash_value2=sha-256(key||random)。外部存储器将计算出的第二摘要值返回fpga。
s4、比对所述第一摘要值和所述第二摘要值,若两者一致则加载非易失性存储器存储的程序。
fpga调用cmp进行第一摘要值和第二摘要值的比对,即比较上述hash_value1与hash_value2。并且把计算结果(1:比对一致,0:比对不一致)输出。如果计算结果为1,说明key未篡改,编译文件image是完整的,则把image文件加载到fpga的ram区执行。如果输出结果为0,证明key已被篡改,程序的完整性受到了破坏、或可能被植入了恶意代码,则拒绝加载程序到ram区。
如果key泄露或被恶意人员截获后,由于恶意人员无法得知random值,通过sha-256算法计算出摘要值hash_value’=sha-256(key||random’)必然不同于fpga每次计算的摘要值sha-256(key||random);
此外恶意人员对key的篡改,fpga也能够检测出来,例如恶意人员把key篡改为key’后,通过sha-256算法计算出摘要值hash_value’=sha-256(key’||random)也不同于fpga每次计算的摘要值sha-256(key||random)。
如图4示,该系统400包括:
密钥设置单元410,配置用于设置密钥并将所述密钥存储至rom区;
密钥绑定单元420,配置用于将所述密钥与fpga程序一起编译并将编译文件存储至非易失性存储器;
摘要生成单元430,配置用于生成随机数并根据所述随机数和rom区密钥生成第一摘要值;
摘要接收单元440,配置用于将所述随机数下发至非易失性存储器,并接收非易失性存储器根据所述随机数和编译文件中的密钥返回的第二摘要值;
程序加载单元450,配置用于比对所述第一摘要值和所述第二摘要值,若两者一致则加载非易失性存储器存储的程序。
可选地,作为本发明一个实施例,所述摘要生成单元包括:
随机生成模块,配置用于利用随机数生成器生成128bit的随机数。
可选地,作为本发明一个实施例,所述摘要生成单元包括:
字符组合模块,配置用于将所述随机数添加至所述密钥的末尾组成字符串;
杂凑计算模块,配置用于利用哈希密码杂凑算法对所述字符串进行填充和迭代压缩生成杂凑值,将所述杂凑值作为第一摘要值。
可选地,作为本发明一个实施例,所述程序加载单元包括:
摘要比对模块,配置用于利用单芯片多处理器比对第一摘要值和第二摘要值是否一致;
肯定输出模块,配置用于若第一摘要值和第二摘要值一致,则输出1;
否定输出模块,配置用于若第一摘要值和第二摘要值不一致,则输出0。
图5为本发明实施例提供的一种终端系统500的结构示意图,该终端系统500可以用于执行本发明实施例提供的fpga程序安全验证方法。
其中,该终端系统500可以包括:处理器510、存储器520及通信单元530。这些组件通过一条或多条总线进行通信,本领域技术人员可以理解,图中示出的服务器的结构并不构成对本发明的限定,它既可以是总线形结构,也可以是星型结构,还可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。
其中,该存储器520可以用于存储处理器510的执行指令,存储器520可以由任何类型的易失性或非易失性存储终端或者它们的组合实现,如静态随机存取存储器(sram),电可擦除可编程只读存储器(eeprom),可擦除可编程只读存储器(eprom),可编程只读存储器(prom),只读存储器(rom),磁存储器,快闪存储器,磁盘或光盘。当存储器520中的执行指令由处理器510执行时,使得终端500能够执行以下上述方法实施例中的部分或全部步骤。
处理器510为存储终端的控制中心,利用各种接口和线路连接整个电子终端的各个部分,通过运行或执行存储在存储器520内的软件程序和/或模块,以及调用存储在存储器内的数据,以执行电子终端的各种功能和/或处理数据。所述处理器可以由集成电路(integratedcircuit,简称ic)组成,例如可以由单颗封装的ic所组成,也可以由连接多颗相同功能或不同功能的封装ic而组成。举例来说,处理器510可以仅包括中央处理器(centralprocessingunit,简称cpu)。在本发明实施方式中,cpu可以是单运算核心,也可以包括多运算核心。
通信单元530,用于建立通信信道,从而使所述存储终端可以与其它终端进行通信。接收其他终端发送的用户数据或者向其他终端发送用户数据。
本发明还提供一种计算机存储介质,其中,该计算机存储介质可存储有程序,该程序执行时可包括本发明提供的各实施例中的部分或全部步骤。所述的存储介质可为磁碟、光盘、只读存储记忆体(英文:read-onlymemory,简称:rom)或随机存储记忆体(英文:randomaccessmemory,简称:ram)等。
因此,本发明通过在完成fpga程序开发后设置一个密钥(key),key与程序一起编译后进行存储。程序在加载之前由fpga生成一个随机值,分发给外部flash,由hash计算单元计算key叠加随机值后的摘要值;fpga的hash计算单元执行相同的操作得到另一个摘要值,fpga的比较单元对两个摘要值进行比对,两者一致才允许程序执行,否则拒绝程序执行。本发明可以确保fpga程序的完整性,防止因加载恶意程序后引发的系统安全风险,本实施例所能达到的技术效果可以参见上文中的描述,此处不再赘述。
本领域的技术人员可以清楚地了解到本发明实施例中的技术可借助软件加必需的通用硬件平台的方式来实现。基于这样的理解,本发明实施例中的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中如u盘、移动硬盘、只读存储器(rom,read-onlymemory)、随机存取存储器(ram,randomaccessmemory)、磁碟或者光盘等各种可以存储程序代码的介质,包括若干指令用以使得一台计算机终端(可以是个人计算机,服务器,或者第二终端、网络终端等)执行本发明各个实施例所述方法的全部或部分步骤。
本说明书中各个实施例之间相同相似的部分互相参见即可。尤其,对于终端实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例中的说明即可。
在本发明所提供的几个实施例中,应该理解到,所揭露的系统和方法,可以通过其它的方式实现。例如,以上所描述的系统实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,系统或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。
尽管通过参考附图并结合优选实施例的方式对本发明进行了详细描述,但本发明并不限于此。在不脱离本发明的精神和实质的前提下,本领域普通技术人员可以对本发明的实施例进行各种等效的修改或替换,而这些修改或替换都应在本发明的涵盖范围内/任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应所述以权利要求的保护范围为准。
1.一种fpga程序安全验证方法,其特征在于,包括:
设置密钥并将所述密钥存储至rom区;
将所述密钥与fpga程序一起编译并将编译文件存储至非易失性存储器;
生成随机数并根据所述随机数和rom区密钥生成第一摘要值;
将所述随机数下发至非易失性存储器,并接收非易失性存储器根据所述随机数和编译文件中的密钥返回的第二摘要值;
比对所述第一摘要值和所述第二摘要值,若两者一致则加载非易失性存储器存储的程序。
2.根据权利要求1所述的方法,其特征在于,所述生成随机数包括:
利用随机数生成器生成128bit的随机数。
3.根据权利要求1所述的方法,其特征在于,所述根据随机数和rom区密钥生成第一摘要值,包括:
将所述随机数添加至所述密钥的末尾组成字符串;
利用哈希密码杂凑算法对所述字符串进行填充和迭代压缩生成杂凑值,将所述杂凑值作为第一摘要值。
4.根据权利要求1所述的方法,其特征在于,所述比对第一摘要值和第二摘要值,包括:
利用单芯片多处理器比对第一摘要值和第二摘要值是否一致:
若是,则输出1;
若否,则输出0。
5.一种fpga程序安全验证,其特征在于,包括:
密钥设置单元,配置用于设置密钥并将所述密钥存储至rom区;
密钥绑定单元,配置用于将所述密钥与fpga程序一起编译并将编译文件存储至非易失性存储器;
摘要生成单元,配置用于生成随机数并根据所述随机数和rom区密钥生成第一摘要值;
摘要接收单元,配置用于将所述随机数下发至非易失性存储器,并接收非易失性存储器根据所述随机数和编译文件中的密钥返回的第二摘要值;
程序加载单元,配置用于比对所述第一摘要值和所述第二摘要值,若两者一致则加载非易失性存储器存储的程序。
6.根据权利要求5所述的系统,其特征在于,所述摘要生成单元包括:
随机生成模块,配置用于利用随机数生成器生成128bit的随机数。
7.根据权利要求5所述的系统,其特征在于,所述摘要生成单元包括:
字符组合模块,配置用于将所述随机数添加至所述密钥的末尾组成字符串;
杂凑计算模块,配置用于利用哈希密码杂凑算法对所述字符串进行填充和迭代压缩生成杂凑值,将所述杂凑值作为第一摘要值。
8.根据权利要求5所述的系统,其特征在于,所述程序加载单元包括:
摘要比对模块,配置用于利用单芯片多处理器比对第一摘要值和第二摘要值是否一致;
肯定输出模块,配置用于若第一摘要值和第二摘要值一致,则输出1;
否定输出模块,配置用于若第一摘要值和第二摘要值不一致,则输出0。
9.一种终端,其特征在于,包括:
处理器;
用于存储处理器的执行指令的存储器;
其中,所述处理器被配置为执行权利要求1-4任一项所述的方法。
10.一种存储有计算机程序的计算机可读存储介质,其特征在于,该程序被处理器执行时实现如权利要求1-4中任一项所述的方法。
技术总结