一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

工作密钥生成方法、装置及计算机可读存储介质与流程

2021-10-24 12:32:00 来源:中国专利 TAG:密钥 信息安全 装置 生成 可读


1.本技术涉及信息安全技术领域,尤其涉及一种工作密钥生成方法、装置及计算机可读存储介质。


背景技术:

2.终端设备与上位机进行数据交互过程中,需要对传输数据采用加密方案,尤其是对敏感数据进行加密处理;目前,采用的加密方案较为简单,例如,终端设备出厂时导入固定密钥,交互过程中使用固定密钥进行加密,一旦终端设备的固定密钥泄露,则该终端设备的用户将会面临重大损失,所以采用固定密钥对数据进行加密的方案会严重降低终端设备的安全性,此外,现有技术中还采用通过终端设备中的固定密钥派生工作密钥的方式,但这种方式需要依附固定密钥的算法,对后续工作密钥的使用有很大的局限性。


技术实现要素:

3.为了解决现有技术中存在的问题,本技术提供了一种工作密钥生成方法、装置及计算机可读存储介质。
4.其中,本技术提供的一种工作密钥生成方法包括:步骤s1、终端接收上位机发送的操作指令,根据所述操作指令中的密钥索引获取主密钥值、主密钥计数器值和主密钥算法;步骤s2、所述终端将所述主密钥计数器值按照第一预设算法进行处理得到主密钥标识和第一数值;步骤s3、所述终端初始化工作密钥缓冲区,将所述主密钥值存入所述工作密钥缓冲区,设置工作密钥计数值,初始化移位寄存器,设定移位寄存器当前位;步骤s4、所述终端判断第一数值中与移位寄存器当前位对应的位的值是否等于第二预设值,若是则执行步骤s5,否则执行步骤s8;步骤s5、所述终端根据当前移位寄存器的值和工作密钥计数值进行计算得到第一结果,将工作密钥计数值更新为所述第一结果,执行步骤s6;步骤s6、所述终端根据所述主密钥标识、更新后的工作密钥计数值和所述主密钥算法生成第一派生数据;步骤s7、所述终端根据所述主密钥算法确定派生密钥的长度,获取工作密钥缓冲区中的数据作为第一密钥,根据所述第一密钥和所述第一派生数据生成符合派生密钥长度的数据,将工作密钥缓冲区中的数据更新为所述符合派生密钥长度的数据,执行步骤s8;步骤s8、所述终端判断所述移位寄存器当前位是否为所述移位寄存器的最后一位,若是则执行步骤s9,否则控制所述移位寄存器按照预设方向移位,更新移位寄存器当前位,返回步骤s4;步骤s9、所述终端根据所述操作指令设置工作密钥用途为第一用途,根据所述第一用途、所述主密钥标识、所述第一数值和所述主密钥算法生成第二派生数据,执行步骤
s10;步骤s10、所述终端根据所述操作指令获取工作密钥算法,根据所述工作密钥算法确定工作密钥的长度,获取工作密钥缓冲区中的数据作为第二密钥,根据所述第二密钥和所述第二派生数据生成符合工作密钥长度的工作密钥,根据所述操作指令和所述工作密钥执行相应的操作,将操作结果返回给上位机。
5.其中,本技术提供的一种工作密钥生成装置包括:接收模块,用于接收上位机发送的操作指令;获取模块,用于根据操作指令中的密钥索引获取主密钥值、主密钥计数器值和主密钥算法;处理模块,用于将所述主密钥计数器值按照第一预设算法进行处理得到主密钥标识和第一数值;设置模块,用于初始化工作密钥缓冲区,将所述主密钥值存入所述工作密钥缓冲区,设置工作密钥计数值,初始化移位寄存器,设定移位寄存器当前位;第一判断模块,用于判断第一数值中与移位寄存器当前位对应的位的值是否等于第二预设值;计算模块,用于根据当前移位寄存器的值和工作密钥计数值进行计算得到第一结果,将工作密钥计数值更新为第一结果;生成模块,用于根据所述主密钥标识、更新后的工作密钥计数值和所述主密钥算法生成第一派生数据;所述生成模块,还用于根据所述主密钥算法确定派生密钥的长度,获取工作密钥缓冲区中的数据作为第一密钥,根据所述第一密钥和所述第一派生数据生成符合派生密钥长度的数据,将工作密钥缓冲区中的数据更新为所述符合派生密钥长度的数据;第二判断模块,用于判断当前位是否为移位寄存器的最后一位;控制模块,用于所述第二判断模块判断当前位不为移位寄存器的最后一位时,控制移位寄存器按照预设方向移位,更新移位寄存器当前位;所述生成模块,还用于根据所述操作指令设置工作密钥用途为第一用途,根据所述第一用途、所述主密钥标识、所述第一数值和所述主密钥算法生成第二派生数据;所述生成模块,还用于根据所述操作指令获取工作密钥算法,根据所述工作密钥算法确定工作密钥的长度,获取工作密钥缓冲区中的数据作为第二密钥,根据所述第二密钥和所述第二派生数据生成符合工作密钥长度的工作密钥;执行模块,用于根据所述操作指令和所述工作密钥执行相应的操作,将操作结果返回给上位机。
6.其中,本技术提供了一种电子设备包括:存储器,用于存储计算机可读指令;以及处理器,用于运行所述计算机可读指令,使得所述计算机可读指令被所述处理器执行时实现本技术涉及的工作密钥生成方法。
7.其中,本技术提供了一种计算机可读存储介质,用于存储计算机可读指令,当所述计算机可读指令由计算机执行时,使得所述计算机执行本技术涉及的工作密钥生成方法。
8.本技术提供的技术方案的有益效果是:本技术根据上位机下发的操作指令确定工作密钥的算法和工作密钥用途,并根据不同的工作密钥算法和工作密钥用途生成不同的工
作密钥,在生成工作密钥的过程中根据移位寄存器对工作密钥缓冲区中的数据进行迭代更新,以确保每次操作过程中生成的工作密钥都是唯一的,采用本技术提供的方法,较现有技术中,依据固定密钥和固定密钥算法生成与固定密钥相同算法的工作密钥的加密方案更安全、适用范围也更广泛。
附图说明
9.图1是本技术实施例1提供的一种工作密钥生成方法流程图;图2、图3、图4是本技术实施例2提供的一种工作密钥生成方法流程图;图5是本技术实施例3提供的一种工作密钥生成装置框图。
具体实施方式
10.为使本技术的目的、技术方案和优点更加清楚,下面将结合本技术实施例中的附图,对本技术实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本技术一部分实施例,而不是全部的实施例。基于本技术中的实施例,本领域技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本技术保护的范围。
11.实施例1本技术实施例1提供了一种工作密钥生成方法,如图1所示,该方法包括:步骤101、终端接收上位机发送的操作指令,根据操作指令中的密钥索引获取主密钥值、主密钥计数器值和主密钥算法标识;在本实施例中,操作指令具体包括:数据加密指令、数据解密指令、pin码加密指令、mac校验值生成指令或验证指令等;在本实施例中,根据操作指令中的密钥索引获取主密钥值、主密钥计数器值、主密钥算法标识具体包括:根据操作指令中的密钥索引获取主密钥,根据主密钥获取主密钥值、主密钥计数器值、主密钥算法标识;可选地,根据操作指令中的密钥索引获取主密钥具体为:终端获取操作指令中的密钥索引,在密钥容器中通过密钥索引查找与密钥索引对应的数据,将查找到的数据作为主密钥;例如,主密钥值为:fedcba9876543210f1f1f1f1f1f1f1f101020304050607080807060504030201;主密钥计数器值为:0ffff9876543210e00010004;主密钥算法标识为0x06。
12.步骤102、终端将主密钥计数器值按照第一预设算法进行处理得到主密钥标识和第一数值;在本实施例中,主密钥计数器值具体为12字节的数据;步骤102具体为:终端将主密钥计数器值分解为两部分,将前8个字节作为主密钥标识,将后4字节作为第一数值;例如,主密钥计数器值为:0ffff9876543210e00010004;主密钥标识为:0ffff9876543210e;第一数值为:00010004。
13.步骤103、终端初始化工作密钥缓冲区,将主密钥值存入工作密钥缓冲区,设置工作密钥计数值,初始化移位寄存器,设定移位寄存器当前位;在本实施例中,初始化移位寄存器当前位具体为:设定移位寄存器的最高位为当前位;例如,移位寄存器值为:0x80000000;工作密钥计数值为:0x00000000。
14.步骤104、终端判断第一数值中与移位寄存器当前位对应的位的值是否等于第二预设值,若是则执行步骤105,否则执行步骤108;在本实施例中,终端判断第一数值中与移位寄存器当前位对应的位的值是否等于第二预设值具体为:终端获取移位寄存器当前位的值和第一数值中与移位寄存器当前位对应的位的值,根据第二预设算法对移位寄存器当前位的值和第一数值中与移位寄存器当前位对应的位的值进行计算得到第二数值,判断第二数值是否大于第三预设值,若是则第一数值中与移位寄存器当前位对应的位的值等于第二预设值,执行步骤106,否则第一数值中与移位寄存器当前位对应的位的值不等于第二预设值;具体地,第二预设算法具体为与运算;第三预设值为0;第二预设值为1,移位寄存器当前位的值为1;举例说明,若移位寄存器当前位为第2位,则第一数值中与移位寄存器当前位对应的位也是第2位。
15.步骤105、终端根据当前移位寄存器的值和工作密钥计数值进行计算得到第一结果,将工作密钥计数值更新为第一结果,执行步骤106;在本实施例中,终端根据当前移位寄存器的值和工作密钥计数值进行计算得到第一结果具体为:终端按照第三预设算法根据当前移位寄存器的值和工作密钥计数值进行计算得到第一结果;其中,第三预设算法具体为或运算;当前移位寄存器的值为:0x 80 00 00 00;工作密钥计数值为:0x 00 00 00 00;第一结果为:0x 80 00 00 00。
16.步骤106、终端根据主密钥标识、更新后的工作密钥计数值和主密钥算法生成第一派生数据;在本实施例中,终端根据主密钥标识、更新后的工作密钥计数值和主密钥算法生成派生数据具体包括:终端根据密钥派生用途、主密钥标识、更新后的工作密钥计数值和主密钥算法生成第一派生数据;根据密钥派生用途、主密钥标识、更新后的工作密钥计数值和主密钥算法生成第一派生数据具体为:终端根据第四预设值、密钥派生用途、主密钥算法对应的值、主密钥标识的预设字节值、更新后的工作密钥计数值顺序拼接得到预设长度的数据;具体地,预设长度为16字节;终端根据第四预设值、密钥派生用途、主密钥算法对应的值、主密钥标识的预设字节值、更新后的工作密钥计数值顺序拼接得到预设长度的数据具体为:终端将第一、第二字节初始化为第四预设值,将密钥派生用途对应的值作为第三和第四字节,将主密钥算法对
应的值作为第五、第六、第七、第八字节,将主密钥标识的后4个字节作为第九、第十、第十一、第十二字节,将更新后的工作密钥计数值作为第十三、第十四、第十五、第十六字节;在本实施例中,第四预设值为:0x01 0x01;在本实施例中,密钥派生用途具体为一个数值,用于表示密钥用途是密钥派生,所对应的值例如为:0x80 0x00;具体地,主密钥算法包括aes

128、aes

192、aes

256,主密钥算法对应的值为:0x00 0x02 0x00 0x80、0x00 0x03 0x00 0x00、0x00 0x04 0x01 0x00;在本实施例中,主密钥算法具体以aes

256为例;主密钥标识为:0ffff9876543210e;主密钥计数值的后4个字节为00010004;第一次更新后的工作密钥计数值为:0x10000;第一次生成的第一派生数据为:01 01 80 00 00 04 01 00 65 43 21 0e 00 01 00 00;第二次更新后的工作密钥计数值为:0x10004;第二次生成的第一派生数据为:01 01 80 00 00 04 01 00 65 43 21 0e 00 01 00 04。
17.步骤107、终端根据主密钥算法确定派生密钥的长度,获取工作密钥缓冲区中的数据作为第一密钥,根据第一密钥和第一派生数据生成符合派生密钥长度的数据,将工作密钥缓冲区中的数据更新为符合派生密钥长度的数据,执行步骤108;在本实施例中,步骤107之前还包括:终端设置派生密钥算法为主密钥算法;在本实施例中,可选地,根据第一密钥和第一派生数据生成符合派生密钥长度的数据,具体为:将符合派生密钥长度的数据作为目标密钥,确定目标密钥长度与第一派生数据长度的倍数,根据倍数和第一派生数据生成第一派生数据组,根据第一密钥对第一派生数据组进行加密得到符合派生密钥长度的数据;优选的,当倍数为整数倍时,根据倍数和第一派生数据生成第一派生数据组,根据第一密钥对第一派生数据组进行加密得到符合派生密钥长度的数据具体包括:根据第一派生数据生成包含整数倍个数据单元的派生数据组,根据第一密钥对派生数据组的每个数据单元进行加密,所得密文顺次拼接得到符合派生密钥长度的数据;优选的,当倍数为非整数倍时,根据倍数和第一派生数据生成第一派生数据组,根据第一密钥对第一派生数据组进行加密得到符合派生密钥长度的数据具体包括:将非整数倍向上取整得到整数倍,根据第一派生数据生成包含整数倍个数据单元的派生数据组,根据第一密钥对派生数据组的每个数据单元进行加密,所得密文顺次拼接,从拼接后的密文中截取长度等于目标密钥长度的数据作为符合派生密钥长度的数据。
18.进一步优选的,根据第一派生数据生成包含整数倍个数据单元的派生数据组具体包括:步骤p1、初始化当前数据单元序号,将第一派生数据作为派生数据组的一个数据单元;步骤p2、判断派生数据组中数据单元的个数是否等于整数倍,是则生成过程结束,否则执行步骤p3;
步骤p3、更新当前数据单元序号,将第一派生数据的预设字节修改为当前数据单元序号,将修改后的派生数据作为派生数据组的一个数据单元,返回执行步骤p2。
19.举例说明,派生密钥的算法是主密钥算法,即派生密钥算法为aes

256;在本实施例中,第一次循环得到工作密钥的计数值为:0x10000;派生数据为:01 01 80 00 00 04 01 00 65 43 21 0e 00 01 00 00;其中,目标密钥长度为32字节,确定目标密钥长度32字节与第一派生数据长度16字节的倍数为2,根据第一派生数据生成包含整数倍个(即2个)数据单元的派生数据组01 01 80 00 00 04 01 00 65 43 21 0e 00 01 00 00、01 02 80 00 00 04 01 00 65 43 21 0e 00 01 00 00,根据第一密钥fedcba9876543210f1f1f1f1f1f1f1f101020304050607080807060504030201对派生数据组的每个数据单元进行加密,所得密文5d 05 a2 f3 a6 4d dc c9 57 93 81 c6 a4 e2 79 6d、34 18 fa f8 e0 54 3b ca 42 af bc 80 5a 56 58 4d顺次拼接得到符合派生密钥长度的数据5d 05 a2 f3 a6 4d dc c9 57 93 81 c6 a4 e2 79 6d 34 18 fa f8 e0 54 3b ca 42 af bc 80 5a 56 58 4d;在本实施例中,第二次循环得到工作密钥的计数值为:0x10004;派生数据为:01 01 80 00 00 04 01 00 65 43 21 0e 00 01 00 04;通过第一密钥对派生数据组的第一个数据单元进行加密得到密文为:78 bc fa c1 46 e1 98 82 5f fd 68 98 b3 63 9f 68;通过第一密钥对派生数据组的第二个数据单元进行加密得到密文为:d4 f3 1d de dd 84 8a 1f b7 19 ad 18 19 2f b4 69;将密文顺次拼接得到符合派生密钥长度的数据为:78 bc fa c1 46 e1 98 82 5f fd 68 98 b3 63 9f 68 d4 f3 1d de dd 84 8a 1f b7 19 ad 18 19 2f b4 69。
20.步骤108、终端判断移位寄存器当前位是否为移位寄存器的最后一位,若是则执行步骤109,否则控制移位寄存器按照预设方向移动预设位,更新移位寄存器的当前位,返回步骤104;在本实施例中,具体地,预设方向可以是向右,也可以是向左,还可以从高位到低位;预设位具体为一位。
21.步骤109、终端根据操作指令设置工作密钥用途为第一用途,根据第一用途、主密钥标识、第一数值和主密钥算法生成第二派生数据,执行步骤110;在本实施例中,根据第一用途、主密钥标识、第一数值和主密钥算法生成第二派生数据具体为:终端根据第四预设值、第一用途、主密钥算法对应的值、主密钥标识的预设字节值、第一数值顺序拼接得到预设长度的数据;在本实施例中,工作密钥用途包括:密钥加密、pin码加密、mac生成、mac验证、mac生成且验证、数据加密、数据解密、数据加解密、密钥派生,工作密钥用途所对应的值为:0x00 0x02、0x10 0x00、0x20 0x00、0x20 0x01、0x20 0x02、0x30 0x00、0x30 0x01、0x30 0x02、0x80 0x00;在本实施例中,第一用途具体以pin码加密举例说明;例如,pin码加密所对应的值为:0x10 0x00;主密钥标识为:0ffff9876543210e;第一数值为:00010004;
主密钥算法为:aes

256;生成的第二派生数据为:01 01 10 00 00 04 01 00 65 43 21 0e 00 01 00 04。
22.步骤110、终端根据操作指令获取工作密钥算法,根据工作密钥算法确定工作密钥的长度,获取工作密钥缓冲区中的数据作为第二密钥,根据第二密钥和第二派生数据生成符合工作密钥长度的工作密钥,根据操作指令和工作密钥执行相应的操作,将操作结果返回给上位机。
23.在本实施例中,以pin码加密为例,终端收到的操作指令为:25 21 00 00 00 13 00 01 30 00 06 01 00 00 02;具体地,终端根据操作指令解析得到工作密钥用途、工作密钥算法标识;其中,操作指令中第1

2字节为命令类别和命令码,用于标识数据加密/解密命令;操作指令中第3字节为操作码,例如,00代表加密;01代表解密;操作指令中第4字节为固定值;操作指令中第5

6字节为数据长度,高字节在前,低字节在后,假设为0字节;操作指令中第7

8字节为主密钥索引,例如0001;操作指令中第9

10字节为工作密钥用途,例如3000;操作指令中第11字节为工作密钥算法标识,例如06,表示aes

256算法;操作指令中第12字节为算法模式,例如01,代表ecb模式;操作指令中第13

14字节为初始向量长度,不使用,例如0000;操作指令中第15字节为填充模式,例如为02;工作密钥算法可以包括:aes

128、aes

192、aes

256、3des128、3des192;例如,工作密钥算法为aes

128时,工作密钥算法标识为0x04,工作密钥算法为aes

192时,工作密钥算法标识为0x05 ,工作密钥算法为aes

256时,工作密钥算法标识为0x06 ;在本实施例中,若工作密钥算法为aes

128或3des128时,工作密钥的长度为16字节,若工作密钥算法为aes

192或3des192时,工作密钥的长度为24字节,若工作密钥算法为aes

256时,工作密钥的长度为32字节;在本实施例中,若操作指令为pin码加密时,根据操作指令和工作密钥缓冲区中的数据执行相应的操作,将操作结果返回给上位机具体为:终端获取pin码,获取工作密钥缓冲区中的数据作为密钥,按照预设加密算法根据密钥对pin码进行加密得到pin码密文,将pin码密文发送给上位机;在本实施例中,可选地,根据第二密钥和第二派生数据生成符合工作密钥长度的工作密钥,具体为:将工作密钥作为目标密钥,确定目标密钥长度与第二派生数据长度的倍数,根据倍数和第二派生数据生成第二派生数据组,根据第二密钥对第二派生数据组进行加密得到符合工作密钥长度的工作密钥;优选的,当倍数为整数倍时,根据倍数和第二派生数据生成第二派生数据组,根据第二密钥对第二派生数据组进行加密得到符合工作密钥长度的工作密钥具体包括:根据第二派生数据生成包含整数倍个数据单元的派生数据组,根据第二密钥对派生数据组的每个数据单元进行加密,所得密文顺次拼接得到符合工作密钥长度的工作密钥;优选的,当倍数为非整数倍时,根据倍数和第二派生数据生成第二派生数据组,根据第二密钥对第二派生数据组进行加密得到符合工作密钥长度的工作密钥具体包括:将非整数倍向上取整得到整数倍,根据第二派生数据生成包含整数倍个数据单元的派生数据组,根据第二密钥对派生数据组的每个数据单元进行加密,所得密文顺次拼接,从拼接后的密文中截取长度等于目标密钥长度的数据作为符合工作密钥长度的工作密钥。
24.进一步优选的,根据第二派生数据生成包含整数倍个数据单元的派生数据组具体包括:步骤p1、初始化当前数据单元序号,将第二派生数据作为派生数据组的一个数据单元;步骤p2、判断派生数据组中数据单元的个数是否等于整数倍,是则生成过程结束,否则执行步骤p3;步骤p3、更新当前数据单元序号,将第二派生数据的预设字节修改为当前数据单元序号,将修改后的派生数据作为派生数据组的一个数据单元,返回执行步骤p2。
25.实施例2本技术实施例2提供了一种工作密钥生成方法,如图2、图3、图4所示,该方法包括:步骤201、终端接收上位机发送的操作指令;在本实施例中,操作指令具体包括:数据加密指令、数据解密指令、mac校验值生成指令或验证指令等。
26.步骤202、终端根据操作指令中的密钥索引获取主密钥,根据主密钥获取主密钥值、主密钥计数器值、主密钥算法标识、主密钥类型标识;在本实施例中,终端根据操作指令中的密钥索引获取主密钥具体为:终端获取操作指令中的密钥索引,在密钥容器中通过密钥索引查找与密钥索引对应的数据,将查找到的数据作为主密钥;在本实施例中,主密钥计数器值是根据上位机下发的指令可以进行变化的;例如,终端接收到上位机下发的一条"ksn递增"的命令后, 将主密钥计数器值的计数器部分增加。
27.例如,主密钥算法标识为:0x06;主密钥值为:fedcba9876543210f1f1f1f1f1f1f1f101020304050607080807060504030201;主密钥计数器值为:0ffff9876543210e00010004。
28.步骤203、终端根据主密钥类型标识判断主密钥类型是否为第一类型,若是则执行步骤204,否则结束;在本实施例中,第一类型为初始写入的可加密pin的密钥。
29.步骤204、终端根据主密钥算法标识判断主密钥算法是否为第一算法,若是则执行步骤205,否则结束;在本实施例中,第一算法可以为aes算法、sm4算法;具体地,本实施例中具体以第一算法为aes

256进行举例说明。
30.步骤205、终端将主密钥计数器值按照第一预设算法进行处理得到主密钥标识和第一数值;在本实施例中,主密钥计数器值具体为12字节的数据;步骤205具体为:终端将主密钥计数器值分解为两部分,将前8个字节作为主密钥标识,将后4字节作为第一数值;例如,主密钥计数器值为:0ffff9876543210e00010004;主密钥标识为:0ffff9876543210e;
第一数值为:00010004。
31.步骤206、终端初始化工作密钥缓冲区,将主密钥值存入工作密钥缓冲区;步骤207、终端设置工作密钥计数值,初始化移位寄存器,设定移位寄存器当前位;在本实施例中,设定移位寄存器当前位具体为:设定移位寄存器的最高位为当前位;例如,移位寄存器的值和工作密钥计数值均为4字节的数值,移位寄存器的值为:0x80000000;工作密钥计数值为:0x00000000。
32.步骤208、终端判断当前移位寄存器中的值是否大于第一预设值,若是则执行步骤209,否则执行步骤216;在本实施例中,当前移位寄存器的值为:0x80000000;第一预设值具体为0;步骤209、终端获取移位寄存器当前位的值和第一数值中与移位寄存器当前位对应的位的值,根据第二预设算法对移位寄存器当前位的值和第一数值中与移位寄存器当前位对应的位的值进行计算得到第二数值,判断第二数值是否大于第三预设值,若是则执行步骤211,否则执行步骤210;在本实施例中,第二预设算法具体为与运算;移位寄存器当前位的值为1,第一数值中与移位寄存器当前位对应的位的值为1时,第三预设值为0。
33.步骤210、终端判断当前位是否为移位寄存器的最后一位,若是则执行步骤216,否则控制移位寄存器按照预设方向移动预设位,更新移位寄存器的当前位,返回步骤208;可选地,预设方向可以是向右,也可以是向左,还可以从高位到低位;具体地,本实施例中控制移位寄存器向右移动1位。
34.步骤211、终端根据第三预设算法对当前移位寄存器的值和工作密钥计数值进行计算得到第一结果,将工作密钥计数值更新为第一结果,执行步骤212;在本实施例中,第三预设算法具体为或运算;当前移位寄存器的值为:0x 80 00 00 00;工作密钥计数值为:0x 00 00 00 00;第一结果为:0x 80 00 00 00。
35.步骤212、终端设置密钥用途为密钥派生,根据密钥用途、主密钥标识、更新后的工作密钥计数值和主密钥算法生成第一派生数据;在本实施例中,根据密钥用途、主密钥标识、更新后的工作密钥计数值和主密钥算法生成第一派生数据具体为:终端根据第四预设值、密钥派生用途、主密钥算法对应的值、主密钥标识的预设字节值、更新后的工作密钥计数值顺序拼接得到预设长度的数据;具体地,生成的第一派生数据的长度具体为16字节;具体地,终端根据第四预设值、密钥派生用途、主密钥算法对应的值、主密钥标识的预设字节值、更新后的工作密钥计数值顺序拼接得到预设长度的数据具体为:终端将第一、第二字节初始化为第四预设值,将工作密钥用途对应的值作为第三和第四字节,将主密钥算法对应的值作为第五、第六、第七、第八字节,将主密钥标识的后4个字节作为第九、第
十、第十一、第十二字节,将更新后的工作密钥计数值作为第十三、第十四、第十五、第十六字节;在本实施例中,第四预设值为:0x01 0x01;在本实施例中,密钥用途包括:密钥加密、pin码加密、mac生成、mac验证、mac生成且验证、数据加密、数据解密、数据加解密、密钥派生,工作密钥用途所对应的值为:0x00 0x02、0x10 0x00、0x20 0x00、0x20 0x01、0x20 0x02、0x30 0x00、0x30 0x01、0x30 0x02、0x80 0x00;具体地,主密钥算法包括aes

128、aes

192、aes

256,主密钥算法对应的值为:0x00 0x02 0x00 0x80、0x00 0x03 0x00 0x00、0x00 0x04 0x01 0x00;在本实施例中,主密钥算法具体以aes

256为例;主密钥标识为:0ffff9876543210e;主密钥计数器值的后4个字节为00010004;第一次更新后的工作密钥计数值为:0x10000;第一次生成的第一派生数据为:01 01 80 00 00 04 01 00 65 43 21 0e 00 01 00 00;第二次更新后的工作密钥计数值为:0x10004;第二次生成的第一派生数据为:01 01 80 00 00 04 01 00 65 43 21 0e 00 01 00 04。
36.步骤213、终端根据主密钥算法确定派生密钥的长度,确定派生密钥长度与第一派生数据长度的倍数,若倍数为整数倍,则执行步骤214,若倍数为非整数倍,则执行步骤215;在本实施例中,若派生密钥长度为16字节,第一派生数据的长度也为16字节,则派生密钥长度与第一派生数据长度的倍数为1;若派生密钥长度为24字节,第一派生数据的长度为16字节,则派生密钥长度与第一派生数据长度的倍数为1.5;若派生密钥长度为32字节,第一派生数据的长度为16字节,则派生密钥长度与第一派生数据长度的倍数为2。
37.步骤214、终端根据第一派生数据生成包含整数倍个数据单元的派生数据组,获取工作密钥缓冲区中的数据作为第一密钥,根据第一密钥对派生数据组的每个数据单元进行加密,所得密文顺次拼接得到符合派生密钥长度的数据,将工作密钥缓冲区中的数据更新为符合派生密钥长度的数据,返回步骤210;在本实施例中,根据第一派生数据生成包含整数倍个数据单元的派生数据组具体包括:步骤p1、初始化当前数据单元序号,将第一派生数据作为派生数据组的一个数据单元;步骤p2、判断派生数据组中数据单元的个数是否等于整数倍,是则生成过程结束,否则执行步骤p3;步骤p3、更新当前数据单元序号,将第一派生数据的预设字节修改为当前数据单元序号,将修改后的派生数据作为派生数据组的一个数据单元,返回执行步骤p2;步骤215、终端将非整数倍向上取整得到整数倍,根据第一派生数据生成包含整数倍个数据单元的派生数据组,获取工作密钥缓冲区中的数据作为第一密钥,根据第一密钥对派生数据组的每个数据单元进行加密,所得密文顺次拼接,从拼接后的密文中截取长度
等于派生密钥长度的数据作为符合派生密钥长度的数据,将工作密钥缓冲区中的数据更新为符合派生密钥长度的数据,返回步骤210;在本实施例中,派生密钥的算法是主密钥算法,即派生密钥算法为aes

256;在本实施例中,第一次循环得到工作密钥的计数值为:0x10000;第一派生数据为:01 01 80 00 00 04 01 00 65 43 21 0e 00 01 00 00;其中,目标密钥长度为32字节,确定目标密钥长度32字节与第一派生数据长度16字节的倍数为2,根据第一派生数据生成包含整数倍个(即2个)数据单元的派生数据组01 01 80 00 00 04 01 00 65 43 21 0e 00 01 00 00、01 02 80 00 00 04 01 00 65 43 21 0e 00 01 00 00,根据第一密钥fedcba9876543210f1f1f1f1f1f1f1f101020304050607080807060504030201对派生数据组的每个数据单元进行加密,所得密文5d 05 a2 f3 a6 4d dc c9 57 93 81 c6 a4 e2 79 6d、34 18 fa f8 e0 54 3b ca 42 af bc 80 5a 56 58 4d顺次拼接得到符合派生密钥长度的数据5d 05 a2 f3 a6 4d dc c9 57 93 81 c6 a4 e2 79 6d 34 18 fa f8 e0 54 3b ca 42 af bc 80 5a 56 58 4d;在本实施例中,第二次循环得到工作密钥的计数值为:0x10004;派生数据为:01 01 80 00 00 04 01 00 65 43 21 0e 00 01 00 04;通过第一密钥对派生数据组的第一个数据单元进行加密得到密文为:78 bc fa c1 46 e1 98 82 5f fd 68 98 b3 63 9f 68;通过第一密钥对派生数据组的第二个数据单元进行加密得到密文为:d4 f3 1d de dd 84 8a 1f b7 19 ad 18 19 2f b4 69;将密文顺次拼接得到符合派生密钥长度的数据为:78 bc fa c1 46 e1 98 82 5f fd 68 98 b3 63 9f 68 d4 f3 1d de dd 84 8a 1f b7 19 ad 18 19 2f b4 69。
38.步骤216、终端根据操作指令设置工作密钥用途为第一用途,根据第一用途、主密钥标识、第一数值和主密钥算法生成第二派生数据,执行步骤217;在本实施例中,工作密钥用途包括:密钥加密、pin码加密、mac生成、mac验证、mac生成且验证、数据加密、数据解密、数据加解密、密钥派生,工作密钥用途所对应的值为:0x00 0x02、0x10 0x00、0x20 0x00、0x20 0x01、0x20 0x02、0x30 0x00、0x30 0x01、0x30 0x02、0x80 0x00;在本实施例中,第一用途具体以pin码加密举例说明;例如,pin码加密所对应的值为:0x10 0x00;主密钥标识为:0ffff9876543210e;第一数值为:00010004;主密钥算法为:aes

256;生成的第二派生数据为:01 01 10 00 00 04 01 00 65 43 21 0e 00 01 00 04。
39.步骤217、终端根据操作指令获取工作密钥的算法,根据工作密钥算法确定工作密钥的长度,确定工作密钥长度与第二派生数据长度的倍数,若倍数为整数倍,则执行步骤218,若倍数为非整数倍,则执行步骤219;在本实施例中,若工作密钥长度为16字节,第二派生数据的长度也为16字节,则工作密钥长度与第二派生数据长度的倍数为1;若工作密钥长度为24字节,第二派生数据的长度为16字节,则工作密钥长度与第二派生数据长度的倍数为1.5;若工作密钥长度为32字
节,第二派生数据的长度也16字节,则工作密钥长度与第二派生数据长度的倍数为2;在本实施例中,工作密钥算法可以包括:aes

128、aes

192、aes

256、3des128、3des192;在本实施例中,若工作密钥算法为aes

128或3des128时,工作密钥的长度为16字节,若工作密钥算法为aes

192或3des192时,工作密钥的长度为24字节,若工作密钥算法为aes

256时,工作密钥的长度为32字节。
40.步骤218、终端根据第二派生数据生成包含整数倍个数据单元的派生数据组,获取工作密钥缓冲区中的数据作为第二密钥,根据第二密钥对派生数据组的每个数据单元进行加密,所得密文顺次拼接得到符合工作密钥长度的数据,将工作密钥缓冲区中的数据更新为工作密钥,执行步骤220;在本实施例中,根据第二派生数据生成包含整数倍个数据单元的派生数据组具体包括:步骤p1、初始化当前数据单元序号,将第二派生数据作为派生数据组的一个数据单元;步骤p2、判断派生数据组中数据单元的个数是否等于整数倍,是则生成过程结束,否则执行步骤p3;步骤p3、更新当前数据单元序号,将第二派生数据的预设字节修改为当前数据单元序号,将修改后的派生数据作为派生数据组的一个数据单元,返回执行步骤p2;本实施例中,以工作密钥算法为aes

128举例说明时,第二密钥为:78 bc fa c1 46 e1 98 82 5f fd 68 98 b3 63 9f 68 d4 f3 1d de dd 84 8a 1f b7 19 ad 18 19 2f b4 69;第二派生数据为:01 01 10 00 00 02 00 80 65 43 21 0e 00 01 00 04;其中,工作密钥长度为16字节,确定目标密钥长度16字节与第二派生数据长度16字节的倍数为1,根据第二派生数据生成包含整数倍个(即1个)数据单元的派生数据组01 01 10 00 00 02 00 80 65 43 21 0e 00 01 00 04,根据第二密钥78 bc fa c1 46 e1 98 82 5f fd 68 98 b3 63 9f 68 d4 f3 1d de dd 84 8a 1f b7 19 ad 18 19 2f b4 69对派生数据组的数据单元进行加密,所得密文b9 61 1c 8a 12 ee 0e 60 5f 5e dd 8d 82 00 48 58,该密文就是符合工作密钥长度的工作密钥;本实施例中,以工作密钥算法为3des128举例说明时,第二密钥为:78 bc fa c1 46 e1 98 82 5f fd 68 98 b3 63 9f 68 d4 f3 1d de dd 84 8a 1f b7 19 ad 18 19 2f b4 69;第二派生数据为:01 01 10 00 00 00 00 80 65 43 21 0e 00 01 00 04;其中,工作密钥长度为16字节,确定目标密钥长度16字节与第二派生数据长度16字节的倍数为1,根据第二派生数据生成包含整数倍个(即1个)数据单元的派生数据组01 01 10 00 00 00 00 80 65 43 21 0e 00 01 00 04,根据第二密钥78 bc fa c1 46 e1 98 82 5f fd 68 98 b3 63 9f 68 d4 f3 1d de dd 84 8a 1f b7 19 ad 18 19 2f b4 69对派生数据组的数据单元进行加密,所得密文22 bf 4a 3b a1 bd de 17 ab 5c 77 fa cf 7d 84 34,就是符合工作密钥长度的工作密钥;本实施例中,以工作密钥算法为aes

256举例说明时,
e1 98 82 5f fd 68 98 b3 63 9f 68 d4 f3 1d de dd 84 8a 1f b7 19 ad 18 19 2f b4 69对派生数据组的每个数据单元进行加密,所得密文ce c4 a2 88 55 84 57 2b 31 24 31 04 f0 92 6f dc、40 30 78 db 14 e0 6f ae 2f b1 63 f7 7f 07 6f 17顺次拼接得到ce c4 a2 88 55 84 57 2b 31 24 31 04 f0 92 6f dc 40 30 78 db 14 e0 6f ae 2f b1 63 f7 7f 07 6f 17,从拼接后的密文中截取长度等于工作密钥长度的数据ce c4 a2 88 55 84 57 2b 31 24 31 04 f0 92 6f dc 40 30 78 db 14 e0 6f ae作为工作密钥。
42.步骤220、终端根据操作指令和工作密钥执行相应的操作,将操作结果返回给上位机。
43.在本实施例中,工作密钥缓冲区中的数据包括: pin码加密密钥、mac校验值生成密钥、mac校验值验证密钥、数据加密密钥、数据解密密钥、数据加解密密钥、密钥派生密钥等;在本实施例中,以数据加密为例,终端收到的操作指令为:25 20 00 00 00 13 00 01 30 00 06 01 00 00 00 08 01 02 03 04 05 06 07 08 02;具体地,终端根据操作指令解析得到工作密钥用途、工作密钥算法标识、待加密数据长度、待加密数据;其中,操作指令中第1

2字节为命令类别和命令码,用于标识数据加密/解密命令;操作指令中第3字节为操作码,例如,00代表加密;01代表解密;操作指令中第4字节为固定值;操作指令中第5

6字节为数据长度,高字节在前,低字节在后,假设为19字节;操作指令中第7

8字节为主密钥索引,例如0001;操作指令中第9

10字节为工作密钥用途,例如3000;操作指令中第11字节为工作密钥算法标识,例如06,表示aes

256算法;操作指令中第12字节为算法模式,例如01,代表ecb模式;操作指令中第13

14字节为初始向量长度,不使用,例如0000;操作指令中第15

16字节为数据长度,例如0008;操作指令中第17

24字节为数据内容,例如0102030405060708;操作指令中第25字节为填充模式,例如为02;在本实施例中,若操作指令为数据加密时,根据操作指令和工作密钥缓冲区中的数据执行相应的操作,将操作结果返回给上位机具体为:终端获取操作指令中的待加密数据,获取工作密钥缓冲区中的数据作为密钥,按照预设加密算法根据密钥对待加密数据进行加密得到数据密文,将数据密文发送给上位机。
44.本技术根据上位机下发的操作指令确定工作密钥的算法和工作密钥用途,并根据不同的工作密钥算法和工作密钥用途生成不同的工作密钥,在生成工作密钥的过程中根据移位寄存器对工作密钥缓冲区中的数据进行迭代更新,以确保每次操作过程中生成的工作密钥都是唯一的,采用本技术提供的方法,较现有技术中,依据主密钥和主密钥算法生成与主密钥相同算法的工作密钥的加密方案更安全、适用范围也更广泛。
45.实施例3基于上述本技术所提供的一种工作密钥生成方法的技术方案,本技术对应提供了一种工作密钥生成装置的结构示意图,如图5所示,本技术的一种工作密钥生成装置300可以包括:接收模块301,用于接收上位机发送的操作指令;获取模块302,用于根据操作指令中的密钥索引获取主密钥值、主密钥计数器值和主密钥算法;
处理模块303,用于将主密钥计数器值按照第一预设算法进行处理得到主密钥标识和第一数值;设置模块304,用于初始化工作密钥缓冲区,将主密钥值存入工作密钥缓冲区,设置工作密钥计数值,初始化移位寄存器,设定移位寄存器的当前位;第一判断模块305,用于判断第一数值中与移位寄存器当前位对应的位的值是否等于第二预设值;计算模块306,用于根据当前移位寄存器的值和工作密钥计数值进行计算得到第一结果,将工作密钥计数值更新为第一结果;生成模块307,用于根据主密钥标识、更新后的工作密钥计数值和主密钥算法生成第一派生数据;生成模块307,还用于根据主密钥算法确定派生密钥的长度,获取工作密钥缓冲区中的数据作为第一密钥,根据第一密钥和第一派生数据生成符合派生密钥长度的数据,将工作密钥缓冲区中的数据更新为符合派生密钥长度的数据;第二判断模块308,用于判断当前位是否为移位寄存器的最后一位;控制模块309,用于第二判断模块判断当前位不为移位寄存器的最后一位时,控制移位寄存器按照预设方向移位,更新移位寄存器的当前位;生成模块307,还用于根据操作指令设置工作密钥用途为第一用途,根据第一用途、主密钥标识、第一数值和主密钥算法生成第二派生数据;生成模块307,还用于根据操作指令获取工作密钥算法,根据工作密钥算法确定工作密钥的长度,获取工作密钥缓冲区中的数据作为第二密钥,根据第二密钥和第二派生数据生成符合工作密钥长度的工作密钥;执行模块310,用于根据操作指令和工作密钥执行相应的操作,将操作结果返回给上位机。
46.本技术实施例提供了一种电子设备,包括:存储器,用于存储计算机可读指令;以及处理器,用于运行所述计算机可读指令,使得所述计算机可读指令被所述处理器执行时实现本技术中的工作密钥生成方法。
47.本技术提供了一种计算机可读存储介质,用于存储计算机可读指令,当所述计算机可读指令由计算机执行时,使得所述计算机执行本技术中的工作密钥生成方法。
48.本技术提供的计算机可读存储介质,适用于上述的工作密钥生成方法的任一实施例,在此不再赘述。
49.以上对本技术所提供的一种工作密钥生成方法、装置及计算机可读存储介质进行了详细介绍,本文中应用了具体个例对本技术的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本技术的方法及其核心思想;同时,对于本领域的一般技术人员,依据本技术的思想,在具体实施方式及应用范围上均会有改变之处,综上,本说明书内容不应理解为对本技术的限制。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献

  • 日榜
  • 周榜
  • 月榜