一种椭圆曲线算法的安全性评估方法及装置与流程

文档序号:11215489阅读:630来源:国知局
一种椭圆曲线算法的安全性评估方法及装置与流程

本发明涉及密码学技术领域,具体而言,涉及一种椭圆曲线算法的安全性评估方法及装置。



背景技术:

随着人们对信息安全要求的逐渐提高,密码体制得到了充分发展。一般,密码体制分为对称密码体制(私钥密码体制)和非对称密码体制(公钥密码体制),非对称密码体制在加密和解码时采用不同的密钥。

椭圆曲线密码(ellipticcurvecryptography,ecc)属于非对称密码体制,ecc具有密钥长度短、加解密速度快、对计算环境要求低、在需要通信时对带宽要求低等特点,因此,近年来,ecc被广泛应用于商用密码领域。国密sm2也是非对称密码体制,是一种基于ecc的非对称密码体制。

在ecc和sm2的椭圆曲线算法中,多倍点运算是其中关键一步,也是耗时最长的一步。因此厂商在实现时,主要考虑的是运算性能的提升,常采用加减法或窗口法等来提升性能。但是很少有考虑到多倍点运算的安全性能。如果多倍点运算部分存在漏洞,会导致椭圆曲线算法被破解,有极大的安全隐患。

因此,在椭圆曲线密码产品出厂前,需要对其关键运算的安全性能进行评估,但是,现有技术中对多倍点算法的安全评估少有涉及,因此,可能会导致椭圆曲线密码产品存在安全漏洞。



技术实现要素:

有鉴于此,本发明实施例的目的在于提供一种椭圆曲线算法的安全性评估方法及装置,以解决或试图缓解上述技术问题。

第一方面,本发明实施例提供了一种椭圆曲线算法的安全性评估方法,其中,所述方法包括:

确定基于椭圆曲线算法的芯片在执行多倍点运算时的能量消耗曲线,所述能量消耗曲线表征所述芯片消耗的能量与时间之间的关系;其中,所述多倍点运算包括点加运算和倍点运算;

根据预先建立的能量消耗特征数据库,从所述能量消耗曲线上定位出所述倍点运算对应的第一能量消耗子曲线及所述点加运算对应的第二能量消耗子曲线;

基于所述能量消耗曲线,确定所述多倍点运算的类型;

根据所述多倍点运算的类型、所述第一能量消耗子曲线和所述第二能量消耗子曲线,评估所述椭圆曲线算法的安全性。

结合第一方面,本发明实施例提供了上述第一方面的第一种可能的实现方式,其中,所述确定基于椭圆曲线算法的芯片在执行多倍点运算时的能量消耗曲线,包括:

获取所述芯片在执行数字签名时的能量消耗数据,所述能量消耗数据包括各个采集时刻点对应的能量消耗值;

根据所述能量消耗数据,生成所述芯片在执行数字签名时的原始能量消耗曲线;

根据所述原始能量消耗曲线上的能量消耗特征,确定所述芯片在执行多倍点运算时的能量消耗曲线。

结合第一方面,本发明实施例提供了上述第一方面的第二种可能的实现方式,其中,所述根据预先建立的能量消耗特征数据库,从所述能量消耗曲线上定位出所述倍点运算对应的第一能量消耗子曲线及所述点加运算对应的第二能量消耗子曲线,包括:

根据所述芯片的标识从所述能量消耗特征数据库中查找所述芯片对应的能量消耗特征;

根据所述芯片对应的能量消耗特征,从所述能量消耗曲线上定位出所述倍点运算对应的第一能量消耗子曲线及所述点加运算对应的第二能量消耗子曲线。

结合第一方面的第二种可能的实现方式,本发明实施例提供了上述第一方面的第三种可能的实现方式,其中,所述能量消耗曲线包括多段子曲线;

所述芯片对应的能量消耗特征包括模乘运算对应的执行时间及能量消耗特征;

所述根据所述芯片的能量消耗特征,从所述能量消耗曲线上定位出所述倍点运算对应的第一能量消耗子曲线及所述点加运算对应的第二能量消耗子曲线,包括:

根据所述模乘运算对应的执行时间及能量消耗特征,确定所述能量消耗曲线上每段子曲线包括的模乘运算的个数;

当某段子曲线包括的模乘运算的个数等于第一预设值时,将该段子曲线确定为所述倍点运算对应的第一能量消耗子曲线;当某段子曲线包括的模乘运算的个数等于第二预设值时,将该段子曲线确定为所述点加运算对应的第二能量消耗子曲线。

结合第一方面,本发明实施例提供了上述第一方面的第四种可能的实现方式,其中,所述根据所述多倍点运算的类型、所述第一能量消耗子曲线和所述第二能量消耗子曲线,评估所述椭圆曲线算法的安全性,包括:

根据所述多倍点运算的类型,调用与所述类型对应的评估算法;

基于所述第一能量消耗子曲线和所述第二能量消耗子曲线,通过所述类型对应的评估算法,计算所述多倍点运算的乘数;

若计算出所述多倍点运算的乘数,则确定所述椭圆曲线算法存在漏洞。

结合第一方面的第四种可能的实现方式,本发明实施例提供了上述第一方面的第五种可能的实现方式,其中,所述多倍点运算是基于二进制法实现的;

所述基于所述第一能量消耗子曲线和所述第二能量消耗子曲线,通过所述类型对应的评估算法,计算所述多倍点运算的乘数,包括:

判断所述能量消耗曲线上,位于每个所述第一能量消耗子曲线后且与所述第一能量消耗子曲线相邻的子曲线是否是第二能量消耗子曲线;

如果是,则确定该第一能量消耗子曲线及第二能量消耗子曲线对应的二进制位的取值为1;否则,确定该第一能量消耗子曲线对应的二进制位的取值为0;

根据各个二进制位的取值,计算多倍点运算的乘数。

结合第一方面的第四种可能的实现方式,本发明实施例提供了上述第一方面的第六种可能的实现方式,其中,所述多倍点运算是基于窗口法实现的;

所述基于所述第一能量消耗子曲线和所述第二能量消耗子曲线,通过所述类型对应的评估算法,计算所述多倍点运算的乘数,包括:

判断所述能量消耗曲线上,位于每个所述第一能量消耗子曲线后且与所述第一能量消耗子曲线相邻的子曲线是否是第二能量消耗子曲线;

如果是,确定该第一能量消耗子曲线及第二能量消耗子曲线对应的二进制位的多个猜测值,并对各个所述猜测值进行验证,确定该二进制位的取值;

否则,确定该第一能量消耗曲子线对应的二进制位的取值为0;

根据各个二进制位的取值,计算多倍点运算的乘数。

结合第一方面的第四种可能的实现方式,本发明实施例提供了上述第一方面的第七种可能的实现方式,其中,所述多倍点运算是基于加减法实现的;

所述基于所述第一能量消耗子曲线和所述第二能量消耗子曲线,通过所述类型对应的评估算法,计算所述多倍点运算的乘数,包括:

判断所述能量消耗曲线上,位于每个所述第一能量消耗子曲线后且与所述第一能量消耗子曲线相邻的子曲线是否是第二能量消耗子曲线;

如果是,确定该第一能量消耗子曲线及第二能量消耗子曲线对应的三倍密钥与密钥在该二进制位的差值的多个猜测值,并对各个所述猜测值进行验证,确定该二进制位的差值的取值;

否则,确定该第一能量消耗子曲线对应的三倍密钥与密钥在该二进制位的差值的取值为0;

根据各个二进制位对应的差值的取值,计算多倍点运算的乘数。

第二方面,本发明实施例提供了一种椭圆曲线算法的安全性评估装置,其中,所述装置包括:

第一确定模块,用于确定基于椭圆曲线算法的芯片在执行多倍点运算时的能量消耗曲线,所述能量消耗曲线表征所述芯片消耗的能量与时间之间的关系;其中,所述多倍点运算包括点加运算和倍点运算;

定位模块,用于根据预先建立的能量消耗特征数据库,从所述能量消耗曲线上定位出所述倍点运算对应的第一能量消耗子曲线及所述点加运算对应的第二能量消耗子曲线;

第二确定模块,用于基于所述能量消耗曲线,确定所述多倍点运算的类型;

评估模块,用于根据所述多倍点运算的类型、所述第一能量消耗子曲线和所述第二能量消耗子曲线,评估所述椭圆曲线算法的安全性。

结合第二方面,本发明实施例提供了上述第二方面的第一种可能的实现方式,其中,所述评估模块包括:

调用单元,用于根据所述多倍点运算的类型,调用与所述类型对应的评估算法;

计算单元,用于基于所述第一能量消耗子曲线、所述第二能量消耗子曲线和所述评估算法,计算所述多倍点运算的乘数;

漏洞确定单元,用于若计算出所述多倍点运算的乘数,则确定所述椭圆曲线算法存在漏洞。

在本发明实施例提供的椭圆曲线算法的安全性评估方法及装置中,能够在椭圆曲线密码产品出厂之前,对椭圆曲线算法的多倍点运算的安全性进行评估,减少了椭圆曲线密码产品在出厂后存在安全漏洞的情况。

为使本发明的上述目的、特征和优点能更明显易懂,下文特举较佳实施例,并配合所附附图,作详细说明如下。

附图说明

为了更清楚地说明本发明实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本发明的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。

图1示出了本发明实施例所提供的椭圆曲线算法的安全性评估方法的流程图;

图2示出了本发明实施例所提供的椭圆曲线算法的安全性评估方法中,评估椭圆曲线算法的安全性的流程图;

图3示出了本发明实施例所提供的椭圆曲线算法的安全性评估方法中,计算多倍点运算的乘数的第一种流程图;

图4示出了本发明实施例所提供的椭圆曲线算法的安全性评估方法中,计算多倍点运算的乘数的第二种流程图;

图5示出了本发明实施例所提供的椭圆曲线算法的安全性评估方法中,计算多倍点运算的乘数的第三种流程图;

图6示出了本发明实施例所提供的椭圆曲线算法的安全性评估装置的结构示意图。

具体实施方式

为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。通常在此处附图中描述和示出的本发明实施例的组件可以以各种不同的配置来布置和设计。因此,以下对在附图中提供的本发明的实施例的详细描述并非旨在限制要求保护的本发明的范围,而是仅仅表示本发明的选定实施例。基于本发明的实施例,本领域技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本发明保护的范围。

本发明实施例提供了一种椭圆曲线算法的安全性评估方法,本发明实施例提供的方法可以应用于椭圆曲线密码产品在出厂之前,对该产品的安全性进行评估。如图1所示,该方法包括步骤s110-s140,具体如下:

s110,确定基于椭圆曲线算法的芯片在执行多倍点运算时的能量消耗曲线,该能量消耗曲线表征所述芯片消耗的能量与时间之间的关系;其中,多倍点运算包括点加运算和倍点运算;

s120,根据预先建立的能量消耗特征数据库,从能量消耗曲线上定位出倍点运算对应的第一能量消耗子曲线及点加运算对应的第二能量消耗子曲线;

s130,基于所述能量消耗曲线,确定多倍点运算的类型;

s140,根据多倍点运算的类型、第一能量消耗子曲线和第二能量消耗子曲线,评估椭圆曲线算法的安全性。

具体的,上述步骤s110中,确定基于椭圆曲线算法的芯片在执行多倍点运算时的能量消耗曲线,具体包括:

获取芯片在执行数字签名时的能量消耗数据,该能量消耗数据包括各个采集时刻点对应的能量消耗值;根据上述能量消耗数据,生成芯片在执行数字签名时的原始能量消耗曲线;根据上述原始能量消耗曲线上的能量消耗特征,确定上述芯片在执行多倍点运算时的能量消耗曲线。

在本发明实施例中,可以使用示波器或者电磁探头采集芯片在执行数字签名时的能量消耗数据,具体的,可以按照预先设定的采集时刻点采集在各个采集时刻点芯片在执行数字签名时的能量消耗值。

当得到芯片在各个采集时刻点对应的能量消耗值后,以时间作为横轴,以能量消耗值作为纵轴,拟合生成芯片在执行数字签名时的原始能量消耗曲线。由于多倍点运算属于数字签名的一部分,因此,还需要从上述原始能量消耗曲线上截取出芯片在执行多倍点运算时的能量消耗曲线。

具体的,可以根据原始能量消耗曲线上的能量消耗特征来确定多倍点运算对应的能量消耗曲线,一般的,多倍点运算时耗能较大,因此,可以找到原始能量消耗曲线上能量发生突变的点,从该点开始的曲线则为多倍点运算对应的能量消耗曲线。

在上述步骤s120中,预先建立的能量消耗特征数据库中存储有多种芯片在执行多倍点运算时的能量消耗特征,具体的,该多种芯片可以是不同型号的芯片、也可以是同一型号的不同生产批次的芯片。

上述步骤s120中,根据预先建立的能量消耗特征数据库,从能量消耗曲线上定位出倍点运算对应的第一能量消耗子曲线及点加运算对应的第二能量消耗子曲线,具体包括如下步骤(1)和(2):

(1)、根据芯片的标识从能量消耗特征数据库中查找上述芯片对应的能量消耗特征;

(2)、根据上述芯片对应的能量消耗特征,从上述能量消耗曲线上定位出上述倍点运算对应的第一能量消耗子曲线及点加运算对应的第二能量消耗子曲线。

对于多倍点运算而言,只包括点加和倍点两种运算,并且,多倍点运算也是一个循环运算,即多倍点运算包括多个点加运算和多个倍点运算。

具体的,在能量消耗特征数据库中存储有多个芯片的标识与该芯片的能量消耗特征之间的对应关系,因此,在步骤(1)中,可以根据芯片的标识以及上述存储的对应关系,查找到该芯片的标识对应的能量消耗特征。

具体的,上述能量消耗特征指的是芯片在执行每种运算时对应的执行时间及能量消耗信息,比如说,模乘运算对应的执行时间及能量消耗信息、模加运算对应的执行时间及能量消耗信息、模减运算对应的执行时间及能量消耗信息。

其中,能量消耗信息可以是指平均能量消耗值,也可以是指能量消耗值的取值范围,只要是可以表示该运算对应的能量消耗特征即可。

其中,上述芯片的标识可以是芯片的类型、芯片的生产批次等。

芯片在执行多倍点运算时,会循环执行多个点加运算和多个倍点运算,每个点加运算或者每个倍点运算均对应能量消耗曲线上的一段子曲线,因此,在本发明实施例中,芯片在执行多倍点运算时的能量消耗曲线包括多段子曲线;

并且,上述芯片对应的能量消耗特征包括模乘运算对应的执行时间及能量消耗特征;

其中,上述步骤(2)中,从能量消耗曲线上定位出倍点运算对应的第一能量消耗子曲线及点加运算对应的第二能量消耗子曲线,包括如下1)和2)两个步骤,具体如下:

1)根据上述模乘运算对应的执行时间及能量消耗特征,确定上述能量消耗曲线上每段子曲线对应的模乘运算的个数;

2)当某段子曲线对应的模乘运算的个数等于第一预设值时,将该段子曲线确定为倍点运算对应的第一能量消耗子曲线;当某段子曲线对应的模乘运算的个数等于第二预设值时,将该段子曲线确定为点加运算对应的第二能量消耗子曲线。

一般的,点加运算包括11个模乘运算,倍点运算包括10个模乘运算,因此,可以根据能量消耗曲线上各段子曲线对应的模乘运算的个数,确定出该段子曲线是芯片在执行倍点运算时对应的曲线,还是执行点加运算时对应的曲线。

具体的,根据模乘运算对应的执行时间和能量消耗特征,与每段字曲线进行匹配,确定出每段字曲线上对应的模乘运算的个数。

其中,上述第一预设值的取值可以为10,第二预设值的取值可以为11。

在上述步骤s130中,多倍点运算的类型一般包括二进制法、窗口法和加减法三种;当多倍点运算的类型为二进制法时,则指的是多倍点运算是通过二进制法实现的,当多倍点运算的类型为窗口法时,则指的是多倍点运算是通过窗口法实现的,当多倍点运算的类型是加减法时,则指的是多倍点运算是通过加减法实现的。

在步骤s140中,根据多倍点运算的类型、第一能量消耗子曲线和第二能量消耗子曲线,评估椭圆曲线算法的安全性,是通过步骤s210-s230实现的,如图2所示,具体包括:

s210,根据多倍点运算的类型,调用该类型对应的评估算法;

s220,基于第一能量消耗子曲线和第二能量消耗子曲线,通过该类型对应的评估算法,计算上述多倍点运算的乘数;

s230,若计算出多倍点运算的乘数,则确定该椭圆曲线算法存在漏洞。

具体的,在本发明实施例中,当上述多倍点运算基于不同的方法实现时,则采用不同的算法计算多倍点运算的乘数,因此,需要根据多倍点运算的类型,调用该类型对应的评估算法,下面将根据多倍点运算的实现方法分情况进行介绍在每种情况下多倍点运算的乘数的具体计算过程。

第一种情况:

如果上述多倍点运算是基于二进制法实现的,则上述步骤s220中,基于第一能量消耗子曲线和第二能量消耗子曲线,通过该类型对应的评估算法,计算多倍点运算的乘数,如图3所示,包括步骤s310-s340,具体如下:

s310,判断上述能量消耗曲线上,位于每个第一能量消耗子曲线后且与该第一能量消耗子曲线相邻的子曲线是否是第二能量消耗子曲线,如果是,执行步骤s320;否则,执行步骤s330;

s320,确定该第一能量消耗子曲线及第二能量消耗子曲线对应的密钥的二进制位的取值为1;

s330,确定该第一能量消耗子曲线对应的二进制位的取值为0;

s340,根据各个二进制位的取值,计算多倍点运算的乘数。

其中,一个完整的密钥包括多个二进制位,上述二进制位则指的是密钥中的各个二进制位,具体的,该密钥也可以成为多倍点运算的乘数。上述第一能量消耗子曲线对应的是倍点运算,第二能量消耗子曲线对应的是点加运算。如果倍点运算后面紧跟着点加运算,则可以确定出该倍点运算和点加运算共同对应密钥的一个二进制位,且该二进制位的取值为1;如果倍点运算后面不是点加运算,则该倍点运算对应一个二进制位,且该二进制位的取值为0。

基于上述原理,根据确定出的芯片在执行多倍点运算时的能量消耗曲线中各个第一能量消耗子曲线和第二能量消耗子曲线的位置确定出密钥的每个二进制位的取值。

在该种情况下,当确定出密钥的各个二进制位的取值后,通过如下公式计算多倍点运算的乘数:

其中,上述kj的取值为0或1,上述k指的是多倍点运算的倍数,j表示的是第j位二进制位,l表示的是该密钥的二进制位的位数。

第二种情况:

如果上述多倍点运算是基于窗口法实现的,上述步骤s220中,基于第一能量消耗子曲线和第二能量消耗子曲线,通过该类型对应的评估算法,计算多倍点运算的乘数,如图4所示,包括步骤s410-s440,具体如下:

s410,判断上述能量消耗曲线上,位于每个第一能量消耗子曲线后且与该第一能量消耗子曲线相邻的子曲线是否是第二能量消耗子曲线;如果是,执行步骤s420,否则,执行步骤s430;

s420,确定该第一能量消耗子曲线及第二能量消耗子曲线对应的二进制位的多个猜测值,并对各个猜测值进行验证,确定该二进制位的取值;

s430,确定该第一能量消耗子曲线对应的二进制位的取值为0;

s440,根据各个二进制位的取值,计算多倍点运算的乘数。

在该种情况下,可以根据预设的窗口长度,确定出该第一能量消耗子曲线及第二能量消耗子曲线对应的二进制位的多个猜测值,在s420这种情况下,该二进制位的取值为[1,2r-1]内的奇数,其中,r表示的是窗口长度。比如说,当r的取值为3时,则该二进制位的取值可以是1、3、5、7,因此,该二进制位的各个猜测值则为1、3、5、7。

在该种情况下,还需要定位出倍点运算中计算y3时的最后一个模乘运算在第一能量消耗子曲线上的曲线段,以及定位出点加运算中计算y3时的最后一个模乘运算在第二能量消耗子曲线上的曲线段。

其中,y3表示的是椭圆曲线上点的纵坐标,是点加或倍点运算的结果。

上述定位出倍点运算中计算y3时的最后一个模乘运算在第一能量消耗子曲线上的曲线段,通过如下过程1-4实现,具体包括:

1、根据该芯片对应的模乘运算的执行时间及能量消耗特征,定位出第一能量消耗子曲线上的最后一个模乘运算;

2、根据该芯片对应的模加运算或者模减运算的执行时间及能量消耗特征,判断上述第一能量消耗子曲线上的最后一个模乘运算之后是否紧接着模加运算或者模减运算;

3、如果是,则确定该第一能量消耗子曲线上的最后一个模乘运算则是计算y3;

4、否则,则确定该第一能量消耗子曲线上的最后一个模乘运算则是计算z3。

上述定位出点加运算中计算y3时的最后一个模乘运算在第二能量消耗子曲线上的曲线段,则是通过如下过程a)-d)实现的,具体如下:

a)、根据该芯片在执行模乘运算时的执行时间及能量消耗特征,定位出第二能量消耗子曲线上最后一个模乘运算;

b)、假设该最后一个模乘运算是计算y3,则确定出各个猜测值对应的最后一个模乘之后的模加运算对应的曲线段的能量消耗特征;

c)、根据上述各个猜测值对应的能量消耗特征、及该第二能量消耗子曲线上的最后一个模乘运算之后的模加运算的能量消耗特征,确定该假设是否成立;

d)、如果上述假设成立,则确定最后一个模乘运算是计算y3。

定位出点加运算中计算y3时的最后一个模乘运算在第二能量消耗子曲线上的曲线段,并定位出该模乘运算之后的模减运算对应的执行曲线,并抓取该模减运算的能量消耗特征。

当确定出各个猜测值后,对每个猜测值进行仿真处理,得到每个猜测值分别对应的点加运算中的模减流程对应的仿真曲线的能量消耗特征,将每个猜测值对应的模减流程的仿真曲线的能量消耗特征与该第二能量消耗子曲线上计算y3时的最后一个模乘运算之后的模减运算的能量消耗特征进行匹配,将匹配度最高或者匹配度大于预设匹配度的猜测值确定为该第一能量消耗子曲线及第二能量消耗子曲线对应的二进制位的取值。

如果根据上述过程并不能确定出一个唯一的猜测值,这时,还需要进行进一步的验证,具体如下:

确定上述筛选出来的猜测值对应的点加运算之后紧邻的倍点运算流程,并通过仿真得到该倍点运算中计算y3时的最后一个模乘运算之后的模减运算对应的能量消耗特征,将该能量消耗特征与第一能量消耗子曲线中计算y3时最后一个模乘之后的模减运算的能量消耗特征进行匹配,确定出一个唯一的猜测值,将该唯一的猜测值确定为上述第一能量消耗子曲线及第二能量消耗子曲线对应的二进制位的取值。

当确定出各个二进制位的取值后,则通过如下公式计算多倍点运算的乘数:

其中,上述hj表示的是滑动窗口下第j个二进制位的取值,l表示的是密钥的二进制位的位数。

第三种情况:

如果上述多倍点运算是基于加减法实现的,在上述步骤s220中,基于第一能量消耗子曲线和第二能量消耗子曲线,通过该类型对应的评估算法,计算上述多倍点运算的乘数,如图5所示,包括步骤s510-s540,具体如下:

s510,判断上述能量消耗曲线上,位于各个第一能量消耗子曲线后且与该第一能量消耗子曲线相邻的子曲线是否是第二能量消耗子曲线;如果是,执行步骤s520;否则,执行步骤s530;

s520,确定该第一能量消耗子曲线及第二能量消耗子曲线对应的三倍密钥与密钥在该二进制位的差值的多个猜测值,并对各个猜测值进行验证,确定该二进制位的差值的取值;

s530,确定该第一能量消耗子曲线对应的三倍密钥与密钥在该二进制位的差值的取值为0;

s540,根据各个二进制位对应的差值的取值,计算多倍点运算的乘数。

具体的,在本发明实施例中,将密钥对应的各个二进制位记为ki,将三倍密钥对应的各个二进制位记为hi,对于上述s520中的情况,hi-ki的取值包括两种情况1或者-1,因此,三倍密钥与密钥在各个二进制位的差值的猜测值包括1和-1。

在该种情况下,具体可以通过两种方法从上述两个猜测值中,确定出hi-ki的取值,下述将分别进行介绍:

第一种方法:

可以通过点加运算的最后一个模乘运算及该模乘运算之后的运算来判断,具体包括:

定位出点加运算中计算y3时的最后一个模乘运算在第二能量消耗子曲线上的曲线段,并定位出该模乘运算之后的模减运算对应的执行曲线,并抓取该模减运算的能量消耗特征。

之后,分别获取上述两种猜测值对应的模减流程对应的仿真曲线的特征,并将两种仿真曲线的特征与上述计算y3时的最后一个模乘运算之后的模减运算的能量消耗特征进行匹配,确定出hi-ki的取值。如果该种情况下两种猜测值对应的模减流程相同,则分析下一个第二能量消耗子曲线。

在该种方法中只通过点加运算,即可确定出各个hi-ki的取值,但是,容易出现通过多个第二能量消耗子曲线才可以确定出正确的hi-ki的取值,而每多判断一次,运算量和复杂度就会翻倍,因此,效率较低。

第二种方法:

为了提高效率,在本发明实施例中还可以通过第一能量消耗子曲线和第二能量消耗子曲线一起实现,具体过程包括:

分别获取上述两种猜测值对应的模减流程对应的仿真曲线的特征,并将两种仿真曲线的特征与上述第二能量消耗子曲线中计算y3时的最后一个模乘运算之后的模减运算的能量消耗特征进行匹配,确定出hi-ki的取值。如果无法确定出一个唯一的猜测值,作为hi-ki的取值,则进一步的将上述两种仿真曲线的特征与第一能量消耗子曲线中计算y3时的最后一个模乘运算之后的模减运算的能量消耗特征进行匹配,确定出hi-ki的取值。

具体的,上述hi-ki等于2ki,因此,可以确定出ki的取值,最后,则通过如下公式计算出多倍点运算的乘数:

而sm2数字签名的算法为:

s=((1+da)-1·(k-r·da))modn

其中,在该公式中,(r,s)表示的是待签名的消息对应的数字签名,n表示的是椭圆曲线算法的公开参数,k表示的是点乘运算的乘数,而s、r和n均为已知的,因此,通过上述公式可以计算出da,即说明上述椭圆曲线算法存在漏洞。

本发明实施例提供的椭圆曲线算法的安全性评估方法,能够在椭圆曲线密码产品出厂之前,对椭圆曲线算法的多倍点运算的安全性进行评估,减少了椭圆曲线密码产品在出厂后存在安全漏洞的情况。

基于与上述椭圆曲线算法的安全性评估方法相同的原理,本发明实施例还提供了一种椭圆曲线算法的安全性评估装置,用于执行上述实施例提供的椭圆曲线算法的安全性评估方法,如图6所示,该装置包括:第一确定模块610、定位模块620、第二确定模块630和评估模块640;

其中,上述第一确定模块610,用于确定基于椭圆曲线算法的芯片在执行多倍点运算时的能量消耗曲线,该能量消耗曲线表征上述芯片消耗的能量与时间之间的关系;其中,该多倍点运算包括点加运算和倍点运算;

上述定位模块620,用于根据预先建立的能量消耗特征数据库,从上述能量消耗曲线上定位出上述倍点运算对应的第一能量消耗子曲线及点加运算对应的第二能量消耗子曲线;

上述第二确定模块630,用于基于上述能量消耗曲线,确定上述多倍点运算的类型;

上述评估模块640,用于根据上述多倍点运算的类型、第一能量消耗子曲线和第二能量消耗子曲线,评估上述椭圆曲线算法的安全性。

进一步的,上述第一确定模块610,确定基于椭圆曲线算法的芯片在执行多倍点运算时的能量消耗曲线,是通过获取单元、生成单元和确定单元实现的,具体包括:

上述获取单元,用于获取芯片在执行数字签名时的能量消耗数据,该能量消耗数据包括各个采集时刻点对应的能量消耗值;上述生成单元,用于根据上述能量消耗数据,生成该芯片在执行数字签名时的原始能量消耗曲线;上述第一确定单元,用于根据原始能量消耗曲线上的能量消耗特征,确定该芯片在执行多倍点运算时的能量消耗曲线。

进一步的,上述定位模块620定位第一能量消耗子曲线和第二能量消耗子曲线,是通过查找单元和定位单元实现的,具体包括:

上述查找单元,用于根据芯片的标识从能量消耗特征数据库中查找该芯片对应的能量消耗特征;上述定位单元,用于根据芯片对应的能量消耗特征,从能量消耗曲线上定位出该倍点运算对应的第一能量消耗子曲线及点加运算对应的第二能量消耗子曲线。

具体的,本发明实施例提供的能量消耗曲线包括多段子曲线;

该芯片对应的能量消耗特征包括模乘运算对应的执行时间及能量消耗特征;

上述定位单元定位第一能量消耗子曲线和第二能量消耗子曲线,是通过第一确定子单元和第二确定子单元实现的,具体包括:

上述第一确定子单元,用于根据模乘运算对应的执行时间及能量消耗特征,确定能量消耗曲线上每段子曲线对应的模乘运算的个数;上述第二确定子单元,用于当某段子曲线包括的模乘运算的个数等于第一预设值时,将该段子曲线确定为倍点运算对应的第一能量消耗子曲线;当某段子曲线对应的模乘运算的个数等于第二预设值时,将该段子曲线确定为点加运算对应的第二能量消耗子曲线。

进一步的,在本发明实施例中,评估模块640评估椭圆曲线算法的安全性,是通过调用单元、计算单元和漏洞确定单元实现的,具体包括:

上述调用单元,用于根据上述多倍点运算的类型,调用与该类型对应的评估算法;上述计算单元,用于基于第一能量消耗子曲线和第二能量消耗子曲线,通过该类型对应的评估算法,计算多倍点运算的乘数;具体的,上述漏洞确定单元,用于若计算出多倍点运算的乘数,则确定该椭圆曲线算法存在漏洞。

进一步的,上述计算单元包括判断子单元、第三确定子单元和计算子单元;

当上述多倍点运算是基于二进制法实现时,上述判断子单元,用于判断能量消耗曲线上,位于每个第一能量消耗子曲线后且与该第一能量消耗子曲线相邻的子曲线是否是第二能量消耗子曲线;如果是,则由第三确定子单元,确定该第一能量消耗子曲线及第二能量消耗子曲线对应的二进制位的取值为1;否则,则由第三确定子单元,确定该第一能量消耗子曲线对应的二进制位的取值为0;上述计算子单元,用于计算各个二进制位的取值,计算多倍点运算的乘数。

进一步的,当上述多倍点运算是基于窗口法实现时,

上述判断子单元,用于判断能量消耗曲线上,位于每个第一能量消耗子曲线后且与该第一能量消耗子曲线相邻的子曲线是否是第二能量消耗子曲线;如果是,则由第三确定子单元,确定该第一能量消耗子曲线及第二能量消耗子曲线对应的二进制位的多个猜测值,并对各个猜测值进行验证,确定该二进制位的取值;否则,则由第三确定子单元,确定该第一能量消耗子曲线对应的二进制位的取值为0;上述计算子单元,用于根据各个二进制位的取值,计算多倍点运算的乘数。

进一步的,当上述多倍点运算是基于加减法实现时,

上述判断子单元,用于判断能量消耗曲线上,位于每个第一能量消耗子曲线后且与该第一能量消耗子曲线相邻的子曲线是否是第二能量消耗子曲线;如果是,则由第三确定子单元,确定该第一能量消耗子曲线及第二能量消耗子曲线对应的三倍密钥与密钥在该二进制位的差值的多个猜测值,并对各个猜测值进行验证,确定该二进制位的差值的取值;否则,则由第三确定子单元,确定该第一能量消耗子曲线对应的三倍密钥与该密钥在该二进制位的差值的取值为0;上述计算子单元,用于根据各个二进制位对应的差值的取值,计算多倍点运算的乘数。

本发明实施例提供的椭圆曲线算法的安全性评估装置,能够在椭圆曲线密码产品出厂之前,对椭圆曲线算法的多倍点运算的安全性进行评估,减少了椭圆曲线密码产品在出厂后存在安全漏洞的情况。

本发明实施例所提供的椭圆曲线算法的安全性评估装置可以为设备上的特定硬件或者安装于设备上的软件或固件等。本发明实施例所提供的装置,其实现原理及产生的技术效果和前述方法实施例相同,为简要描述,装置实施例部分未提及之处,可参考前述方法实施例中相应内容。所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,前述描述的系统、装置和单元的具体工作过程,均可以参考上述方法实施例中的对应过程,在此不再赘述。

在本发明所提供的实施例中,应该理解到,所揭露装置和方法,可以通过其它的方式实现。以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,又例如,多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些通信接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。

所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。

另外,在本发明提供的实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。

所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(rom,read-onlymemory)、随机存取存储器(ram,randomaccessmemory)、磁碟或者光盘等各种可以存储程序代码的介质。

应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释,此外,术语“第一”、“第二”、“第三”等仅用于区分描述,而不能理解为指示或暗示相对重要性。

最后应说明的是:以上所述实施例,仅为本发明的具体实施方式,用以说明本发明的技术方案,而非对其限制,本发明的保护范围并不局限于此,尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,其依然可以对前述实施例所记载的技术方案进行修改或可轻易想到变化,或者对其中部分技术特征进行等同替换;而这些修改、变化或者替换,并不使相应技术方案的本质脱离本发明实施例技术方案的精神和范围。都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应所述以权利要求的保护范围为准。

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