一种Java卡SM2数字签名验证或信息加密的方法及装置与流程

文档序号:12375535阅读:269来源:国知局
一种Java卡SM2数字签名验证或信息加密的方法及装置与流程
本发明涉及Java卡
技术领域
,尤其涉及一种Java卡SM2数字签名验证或信息加密的方法及装置。
背景技术
:在Java卡的国密SM2数字签名验证或信息加密算法中,需要用到一次对公钥的标量乘法。公钥的标量乘法,是非定点标量乘法,一般采用滑动窗口计算,该算法计算量大,非常耗时。例如在SM2数字签名验证过程中有一次定点标量乘法和一个公钥标量乘法,非定点标量乘法大概占用了80%的时间,在Java卡的30MHz系统时钟、30MHz加解密时钟的芯片卡上验签一次大概需要65ms,不能满足Java卡每秒验证数字签名20次的要求。技术实现要素:本发明的主要目的在于提出一种Java卡SM2数字签名验证或信息加密的方法及装置,旨在解决现有技术的Java卡SM2数字签名验证或信息加密耗时太长问题。为实现上述目的,本发明提供的一种Java卡SM2数字签名验证或信息加密的方法,包括:在Java卡SM2应用初始化设置时,对SM2公钥参数进行标量固定窗口宽度Comb算法的预计算,得到多个预计算数据,保存所述多个预计算数据;在所述Java卡进行数字签名验证或信息加密运算时,从所述多个预计算数据中读取相应数据,完成所述标量固定窗口宽度Comb算法运算,实现所述SM2数字签名验证或信息加密操作。可选地,其中,所述对SM2公钥参数进行标量固定窗口宽度Comb算法的预计算得到多个预计算数据,保存所述多个预计算数据,包括:创建一个SM2的公钥对象,申请保存所述多个预计算数据所需的存储空间;设置所述公钥对象的公钥参数;调用native函数,按所述标量固定窗口宽度进行Comb算法的预计算,得到所述多个预计算数据;将所述多个预计算数据保存到所述存储空间。可选地,其中,在所述Java卡SM2应用进行SM2数字签名验证或信息加密运算时,从所述多个预计算数据中读取相应数据,完成所述标量固定窗口宽度Comb算法运算,实现所述SM2数字签名验证或信息加密操作,包括:在所述Java卡SM2应用进行数字SM2签名验证或信息加密运算时,从所述多个预计算数据中读取相应数据,替换所述标量固定窗口宽度Comb算法中SM2公钥的标量乘法运算项,完成所述标量固定窗口宽度Comb算法运算,实现所述SM2数字签名验证或信息加密操作。可选地,其中,所述固定窗口宽度为w=4,所述保存预计算数据所需的存储空间为960字节;或者,所述固定窗口宽度为w=3,所述保存预计算数据所需的存储空间为448字节;或者,所述固定窗口宽度为w=2,所述保存预计算数据所需的存储空间为192字节。本发明还提供了一种Java卡SM2数字签名验证或信息加密的装置,包括:预计算模块,用于在Java卡SM2应用初始化设置时,对SM2公钥参数进行标量固定窗口宽度Comb算法的预计算,得到多个预计算数据;存储模块,用于保存所述多个预计算数据;运算模块,用于在所述Java卡SM2应用进行SM2数字签名验证或信息加密运算时,从所述多个预计算数据中读取相应数据,完成所述标量固定窗口宽度Comb算法运算,实现所述SM2数字签名验证或信息加密操作。可选地,其中,所述对SM2公钥参数进行标量固定窗口宽度Comb算法的预计算得到多个预计算数据,包括:创建一个SM2的公钥对象,向所述存储模块申请保存多个预计算数据所需的存储空间;设置所述公钥对象的公钥参数;调用native函数,按所述标量固定窗口宽度进行Comb算法的预计算,得到多个预计算数据;所述保存所述多个预计算数据,包括将所述多个预计算数据保存到所述存储空间。可选地,其中,在所述Java卡SM2应用进行SM2数字签名验证或信息加密运算时,从所述多个预计算数据中读取相应数据,完成所述标量固定窗口宽度Comb算法运算,实现所述SM2数字签名验证或信息加密操作,包括:在所述Java卡SM2应用进行SM2数字签名验证或信息加密运算时,从所述多个预计算数据中读取相应数据,替换所述标量固定窗口宽度Comb算法中SM2公钥的标量乘法运算项,完成所述标量固定窗口宽度Comb算法运算,实现所述SM2数字签名验证或信息加密操作。可选地,其中,所述固定窗口宽度为w=4,所述保存预计算数据所需的存储空间为960字节;或者,所述固定窗口宽度为w=3,所述保存预计算数据所需的存储空间为448字节;或者,所述固定窗口宽度为w=2,所述保存预计算数据所需的存储空间为192字节。本发明还提供了一种包括上述任一项所述数字签名验证或信息加密装置的Java卡。本发明提供的Java卡SM2数字签名验证或信息加密的方法及装置,采用固定窗口宽度的Comb算法实现公钥的标量乘法,并将Comb算法分为两部分执行,其中的预计算部分在Java卡的发卡SM2应用初始化或升级操作过程的SM2应用初始化时一次性完成并保存预计算数据,在每次进行SM2数字签名验证或信息加密执行时,从所述预计算数据中读取相应数据,完成所述标量固定窗口宽度Comb算法的运算,可以显著缩短SM2数字签名验证或信息加密的时间,满足Java卡对每秒验证SM2数字签名的次数要求。附图说明图1为本发明实施例的一种Java卡SM2数字签名验证或信息加密的方法流程示意图;图2为本发明实施例的一种Java卡SM2数字签名验证或信息加密的装置框图;图3为本发明实施例的一种包含SM2数字签名验证或信息加密的装置的Java卡示意图;图4为本发明的一种示范性实施例的方法流程示意图;图5为本发明的另一种示范性实施例的方法流程示意图。本发明目的的实现、功能特点及优点将结合实施例,参照附图做进一步说明。具体实施方式应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。下面将结合附图及实施例对本发明的技术方案进行更详细的说明。需要说明的是,如果不冲突,本发明实施例以及实施例中的各个特征可以相互结合,均在本发明的保护范围之内。另外,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。现在将参考附图描述实现本发明各个实施例的移动终端。在后续的描述中,使用用于表示元件的诸如“模块”、“部件”或“单元”的后缀仅为了有利于本发明的说明,其本身并没有特定的意义。因此,"模块"与"部件"可以混合地使用。国密SM2算法的曲线方程是椭圆曲线方程,国密SM2算法中,提供了一组参数p、a、b、n、G,宽度为256bits,其中G=(Gx,Gy)称为定点,对定点的标量乘法称为固定点标量乘法,其它点的标量乘法称为非定点标量乘法。SM2算法中,将倍数dA称为私钥,将PA=dAG称为公钥,(dA,PA)为一组密钥对,私钥为用户保留,公钥对外公开。在标量乘法过程中,两个相同点的相加为倍点算法,用D表示;两个不同点的相加称为点加,用A表示。按照国密SM2推荐的参数宽度256bits椭圆曲线下Comb算法和滑动窗口算法性能比较,如下表一:算法W(窗口宽度)预存储点个数算法运算量滑动窗口5750A+255DComb41559A+63DComb3775A+85DComb2395A+127D表一从表一可以发现,固定点标量乘法的Comb算法比非定点标量乘法(滑动窗口)可以显著减少倍点算法D的运算量,从而可以加快标量乘法的运算速度。Comb算法如下:记t为k的二进制的位数,在k的最左边添加dw-t个比特0,k的比特数变为dw。将k平分为w组,记为:k=Kw-1||...||K1||K0;Kj是一个行向量,其在如下的矩阵中定义:K0···Ki···Kw-1=Kd-10...K00······Kd-1i...K0i······Kd-1w-1...K0w-1=kd-1...k0······k(i+1)d-1...kid······kwd-1...k(w-1)d]]>记矩阵的列向量为a,其中ai为0或1,[aw-1,…,a2,a1,a0]P=aw-12(w-1)dP+…+a222dP+a12dP+a0P对所有可能的(aw-1,…,a1,a0)的列向量进行预计算。如窗口宽度w=4,k的比特位数为256,则d=64,则预计算[a3,a2,a1,a0]P=a32192P+a22128P+a1264P+a0P一共有16个值。0(∞)值不保存,一般保存15个。标量固定窗口comb算法流程:输入:固定窗口w,k=(kt-1,…,k2,k1,k0)2,P∈E(Fq)。输出:kP1.预计算。对所有的(aw-1,…,a1,a0)预计算[aw-1,…,a2,a1,a0]P=aw-12(w-1)dP+…+a222dP+a12dP+a0P。2.在k的最左边添加dw-t个比特0,记k=Kw-1||…||K1||K0,Kj是一d比特宽度的行向量。表示Kj的第i个比特。3.Q←0(∞);4.i从d-1到0,4.1)Q←2Q4.2)5.返回Q。本申请的发明人发现虽然在SM2体系中公钥是变化的,但是对一个Java卡SM2应用而言,它又是固定的,在Java卡发行商发行Java卡或更新Java的SM2应用时,该公钥就确定了。固定窗口宽度的Comb算法中,比较费时的是其中的预计算过程,因此,如果在Java卡的SM2应用初始化或升级过程中,进行相关公钥的固定窗口Comb算法的预计算,得到预计算数据,并保存这些预计算数据,例如对于w=4,保存15个预计算数据;在Java卡进行SM2数字签名验证或信息加密运算时,仅需执行Comb运算的后续操作步骤,即上述步骤4.2中的从存储的预计算数据中检索读取相应数据即可,无需进行复杂的预计算过程,从而可以大大缩小Java卡进行SM2数字签名验证或信息加密运算的时间。为此,本发明提供了一种Java卡SM2数字签名验证或信息加密的方法,如图1所示,包括:步骤10:在Java卡SM2应用初始化设置时,对SM2公钥参数进行标量固定窗口宽度Comb算法的预计算,得到多个预计算数据,保存所述多个预计算数据;步骤12:在所述Java卡SM2应用进行SM2数字签名验证或信息加密运算时,从所述多个预计算数据中读取相应数据,完成所述标量固定窗口宽度Comb算法的运算,实现所述SM2数字签名验证或信息加密操作。本发明实施例中,由于Java卡SM2应用在发行或升级过程中,公钥就确定了,即PA=dAG不再变化,针对固定窗口宽度的Comb算法而言,相当于其kP的P值已确定。步骤10可以在Java卡发行时的SM2应用初始化过程中进行或者的Java卡SM2应用的数字证书升级时重新进行SM2应用初始化的过程中进行,虽然比较费时,但仅需执行一次,存储相应的预计算数据即可;在Java卡SM2应用每次进行SM2数字签名验证或信息加密运算时,由于参数k已经是一个确定的256bits的数字,因此项在存储的预计算数据中检索读取即可,从而省去了繁复的预计算过程,例如对于所述公钥参数而言,当窗口宽度w=4时,这个就是某个[a3,a2,a1,a0]PA,即存储的15个预计算数据之一。因此,步骤12在Java卡SM2应用每次进行SM2数字签名验证或信息加密运算时执行,从所述多个预计算数据中读取相应数据(即每次运算涉及到均可以在存储的预计算数据中检索读取,无需进行该标量乘法运算),完成所述标量固定窗口宽度Comb算法的运算后,即可实现所述SM2数字签名验证或信息加密操作。本发明提供的Java卡SM2数字签名验证或信息加密的方法,采用固定窗口宽度的Comb算法实现公钥的标量乘法,并将Comb算法分为两部分执行,其中的预计算部分在Java卡的发卡SM2应用初始化或升级操作过程的SM2应用初始化时一次性完成并保存预计算数据,在每次进行SM2数字签名验证或信息加密执行时,从所述预计算数据中读取相应数据,完成所述标量固定窗口宽度Comb算法的运算,可以显著缩短SM2数字签名验证或信息加密的时间,满足Java卡SM2应用对每秒验证SM2数字签名的次数要求。可选地,其中,所述对所述SM2公钥参数进行标量固定窗口宽度Comb算法的预计算得到多个预计算数据,保存所述多个预计算数据,包括:创建一个SM2的公钥对象,申请保存所述多个预计算数据所需的存储空间;设置所述公钥对象的公钥参数;调用native函数,按所述标量固定窗口宽度进行Comb算法的预计算,得到所述多个预计算数据;将所述多个预计算数据保存到所述存储空间。本实施例中,针对Java卡SM2应用的固定窗口宽度Comb算法的预计算,可以在创建SM2的公钥对象时,同时申请保存所述多个预计算数据所需的存储空间;然后设置所述公钥对象的公钥参数(即PA参数,是两个256bit位的数);调用native函数,按所述标量固定窗口宽度进行Comb算法的预计算,得到所述多个预计算数据;将所述多个预计算数据保存到所述存储空间。根据固定窗口宽度的不同,需要存储的预计算数据个数不同,因此申请保存的存储空间也不同,可以根据Java卡的非易失性存储器,例如EEPROM的容量而定。可选地,其中,在所述Java卡SM2应用进行SM2数字签名验证或信息加密运算时,完成所述标量固定窗口宽度Comb算法的运算,实现所述SM2数字签名验证或信息加密操作,包括:在所述Java卡SM2应该进行SM2数字签名验证或信息加密运算时,从所述多个预计算数据中读取相应数据,替换所述标量固定窗口宽度Comb算法中SM2公钥的标量乘法运算项,完成所述标量固定窗口宽度Comb算法的运算,实现所述SM2数字签名验证或信息加密操作。本实施例中,针对SM2标量固定窗口的Comb算法的循环迭代部分(参见上述步骤2~5),尤其是其中的步骤4.2,在循环迭代中,根据从存储的预计算数据检索读取数据,参与运算即可(即利用检索读取的相应预计算数据替换该标量乘法运算,此处对于公钥而言,P=PA),从而可以加快每次Comb算法的执行时间。可选地,其中,所述固定窗口宽度为w=4,所述保存预计算数据所需的存储空间为960字节;或者,所述固定窗口宽度为w=3,所述保存预计算数据所需的存储空间为448字节;或者,所述固定窗口宽度为w=2,所述保存预计算数据所需的存储空间为192字节。本实施例中,由于各种Java卡的存储资源不同,可以根据实际可用存储资源的大小,例如EEPROM的可用空间大小,选择不同的窗口宽度w,例如,对于固定窗口宽度为w=4,保存预计算数据所需的存储空间为960字节;对于固定窗口宽度为w=3,保存预计算数据所需的存储空间为448字节;对于固定窗口宽度为w=2,保存预计算数据所需的存储空间为192字节。即使存储空间比较紧张而采用w=3或2时,本发明采用固定窗口Combs算法的速度也比滑动窗口算法要快。本发明提供的Java卡SM2数字签名验证或信息加密的方法,采用固定窗口宽度Comb算法实现SM2公钥的标量乘法,并将Comb算法分为两部分执行,其中的预计算部分在Java卡的发卡SM2应用初始化或升级过程的SM2应用初始化操作时一次性完成并保存预计算数据,在每次进行SM2数字签名验证或信息加密执行时,从所述预计算数据中读取相应数据,完成所述标量固定窗口宽度Comb算法的运算,可以显著缩短SM2数字签名验证或信息加密的时间,例如,对于固定窗口宽度w=4,在系统时钟为30MHZ,加解密芯片时钟为30MHz的Java卡,SM2的数字签名验证一次仅需要36毫秒,满足Java卡每秒验证数字签名20次的要求。相应地、本发明提供了一种Java卡SM2数字签名验证或信息加密的装置,如图2所示,包括:预计算模块20,用于在Java卡SM2应用初始化设置时,对SM2公钥参数进行标量固定窗口宽度Comb算法的预计算,得到多个预计算数据;存储模块22,用于保存所述多个预计算数据;运算模块24,用于在所述Java卡SM2应用进行SM2数字签名验证或信息加密运算时,从所述多个预计算数据中读取相应数据,完成所述标量固定窗口宽度Comb算法的运算,实现所述数字签名验证或信息加密操作。上述数字签名验证或信息加密的装置可以设置在Java卡的虚拟机上运行。可选地,其中,所述对所述SM2公钥参数进行标量固定窗口宽度Comb算法的预计算得到多个预计算数据,包括:创建一个SM2的公钥对象,向所述存储模块申请保存多个预计算数据所需的存储空间;设置所述公钥对象的公钥参数;调用native函数,按所述标量固定窗口宽度进行Comb算法的预计算,得到多个预计算数据;所述保存所述多个预计算数据,包括将所述多个预计算数据保存到所述存储空间。可选地,其中,在所述Java卡SM2应用进行SM2数字签名验证或信息加密运算时,从所述多个预计算数据中读取相应数据,完成所述标量固定窗口宽度Comb算法的运算,实现所述SM2数字签名验证或信息加密操作,包括:在所述Java卡SM2应用进行SM2数字签名验证或信息加密运算时,从所述多个预计算数据中读取相应数据,替换所述标量固定窗口宽度Comb算法中SM2公钥的标量乘法运算项,完成所述标量固定窗口宽度Comb算法的运算,实现所述SM2数字签名验证或信息加密操作。可选地,所述装置中,所述固定窗口宽度为w=4,所述保存预计算数据所需的存储空间为960字节;或者,所述固定窗口宽度为w=3,所述保存预计算数据所需的存储空间为448字节;或者,所述固定窗口宽度为w=2,所述保存预计算数据所需的存储空间为192字节。如图3所示,本发明实施例还提供了一种包括上述任一项所述SM2数字签名验证或信息加密装置的Java卡,所述Java卡包括CPU/虚拟机和存储器,所述存储区存储上述SM2数字签名验证或信息加密装置,所述CPU/虚拟机实施所述SM2数字签名验证或信息加密装置的功能。下面通过一个示范性实施例,对本发明进行进一步详细说明,如图4所示:假设Java卡上运行一个应用,采用SM2密钥体系,该Java卡由银行发放,具备充足的EEPROM空间。在银行发放该Java卡应用时,对该卡进行初始化,设置相应的公钥PA,私钥dA由银行保存,PA=dAG,其中G=(Gx,Gy),虽然公钥PA对各个应用是不同的,但对该卡而言则是固定的,G是一个固定的512bits的数。因此可以分为以下两部分:(一)Java卡SM2应用初始化操作,步骤30:由于该卡EEPROM存储空间充足,可以采用固定窗口宽度w=4,在初始化过程中创建一个SM2的公钥对象,同时多申请960个字节用于保存预计算数据;设置所述公钥对象的公钥参数PA;调用native函数,按所述标量固定窗口宽w=4进行Comb算法的预计算,得到15个预计算数据,每个数据64个字节(无穷远点0不保存);保存所述15个点的预计算数据,占用960字节。完成对该Java卡的初始化操作后,将该Java卡发放给用户。上述初始化过程中,按照一般的Comb标量固定窗口w=4的算法流程,执行以下Comb算法的预计算操作:输入:固定窗口w=4,k=(kt-1,…,k2,k1,k0)2(k为数字签名256bits的数),PA∈E(Fq)。输出:kPA1.预计算。对所有的(aw-1,…,a1,a0)预计算[aw-1,...,a2,a1,a0]PA=aw-12(w-1)dPA+…+a222dPA+a12dPA+a0PA此处,具体地,选择窗口为w=4,k的bits数为256位,则d=64,上述预计算公式简化为:[a3,a2,a1,a0]PA=a32192PA+a22128PA+a1264PA+a0PA,一共有16个值,0(∞)值不保存,仅需保存15个预计算数据,即1PA,2PA,…,15PA,每个数据为64字节。这个预计算过程在Java卡的初始化时完成,并在EEPROM中保存上述15个预计算数据,每个数据64bit位。(二)Java卡SM2应用进行SM2数字签名验证,步骤31a在用户使用该Java卡的SM2应用收到数字签名信息时,需要进行SM2数字签名认证,对于SM2数字签名的某个256bits,执行kPA操作;在执行Comb标量固定窗口w=4的算法时,涉及步骤1预计算的内容,即对所有的[a3,a2,a1,a0]PA=a32192PA+a22128PA+a1264PA+a0PA的预计算操作,已经在Java卡的SM2应用初始化时完成,并在EEPROM中保留了15个预计算数据,即1PA,2PA,…,15PA,每个数据为64字节。因此,进行SM2数字签名验证时,Java卡SM2应用实际需要进行的Comb运算步骤为以下步骤2~5:2.在k的最左边添加dw-t个比特0,记k=K3||…||K1||K0,Kj是一d比特宽度的行向量(对于w=4,k为256bits数,d=64)。表示Kj的第i个比特。3.Q←0(∞);4.i从d-1到0,4.1)Q←2Q4.2)5.返回Q。在步骤4.2的运算中,其中的此时即为:(a3,a2,a1,a0)PA(其中ai为0或1,i=0,1,2,3),即1PA,2PA,…,15PA这15个预计算数据中的某一个,按照相应的kPA(k=1,2,…15)检索存储的15个预计算数据(即1PA,2PA,…,15PA),将相应的数据读出,替换步骤4.2中的标量乘法项(即:通式中的)进行运算即可。(三)Java卡SM2应用信息加密,步骤31b:当Java卡SM2应用对信息进行SM2加密运算操作时,涉及公钥标量乘法运算的过程与上述(二)Java卡SM2应用进行SM2数字签名验证的Comb算法类似。作为另一个示范性实施例,如图5所示,用户使用Java卡过程中,银行可能需要修改Java卡的SM2应用或更新SM2数字证书,如果涉及公钥参数变更,参照图4,对Java重新进行一次SM2应用初始化设置即可,参见如步骤41。用户后续使用Java卡时,涉及SM2数字签名验证或信息加密时,步骤41a/41b与步骤31a/31b类似。上述示范性实施例,针对系统时钟为30MHZ,加解密芯片时钟为30MHz的Java卡,采用本发明提供的方法,SM2数字签名验证一次仅需要36毫秒,相比于非定点标量算法的数字签名验证时间65ms时间,大为缩短。需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者装置不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者装置所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括该要素的过程、方法、物品或者装置中还存在另外的相同要素。上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到上述实施例方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个非易失性存储介质(如ROM、EPROM、EEPROM等)中,执行本发明各个实施例所述的方法。以上仅为本发明的优选实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的
技术领域
,均同理包括在本发明的专利保护范围内。当前第1页1 2 3 
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1