本发明涉及数字钱包领域,尤其涉及一种数字货币硬件钱包应用更新的安全通道的创建方法及装置。
背景技术:
近年来,随着电子货币的产生,人们已经逐渐习惯并依赖于电子货币,现在每个人的钱包里基本上都会有几张电子消费卡或者银行信用卡。银行卡成为了用户身份识别和参与交易的一个载体。
而数字货币是电子货币形式的替代货币。数字金币和密码货币都属于数字货币。它不同于虚拟世界中的虚拟货币,因为它能被用于真实的商品和服务交易,而不局限在网络游戏中。目前,中央银行不承认也不发行数字货币,数字货币也不一定要有基准货币,现被定义为一种虚拟商品。目前流行的数字货币有,比特币、莱特币、众创币等,他们都属于钱包币,具有软件钱包,采用了区块链技术,能够去中心化,并具有实际应用。
然而由于纯软件的特点,软件钱包安全性较低,如果软件钱包忘记备份,当计算机系统发生问题,很容易丢失钱包数据信息,也很容易被盗取钱包余额,解决这种问题的途径就是采用硬件钱包。硬件钱包是指将数字资产私钥单独储存在一个芯片中,与互联网隔离,即插即用。在数字货币硬件钱包应用中有远程更新钱包应用的需要。为了解决远程应用更新时,防止中间人被攻击,解决设备与服务端的身份认证、数据传输的完整性和私密性等问题,亟需提供一种安全通道进行应用更新。
技术实现要素:
本发明的目的是为了克服现有技术的不足,提供一种数字货币硬件钱包应用更新的安全通道的创建方法及装置。
本发明提供了一种数字货币硬件钱包应用更新的安全通道的创建方法,包括:
步骤s1:当硬件钱包接收到上位机发送的指令时,判断指令的类型,如为获取数据指令则步骤s2,如为执行安全操作指令则执行步骤s5;如为验证指令则执行步骤s6,如为应用更新指令则执行步骤s7;
步骤s2:根据获取数据指令判断要获取数据的类型,如为获取密钥信息则执行步骤s3,如为获取设备证书信息则执行步骤s4;
步骤s3:根据获取数据指令中的密钥集标识在对应的密钥集中获取密钥版本和密钥标识并保存,并将所述密钥版本和密钥标识返回给所述上位机,返回步骤s1;
步骤s4:根据获取数据指令中的证书集标识查找对应的证书集,遍历证书集中的上级证书找到根证书,顺序保存根证书开始的所有证书的证书内容,并将所有证书的内容返回给所述上位机,返回步骤s1;
步骤s5:从执行安全操作指令中获取上位机自身公钥和证书编号,根据所述证书编号获取对应的上位机证书,使用所述上位机自身公钥对所述上位机证书进行验证,如验证成功则保存上位机密钥,给上位机返回成功响应,返回步骤s1,如验证失败则给所述上位机返回错误信息;
步骤s6:根据验证指令中的密钥版本号和密钥id获取上位机自身公钥,根据所述验证指令中的上位机临时公钥、所述上位机自身公钥和生成的会话密钥生成收条,并将所述收条发送给所述上位机,返回步骤s1;
步骤s7:使用会话密钥对所述应用更新指令中的应用数据密文进行解密,并用解密成功得到的应用数据更新保存的应用数据,并给上位机返回更新成功信息,返回步骤s1。
本发明又提供了一种数字货币硬件钱包应用更新的安全通道的创建装置,包括:
第一接收模块,用于收到上位机发送的指令;
第一判断模块,用于判断所述第一接收模块接收到的指令的类型,如为获取数据指令则触发第二判断模块,如为执行安全操作指令则触发验证保存模块;如为验证指令则触发获取生成模块,如为应用更新指令则触发解密更新模块;
所述第二判断模块,用于根据获取数据指令判断要获取数据的类型,如为获取密钥信息则触发获取保存模块,如为获取设备证书信息则触发查找保存模块;
所述获取保存模块,用于根据获取数据指令中的密钥集标识在对应的密钥集中获取密钥版本和密钥标识并保存;
第一发送模块,用于将所述获取保存模块保存的密钥版本和密钥标识返回给所述上位机,触发所述第一接收模块;
所述查找保存模块,用于根据获取数据指令中的证书集标识查找对应的证书集,遍历证书集中的上级证书找到根证书,顺序保存根证书开始的所有证书的证书内容;
第二发送模块,用于将所述查找保存模块保存的所有证书的内容返回给所述上位机,触发所述第一接收模块;
所述验证保存模块,用于从执行安全操作指令中获取上位机自身公钥和证书编号,根据所述证书编号获取对应的上位机证书,使用所述上位机自身公钥对所述上位机证书进行验证,如验证成功则保存上位机密钥;
第三发送模块,用于当所述验证保存模块对所述上位机证书验证成功时给所述上位机返回成功响应,触发所述第一接收模块;还用于当所述验证保存模块对所述上位机证书验证失败时给所述上位机返回错误信息;
所述获取生成模块,用于根据验证指令中的密钥版本号和密钥id获取上位机自身公钥,根据所述验证指令中的上位机临时公钥、所述上位机自身公钥和生成的会话密钥生成收条;
第四发送模块,用于将所述获取生成模块生成的所述收条发送给所述上位机,触发所述第一接收模块;
所述解密更新模块,用于使用会话密钥对所述应用更新指令中的应用数据密文进行解密,并用解密成功得到的应用数据更新保存的应用数据;
第五发送模块,用于在所述解密更新模块用解密成功得到的应用数据更新保存的应用数据之后给所述上位机返回更新成功信息,触发所述第一接收模块。
本发明与现有技术相比,具有以下优点:
本发明技术方案提供的安全通道的创建方法及装置,在数字货币硬件钱包应用更新过程中使用该安全通道进行数据通讯可防止被攻击、窃取、篡改;通信双方可以通过本发明技术方案达到相互认证的目的;使用mac保证了通信数据的完整性;进行加密和校验可保证数据有私密性、完整性。
附图说明
图1为本发明实施例一提供的一种数字货币硬件钱包应用更新的安全通道的创建方法流程图;
图2为本发明实施例二提供的一种数字货币硬件钱包应用更新的安全通道的创建方法流程图;
图3-6为本发明实施例三提供的一种数字货币硬件钱包应用更新的安全通道的创建方法之前进行的个人化设置过程流程图;
图7-10为本发明实施例四提供的一种数字货币硬件钱包应用更新的安全通道的创建方法流程图;
图11为本发明实施例五提供的一种数字货币硬件钱包应用更新的安全通道的创建装置方框图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
实施例一
本发明实施例一提供一种数字货币硬件钱包应用更新的安全通道的创建方法,如图1所示,包括:
步骤101:当硬件钱包接收上位机发送的指令时,判断指令类型,如为检查设备指令则执行步骤102,如为生成临时密钥对指令则执行步骤103,如为提供证书链指令则执行步骤104;如为请求设备证书链指令则执行步骤110;如为协商密钥指令则执行步骤114;
具体的,判断指令类型为:判断指令中的第二字节数据,如为04则接收到的指令为检查设备指令,如为50则接收到的指令为生成临时密钥对指令,如为51则接收到的指令为提供证书链指令,如为52则接收到的指令为请求设备证书链指令,如为53则接收到的指令协商密钥指令;
步骤102:硬件钱包检查自身是否可用,是则给上位机返回成功响应,等待接收数据,返回步骤101,否则给上位机返回错误响应;
可选的,在本实施例中,步骤102具体为:硬件钱包从检查设备指令中获取设备id,判断获取的设备id是否与自身设备匹配且硬件钱包的当前状态是否可用,如均为是则给上位机返回成功响应,否则给上位机返回错误响应;硬件钱包从检查设备指令中获取设备id,具体为:从检查设备指令的第三字节至第六字节上获取设备id;
步骤103:硬件钱包从生成临时密钥对指令中获取上位机随机数并保存,生成设备临时密钥对和设备随机数并保存,获取预置的硬件钱包批次序列号,将硬件钱包批次序列号和设备随机数返回给上位机,返回步骤101;
步骤104:硬件钱包判断接收到的提供证书链指令的类型,如为提供证书链的主证书指令则执行步骤105,如为提供证书链的临时证书指令则执行步骤107;
具体的,在本实施例中,步骤104包括:硬件钱包判断提供证书链指令中的第三字节数据,如为00则接收到的指令为提供证书链的主证书指令,如为80则接收到的指令为提供证书链的临时证书指令;
步骤105:硬件钱包使用从证书链的主证书指令中的上位机主密钥公钥验证证书链的主证书指令中的上位机根证书是否合法,是则执行步骤106,否则给上位机返回错误响应;
具体的,在本实施例中,步骤105包括:硬件钱包从证书链的主证书指令中获取上位机主密钥公钥和上位机根证书,对上位机根证书中的待签名数据进行哈希计算的到第一哈希值,用上位机主密钥公钥对根证书的签名值进行解密得到第一解密值,判断第一哈希值与第一解密值是否相同,是则根证书合法,否则根证书不合法;
步骤106:硬件钱包保存上位机主密钥公钥,给上位机返回成功响应,等待接收数据,返回步骤101;
步骤107:硬件钱包从提供证书链的临时证书指令中获取临时公钥和临时证书;
步骤108:硬件钱包使用临时公钥对临时证书进行验证,如验证成功则执行步骤109,如验证失败则给上位机返回错误响应;
具体的,在本实施例中,步骤108包括:硬件钱包对临时证书中的待签名数据进行哈希计算的到第二哈希值,用临时密钥公钥对临时证书的签名值进行解密得到第二解密值,判断第二哈希值与第二解密值是否相同,是则临时证书合法,否则临时证书不合法;
步骤109:硬件钱包保存临时公钥,并给上位机返回成功响应,等待接收数据,返回步骤101;
步骤110:硬件钱包判断接收到的请求设备证书链指令的类型,如为请求设备证书链的主证书指令则执行步骤111,如为请求设备证书链的临时证书指令则执行步骤112;
具体的,在本实施例中,步骤110包括:硬件钱包判断请求设备证书链指令中的第三字节数据,如为00则接收到的指令为请求设备证书链的主证书指令,如为80则接收到的指令为请求设备证书链的临时证书指令;
步骤111:硬件钱包获取设备主证书,并将设备主证书返回给上位机,等待接收数据,返回步骤101;
步骤112:硬件钱包根据保存的上位机随机数、设备随机数和设备公钥生成临时待签名数据,使用设备私钥对待签名数据进行签名得到临时签名值;
步骤113:硬件钱包根据设备公钥和临时签名值生成临时证书,并将临时证书返回给上位机,等待接收数据,返回步骤101;
步骤114:硬件钱包使用设备私钥生成会话密钥并给上位机返回成功响应,等待接收数据,返回步骤101。
实施例二
本发明实施例二提供一种数字货币硬件钱包应用更新的安全通道的创建方法,如图2所示,包括:
步骤s1:当硬件钱包接收到上位机发送的指令时,判断指令的类型,如为获取数据指令则步骤s2,如为执行安全操作指令则执行步骤s5;如为验证指令则执行步骤s6,如为应用更新指令则执行步骤s7;
步骤s2:根据获取数据指令判断要获取数据的类型,如为获取密钥信息则执行步骤s3,如为获取设备证书信息则执行步骤s4;
步骤s3:根据获取数据指令中的密钥集标识在对应的密钥集中获取密钥版本和密钥标识并保存,并将密钥版本和密钥标识返回给上位机,返回步骤s1;
优选的,在本实施例中,步骤s3包括:
步骤s31:根据当前安全级别对接收到的获取数据指令的数据域内容进行解析并将解析结果存储到接收缓存中;
步骤s32:判断接收缓存中的数据是否合法,是则执行步骤s33,否则给上位机返回错误响应;
步骤s33:从接收缓存中获取密钥集标识,根据密钥集标识在密钥存储区中查找对应的密钥集,如找到则执行步骤s34,否则给上位机返回错误响应;
步骤s34:从密钥集中获取密钥版本和密钥标识,并将密钥版本和密钥标识存储到响应缓存中,根据安全级别对响应缓存中的数据进行打包并返回给上位机,返回步骤s1;
步骤s4:根据获取数据指令中的证书集标识查找对应的证书集,遍历证书集中的上级证书找到根证书,顺序保存根证书开始的所有证书的证书内容,并将所有证书的内容返回给上位机,返回步骤s1;
可选的,在本实施例中,步骤s4包括:
步骤s41:根据当前安全级别对接收到的获取数据指令的数据域内容进行解析并将解析结果存储在接收缓存中,并判断接收缓存中的数据是否合法,是则执行步骤s42,否则给上位机返回错误响应;
步骤s42:从接收缓存中获取证书集标识,根据证书集标识在证书存储区中查找对应的证书集,如找到则执行步骤s43,否则给上位机返回错误响应;
步骤s43:遍历证书集中的上级证书找到根证书,依次从根证书开始将所有证书的证书内容存储到响应缓存,根据安全级别对响应缓存中的数据进行打包并返回给上位机,返回步骤s1;
步骤s5:从执行安全操作指令中获取上位机自身公钥和证书编号,根据证书编号获取对应的上位机证书,使用上位机自身公钥对上位机证书进行验证,如验证成功则保存上位机密钥,给上位机返回成功响应,返回步骤s1,如验证失败则给上位机返回错误信息;
可选的,在本实施例中,步骤s5包括:
步骤s5-0:根据当前安全级别对执行安全操作指令的数据域内容进行解析并将解析结果存储在接收缓存中,从接收缓存中获取密钥版本号和密钥id;
步骤s5-1:根据密钥id和密钥版本号从密钥存储区查找对应的密钥集,如查找到则执行步骤s5-3,如未获取到则执行步骤s5-2;
步骤s5-2:从密钥存储区中获取预置的默认密钥集,执行步骤s5-3;
步骤s5-3:根据获取的密钥集判断是否存在合法的上位机临时公钥缓存,是则执行步骤s5-4,否则给上位机返回错误响应;
在本实施例中,步骤s5-3包括:
步骤a1:根据密钥id从获取的密钥集中获取对应的上位机根公钥和密钥参数引用值;
步骤a2:判断上位机临时公钥缓存是否存在,是则执行步骤a3,否则执行步骤a4;
步骤a3:判断上位机临时公钥缓存的类型和密钥长度是否与从密钥集中获取的密钥参数引用值相匹配,是则执行步骤a5,否则执行步骤a4;
步骤a4:根据预置的曲线参数引用值创建上位机临时公钥缓存,并根据获取的密钥集中的密钥参数引用值设置上位机临时公钥缓存的类型和密钥长度,执行步骤a5;
步骤a5:判断上位机临时公钥是否已经初始化,是则执行步骤a6,否则执行步骤a7;
步骤a6:判断密钥版本号和密钥id是否为上一条指令中的值,是则执行步骤a7,否则给上位机返回错误响应;
步骤s5-5判断为否时还包括:保存获取的密钥版本号和密钥id,
则步骤a6包括:
步骤a6-1:判断是否保存有密钥版本号和密钥id,是则执行步骤a6-2,否则执行步骤a7;
步骤a6-2:判断获取的密钥版本号和密钥id与保存的密钥版本号和密钥id是否相同,是则执行步骤a7,否则给上位机返回错误响应;
步骤a7:初始化上位机临时公钥,执行步骤s5-4;
步骤s5-4:将接收缓存中的上位机根公钥保存到上位机临时公钥缓存;
步骤s5-5:保存接收缓存中的部分当前证书,判断完整的当前证书是否接收完成,是则执行步骤s5-6,否则给上位机返回响应状态码,返回步骤s1;
步骤s5-6:使用上位机临时公钥缓存中的公钥对保存的当前证书进行验证,如验证成功则执行步骤s5-7,如验证失败则给上位机返回错误响应;
可选的,在本实施例中,步骤s5-6包括:
步骤b1:从接收缓存中获取证书编号;
步骤b2:判断是否已经设置了与证书编号对应的证书,是则执行步骤b3,否则执行步骤b5;
步骤b3:判断指定密钥的白名单是否存在,是则执行步骤b4,否则执行步骤b5;
步骤b4:检查当前证书的证书编号是否在白名单中,是则执行步骤b5,否则给上位机返回错误响应;
步骤b5:使用上位机临时公钥缓存的公钥验证当前证书,如验证成功则执行步骤s5-7,如验证失败则给上位机返回错误响应;
步骤s5-7:从当前证书中提取上位机自身公钥;
步骤s5-8:判断是否还有未接收到的证书,是则执行步骤s5-9,否则用上位机自身公钥替换上位机临时公钥缓存中的公钥,给上位机返回响应状态码,返回步骤s1;
可选的,步骤s5-7与步骤s5-8之间包括:从当前证书中提取密钥参数引用值,判断从密钥集中获取的密钥参数引用值是否与从当前证书中提取的密钥参数引用值一致,是则执行步骤s5-8,否则给上位机返回错误响应;
步骤s5-9:判断是否存在合法的上位机公钥缓存,是则执行步骤s5-10,否则创建合法的上位机公钥缓存,执行步骤s5-10;
在本实施例中,步骤s5-9包括:
步骤c1:判断上位机公钥缓存是否存在,是则执行步骤c2,否则执行步骤c3;
步骤c2:判断上位机公钥缓存的类型和密钥长度是否与密钥参数引用值相匹配,是则执行步骤s5-10,否则执行步骤c3;
步骤c3:根据曲线参数引用值创建上位机公钥缓存,并根据密钥集中存储的密钥参数引用值设置曲线参数,执行步骤s5-10;
步骤s5-10:将获取的上位机自身公钥保存到上位机公钥缓存中,给上位机返回响应状态码,返回步骤s1;
步骤s6:根据验证指令中的密钥版本号和密钥id获取上位机自身公钥,根据验证指令中的上位机临时公钥、上位机自身公钥和生成的会话密钥生成收条,并将收条发送给上位机,返回步骤s1;
(一)如步骤s1中判断指令的类型为内部验证指令,则步骤s6包括:
步骤s6-11:根据当前安全级别对内部验证指令的数据域内容进行解析并将解析结果存储在接收缓存中,从接收缓存中获取密钥版本号和密钥id;
步骤s6-12:从接收缓存中获取密钥协商的控制应用模板和上位机临时公钥;
步骤s6-13:判断安全通道协议选项的类型,如为第一类型则执行步骤s6-14,如为第二类型则执行步骤s6-17;
步骤s6-14:生成设备临时密钥对,根据密钥版本号和密钥id查找上位机自身公钥;
步骤s6-15:根据上位机自身公钥、设备自身私钥、上位机临时公钥、控制应用模板、设备临时公钥生成收条;
具体的,步骤s6-15包括:
步骤d1:使用上位机自身公钥和设备自身私钥协商生成第一共享私钥,使用上位机临时公钥和生成的设备临时私钥协商生成第二共享私钥;
步骤d2:根据第一共享私钥和第二共享私钥使用派生算法生成共享信息;
步骤d3:根据第一共享私钥、第二共享私钥和共享信息使用预设算法生成会话密钥;
步骤d4:根据密钥协商引用控制模板、上位机临时公钥和设备临时公钥生成收条输入数据,根据收条输入数据和会话密钥生成收条;
步骤s6-16:根据收条和设备临时公钥生成响应数据,并根据当前安全级别对响应数据进行打包然后返回给上位机,返回步骤s1;
步骤s6-17:根据密钥版本号和密钥id查找上位机自身公钥;
步骤s6-18:根据上位机自身公钥、设备自身私钥、上位机临时公钥、控制应用模板、设备自身公钥生成收条;
具体的,步骤s6-18包括:
步骤e1:使用上位机自身公钥和设备自身私钥协商生成第一共享私钥,使用上位机临时公钥和设备自身私钥协商生成第二共享私钥;
步骤e2:根据第一共享私钥和第二共享私钥使用派生算法生成共享信息;
步骤e3:根据第一共享私钥、第二共享私钥和共享信息使用预设算法生成会话密钥;
步骤e4:根据密钥协商引用控制模板、上位机临时公钥和设备自身公钥生成收条输入数据,根据收条输入数据和会话密钥生成收条;
步骤s6-19:根据收条和设备自身公钥生成响应数据,并根据当前安全级别对响应数据进行打包然后返回给上位机,返回步骤s1;
(二)如步骤s1中判断指令的类型为相互验证指令,则步骤s6包括:
步骤s6-21:根据当前安全级别对指令的数据域内容进行解析并将解析结果存储在接收缓存中,从接收缓存中获取密钥版本号和密钥id;
步骤s6-22:从接收缓存中获取密钥协商的控制应用模板和上位机临时公钥;
步骤s6-23:根据密钥版本号和密钥id查找上位机自身公钥;生成设备临时密钥对,根据上位机自身公钥、设备自身私钥、上位机临时公钥、控制应用模板、设备临时公钥生成收条;
具体的,在本实施例中,根据上位机自身公钥、设备自身私钥、上位机临时公钥、控制应用模板、设备临时公钥生成收条,包括:
步骤f1:使用上位机临时公钥和设备自身私钥协商生成第一共享私钥,使用上位机临时公钥和生成的设备临时私钥协商生成第二共享私钥;
步骤f2:根据第一共享私钥和第二共享私钥使用派生算法生成共享信息;
步骤f3:根据第一共享私钥、第二共享私钥和共享信息使用预设算法生成会话密钥;
步骤f4:根据密钥协商引用控制模板、上位机临时公钥和设备临时公钥生成收条输入数据,根据收条输入数据和会话密钥生成收条;
步骤s6-24:根据收条和设备临时公钥生成响应数据,并根据当前安全级别对响应数据进行打包然后返回给上位机,返回步骤s1;
在本实施例中,上位机对接收到的收条进行验证,如验证通过则使用收条中的会话密钥对应用数据进行加密得到应用数据密文,根据应用数据密文生成应用更新指令并发送给硬件钱包;
步骤s7:使用会话密钥对应用更新指令中的应用数据密文进行解密,并用解密成功得到的应用数据更新保存的应用数据,并给上位机返回更新成功信息,返回步骤s1。
本实施例的方法还可以包括个人化设置过程,即还可以包括以下步骤:
步骤h1:当硬件钱包接收到上位机发送的个人化指令时,将个人化指令的数据域内容存储在接收缓存中,判断当前指令是否为当前操作的最后一条指令,是则给上位机返回响应状态码,等待接收数据,返回步骤h1,否则执行步骤h2;
步骤h2:判断当前指令的格式,如为tlv格式则执行步骤h3,否则执行步骤h9;
步骤h3:判断是否处理完接收缓存中的数据,是则给上位机返回响应状态码,等待接收数据,返回步骤h1,否则执行步骤h4;
步骤h4:判断当前指令的类型,如为设置密钥信息指令则执行步骤h5,如为这是ecc曲线参数指令则执行步骤h6,如为设置ecc密钥对指令则执行步骤h7,如为设置个人化数据指令则执行步骤h8;
步骤h5:从接收缓存中获取密钥信息并保存,返回步骤h3;
可选的,在本实施例中,步骤h5-1:判断设置密钥信息的特性,如为密钥类型则执行步骤h5-2,如为密钥字节长度则执行步骤h5-3,如为密钥id则执行步骤h5-5,如为密钥参数引用值则执行步骤h5-6,如为密钥获取方式则执行步骤h5-7,如为密钥访问权限则执行步骤h5-8,如为密钥版本号则执行步骤h5-9;
步骤h5-2:从接收缓存中获取密钥类型,并判断密钥类型是否为预设类型,是则创建密钥信息对象,返回步骤h3,否则等待接收数据,返回步骤s1;
步骤h5-3:从接收缓存中获取密钥长度和密钥类型,并判断密钥类型是否为预设类型,是则根据密钥长度分配存储空间作为密钥存储区,返回步骤h3;否则执行步骤h5-4;
步骤h5-4:根据密钥长度分配存储空间作为曲线参数存储区,返回步骤h3;
步骤h5-5:从接收缓存中获取密钥id并保存在秘钥对象中,返回步骤h3;
步骤h5-6:从接收缓存中获取密钥参数引用值,并根据参数引用值构建一个曲线参数集,返回步骤h3;
步骤h5-7:从接收缓存中获取密钥使用方式并保存在秘钥对象中,返回步骤h3;
步骤h5-8:从接收缓存中获取密钥访问权限并保存在秘钥对象中,返回步骤h3;
步骤h5-9:从接收缓存中获取密钥版本号,根据密钥版本号在密钥集群中查找对应的密钥集;
步骤h5-10:判断找到的密钥集是否为空,是则执行步骤h5-11,否则执行步骤h5-15;
步骤h5-11:从接收缓存中获取默认密钥集;
步骤h5-12:判断获取的密钥集的版本号是否为第一预设版本号,是则执行步骤h5-13,否则执行步骤h5-14;
步骤h5-13:将密钥集的版本号更新为密钥版本号,执行步骤h5-15;
步骤h5-14:创建新的密钥集并添加到现有密钥集群中,执行步骤h5-15;
步骤h5-15:设置密钥信息对象中的密钥使用方式和密钥访问权限;
步骤h5-16:将密钥信息对象设置在与密钥id对应的密钥集中,返回步骤h3;
步骤h6:从接收缓存中获取曲线参数值并保存在曲线参数集中,返回步骤h3;
步骤h7:根据设置ecc密钥对指令中的参数引用值和曲线参数值创建ecc密钥对象,并从接收缓存中读取密钥值并将密钥值设置到ecc密钥对象中;将ecc密钥对象存储在密钥信息对象中,返回步骤h3;
步骤h8:从接收缓存中获取安全域提供者标识号和安全域编号并保存,返回步骤h3;
步骤h9:判断是否处理完接收缓存中的数据,是则给上位机返回响应状态码,等待接收数据,返回步骤h1;否则执行步骤h10;
步骤h10:根据当前指令判断操作类型,如为存储白名单则执行步骤h11,如为修改白名单则执行步骤h12,如为存储上位机根证书则执行步骤h13,如为设置设备证书则执行步骤h16;
步骤h11:判断是否有合法的白名单,是则将接收缓存中的白名单数据存储到白名单中,返回步骤h9,否则给上位机返回错误响应;
可选的,在本实施例中,步骤h11包括:
步骤h11-1:判断当前安全通道协议选项是否为预设协议类型,是则执行步骤h11-2,否则给上位机返回错误响应;
步骤h11-2:判断接收缓存中是否存在白名单计数值,是则执行步骤h11-3,否则给上位机返回错误响应;
步骤h11-3:从接收缓存中获取白名单计数值;
步骤h11-4:判断获取的白名单计数值是否大于记录的白名单个数,是则执行步骤h11-5,否则给上位机返回错误响应;
步骤h11-5:判断是否有可用的白名单,是则从接收缓存中获取白名单数据并保存到白名单中,返回步骤h3,否则给上位机返回错误响应;
步骤h12:判断接收缓存中是否有白名单数据,是则删除白名单和保存的公钥,返回步骤h9,否则根据白名单数据的长度分配存储空间,并将接收缓存中的证书序列号存储在存储空间的白名单中,删除保存的公钥,返回步骤h9;
可选的,在本实施例中,步骤h12包括:
步骤h12-1:判断接收缓存中是否有白名单数据,是则执行步骤h12-3,否则执行步骤h12-2;
步骤h12-2:删除储存的白名单,执行步骤h12-5;
步骤h12-3:根据白名单数据的长度分配存储空间;
步骤h12-4:从接收缓存中获取证书序列号并存储在存储空间的白名单中;
步骤h12-5:删除保存的公钥;
步骤h12-6:用接收缓存中的白名单计数值更新记录的白名单个数,返回步骤h3;
步骤h13:判断接收缓存中的上位机根证书是否符合预设要求,是则执行步骤h14,否则给上位机返回错误响应;
步骤h14:判断是否处理完当前指令,是则返回步骤h3,否则执行步骤h15;
步骤h15:获取上位机根证书发行者标识和上位机根证书发行者标识的长度,返回步骤h14;
可选的,在本实施例中,步骤h15包括:
步骤h15-1:判断后续操作类型,如为获取上位机根证书发行者标识的长度则执行步骤h15-2,如为获取上位机根证书发行者标识则执行步骤h15-4;
步骤h15-2:从接收缓存中获取上位机根证书发行者标识的长度,并判断上位机根证书发行者标识的长度是否在预设范围内,是则执行步骤h15-3,否则给上位机返回错误响应;
步骤h15-3:保存上位机根证书发行者标识的长度,返回步骤h14;
步骤h15-4:从接收缓存中获取密钥信息长度值,并判断密钥信息长度值是否符合要求,是则执行步骤h15-5,否则给上位机返回错误响应;
步骤h15-5:从接收缓存中获取密钥id和密钥版本号并保存;
步骤h15-6:判断密钥版本号是否在预设区间,是则执行步骤h15-7,否则给上位机返回错误响应;
步骤h15-7:根据密钥版本号在预置密钥集中查找对应的密钥集,如找到则执行步骤h15-9,如未找到则执行步骤h15-8;
步骤h15-8:从预置密钥集群中获取默认密钥集,执行步骤h15-9;
步骤h15-9:根据密钥id在密钥集中查找密钥信息,如找到则执行步骤h15-10,如未找到则给上位机返回错误响应;
步骤h15-10:判断是否处理完当前指令,是则执行步骤h9,否则返回步骤h15-11;
步骤h15-11:根据上位机根证书发行者标识的长度从接收缓存中获取上位机根证书发行者标识并与密钥信息对应保存,返回步骤h14;
步骤h16:判断当前指令是否为证书链指令,是则执行步骤h17,否则给上位机返回错误响应;
步骤h17:判断是否有合法的证书链,是则执行步骤h18,否则创建证书链,执行步骤h18;
在本实施例中,步骤h17包括:
步骤h17-1:判断保存的密钥id和密钥版本号是否是否合法,是则执行步骤h17-2,否则给上位机返回错误响应;
步骤h17-2:根据密钥id与密钥版本号在证书存储区中查找与之对应的证书链,如找到则执行步骤h18,否则执行步骤h17-3;
步骤h17-3:根据缓存的密钥id与密钥版本号创建新的证书链,执行步骤h18;
步骤h18:判断是否需要构建临时证书,是则执行步骤h19,否则返回步骤h9;
在本实施例中,步骤h19包括:
步骤h19-1:从接收缓存中获取临时证书数据并根据读取的临时证书数据构建临时证书;
步骤h19-2:从证书链中获取当前证书并判断是否获取成功,是则执行步骤h19-4,否则执行步骤h19-3;
步骤h19-3:检查临时证书的密钥使用方式是否为签名使用,是则执行步骤h19-5,否则给上位机返回错误响应;
步骤h19-4:使用当前证书的公钥验证临时证书,如验证成功则执行步骤h19-5,如验证失败则给上位机返回错误响应;
步骤h19-5:将临时证书、密钥id和密钥版本号追加到证书链中;
步骤h19:构建临时证书,并使用证书链中的当前证书的公钥对临时证书进行验证,如验证成功则将临时证书追加到证书链中,执行步骤h20,否则给上位机返回错误响应;
步骤h20:检查临时证书的密钥商用方式是否为密钥协商使用,是则设置个人化完成标记,返回步骤h18,否则返回步骤h18;
具体的,在本实施例中,设置个人化完成标记,包括:根据密钥id设置个人化完成标记,修改卡片数据中scp域的默认值为个人化完成标记。
在本实施例中,根据安全级别对缓存中的所有数据进行打包,具体包括:
步骤t1:判断当前安全级别,如为明文级别则执行步骤t2,如为密文级别则执行步骤t3;
步骤t2:根据响应缓存中的数据计算mac值,将响应缓存中的数据和mac值组成响应数据;
步骤t3:根据缓存中的数据计算mac值,对缓存中的所有数据进行加密,将加密结果和mac值组成响应数据。
实施例三
本发明实施例三提供一种数字货币硬件钱包应用更新的安全通道的创建方法之前进行的个人化设置过程,具体实现如图3-6所示,包括:
步骤201:当硬件钱包接收到上位机发送的指令时,根据当前安全级别对当前指令中的数据域内容进行解析并将解析结果存储在接收缓存中;
步骤202:根据指令中的第三字节数据判断当前指令是否为当前操作的最后一条指令,是则执行步骤204,否则执行步骤203;
具体的,本实施例中,步骤202包括:判断当前指令中的第三字节数据的最高位是否为1,是则当前指令为最后一条指令,否则当前指令不为最后一条指令;例如,将当前指令中的第三字节数据与0x80做与运算,如结果为0则表示当前指令不为最后一条指令,否则当前指令为最后一条指令;
步骤203:给上位机返回响应状态码,等待接收数据,返回步骤201;
步骤204:判断当前指令的格式,如为tlv格式则执行步骤205,如为dgi格式则执行步骤227;
具体的,在本实施例中,步骤204为:将当前指令中第三字节数据与0x18进行与运算,如运算结果为0x08则执行步骤205;如运算结果为0x10则执行步骤227;
步骤205:判断是否处理完接收缓存中的数据,是则执行步骤206,否则执行步骤207
步骤206:给上位机返回响应状态码,等待接收数据,返回步骤101;
步骤207:判断当前指令的类型,如为设置密钥信息指令则执行步骤208,如为设置ecc曲线参数指令则执行步骤224,如为设置ecc密钥对指令则执行步骤225,如为设置个人化数据指令则执行步骤226;
具体的,在本实施例中,步骤207包括:从接收缓存的第一预定位置开始获取两字节数据并进行判断,如为0x00b9则执行步骤208,如为0x0030或0x0031或0x0032或0x0033或0x0034或为0x0035则执行步骤224,如为0x0036或0x0037则执行步骤225,如为0x0070则执行步骤226;优选的,预定位置为第五字节;
步骤208:判断设置密钥信息的特性,如为密钥类型则执行步骤209,如为密钥字节长度则执行步骤210,如为密钥id则执行步骤212,如为密钥参数引用值则执行步骤213,如为密钥获取方式则执行步骤214,如为密钥访问权限则执行步骤215,如为密钥版本号则执行步骤216;
具体的,在本实施例中,步骤208包括:从接收缓存的第二预定位置获取一个字节数据并进行判断,如为0x80则执行步骤209,如为0x81则执行步骤210,如为0x82则执行步骤212,如为0x85则执行步骤213,如为0x95则执行步骤步骤214,如为0x96则执行步骤215,如为0x83则执行步骤216;
步骤209:从接收缓存中获取密钥类型,并判断密钥类型是否为预设类型,是则创建密钥信息对象,返回步骤205,否则等待接收数据,返回步骤201;
例如,本实施例中的预设类型为ecc公钥或私钥,步骤174具体为:从接收缓存的数据中获取第三预定位置的值,并判断是否为0xb0或者0xb1,是则为预设类型,否则不为预设类型;
步骤210:从接收缓存中获取密钥长度和密钥类型,并判断密钥类型是否为预设类型,是则根据密钥长度分配存储空间作为密钥存储区,返回步骤205;否则执行步骤211;
步骤211:根据密钥长度分配存储空间作为曲线参数存储区,返回步骤205;
步骤212:从接收缓存中获取密钥id并保存在秘钥对象中,返回步骤205;
步骤213:从接收缓存中获取密钥参数引用值,并根据参数引用值构建一个曲线参数集,返回步骤205;
步骤214:从接收缓存中获取密钥使用方式并保存在秘钥对象中,返回步骤205;
步骤215:从接收缓存中获取密钥访问权限并保存在秘钥对象中,返回步骤205;
步骤216:从接收缓存中获取密钥版本号,根据密钥版本号在密钥集群中查找对应的密钥集;
步骤217:判断找到的密钥集是否为空,是则执行步骤218,否则执行步骤222;
步骤218:从接收缓存中获取默认密钥集;
步骤219:判断获取的密钥集的版本号是否为第一预设版本号,是则执行步骤220,否则执行步骤221;
步骤220:将密钥集的版本号更新为密钥版本号,执行步骤222;
步骤221:创建新的密钥集并添加到现有密钥集群中,执行步骤222;
步骤222:设置密钥信息对象中的密钥使用方式和密钥访问权限;
步骤223:将密钥信息对象设置在与密钥id对应的密钥集中,返回步骤205;
步骤224:从接收缓存中获取曲线参数的值,并存储在曲线参数集中,回到步骤205;
在本实施例中,ecc曲线参数包括:ecc曲线参数a、ecc曲线参数b、ecc曲线参数g、ecc曲线参数n、ecc曲线参数k;
步骤225:根据参数引用值和曲线参数值创建ecc密钥对象,并从接收缓存中读取密钥值并将密钥值设置到ecc密钥对象中;将ecc密钥对象存储在密钥信息对象中,返回步骤205;
在本实施例中,ecc密钥对包括ecc公钥和ecc私钥;
步骤226:从接收缓存中获取安全域提供者标识号和安全域编号并保存,返回步骤205;
在本实施例中,安全域提供者标识号和安全域编号可能由两条发送来的,也可能一条发送来的;
步骤227:判断是否处理完接收缓存中的数据,是则执行步骤228,否则执行步骤229;
步骤228:给上位机返回响应状态码,等待接收数据,返回步骤201;
步骤229:根据当前指令判断操作类型,如为存储白名单则执行步骤230,如为修改白名单则执行步骤235,如为存储上位机根证书则执行步骤241,如为设置设备证书则执行步骤254;
具体的,在本实施例中,步骤229包括:从接收缓存的第四预定位置获取一字节数据并进行判断,如为0x92则操作类型为存储白名单,执行步骤230;如为0x70则操作类型为修改白名单,执行步骤235;如为0xa6则操作类型为存储上位机根证书,执行步骤241;如为0xbf则操作类型为设置设备证书,执行步骤254;
步骤230:判断当前安全通道协议选项是否为预设协议类型,是则执行步骤231,否则给上位机返回错误响应;
在本实施例中,预设协议类型为scp11c;
步骤231:判断接收缓存中是否存在白名单计数值,是则执行步骤232,否则给上位机返回错误响应;
步骤232:从接收缓存中获取白名单计数值;
可选的,在本实施例中,白名单计数值为两字节数据;
步骤233:判断获取的白名单计数值是否大于记录的白名单个数,是则执行步骤234,否则给上位机返回错误响应;
步骤234:判断是否有可用的白名单,是则从接收缓存中获取白名单数据并保存到白名单中,返回步骤227,否则给上位机返回错误响应;
具体的,在本实施例中,步骤234包括:判断白名单个数是否达到32767,是则没有可用白名单,给上位机返回错误响应,否则从接收缓存中获取对应的白名单数据并保存在可用白名单中,返回步骤227;
步骤235:判断接收缓存中是否有白名单数据,是则执行步骤237,否则执行步骤236;
步骤236:删除储存的白名单,执行步骤239;
步骤237:根据白名单数据的长度分配存储空间;
在本实施例中,新分配的存储空间用于保存白名单数据,白名单个数的初始值为0;
步骤238:从接收缓存中获取证书序列号并存储在存储空间的白名单中;
步骤239:删除保存的公钥;
步骤240:用接收缓存中的白名单计数值更新记录的白名单个数,返回步骤227;
步骤241:从接收缓存中获取上位机根证书,并判断上位机根证书是否符合预设要求,是则执行步骤242,否则给上位机返回错误响应;
本实施例中的预设要求:根证书的长度为4,或者7<根证书的长度<22;
步骤242:判断是否处理完当前指令,是则返回步骤227,否则执行步骤243;
步骤243:判断后续操作类型,如为获取上位机根证书发行者标识的长度则执行步骤244,如为获取上位机根证书发行者标识则执行步骤246;
具体的,在本实施例中,从接收缓存的第五预定位置获取一字节数据并进行判断,如为0x42则执行步骤244,如为0x83则执行步骤246;
步骤244:从接收缓存中获取上位机根证书发行者标识的长度,并判断上位机根证书发行者标识的长度是否在预设范围内,是则执行步骤245,否则给上位机返回错误响应;
具体的,在本实施例中,预设范围为1-16;
步骤245:保存上位机根证书发行者标识的长度,返回步骤242;
步骤246:从接收缓存中获取密钥信息长度值,并判断密钥信息长度值是否符合要求,是则执行步骤247,否则给上位机返回错误响应;
具体的,在本实施例中,判断密钥信息长度值是否符合要求包括:判断密钥信息长度值是否为2,是则符合要求,否则不符合要求;
步骤247:从接收缓存中获取密钥id和密钥版本号并保存;
步骤248:判断密钥版本号是否在预设区间,是则执行步骤249,否则给上位机返回错误响应;
具体的,在本实施例中,预设区间为0x1到0x1f;
步骤249:根据密钥版本号在预置密钥集中查找对应的密钥集,如找到则执行步骤251,如未找到则执行步骤250;
步骤250:从预置密钥集群中获取默认密钥集,执行步骤251;
步骤251:根据密钥id在密钥集中查找密钥信息,如找到则执行步骤252,如未找到则给上位机返回错误响应;
步骤252:判断是否处理完当前指令,是则执行步骤227,否则执行步骤253;
步骤253:根据上位机根证书发行者标识的长度从接收缓存中获取上位机根证书发行者标识并与密钥信息对应保存,返回步骤242;
步骤254:判断接收到的指令是否为证书链指令,是则执行步骤255,否则给上位机返回错误响应;
具体的,在本实施例中,判断接收缓存中第六预定位置上的数据是否为0x21,是则执行步骤255,否则给上位机返回错误响应;
步骤255:判断保存的密钥id和密钥版本号是否是否合法,是则执行步骤256,否则给上位机返回错误响应;
具体的,在本实施例中,步骤255包括:判断保存的密钥id是否为-1或密钥版本号是否为-1,是则不合法,否则合法;
步骤256:根据密钥id与密钥版本号在证书存储区中查找与之对应的证书链,如找到则执行步骤258,如未找到则执行步骤257;
步骤257:根据缓存的密钥id与密钥版本号创建新的证书链,执行步骤258;
步骤258:判断是否需要构建临时证书,是则执行步骤259,否则返回步骤227;
在本实施例中,步骤258具体为:从接收缓存的第七预定位置读取两字节数据,并判断是否为7f21,是则执行步骤259,否则返回步骤227;
步骤259:从接收缓存中获取临时证书数据并根据读取的临时证书数据构建临时证书;
步骤260:从证书链中获取当前证书并判断是否获取成功,是则执行步骤262,否则执行步骤261;
步骤261:检查临时证书的密钥使用方式是否为签名使用,是则执行步骤263,否则给上位机返回错误响应;
步骤262:使用当前证书的公钥验证临时证书,如验证成功则执行步骤263,如验证失败则给上位机返回错误响应;
步骤263:将临时证书、密钥id和密钥版本号追加到证书链中;
步骤264:检查临时证书的密钥使用方式是否为密钥协商使用,是则执行步骤265,否则返回步骤258;
步骤265:根据密钥id设置个人化完成标记;
步骤266:修改卡片数据中scp域的默认值为个人化完成标记,返回步骤258。
实施例四
本发明实施例四提供一种数字货币硬件钱包应用更新的安全通道的创建方法,如图7-10所示,包括:
步骤301:当硬件钱包接收上位机发送的指令时,判断指令的类型,如为获取数据指令则执行步骤302,如为执行安全操作指令则执行步骤310;如为相互验证指令则执行步骤334;如为内部验证指令则执行步骤344;如为应用更新指令则执行步骤354;
具体的,在本实施例中,根据指令中的第二字节数据判断指令的类型,如为第一数值则指令的类型为获取数据指令,如为第二数值则指令的类型为执行安全操作指令;如为第三数值则指令的类型为相互验证指令;如为第四数值则指令的类型为内部验证指令;
例如,本实施例中的第一数值为0xca,第二数值为0x2a,第三数值为0x82,第四数值为0x88;
步骤302:判断获取数据指令要获取数据的类型,如为获取密钥信息则执行步骤303,如为获取设备证书信息则执行步骤307;
在本实施例中,步骤302具体为:判断指令中的第三和第四字节数据,如为第一数据则为获取密钥信息,执行步骤303,如为第二数据则获取设备证书信息,执行307;
例如,本实施例中的第一数据为0083,第二数据为bf21;密钥信息可包括:密钥id/密钥版本;
步骤303:根据当前安全级别对获取数据指令的数据域内容进行解析并将解析结果存储在接收缓存中;
具体的,在本实施例中,步骤303包括:根据当前安全级别判断指令的数据域内容,如是明文数据带mac则对第一解析结果数据域内容进行解析得到mac值和明文数据,对mac值进行验证,如验证通过则将明文数据存储在接收缓存中,如验证失败则给上位机返回错误响应;如是密文数据带mac则对指令的数据域内容进行解析得到mac值和第一加密数据,对mac值进行验证,如验证通过则对第一加密数据进行解密得到明文数据并存储在接收缓存中,如验证失败则给上位机返回错误响应;
步骤304:判断接收缓存中的数据是否合法,是则执行步骤305,否则给上位机返回错误响应;
可选的,在本实施例中,步骤304包括:检查接收缓存中第一预定位置上的数据是否符合要求,是则接收缓存中的数据合法,否则接收缓存中的数据不合法;
步骤305:从接收缓存中获取密钥集标识,根据密钥集标识在密钥存储区中查找对应的密钥集,如找到则执行步骤306,如未找到则给上位机返回错误响应;
步骤306:从密钥集中获取密钥版本和密钥标识,并将密钥版本和密钥标识存储到响应缓存中,根据安全级别对响应缓存中的数据进行打包并返回给上位机,返回步骤301;
步骤307:根据当前安全级别对获取数据指令的数据域内容进行解析并将解析结果存储在接收缓存中,并判断接收缓存中的数据是否合法,是则执行步骤308,否则给上位机返回错误响应;
可选的,在本实施例中,步骤307包括:判断接收缓存中第二预定位置上的数据是否符合要求,是则接收缓存中的数据合法,否则接收缓存中的数据不合法;
步骤308:从接收缓存中获取证书集标识,根据证书集标识在证书存储区中查找对应的证书集,如找到则执行步骤309,如未找到则给上位机返回错误响应;
步骤309:遍历证书集中的上级证书找到根证书,依次从根证书开始将所有证书的证书内容存储到响应缓存,根据安全级别对响应缓存中的数据进行打包并返回给上位机,返回步骤301;
步骤310:根据当前安全级别对执行安全操作指令的数据域内容进行解析并将解析结果存储在接收缓存中,从接收缓存中获取密钥版本号和密钥id;
步骤311:根据密钥版本号和密钥id从密钥存储区获取对应的密钥集,如获取到则执行步骤313,如未获取到则执行步骤312;
步骤312:从密钥存储区中获取预置的默认密钥集,执行步骤313;
步骤313:从获取的密钥集中获取对应的上位机根公钥和密钥参数引用值;
步骤314:判断上位机临时公钥缓存是否存在,是则执行步骤315,否则执行步骤316;
步骤315:判断上位机临时公钥缓存的类型和密钥长度是否与从密钥集中获取的密钥参数引用值相匹配,是则执行步骤317,否则执行步骤316;
步骤316:根据预置的曲线参数引用值创建上位机临时公钥缓存,并根据获取的密钥集中的密钥参数引用值设置上位机临时公钥缓存的类型和密钥长度,执行步骤317;
步骤317:判断上位机临时公钥是否已经初始化,是则执行步骤318,否则执行步骤319;
步骤318:判断密钥版本号和密钥id是否为上一条指令中的值,是则执行步骤319,否则给上位机返回错误响应;
可选的,在本实施例中,步骤318包括:
步骤318-1:判断是否保存有密钥版本号和密钥id,是则执行步骤318-2,否则执行步骤319;
步骤318-2:判断获取的密钥版本号和密钥id与保存的密钥版本号和密钥id是否相同,是则执行步骤319,否则给上位机返回错误响应;
步骤319:将获取的上位机根公钥的密钥信息保存到上位机临时公钥缓存中,并初始化上位机临时公钥,执行步骤320;
步骤320:判断接收缓存中的数据是否全部处理完成,是则执行步骤321,否则执行步骤322;
步骤321:保存获取的密钥版本号和密钥id,对响应缓存中的数据进行打包并并返回给上位机,返回步骤301;
在本实施例中,对缓存中的所有数据进行打包,具体包括:
步骤321-1:判断当前安全级别,如为明文级别则执行步骤321-2,如为密文级别则执行步骤321-3;
步骤321-2:根据响应缓存中的数据计算mac值,将响应缓存中的数据和mac值组成响应数据;
步骤321-3:根据缓存中的数据计算mac值,对缓存中的所有数据进行加密,将加密结果和mac值组成响应数据;
步骤322:从接收缓存中获取证书编号;
步骤323:判断是否已经设置了与证书编号对应的证书,是则执行步骤324,否则执行步骤326;
步骤324:判断指定密钥的白名单是否存在,是则执行步骤325,否则执行步骤326;
步骤325:检查当前证书的证书编号是否在白名单中,是则执行步骤326,否则给上位机返回错误响应;
步骤326:使用上位机临时公钥缓存的公钥验证当前证书,如验证通过则执行步骤327,如验证未通过则给上位机返回错误响应;
步骤327:从当前证书中提取上位机自身公钥和密钥参数引用值;
步骤328:判断从密钥集中获取的密钥参数引用值是否与从当前证书中提取的密钥参数引用值一致,是则执行步骤步骤329,否则给上位机返回错误响应;
步骤329:判断是否还有未处理的证书,是则用上位机自身公钥替换上位机临时公钥缓存中的公钥,将响应状态码返回给上位机,返回步骤301;否则执行步骤330;
具体的,步骤329中的响应状态码为9000;
步骤330:判断上位机公钥缓存是否存在,是则执行步骤331,否则执行步骤332;
步骤331:判断上位机公钥缓存的类型和密钥长度是否与密钥参数引用值相匹配,是则执行步骤333,否则执行步骤332;
步骤332:根据曲线参数引用值,创建上位机公钥缓存,并根据密钥集中存储的密钥参数引用值设置曲线参数,执行步骤333;
步骤333:将获取的上位机自身公钥保存在上位机公钥缓存中,将响应状态码返回给上位机,返回步骤301;
步骤334:根据当前安全级别对相互验证指令的数据域内容进行解析并将解析结果存储在接收缓存中,从接收缓存中获取密钥版本号和密钥id;
步骤335:从接收缓存中获取密钥协商的控制应用模板和上位机临时公钥;
步骤336:判断安全通道协议选项的类型,如为第一类型则执行步骤337,如为第二类型则执行步骤342;
具体的,本实施例中的第一类型为安全通道协议scp31a,第二类型为安全通道协议scp31c;
步骤337:生成设备临时密钥对,根据密钥版本号和密钥id查找上位机自身公钥,使用上位机自身公钥和设备自身私钥协商生成第一共享私钥,使用上位机临时公钥和生成的设备临时私钥协商生成第二共享私钥;
步骤338:根据第一共享私钥和第二共享私钥使用派生算法生成共享信息;
具体的,在本实施例中,生成的共享信息包括:密钥使用方式、密钥类型、密钥长度、上位机id的长度及值、安全域提供者标识号的长度及值、安全域image编号的长度及值;
步骤339:根据第一共享私钥、第二共享私钥和共享信息使用预设算法生成会话密钥;
步骤340:根据密钥协商引用控制模板、上位机临时公钥和设备临时公钥生成收条输入数据,根据收条输入数据和会话密钥生成收条;
步骤341:根据收条和设备临时公钥生成响应数据,并根据当前安全级别对响应数据进行打包然后返回给上位机,返回步骤301。
在本实施例中,上位机接收到响应数据后对其进行解析,得到收条和设备临时公钥,使用设备临时公钥对收条进行验证,如验证成功则安全通道建立成功,硬件钱包和上位机开始进行交易;
步骤342:根据密钥版本号和密钥id查找上位机自身公钥,使用上位机自身公钥和设备自身私钥协商生成第一共享私钥,使用上位机临时公钥和设备自身私钥协商生成第二共享私钥;
步骤343:根据第一共享私钥和第二共享私钥使用派生算法生成共享信息;
具体的,在本实施例中,生成的共享信息包括:密钥使用方式、密钥类型、密钥长度、上位机id的长度及值、卡片组编号;
步骤344:根据第一共享私钥、第二共享私钥和共享信息使用预设算法生成会话密钥;
步骤345:根据密钥协商引用控制模板、上位机临时公钥和设备自身公钥生成收条输入数据,根据收条输入数据和会话密钥生成收条;
步骤346:根据收条和设备自身公钥生成响应数据,并根据当前安全级别对响应数据进行打包然后返回给上位机,返回步骤301。
在本实施例中,上位机接收到响应数据后对其进行解析,得到收条和设备自身公钥,使用设备临时公钥对收条进行验证,如验证成功则安全通道建立成功,硬件钱包和上位机开始进行交易;
步骤347:根据当前安全级别对内部验证指令的数据域内容进行解析并将解析结果存储在接收缓存中,从接收缓存中获取密钥版本号和密钥id;
步骤348:从接收缓存中获取密钥协商的控制应用模板和上位机临时公钥;
步骤349:生成设备临时密钥对,根据密钥版本号和密钥id查找上位机自身公钥,使用上位机临时公钥和设备自身私钥协商生成第一共享私钥,使用上位机临时公钥和生成的设备临时私钥协商生成第二共享私钥;
步骤350:根据第一共享私钥和第二共享私钥使用派生算法生成共享信息;
具体的,在本实施例中,生成的共享信息包括:密钥使用方式、密钥类型、密钥长度、上位机id的长度及值、安全域提供者标识号的长度及值、安全域image编号的长度及值;
步骤351:根据第一共享私钥、第二共享私钥和共享信息使用预设算法生成会话密钥;
步骤352:根据密钥协商引用控制模板、上位机临时公钥和设备临时公钥生成收条输入数据,根据收条输入数据和会话密钥生成收条;
步骤353:根据收条和设备临时公钥生成响应数据,并根据当前安全级别对响应数据进行打包然后返回给上位机,返回步骤301。
上位机接收包含收条的响应数据时,对响应数据进行验证,如验证成功则安全通道建立成功,上位机使用会话密钥对应用数据进行加密得到应用数据密文,给硬件钱包下发包含应用数据密文的应用更新指令,如验证失败则安全通道建立失败,上位机显示错误信息,结束;
上位机对响应数据验证成功之后,上位机与硬件钱包之间的通讯数据都需使用会话密钥进行加密,保证数据的安全性;
步骤354:使用会话密钥对应用更新指令中的应用数据密文进行解密,并用解密成功得到的应用数据更新保存的应用数据,并给上位机返回更新成功信息。
本发明技术方案是在应用更新时基于ecc密钥协商生成私密信息;私密信息推导出会话密钥;会话密钥加密传输数据,保证数据私密性;会话密钥计算数据包的mac,保证数据完整性;多种私密生成方式:认证双方使用静态+临时密钥对生成私密:shsss+shsee;(双向认证)认证双方使用静态+临时密钥对生成私密:shses+shsee;(单向认证+pin)认证双方使用静态+临时密钥对生成私密:shsss+shses;(双向认证)多种变种,例如:密钥对的存在形式,可以是完整的标准证书格式,或者自定义格式;可以将应用预先变成脚本的形式,以减少服务器压力。
实施例五
本发明实施例五提供一种数字货币硬件钱包应用更新的安全通道的创建装置,如图11所示,包括:
第一接收模块10,用于收到上位机发送的指令;
第一判断模块11,用于判断第一接收模块10接收到的指令的类型,如为获取数据指令则触发第二判断模块12,如为执行安全操作指令则触发验证保存模块17;如为验证指令则触发获取生成模块19,如为应用更新指令则触发解密更新模块21;
第二判断模块12,用于根据获取数据指令判断要获取数据的类型,如为获取密钥信息则触发获取保存模块13,如为获取设备证书信息则触发查找保存模块15;
获取保存模块13,用于根据获取数据指令中的密钥集标识在对应的密钥集中获取密钥版本和密钥标识并保存;
第一发送模块14,用于将获取保存模块13保存的密钥版本和密钥标识返回给上位机,触发第一接收模块10;
查找保存模块15,用于根据获取数据指令中的证书集标识查找对应的证书集,遍历证书集中的上级证书找到根证书,顺序保存根证书开始的所有证书的证书内容;
第二发送模块16,用于将查找保存模块15保存的所有证书的内容返回给上位机,触发第一接收模块10;
验证保存模块17,用于从执行安全操作指令中获取上位机自身公钥和证书编号,根据证书编号获取对应的上位机证书,使用上位机自身公钥对上位机证书进行验证,如验证成功则保存上位机密钥;
第三发送模块18,用于当验证保存模块17对上位机证书验证成功时给上位机返回成功响应,触发第一接收模块10;还用于当验证保存模块17对上位机证书验证失败时给上位机返回错误信息;
获取生成模块19,用于根据验证指令中的密钥版本号和密钥id获取上位机自身公钥,根据验证指令中的上位机临时公钥、上位机自身公钥和生成的会话密钥生成收条;
第四发送模块20,用于将获取生成模块19生成的收条发送给上位机,触发第一接收模块10;
解密更新模块21,用于使用会话密钥对应用更新指令中的应用数据密文进行解密,并用解密成功得到的应用数据更新保存的应用数据;
第五发送模块22,用于在解密更新模块21用解密成功得到的应用数据更新保存的应用数据之后给上位机返回更新成功信息,触发第一接收模块10。
可选的,在本实施例中,获取保存模块13包括:
第一解析存储子模块,用于根据当前安全级别对接收到的获取数据指令的数据域内容进行解析并将解析结果存储到接收缓存中;
第一判断子模块,用于判断接收缓存中的数据是否合法,是则触发第一获取查找子模块,否则触发第一发送模块14给上位机返回错误响应;
第一获取查找子模块,用于从接收缓存中获取密钥集标识,根据密钥集标识在密钥存储区中查找对应的密钥集,如找到则触发第一获取存储子模块,否则触发第一发送模块14给上位机返回错误响应;
第一获取存储子模块,用于从密钥集中获取密钥版本和密钥标识,并将密钥版本和密钥标识存储到响应缓存中;
打包子模块,用于根据安全级别对响应缓存中的数据进行打包;
第一发送模块14,具体用于将打包子模块的数据包返回给上位机,触发第一接收模块10。
可选的,在本实施例中,查找保存模块15包括:
第二解析存储子模块,用于根据当前安全级别对接收到的获取数据指令的数据域内容进行解析并将解析结果存储在接收缓存中;
第二判断子模块,用于判断接收缓存中的数据是否合法,是则触发第二获取查找子模块,否则触发第二发送模块16给上位机返回错误响应;
第二获取查找子模块,用于从接收缓存中获取证书集标识,根据证书集标识在证书存储区中查找对应的证书集,如找到则触发第一存储子模块,否则触发第二发送模块16给上位机返回错误响应;
第一存储子模块,用于遍历证书集中的上级证书找到根证书,依次从根证书开始将所有证书的证书内容存储到响应缓存;
打包子模块,用于根据安全级别对响应缓存中的数据进行打包;
第二发送模块16,具体用于将打包子模块的数据包返回给上位机,触发第一接收模块。
可选的,在本实施例中,验证保存模块17包括:
第三解析存储子模块,用于根据当前安全级别对执行安全操作指令的数据域内容进行解析并将解析结果存储在接收缓存中;
第一获取子模块,用于从接收缓存中获取密钥版本号和密钥id;
第一查找子模块,用于根据第一获取子模块获取到的密钥id和密钥版本号从密钥存储区查找对应的密钥集,如查找到则触发第三判断子模块,如未获取到则触发第二获取子模块;
第二获取子模块,用于从密钥存储区中获取预置的默认密钥集,触发第三判断子模块;
第三判断子模块,用于根据获取的密钥集判断是否存在合法的上位机临时公钥缓存,是则触发第一保存子模块,否则触发第三发送模块18给上位机返回错误响应;
第一保存子模块,用于将接收缓存中的上位机根公钥保存到上位机临时公钥缓存;
保存判断子模块,用于保存接收缓存中的部分当前证书,判断完整的当前证书是否接收完成,是则触发第一验证子模块,否则触发第三发送模块18给上位机返回响应状态码,触发第一接收模块;
第一验证子模块,用于使用上位机临时公钥缓存中的公钥对保存的当前证书进行验证,如验证成功则触发第一提取子模块,如验证失败则触发第三发送模块18给上位机返回错误响应;
第一提取子模块,用于从当前证书中提取上位机自身公钥;
判断替换子模块,用于判断是否还有未接收到的证书,是则触发第四判断子模块,否则用上位机自身公钥替换上位机临时公钥缓存中的公钥,触发第三发送模块18给上位机返回响应状态码,触发第一接收模块10;
第四判断子模块,用于判断是否存在合法的上位机公钥缓存,是则触发第二保存子模块,否则触发第一创建子模块;
第一创建子模块,用于创建合法的上位机公钥缓存,触发第二保存子模块;
第二保存子模块,用于将获取的上位机自身公钥保存到上位机公钥缓存中,触发第三发送模块18给上位机返回响应状态码,触发第一接收模块10。
可选的,在本实施例中,第三判断子模块包括:
第一获取单元,用于根据密钥id从获取的密钥集中获取对应的上位机根公钥和密钥参数引用值;
第一判断单元,用于判断上位机临时公钥缓存是否存在,是则触发第二判断单元,否则触发创建设置单元;
第二判断单元,用于判断上位机临时公钥缓存的类型和密钥长度是否与从密钥集中获取的密钥参数引用值相匹配,是则触发第三判断单元,否则触发第一创建设置单元;
第一创建设置单元,用于根据预置的曲线参数引用值创建上位机临时公钥缓存,并根据获取的密钥集中的密钥参数引用值设置上位机临时公钥缓存的类型和密钥长度,触发第三判断单元;
第三判断单元,用于判断上位机临时公钥是否已经初始化,是则触发第四判断单元,否则触发初始化单元;
第四判断单元,用于判断密钥版本号和密钥id是否为上一条指令中的值,是则触发初始化单元,否则触发第三发送模块给上位机返回错误响应;
初始化单元,用于初始化上位机临时公钥,触发所述第一保存子模块。
可选的,在本实施例中,保存判断子模块还用于当判断完整的当前证书未接收完成时保存获取的密钥版本号和密钥id;
第四判断单元包括:
第一判断子单元,用于判断是否保存有密钥版本号和密钥id,是则触发第二判断子单元,否则触发初始化单元;
第二判断子单元,用于判断获取的密钥版本号和密钥id与保存的密钥版本号和密钥id是否相同,是则触发初始化单元,否则触发第三发送模块18给上位机返回错误响应。
可选的,在本实施例中,第一验证子模块包括:
第二获取单元,用于从接收缓存中获取证书编号;
第五判断单元,用于判断是否已经设置了与证书编号对应的证书,是则触发第六判断单元,否则触发第一验证单元;
第六判断单元,用于判断指定密钥的白名单是否存在,是则触发第一检查单元,否则触发第一验证单元;
第一检查单元,用于检查当前证书的证书编号是否在白名单中,是则触发第一验证单元,否则触发第三发送模块18给上位机返回错误响应;
第一验证单元,用于使用上位机临时公钥缓存的公钥验证当前证书,如验证成功则触发第一提取子模块,如验证失败则触发第三发送模块18给上位机返回错误响应。
可选的,在本实施例中,验证保存模块还包括:
提取判断子模块,用于从当前证书中提取密钥参数引用值,判断从密钥集中获取的密钥参数引用值是否与从当前证书中提取的密钥参数引用值一致,是则触发判断替换子模块,否则触发第三发送模块18给上位机返回错误响应。
可选的,在本实施例中,第四判断子模块包括:
第七判断单元,用于判断上位机公钥缓存是否存在,是则触发第八判断单元,否则触发创建设置单元;
第八判断单元,用于判断上位机公钥缓存的类型和密钥长度是否与密钥参数引用值相匹配,是则触发第二保存子模块,否则触发第二创建设置单元;
第二创建设置单元,用于根据曲线参数引用值创建上位机公钥缓存,并根据密钥集中存储的密钥参数引用值设置曲线参数,触发第二保存子模块。
在本实施例中,如第一接收模块接收到的指令为内部验证指令,则获取生成模块包括:
第四解析存储子模块,用于根据当前安全级别对内部验证指令的数据域内容进行解析并将解析结果存储在接收缓存中;
第三获取子模块,用于从接收缓存中获取密钥版本号和密钥id;
第四获取子模块,用于从接收缓存中获取密钥协商的控制应用模板和上位机临时公钥;
第五判断子模块,用于判断安全通道协议选项的类型,如为第一类型则触发生成查找子模块,如为第二类型则触发第二查找子模块;
生成查找子模块,用于生成设备临时密钥对,根据第三获取子模块的密钥版本号和密钥id查找上位机自身公钥;
第一生成子模块,用于根据生成查找子模块上位机自身公钥、设备自身私钥、第四获取子模块的上位机临时公钥、控制应用模板、生成查找子模块的设备临时公钥生成收条;
第二生成子模块,用于根据第一生成子模块的收条和设备临时公钥生成响应数据;
第二查找子模块,用于根据第三获取子模块密钥版本号和密钥id查找上位机自身公钥;
第三生成子模块,用于根据第二查找子模块的上位机自身公钥、设备自身私钥、第四获取子模块的上位机临时公钥、控制应用模板、设备自身公钥生成收条;
第四生成子模块,用于根据第三生成子模块的收条和设备自身公钥生成响应数据;
打包子模块,用于根据当前安全级别对第二生成子模块或第四生成子模块的响应数据进行打包;
第四发送模块20具体用于将打包子模块的数据包返回给上位机,触发第一接收模块10。
可选的,在本实施例中,第一生成子模块包括:
第一协商单元,用于使用生成查找子模块的上位机自身公钥和设备自身私钥协商生成第一共享私钥,使用第四获取子模块的上位机临时公钥和生成查找子模块生成的设备临时私钥协商生成第二共享私钥;
第一生成单元,用于根据第一协商单元的第一共享私钥和第二共享私钥使用派生算法生成共享信息;
第二生成单元,用于根据第一协商单元的第一共享私钥、第二共享私钥和第一生成单元的共享信息使用预设算法生成会话密钥;
第三生成单元,用于根据第四获取子模块的密钥协商引用控制模板、上位机临时公钥和生成查找子模块的设备临时公钥生成收条输入数据,根据收条输入数据和第二生成单元的会话密钥生成收条。
可选的,在本实施例中,第三生成子模块包括:
第二协商单元,用于使用第二查找子模块的上位机自身公钥和设备自身私钥协商生成第一共享私钥,使用第四获取子模块的上位机临时公钥和设备自身私钥协商生成第二共享私钥;
第四生成单元,用于根据第二协商单元的第一共享私钥和第二共享私钥使用派生算法生成共享信息;
第五生成单元,用于根据第二协商单元的第一共享私钥、第二共享私钥和第四生成单元的共享信息使用预设算法生成会话密钥;
第六生成单元,用于根据第四获取子模块密钥协商引用控制模板、上位机临时公钥和设备自身公钥生成收条输入数据,根据收条输入数据和第五生成单元的会话密钥生成收条。
在本实施例中,如第一接收模块10接收到的指令为相互验证指令,则获取生成模块19包括:
第五解析存储子模块,用于根据当前安全级别对相互验证指令的数据域内容进行解析并将解析结果存储在接收缓存中;
第五获取子模块,用于从接收缓存中获取密钥版本号和密钥id;
第六获取子模块,用于从接收缓存中获取密钥协商的控制应用模板和上位机临时公钥;
第三查找子模块,用于根据第五获取子模块的密钥版本号和密钥id查找上位机自身公钥;
第五生成子模块,用于生成设备临时密钥对;
第六生成子模块,用于根据第三查找子模块的上位机自身公钥、设备自身私钥、第六获取子模块的上位机临时公钥、控制应用模板、第五生成子模块的设备临时公钥生成收条;
第七生成子模块,用于根据第六生成子模块的收条和第五生成子模块的设备临时公钥生成响应数据;
打包子模块,用于根据当前安全级别对第七生成子模块的响应数据进行打包;
第四发送模块20具体用于将打包子模块的数据包返回给上位机,触发第一接收模块10。
可选的,在本实施例中,第六生成子模块包括:
第三协商单元,用于使用第六获取子模块的上位机临时公钥和设备自身私钥协商生成第一共享私钥,使用第六获取子模块的上位机临时公钥和第五生成子模块生成的设备临时私钥协商生成第二共享私钥;
第七生成单元,用于根据第三协商单元的第一共享私钥和第二共享私钥使用派生算法生成共享信息;
第八生成单元,用于根据第三协商单元生成的第一共享私钥、第二共享私钥和第七生成单元的共享信息使用预设算法生成会话密钥;
第九生成单元,用于根据第六获取子模块的密钥协商引用控制模板、上位机临时公钥和第五生成子模块的设备临时公钥生成收条输入数据,根据收条输入数据和第八生成单元的会话密钥生成收条。
在本实施例中的装置还包括:
存储判断子模块,用于当第一接收模块接收到上位机发送的个人化指令时,将个人化指令的数据域内容存储在接收缓存中,判断当前指令是否为当前操作的最后一条指令,是则触发第六发送模块;否则触发第六判断子模块;
第六判断子模块,用于判断当前指令的格式,如为tlv格式则触发第七判断子模块,否则触发第九判断子模块;
第七判断子模块,用于判断是否处理完接收缓存中的数据;
第八判断子模块,用于当第七判断子模块判断为否时判断当前指令的类型,如为设置密钥信息指令则触发第一获取保存子模块,如为这是ecc曲线参数指令则触发第二获取保存子模块,如为设置ecc密钥对指令则触发创建设置存储子模块,如为设置个人化数据指令则触发第三获取保存子模块;
第一获取保存子模块,用于从接收缓存中获取密钥信息并保存,触发第七判断子模块;
第二获取保存子模块,用于从接收缓存中获取曲线参数值并保存在曲线参数集中,触发第七判断子模块;
创建设置存储子模块,用于根据设置ecc密钥对指令中的参数引用值和曲线参数值创建ecc密钥对象,并从接收缓存中读取密钥值并将密钥值设置到ecc密钥对象中;将ecc密钥对象存储在密钥信息对象中,触发第七判断子模块;
第三获取保存子模块,用于从接收缓存中获取安全域提供者标识号和安全域编号并保存,触发第七判断子模块;
第九判断子模块,用于判断是否处理完接收缓存中的数据;
第十判断子模块,用于当第九判断子模块判断为否时根据当前指令判断操作类型,如为存储白名单则触发第十一判断子模块,如为修改白名单则触发第十二判断子模块,如为存储上位机根证书则触发第十三判断子模块,如为设置设备证书则触发第十五判断子模块;
第十一判断子模块,用于判断是否有合法的白名单,是则将接收缓存中的白名单数据存储到白名单中,触发第九判断子模块;
第十二判断子模块,用于判断接收缓存中是否有白名单数据,是则删除白名单和保存的公钥,触发第九判断子模块,否则根据白名单数据的长度分配存储空间,并将接收缓存中的证书序列号存储在存储空间的白名单中,删除保存的公钥,触发第九判断子模块;
第十三判断子模块,用于判断接收缓存中的上位机根证书是否符合预设要求,是则触发第十四判断子模块;
第十四判断子模块,用于判断是否处理完当前指令,是则触发第七判断子模块,否则触发第七获取子模块;
第七获取子模块,用于获取上位机根证书发行者标识和上位机根证书发行者标识的长度,触发第十四判断子模块;
第十五判断子模块,用于判断当前指令是否为证书链指令,是则触发第十六判断子模块;
第十六判断子模块,用于判断是否有合法的证书链,是则触发第十七判断子模块,否则创建证书链,触发第十七判断子模块;
第十七判断子模块,用于判断是否需要构建临时证书,是则触发构建验证子模块,否则触发第九判断子模块;
构建验证子模块,用于构建临时证书,并使用证书链中的当前证书的公钥对临时证书进行验证,如验证成功则将临时证书追加到证书链中,触发检查设置子模块;
检查设置子模块,用于检查临时证书的密钥商用方式是否为密钥协商使用,是则触发第一设置子模块,否则触发第十七判断子模块;
第一设置子模块,用于设置个人化完成标记,触发第十七判断子模块;
第六发送模块,还用于在存储判断子模块判断为否时、第七判断子模块判断为是时、第九判断子模块判断为是时给上位机返回响应状态码,等待接收数据,触发第一接收模块;还用于第十一判断子模块判断为否时、第十三判断子模块判断为否时、第十五判断子模块判断为否时、构建验证子模块判断为否时给上位机返回错误响应。
可选的,在本实施例中,第一获取保存子模块包括:
第九判断单元,判断设置密钥信息的特性,如为密钥类型则触发判断创建单元,如为密钥字节长度则触发判断分配单元,如为密钥id则触发第一获取保存单元,如为密钥参数引用值则触发第一获取创建单元,如为密钥获取方式则触发第二获取保存单元,如为密钥访问权限则触发第三获取保存单元,如为密钥版本号则触发第一获取查找单元;
判断创建单元,用于从接收缓存中获取密钥类型,并判断密钥类型是否为预设类型,是则创建密钥信息对象,触发第六判断子模块,否则等待接收数据,触发第一接收模块;
判断分配单元,用于从接收缓存中获取密钥长度和密钥类型,并判断密钥类型是否为预设类型,是则根据密钥长度分配存储空间作为密钥存储区,触发第六判断子模块;否则触发第一分配单元;
第一分配单元,用于根据密钥长度分配存储空间作为曲线参数存储区,触发第六判断子模块;
第一获取保存单元,用于从接收缓存中获取密钥id并保存在秘钥对象中,触发第六判断子模块;
第一获取创建单元,用于从接收缓存中获取密钥参数引用值,并根据参数引用值构建一个曲线参数集,触发第六判断子模块;
第二获取保存单元,用于从接收缓存中获取密钥使用方式并保存在秘钥对象中,触发第六判断子模块;
第三获取保存单元,用于从接收缓存中获取密钥访问权限并保存在秘钥对象中,触发第六判断子模块;
第一获取查找单元,用于从接收缓存中获取密钥版本号,根据密钥版本号在密钥集群中查找对应的密钥集;
第十判断单元,用于判断找到的密钥集是否为空,是则触发第三获取单元,否则触发第一设置单元;
第三获取单元,用于从接收缓存中获取默认密钥集;
第十一判断单元,用于判断获取的密钥集的版本号是否为第一预设版本号,是则触发第一更新单元,否则触发创建添加单元;
第一更新单元,用于将密钥集的版本号更新为密钥版本号,触发第一设置单元;
创建添加单元,用于创建新的密钥集并添加到现有密钥集群中,触发第一设置单元;
第一设置单元,用于设置密钥信息对象中的密钥使用方式和密钥访问权限;
第二设置单元,用于将密钥信息对象设置在与密钥id对应的密钥集中,触发第六判断子模块。
可选的,在本实施例中,第十一判断子模块包括:
第十二判断单元,用于判断当前安全通道协议选项是否为预设协议类型,是则触发第十三判断单元,否则触发第六发送模块给上位机返回错误响应;
第十三判断单元,用于判断接收缓存中是否存在白名单计数值,是则触发第四获取单元,否则触发第六发送模块给上位机返回错误响应;
第四获取单元,用于从接收缓存中获取白名单计数值;
第十四判断单元,用于判断获取的白名单计数值是否大于记录的白名单个数,是则触发第十五判断单元,否则触发第六发送模块给上位机返回错误响应;
第十五判断单元,用于判断是否有可用的白名单,是则从接收缓存中获取白名单数据并保存到白名单中,触发第六判断子模块,否则触发第六发送模块给上位机返回错误响应。
可选的,在本实施例中,第十二判断子模块包括:
第十六判断单元,用于判断接收缓存中是否有白名单数据,是则触发第一分配单元,否则触发第一删除单元;
第一删除单元,用于删除储存的白名单,触发第二删除单元;
第一分配单元,用于根据白名单数据的长度分配存储空间;
第四获取保存单元,用于从接收缓存中获取证书序列号并存储在存储空间的白名单中触发第二删除单元;
第二删除单元,用于删除保存的公钥;
第二更新单元,用于用接收缓存中的白名单计数值更新记录的白名单个数,触发第六判断子模块。
可选的,在本实施例中,第七获取子模块包括:
第十七判断单元,用于判断后续操作类型,如为获取上位机根证书发行者标识的长度则触发第一获取判断单元,如为获取上位机根证书发行者标识则触发第二获取判断单元;
第一获取判断单元,用于从接收缓存中获取上位机根证书发行者标识的长度,并判断上位机根证书发行者标识的长度是否在预设范围内,是则第一保存单元,否则触发第六发送模块给上位机返回错误响应;
第一保存单元,用于保存上位机根证书发行者标识的长度,触发第十四判断子模块;
第二获取判断单元,用于从接收缓存中获取密钥信息长度值,并判断密钥信息长度值是否符合要求,是则触发第五获取单元,否则触发第六发送模块给上位机返回错误响应;
第五获取单元,用于从接收缓存中获取密钥id和密钥版本号并保存;
第十八判断单元,用于判断密钥版本号是否在预设区间,是则触发第四查找单元,否则触发第六发送模块给上位机返回错误响应;
第四查找单元,用于根据密钥版本号在预置密钥集中查找对应的密钥集,如找到则触发第五查找单元,如未找到则触发第七获取单元;
第七获取单元,用于从预置密钥集群中获取默认密钥集,触发第五查找单元;
第五查找单元,用于根据密钥id在密钥集中查找密钥信息,如找到则触发第十九判断单元,如未找到则触发第六发送模块给上位机返回错误响应;
第十九判断单元,用于判断是否处理完当前指令,是则触发第九判断子模块,否则触发第四获取保存单元;
第四获取保存单元,用于根据上位机根证书发行者标识的长度从接收缓存中获取上位机根证书发行者标识并与密钥信息对应保存,触发第十四判断子模块。
可选的,在本实施例中,第十六判断子模块包括:
第二十判断单元,用于判断保存的密钥id和密钥版本号是否是否合法,是则触发第六查找单元,否则触发第六发送模块给上位机返回错误响应;
第六查找单元,用于根据密钥id与密钥版本号在证书存储区中查找与之对应的证书链,如找到则触发第十七判断子模块,否则触发第一创建单元;
第一创建单元,用于根据缓存的密钥id与密钥版本号创建新的证书链,触发第十六判断子模块。
可选的,在本实施例中,构建验证子模块包括:
第一获取读取单元,用于从接收缓存中获取临时证书数据并根据读取的临时证书数据构建临时证书;
第二十一判断单元,用于从证书链中获取当前证书并判断是否获取成功,是则触发第三验证单元,否则触发第七检查单元;
第七检查单元,用于检查临时证书的密钥使用方式是否为签名使用,是则触发追加单元,否则触发第六发送模块给上位机返回错误响应;
第三验证单元,用于使用当前证书的公钥验证临时证书,如验证成功则触发追加单元,如验证失败则触发第六发送模块给上位机返回错误响应;
追加单元,用于将临时证书、密钥id和密钥版本号追加到证书链中。
可选的,在本实施例中,第一设置子模块具体用于根据密钥id设置个人化完成标记,修改卡片数据中scp域的默认值为个人化完成标记,触发第十七判断子模块。
本实施例中的打包子模块包括:
第二十二判断单元,用于判断当前安全级别,如为明文级别则触发第一计算组成单元,如为密文级别则触发第二计算组成单元;
第一计算组成单元,用于根据响应缓存中的数据计算mac值,将响应缓存中的数据和mac值组成响应数据;
第二计算组成单元,用于根据缓存中的数据计算mac值,对缓存中的所有数据进行加密,将加密结果和mac值组成响应数据。
以上所述,仅为本发明较佳的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明公开的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应该以权利要求的保护范围为准。