基于国密算法的终端认证信息生成方法及系统与流程

文档序号:22324938发布日期:2020-09-25 17:53阅读:297来源:国知局
基于国密算法的终端认证信息生成方法及系统与流程

本公开涉及认证信息生成技术领域,特别是涉及基于国密算法的终端认证信息生成方法及系统。



背景技术:

本部分的陈述仅仅是提到了与本公开相关的背景技术,并不必然构成现有技术。

终端认证信息的生成方法通常利用终端生成的信息利用加密算法生成认证信息,但是该方法存在认证信息长度较短的问题,有可能被第三方定位到认证信息并针对性的进行分析和攻击的可能;同时认证信息数据来源单一,无法对软件形成有效的保护。



技术实现要素:

为了解决现有技术的不足,本公开提供了基于国密算法的终端认证信息生成方法及系统;

第一方面,本公开提供了基于国密算法的终端认证信息生成方法;

基于国密算法的终端认证信息生成方法,包括:

从硬件指纹信息中读取并解密序列号;从硬件指纹信息中读取并解密校验信息;从硬件指纹信息中读取并解密数据段数据;计算数据段校验值并进行验证,验证计算得到的校验值与存储的校验值是否一致,如果是就进入下一步,如果否,就将错误信息写入文件,结束;

解密数据段,从文件中提取序列号、硬件指纹信息、信息生成时间和cpu信息;进行数据一致性验证,如果计算得到的值与存储的值一致,则验证成功,就进入下一步,如果否,就将错误信息写入文件,结束;

生成随机数;基于随机数与文件校验值,生成数据段信息,将信息段和数据段信息写入文件,结束。

第二方面,本公开提供了基于国密算法的终端认证信息生成系统;

基于国密算法的终端认证信息生成系统,包括:

读取模块,其被配置为:从硬件指纹信息中读取并解密序列号;从硬件指纹信息中读取并解密校验信息;从硬件指纹信息中读取并解密数据段数据;计算数据段校验值并进行验证,验证计算得到的校验值与存储的校验值是否一致,如果是就进入下一步,如果否,就将错误信息写入文件,结束;

验证模块,其被配置为:解密数据段,从文件中提取序列号、硬件指纹信息、信息生成时间和cpu信息;进行数据一致性验证,如果计算得到的值与存储的值一致,则验证成功,就进入下一步,如果否,就将错误信息写入文件,结束;

认证信息生成模块,其被配置为:生成随机数;基于随机数与文件校验值,生成数据段信息,将信息段和数据段信息写入文件,结束。

第三方面,本公开还提供了一种电子设备,包括:一个或多个处理器、一个或多个存储器、以及一个或多个计算机程序;其中,处理器与存储器连接,上述一个或多个计算机程序被存储在存储器中,当电子设备运行时,该处理器执行该存储器存储的一个或多个计算机程序,以使电子设备执行上述第一方面所述的方法。

第四方面,本公开还提供了一种计算机可读存储介质,用于存储计算机指令,所述计算机指令被处理器执行时,完成第一方面所述的方法。

第五方面,本公开还提供了一种计算机程序(产品),包括计算机程序,所述计算机程序当在一个或多个处理器上运行的时候用于实现前述第一方面任意一项的方法。

与现有技术相比,本公开的有益效果是:

本发明提出了一种新颖的认证信息生成方法,利用随机数和国密算法对终端硬件信息指纹进行处理后将终端认证信息和有效期隐藏到随机生成的长数据段中,有效增加了抗攻击水平。同时本方法生成的有限期具有一定的随机性,安全性和隐蔽性更好。此外,本方法将利用其他核心文件的特征值作为输入参数,可有效防止核心文件被恶意篡改。最后本方法将程序中的核心数据进行加密后隐藏到数据段,可保护核心数据安全。此外本方法可对硬件指纹文件中的信息进行验证,可有效检测信息篡改和异常情况。

附图说明

构成本公开的一部分的说明书附图用来提供对本公开的进一步理解,本公开的示意性实施例及其说明用于解释本公开,并不构成对本公开的不当限定。

图1为第一个实施例的方法流程图;

图2为第一个实施例的数据段信息生成流程图。

具体实施方式

应该指出,以下详细说明都是示例性的,旨在对本公开提供进一步的说明。除非另有指明,本文使用的所有技术和科学术语具有与本公开所属技术领域的普通技术人员通常理解的相同含义。

需要注意的是,这里所使用的术语仅是为了描述具体实施方式,而非意图限制根据本公开的示例性实施方式。如在这里所使用的,除非上下文另外明确指出,否则单数形式也意图包括复数形式,此外,还应当理解的是,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。

在不冲突的情况下,本发明中的实施例及实施例中的特征可以相互组合。

实施例一

本实施例提供了基于国密算法的终端认证信息生成方法;

如图1所示,基于国密算法的终端认证信息生成方法,包括:

s104:从硬件指纹信息中读取并解密序列号;从硬件指纹信息中读取并解密校验信息;从硬件指纹信息中读取并解密数据段数据;

计算数据段校验值并进行验证,验证计算得到的校验值与存储的校验值是否一致,如果是就进入下一步,如果否,就将错误信息写入文件,结束;

s105:解密数据段,从文件中提取序列号、硬件指纹信息、信息生成时间和cpu信息;进行数据一致性验证,如果计算得到的值与存储的值一致,则验证成功,就进入下一步,如果否,就将错误信息写入文件,结束;

s106:生成随机数;基于随机数与文件校验值,生成数据段信息,将信息段和数据段信息写入文件,结束。

基于国密算法的终端认证信息生成方法,还包括:

s101:计算文件校验值;输入待加密数据,获取待加密数据长度和待加密数据的有效期,获取文件校验值,获取硬件指纹信息文件位置;

s102:根据硬件指纹信息文件位置,打开硬件指纹信息文件;判断是否打开成功,如果是则进入下一步,如果否就将错误信息写入终端认证信息文件,结束;

s103:读取硬件指纹信息,创建并打开终端认证信息文件,判断是否打开成功,如果是就进入下一步,如果否,结束。

应理解的,所述终端认证信息文件,保存了终端认证必须的信息和加密数据、有效期等。

应理解的,s104中,从硬件指纹信息中读取并解密序列号,是指将加密混淆过的序列号修改为原始序列号。

应理解的,s104中,从硬件指纹信息中读取并解密校验信息,是指将加密混淆过的校验信息修改为原始的校验信息。

进一步地,所述计算文件校验值,具体步骤包括:

使用sm3算法计算一个核心文件的哈希值,将哈希值平均分解为2个16字节的子块,按照字节异或得到16字节的文件校验值crc。

所述核心文件,是指:库文件或参数文件。例如:应用程序执行必须的动态链接库、储存参数的文件等。

进一步地,所述s101中,待加密数据,例如:程序执行中的核心函数需要的常参数;

进一步地,硬件指纹信息的生成步骤包括:

sa101:创建空白文件,检测cpu指令支持情况,若满足要求,则进入sa102;如果不满足要求,则将错误信息接入空白文件,结束;

sa102:生成四组随机数,将第一组随机数作为序列号;

sa103:获取当前时间,生成inf信息段;从inf信息段中提取位置信息、偏移量和临时密钥种子;

sa104:采用国密算法分别对序列号和inf信息段进行加密,生成加密初始值参数,生成加密用主密钥;

sa105:生成硬件信息,利用硬件信息、当前时间和cpu信息构造数据段;

sa106:对数据段进行加密,计算校验值,将所有数据写入文件,结束。

进一步地,所述创建空白文件步骤之后,所述检测cpu指令支持情况步骤之前,还包括:生成描述性信息,保存至硬件指纹信息字符串bsinfo。

进一步地,检测cpu指令支持情况,是检测cpu是否支持算法所需指令集,如果支持则将检测信息cpuid追加至bsinfo。如无法全部支持,将错误信息追加到bsinfo,将bsinfo写入文件。

应理解的,为了加速算法实现通常会用到特殊指令集,但是比较老的cpu不支持一些新的指令集如aes-ni,bmi2,avx-2等。因此需要检测cpu是否支持这些新的指令集aes-ni,bmi2,avx-2等。

应理解的,指令支持情况一般与密码算法实现相关,如在x64平台下利用aes硬件加速模块则需要支持aes-ni,sm2则需要bmi2指令集支持。由用户指定需要支持哪些指令集。

应理解的,inf信息段用于存储一些关键信息,取名为inf,该段大小为320字节,首先利用320字节数组随机数填充该320字节。

进一步地,所述sa102:生成四组随机数,将第一组随机数作为序列号;具体步骤包括:

sa1021:用随机数生成器生成256比特的随机数,将其划分为32个8比特的小块,如果超过15个小块为全0,判断为随机数生成失败,将错误信息追加到bsinfo,将bsinfo写入文件,返回错误信息,退出;否则将随机数存入第一组随机数ic0;

sa1022:重复sa1021三次,生成第二组随机数ic1、第三组随机数ic2和第四组随机数ic3;

s1023:将第一组随机数ic0设置为序列号,将序列号标识信息和序列号追加到bsinfo。

进一步地,所述sa103的获取当前时间,具体步骤包括:

获取64位的当前时间,将当前时间信息追加到bsinfo。

进一步地,所述sa103的生成inf信息段,具体步骤包括:

sa103a1:设置临时序号i为0,生成320字节的无符号数组inf[320],该数组需要16字节内存对齐;

sa103a2:设置错误次数为0;

sa103a3:用随机数生成器生成256比特的随机数,将其划分为32个8比特的小块,如果超过12个小块为全0,判断为随机数生成失败,错误次数+1;

sa103a4:如果错误次数<10,转步骤s103a3,否则判断随机数生成失败,将错误信息追加到bsinfo,将bsinfo写入文件,返回错误信息,退出;否则将随机数复制到inf第i*32字节开始的位置,转sa103a5。

sa103a5:临时序号i+1,如果i=10,从inf信息段中提取位置信息;否则转sa103a2。

进一步地,从inf信息段中提取位置信息,具体步骤包括:

从inf168字节开始的信息段中获取4个位置信息

pos0=128+inf[168+inf[181]%16]%16];

pos1=32+inf[168+inf[173]%16]%16];

pos2=64+inf[168+inf[175]%16]%16];

pos3=192+inf[168+inf[179]%16]%16];

其中,pos0表示第一位置信息;pos1表示第二位置信息;pos2表示第三位置信息;pos3表示第四位置信息。

进一步地,从inf信息段中提取偏移量,具体步骤包括:

获取4个偏移量:

shift0=inf[168+inf[172]%16]%16]*8;

shift1=inf[168+inf[182]%16]%16]*8;

shift2=inf[168+inf[180]%16]%16]*8;

shift3=inf[168+inf[176]%16]%16]*8;

其中,shift0表示第一循环移位值,shift1表示第二循环移位值,shift2表示第三循环移位值,shift3表示第四循环移位值,用于将加密后的数据循环移位后保存,增加数据破解难度。

进一步地,从inf信息段中提取密钥种子,具体步骤包括:

获取临时密钥种子inft=inf[168+inf[183]%16]%16]

将临时密钥种子扩展到16字节作为主密钥,以sm4算法对32字节的序列号执行解密算法,将输出的32字节数据复制到inf数组pos3开始的32字节。

设置临时密钥种子inft为预设固定值,如inft=0xac;

将临时密钥种子扩展到16字节作为主密钥,以sm4算法对inf数组168字节开始的16字节数据执行解密算法,将输出的16字节数据复制到原位置。

进一步地,所述sa104中,对序列号进行加密,对inf信息段进行加密,生成加密初始值参数,生成加密用主密钥;具体步骤包括:

sa1041:将ic0256比特数据循环左移shift0比特得到待加密数据,将ic1循环左移shift1比特生成临时密钥,以该密钥为主密钥利用sm4算法对待加密数据执行加密算法,得到16字节临时变量buf,将buf复制到16字节的加密初始值参数iv,将buf循环右移shift0比特后复制到inf数组pos1开始的16字节。

sa1042:将ic2256比特数据循环左移shift2比特得到待加密数据,将ic3循环左移shift3比特生成临时密钥,以该密钥为主密钥对待加密数据执行sm4加密算法,得到16字节临时变量buf,将buf循环右移shift0比特后复制到inf数组pos0开始的16字节。

进一步地,所述sa105中,生成硬件信息的具体步骤包括:

sa105a1:获取主板序列号,如果主板序列号长于16字节,将主板序列号后16字节复制到rootrand第16字节开始的内存;否则将全部主板序列号复制到rootrand第16字节开始的位置,以rootrand第16字节开始的16字节为主密钥生成sm4解密方式轮密钥;

sa105a2:获取cpu的序列号,如果cpu序列号长于16字节,将cpu序列号后16字节复制到rootrand第32字节开始的内存;否则将全部cpu序列号复制到rootrand第32字节开始的位置;

sa105a3:获取主板bios序列号,如果bios序列号长于16字节,将bios列号后16字节复制到rootrand第48字节开始的内存;否则将全部bios序列号复制到rootrand第48字节开始的位置;

sa105a4:利用sm3算法计算rootrand数组64字节的哈希值;将32字节哈希值平均拆分为2个16字节的比特串,按字节异或得到16字节的待加密信息;

sa105a5:利用sm4算法以s105a1生成的主密钥对16字节的待加密信息执行解密算法,将输出的16字节信息复制到硬件信息数组;

sa105a6:检测cpu虚拟机标志位,如果虚拟机标志位非0,返回0;

sa105a7:检测cpu超线程标志位,保存至1字节的临时变量ihyb;

sa105a8:检测cpu线程数,保存至2字节的临时变量ilogical;

sa105a9:检测cpu核心数,保存至2字节的临时变量icore;

如果超线程标志位为1,同时核心数<线程数则设置ihyb为0;

设置8字节的无符号整形数处理器特征值为0,将ihyb复制到该参数第1字节,将ilogical复制到该参数第2,3字节,将icore复制到该参数第4,5字节。

返回处理器特征值。

进一步地,所述sa105中,利用硬件信息、当前时间和cpu信息构造数据段;具体步骤包括:

sa105b1:分配48字节的临时数组data;

sa105b2:将生成的16字节的硬件信息和8字节的cpu信息,将硬件信息复制到data;

sa105b3:将cpu信息复制到data第16字节开始的8字节;

sa105b4:将得到的时间信息复制到data第24字节开始的8字节;

sa105b5:混淆cpu信息,将inf数组第171字节开始的8字节数据按字节异或cinfbase各字节后保存至data第32字节开始的8个字节中;

sa105b6:data[40]=cpuid,临时变量i=0。

进一步地,所述sa106中,对数据段进行加密,计算校验值,将所有数据写入文件;具体步骤包括:

sa1061:用生成的buf作为主密钥对iv执行sm4加密算法,结果按字节异或data[i]...data[i+16]后保存至data第i字节开始的16字节;

sa1062:iv[0]++,i=i+16;

sa1063:重复sa1061两次;

sa1064:将data[0]...data[15]循环左移shift3比特后保存至inf第pos2开始的16字节中;将data[16]...data[31]循环右移shift2比特后保存至inf第pos2+16开始的16字节中;将data[32]...data[40]复制到inf第pos2+32开始的9个字节中;

sa1065:利用sm3算法计算inf320字节的哈希值,将哈希值标志追加到bsinfo,将哈希值按字节异或ic032字节后追加到bsinfo;

sa1066:加数据段开始描述信息至bsinfo;将320字节inf数据追加到bsinfo;追加数据段结束描述信息至bsinfo;将bsinfo保存至文件,关闭文件,结束。

生成64字节的随机数数组rootrand作为硬件信息基础常参数,用于提高随机性,将该随机数以固定参数的形式应用于各方法。

生成64比特的随机数cinfbase,将该随机数以固定参数的形式应用于方法。

进一步地,所述s103中,创建并打开终端认证信息文件,包括:创建并打开终端认证信息文件;生成描述性信息,保存至终端认证信息字符串bsinfox。

进一步地,所述s104中,从硬件指纹信息中读取并解密序列号;具体步骤包括:

s104a1:从硬件指纹信息字符串bsinfo中查找序列号标识信息,如没有找到,将错误信息追加到终端认证信息字符串bsinfox,将终端认证信息字符串bsinfox写入文件,返回错误信息,退出;

s104a2:取出32字节的序列号信息,如果失败,将错误信息追加到终端认证信息字符串bainfox,将终端认证信息字符串bsinfox写入文件,返回错误信息,退出;否则将序列号复制到无符号64位整形数组u64da[4]。

s104a3:对u64da数组进行8字节大小端置换。

进一步地,所述s104中,读取并解密校验信息,具体步骤包括:

s104b1:从硬件指纹信息字符串bsinfo中查找校验值标识信息,如果没有找到,将错误信息追加到终端认证信息字符串bsinfox,将终端认证信息字符串bsinfox写入文件,返回错误信息,退出;

s104b2:取出32字节的校验值,如果失败,将错误信息追加到终端认证信息字符串bainfox,将终端认证信息字符串bsinfox写入文件,返回错误信息,退出;否则将校验值复制到无符号64位整形数组u64d[4];对u64d数组进行8字节大小端置换。

进一步地,所述s104中,利用国密算法计算数据段校验值并进行验证,验证计算得到的校验值与存储的校验值是否一致,如果是就进入下一步,如果否,就将错误信息写入文件,结束;具体步骤包括:

s104c1:从硬件指纹信息字符串bsinfo中查找数据段开始标识信息和数据段结束标志信息。如果没有找到标志信息,将错误信息追加到终端认证信息字符串bsinfox,将终端认证信息字符串bsinfox写入文件,返回错误信息,退出;

s104c2:提取数据段数据,复制到u8da数组,进行8字节大小端置换。令无符号字节指针bsinfo1指向u8da数组首个元素;

s104c3:计算数据段数据哈希值。异或u64da对应的256比特数据,结果与s104b2中的校验值比对,如果不一致,判断为数据段数据错误,将错误信息追加到终端认证信息字符串bsinfox,将终端认证信息字符串bsinfox写入文件,返回错误信息,退出;否则转步骤s104c4;

s104c4:将bsinfo1第171字节开始的8字节数据复制到64比特无符号整形数curtime0。

进一步地,s106中,所述生成数据段信息;具体步骤包括:

s1061:提取位置信息、偏移量信息和密钥种子信息;

s1062:利用硬件指纹信息和核心文件校验值生成密钥;

s1063:生成随机数,利用随机数生成有效期对应的时间信息,加密有效期事件信息;

s1064:利用硬件指纹信息文件中存储的文件生成初始日期和待加密数据的有效期生成加密用参数;

s1065:利用国密sm4算法加密序列号、硬件指纹信息文件中存储的文件生成初始日期、待加密数据的有效期,加密待加密的数据;

s1066:计算数据段校验值。

本发明中所有的方法均使用如下两组参数,须保证一致。

生成64字节的随机数数组rootrand,将该随机数以常数的形式保存至各程序;生成64比特的随机数cinfbase,将该随机数以常数的形式保存到各程序。

输入:a.用sm3算法计算一个核心文件(如库文件、参数文件)的哈希值,平均分解为2个16字节的子块,按字节异或得到16字节的文件校验值crc

b.64位无符号整形的有效期exptime,单位为秒

c.待加密数据

d.待加密数据的长度

e.其他信息,如版权信息,用户信息,邮箱等

如图2所示,示例性的,s106中,所述生成数据段信息;具体步骤包括:

1、设置临时密钥种子inft=0xac;

将临时密钥种子扩展到16字节作为密钥,利用该密钥对inf数组第168字节开始的16字节数据执行sm4加密算法,并将运算结果复制到inf数组第168字节开始的16字节;

2、获取4个位置信息:

pos0=128+bsinfo1[168+bsinfo1[181]%16]%16];

pos1=32+bsinfo1[168+bsinfo1[173]%16]%16];

pos2=64+bsinfo1[168+bsinfo1[175]%16]%16];

pos3=192+bsinfo1[168+bsinfo1[179]%16]%16];

3、获取4个偏移量:

shift0=bsinfo1[168+bsinfo1[172]%16]%16]*8;

shift1=bsinfo1[168+bsinfo1[182]%16]%16]*8;

shift2=bsinfo1[168+bsinfo1[180]%16]%16]*8;

shift3=bsinfo1[168+bsinfo1[176]%16]%16]*8;

4、获取临时密钥种子inft=bsinfo1[168+bsinfo1[183]%16]%16];

5、将临时密钥种子扩展到16字节作为密钥,利用该密钥对inf数组pos3位置开始的32字节执行sm4加密算法,将运算结果复制到64位无符号整形数组序列号ic[4]。比较64位无符号整形数组序列号ic[4]与u64da数组4个元素是否一致,如果不一致,判断为信息提取错误,将错误信息追加到终端认证信息字符串bsinfox,将终端认证信息字符串bsinfox写入文件,返回错误信息,退出;

6、将终端认证信息字符串bsinfo1第pos1位置开始的16字节循环左移shift0位后保存至m4加密算法的初始变量iv;

7、将终端认证信息字符串bsinfo1第pos0位置开始的16字节循环右移shift0位后保存至32字节的密钥数组mkey,将终端认证信息字符串bsinfo1第pos2开始的16字节循环右移shift3位后保存至data;

8、将终端认证信息字符串bsinfo1第pos2+16字节开始的16字节循环右移shift2位后保存至data第16字节开始的位置;

9、将终端认证信息字符串bsinfo1第pos2+32字节开始的9字节复制到data第32字节开始的位置data+32;

10、将16字节iv中的内容复制到临时变量buf,mkey为密钥对buf执行sm4加密算法,将运算结果保存至buf,按字节异或data和buf16字节;

11、iv[0]++;

12、将16字节iv复制到buf,mkey为密钥对buf执行sm4加密算法,将运算结果按字节异或data第16字节开始的16字节,将结果保存至data第16字节开始的位置;

13、iv[0]++;

14、将16字节iv复制到buf,mkey为密钥对buf执行sm4加密算法,将运算结果按字节异或data第32字节开始的16字节,将结果保存至data第32字节开始的位置;

15、将data第32字节开始的8字节复制到用于存储时间信息的8字节临时变量tcurtime1;

16、tcurtime1异或预先生成的常数cinfbase,如果tcurtime1不等于提取出的硬件指纹信息文件生成时间tcurtime0,判断为数据异常,将错误信息追加到终端认证信息字符串bsinfox,将终端认证信息字符串bsinfox写入文件,返回错误信息,退出;

17、取data[40],检查cpu指令集支持情况,如果cpu不支持算法所需指令,判断为异常,将错误信息追加到终端认证信息字符串bsinfox,将终端认证信息字符串bsinfox写入文件,返回错误信息,退出;

18、将data24字节开始的8个字节复制到用于保存时间信息的8字节无符号数curtime,令临时8字节无符号数变量curtimex=curtime;

19、获取64位的时间信息保存至curtime;

20、将data第16字节开始的8字节数据复制到cpu特征信息cpuinf;

21、生成1024字节的随机数保存至临时数组bsinfo1;

22、获取4个位置信息:

pos_0=5+bsinfo1[192+bsinfo1[209]%32]%32;

pos_1=56+bsinfo1[192+bsinfo1[213]%32]%32;

pos_2=120+bsinfo1[192+bsinfo1[207]%32]%32;

pos_3=288+bsinfo1[192+bsinfo1[215]%32]%32;

复制bsinfo1第pos_3+16字节开始的8个字节至tcurtime1;

23、获取8个偏移量信息:

shift_0=(bsinfo1[192+bsinfo1[221]%32]%16)*8;

shift_1=(bsinfo1[192+bsinfo1[206]%32]%16)*8;

shift_2=(bsinfo1[192+bsinfo1[211]%32]%16)*8;

shift_3=(bsinfo1[192+bsinfo1[195]%32]%16)*8;

shift_4=(bsinfo1[192+bsinfo1[198]%32]%16)*8;

shift_5=(bsinfo1[192+bsinfo1[202]%32]%16)*8;

shift_6=(bsinfo1[192+bsinfo1[210]%32]%16)*8;

shift_7=(bsinfo1[192+bsinfo1[214]%32]%16)*8;

24、获取临时密钥种子inft=bsinfo1[168+bsinfo1[211]%16];

25、将bsinfo1第205字节开始的16字节循环右移shift_0位后保存至mkey;

26、all0[i]=inft^crc[i]^bsinfo1[pos_0+(i+shift_4)%16]i=0~15;

其中,^表示异或;crc表示校验值;bsinfo1表示临时变量;pos_0表示位置信息;shift_4表示偏移量;

27、临时变量all016字节循环右移shift_3位后保存至key;

28、mkey作为主密钥,对临时密钥key执行sm4加密算法,将加密后的16字节保存至key,并复制到临时变量all1数组中;

29、对key数组的16个字节循环左移shift_2位后保存至buf;

30、临时数组buf复制到主密钥mkey作为主密钥;

31、临时变量all016字节全部设为0;

32、复制8字节的用于保存时间信息的8字节无符号数curtime到all0;

33、以随机数组bsinfo1第pos_3字节开始的32位无符号整形数为随机数种子生成32位随机变量,随机变量模604800;

34、令过期时间exptime=exptime+curtime+(tcurtime1>>46)+步骤33生成的随机变量,得到具有随机性的有效期数据;

35、将随机数组bsinfo1第205字节开始的8字节数据复制到curtime;

36、exptime=exptime^curtime,对exptime进行保护,将exptime复制到all0第8字节开始的8字节

37、将16字节随机数all0循环左移shift_1位后保存至16字节随机数组buf;

38、mkey作为主密钥对buf执行sm4加密算法,将16字节随机数组buf循环左移shft_5位后得到sm4加密算法的初始变量iv;

39、加密index段:crc[i]=bsinfo1[197+i]^crc[i]i=0~15;

key[i]=bsinfo1[i]^bsinfo1[245+i]^data[i]i=0~15;

其中,crc为校验值;key为密钥;key作为密钥生成sm4解密用轮密钥;

key作为主密钥对终端认证信息数组bsinfo1第192字节开始的16字节执行sm4解密运算,将结果覆盖原数据;

key作为主密钥对终端认证信息数组bsinfo1第208字节开始的16字节执行sm4加密运算,并覆盖原数据;

key作为主密钥对校验值crc16字节执行sm4加密运算,保存至bsinfo1第224字节开始的16字节;

key作为主密钥对16字节临时变量all0执行sm4加密运算,将运算结果输出到bsinfo1第pos_1位置字节开始的16字节;

40、将16字节ic复制到数据段对应的数组data;

sm4加密16字节的随机数组all1作为主密钥mkey,对sm4加密算法的初始变量iv执行sm4解密运算,得到buf,将buf与data数组16字节按字节异或后保存至bsinfo1数组第pos_2字节开始的16字节。

41、sm4加密算法的初始变量iv[0]++;

利用mkey作为主密钥对iv执行解密运算后将结果输出到buf,将buf与data数组第16字节开始的16字节按字节异或后保存至bsinfo1数组第pos_2+16字节开始的16字节。

42、将4字节的数据长度复制到buf,将16字节校验信息复制到data;

data数组与buf数组前4个字节按字节异或后保存到data数组;

43、将待密数据保存至data第16字节开始的位置;

44、设置临时变量j=0;

45、iv[j%2]++;

46、以all1为主密钥,对iv执行sm4加密运算,运算结果输出至buf,

将buf与data数组第j*16字节开始的16字节按字节异或后保存至data数组第j*16字节开始的16字节。

47、将data数组第j*16字节开始的16字节循环左移shift_n(n=j%8)位保存至bsinfo1+pos_3+j*16字节开始的位置;

48、j++,如果j<1+len/16;转45,否则转49;

49、对bsinfo1数组768字节长度的数据执行sm3哈希操作,计算得到32字节的哈希值;

50、将序列号标识信息和序列号追加到终端认证信息字符串bsinfox;将时间信息追加到终端认证信息字符串bsinfox;将有效期信息追加到终端认证信息字符串bsinfox;追加其他信息到终端认证信息字符串bsinfox;将哈希值按字节异或ic032字节得到数据校验值,将校验值标志和校验值追加到终端认证信息字符串bsinfox;

追加数据段开始描述信息至终端认证信息字符串bsinfox;将320字节inf数据追加到终端认证信息字符串bsinfox;追加数据段结束描述信息至bsinfox;获取当前时间,将时间戳信息追加到终端认证信息字符串bxinfox;将终端认证信息字符串bsinfox保存至文件,关闭文件,结束。

实施例二

本实施例提供了基于国密算法的终端认证信息生成系统;

基于国密算法的终端认证信息生成系统,包括:

读取模块,其被配置为:从硬件指纹信息中读取并解密序列号;从硬件指纹信息中读取并解密校验信息;从硬件指纹信息中读取并解密数据段数据;计算数据段校验值并进行验证,验证计算得到的校验值与存储的校验值是否一致,如果是就进入下一步,如果否,就将错误信息写入文件,结束;

验证模块,其被配置为:解密数据段,从文件中提取序列号、硬件指纹信息、信息生成时间和cpu信息;进行数据一致性验证,如果计算得到的值与存储的值一致,则验证成功,就进入下一步,如果否,就将错误信息写入文件,结束;

认证信息生成模块,其被配置为:生成随机数;基于随机数与文件校验值,生成数据段信息,将信息段和数据段信息写入文件,结束。

此处需要说明的是,上述读取模块、验证模块和认证信息生成模块对应于实施例一中的步骤s104至s106,上述模块与对应的步骤所实现的示例和应用场景相同,但不限于上述实施例一所公开的内容。需要说明的是,上述模块作为系统的一部分可以在诸如一组计算机可执行指令的计算机系统中执行。

上述实施例中对各个实施例的描述各有侧重,某个实施例中没有详述的部分可以参见其他实施例的相关描述。

所提出的系统,可以通过其他的方式实现。例如,以上所描述的系统实施例仅仅是示意性的,例如上述模块的划分,仅仅为一种逻辑功能划分,实际实现时,可以有另外的划分方式,例如多个模块可以结合或者可以集成到另外一个系统,或一些特征可以忽略,或不执行。

实施例三

本实施例还提供了一种电子设备,包括:一个或多个处理器、一个或多个存储器、以及一个或多个计算机程序;其中,处理器与存储器连接,上述一个或多个计算机程序被存储在存储器中,当电子设备运行时,该处理器执行该存储器存储的一个或多个计算机程序,以使电子设备执行上述实施例一所述的方法。

应理解,本实施例中,处理器可以是中央处理单元cpu,处理器还可以是其他通用处理器、数字信号处理器dsp、专用集成电路asic,现成可编程门阵列fpga或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。

存储器可以包括只读存储器和随机存取存储器,并向处理器提供指令和数据、存储器的一部分还可以包括非易失性随机存储器。例如,存储器还可以存储设备类型的信息。

在实现过程中,上述方法的各步骤可以通过处理器中的硬件的集成逻辑电路或者软件形式的指令完成。

实施例一中的方法可以直接体现为硬件处理器执行完成,或者用处理器中的硬件及软件模块组合执行完成。软件模块可以位于随机存储器、闪存、只读存储器、可编程只读存储器或者电可擦写可编程存储器、寄存器等本领域成熟的存储介质中。该存储介质位于存储器,处理器读取存储器中的信息,结合其硬件完成上述方法的步骤。为避免重复,这里不再详细描述。

本领域普通技术人员可以意识到,结合本实施例描述的各示例的单元即算法步骤,能够以电子硬件或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。

实施例四

本实施例还提供了一种计算机可读存储介质,用于存储计算机指令,所述计算机指令被处理器执行时,完成实施例一所述的方法。

以上所述仅为本公开的优选实施例而已,并不用于限制本公开,对于本领域的技术人员来说,本公开可以有各种更改和变化。凡在本公开的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本公开的保护范围之内。

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