CN104468116A - 一种实现智能密钥设备多应用的方法 - Google Patents
一种实现智能密钥设备多应用的方法 Download PDFInfo
- Publication number
- CN104468116A CN104468116A CN201410636381.2A CN201410636381A CN104468116A CN 104468116 A CN104468116 A CN 104468116A CN 201410636381 A CN201410636381 A CN 201410636381A CN 104468116 A CN104468116 A CN 104468116A
- Authority
- CN
- China
- Prior art keywords
- container
- application
- list
- middleware
- name
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Landscapes
- Stored Programmes (AREA)
Abstract
本发明公开一种实现智能密钥设备多应用的方法,包括:当中间件的初始化接口被调用时创建设备信息列表、应用列表和容器列表;如创建容器接口被调用则中间件创建容器对象,分配容器句柄并对应保存在容器列表的相应位置,返回容器句柄;如创建密钥接口被调用则中间件创建密钥对象并分配对应的密钥ID,将密钥ID和密钥用途存储到该密钥对象中,将密钥ID保存到容器对象中,分配一个密钥句柄并保存,将密钥句柄返回;如删除容器接口被调用则中间件根据设备名和容器名获取对应的容器对象引用,根据容器对象引用生成删除指令并发送给对应的智能密钥设备,智能密钥设备根据删除指令成功删除对应容器对象后,中间件将对应的容器信息从容器列表中移除。
Description
技术领域
本发明涉及信息安全领域,特别涉及一种实现智能密钥设备多应用的方法。
背景技术
从《智能IC卡与智能密码钥匙应用接口规范》发布至今,在行业内各厂家对国密接口中的多应用、多容器与标准CSP接口之间的读写双向兼容和数据互通都无法完美融合,基本采用针对不同项目进行单向兼容。在引入国密接口之前,通过CSP、PKCS#11对USB Key(智能密钥设备)应用进行管理的方式为:一个USB Key(智能密钥设备)内部只创建一个应用,一个应用下面可以创建各种数据对象,例如创建容器对象、密钥对象等。通过CSP、PKCS#11对USBKey中的内容进行操作,实际上就是对USB Key中对应的唯一一个应用下的各种数据对象进行操作。引入国密接口之后,国密接口要求一个USB Key需要有多个应用,而且可以动态的创建应用和删除应用,如何让标准的CSP和PKCS#11接口支持上国密接口中的多应用和多PIN码成为一个亟待解决的问题。
发明内容
本发明的目的是为了解决如何让CSP、PKCS#11适应拥有多个应用的USB Key的问题,提供一种实现智能密钥设备多应用的方法。
本发明提供一种实现智能密钥设备多应用的方法,包括:
步骤S1:当中间件的CSP接口被调用时,所述中间件判断所述CSP接口的类型,如为初始化接口则执行步骤S2;如为创建容器接口则执行步骤S5;如为创建密钥接口则执行步骤S8,如为删除容器接口则执行步骤S12;
步骤S2:所述中间件枚举与主机连接的所有智能密钥设备,并根据枚举到的智能密钥设备创建对应的设备信息列表,所述设备信息列表中包括设备名;
步骤S3:所述中间件枚举与所述主机连接的每个设备中的所有应用,根据每个设备中枚举到的所有应用的应用名和应用ID创建应用列表和所述应用列表的引用,并将所述应用列表的引用保存到所述设备信息列表的相应位置;所述设备信息列表中每个设备名对应一个应用列表的引用;
步骤S4:所述中间件枚举与所述主机连接的每个设备中的每个应用中的容器对象,根据枚举到的每个设备中的每个应用中的容器对象的属性和容器名创建对应的容器列表和所述容器列表的引用,根据枚举到的容器对象在所述容器列表中建立对应的容器对象引用,将所述容器列表的引用保存到应用列表的相应位置;返回步骤S1;
步骤S5:所述中间件获取设备名和容器名,根据所述设备名在所述设备信息列表中定位当前智能密钥设备;
步骤S6:所述中间件判断定位的当前智能密钥设备中的所有容器列表中是否存在所述容器名,是则报错,结束,否则执行步骤S7;
步骤S7:所述中间件根据所述容器名在当前智能密钥设备的当前应用中创建容器对象,为所述创建的容器对象分配容器句柄和容器对象引用,将所述容器句柄、所述容器对象引用和所述容器对象的属性保存在当前应用中的容器列表的相应位置,返回所述容器句柄,返回步骤S1;
步骤S8:所述中间件判断接收到的容器句柄是否合法,是则执行步骤S9,否则报错;
步骤S9:所述中间件根据所述容器句柄定位容器对象,判断所述定位的容器对象的属性中是否存在密钥ID,是则报错,结束,否则执行步骤S10;
步骤S10:所述中间件创建密钥对象,为所述密钥对象分配对应的密钥ID,将所述密钥ID和密钥用途存储到所述密钥对象中,将所述密钥ID保存到所述定位的容器对象的属性中;
步骤S11:所述中间件为所述密钥对象分配一个密钥句柄并保存,将所述密钥句柄返回,返回步骤S1;
步骤S12:所述中间件获取设备名和容器名,根据所述设备名在所述设备信息列表中定位当前智能密钥设备;
步骤S13:所述中间件判断定位的当前智能密钥设备中的所有容器列表中是否存在所述容器名,是则执行步骤S14,否则报错,结束;
步骤S14:所述中间判断判断定位的当前智能密钥设备中的所有容器列表中是否只有1个所述容器名,是则执行步骤S16,否则执行步骤S15;
步骤S15:所述中间件输出选择容器对话框,等待并接收用户选择的当前智能密钥设备下的当前应用中的容器名,执行步骤S16;
步骤S16:所述中间件根据所述容器名删除对应的容器对象,更新所述容器列表,返回步骤S1。
进一步地,所述步骤S3与步骤S4之间包括:
所述中间件依次通过设备信息列表中的每个设备名连接对应的智能密钥设备,并判断是否连接成功,如有至少一个连接成功则执行步骤S4,否则报错。
进一步地,所述步骤S5包括:
步骤S5-1:所述中间件判断容器名缓存区是否为空,是则执行步骤S5-2,否则执行步骤S5-3;
步骤S5-2:所述中间件采用GUID的算法,根据以太网卡地址、纳秒级时间、芯片ID生成一个容器名,执行步骤S5-7;
步骤S5-3:所述中间件解析所述容器名缓存区中的数据,判断解析结果是否符合预设格式,是则执行步骤S5-4,否则执行步骤S5-5;
步骤S5-4:所述中间件从解析结果中获取设备名和容器名,执行步骤S5-6;
步骤S5-5:所述中间件获取所述容器名缓存区中的数据并将其作为容器名,执行步骤S5-6;
步骤S5-6:所述中间件判断设备名是否为空,是则执行步骤S5-7,否则将与设备名对应的设备作为当前智能密钥设备,执行步骤S6;
步骤S5-7:所述中间件输出选择框,等待并接收用户选择的设备列表中的设备名;
那种S5-8:所述中间件将与用户选择的设备名所对应的设备作为当前智能密钥设备,执行步骤S6。
进一步地,所述步骤S6包括:
步骤S6-1:所述中间件从设备信息列表中获取当前智能密钥设备的应用列表;
步骤S6-2:中间件根据当前智能密钥设备的应用列表中的第一个容器列表的引用定位对应的容器列表作为当前容器列表;
步骤S6-3:所述中间件判断获取的容器名是否与当前容器列表中的容器名匹配,是则将所述容器列表的引用所属的应用作为当前应用,执行步骤S7,否则执行步骤S6-4;
步骤S6-4:所述中间件判断当前智能密钥设备的应用列表中是否还有未处理的容器列表的引用,是则执行步骤S6-5,否则报错,结束;
步骤S6-5:中间件根据当前智能密钥设备的应用列表中的下一个容器列表的引用定位对应的容器列表作为当前容器列表,返回步骤S6-3。
进一步地,如所述中间件的CSP检测到查找容器接口被调用时则执行步骤S17;
步骤S17:所述中间件获取设备名和容器名,根据所述设备名在所述设备信息列表中定位当前智能密钥设备;
步骤S18:所述中间件判断定位的当前智能密钥设备中的所有容器列表中是否存在所述容器名,是则执行步骤S19,否则报错,结束;
步骤S19:所述中间判断定位的当前智能密钥设备中的所有容器列表中是否只有1个所述容器名,是则执行步骤S21,否则执行步骤S20;
步骤S20:所述中间件输出选择容器对话框,等待并接收用户在当前智能密钥设备下选择的当前应用和所述当前应用中的容器名,执行步骤S21;
步骤S21:所述中间件根据所述容器名在所述容器列表中获取对应的容器对象引用,为与所述容器对象引用对应的容器对象分配容器句柄,并将所述容器句柄返回,返回步骤S1。
进一步地,所述步骤S17包括:
步骤S17-1:所述中间件判断容器名缓存区是否为空,是则获取设备信息列表中的第一个应用列表的引用对应的应用列表中的第一个容器列表引用,为所述容器列表的引用对应的容器列表中第一个容器对象引用对应容器对象分配容器句柄,并将所述容器句柄返回,返回步骤S1;否则执行步骤S17-2;
步骤S17-2:所述中间件解析所述容器名缓存区中的数据,判断解析结果是否符合预设格式,是则执行步骤S17-3,否则执行步骤S17-4;
步骤S17-3:所述中间件从解析结果中提取设备名和容器名,执行步骤S17-5;
步骤S17-4:所述中间件将所述容器名缓存区中的数据作为容器名,执行步骤S17-5;
步骤S17-5:所述中间件判断设备名是否为空,是则执行步骤S17-6,否则执行步骤S17-7;
步骤S17-6:所述中间件获取设备信息列表中的所有设备引用,将第一个设备引用对应的设备作为当前智能密钥设备,执行步骤S18;
步骤S17-7:所述中间件将与设备名对应的设备作为当前智能密钥设备,执行步骤S18。
进一步地,所述步骤S18包括:
步骤S18-1:所述中间件从当前智能密钥设备的应用列表中获取第一个应用ID作为当前应用ID;
步骤S18-2:所述中间件将与当前应用ID对应的应用中的容器列表中的第一个容器名作为当前容器名;
步骤S18-3:所述中间件判断所述获取的容器名是否与当前容器名一致,是则执行步骤S18-4,否则执行步骤S18-5;
步骤S18-4:所述中间件更新查找计数值,并保存所述获取的容器名所属的设备名和应用名,执行步骤S18-5;
步骤S18-5:所述中间件判断当前应用列表中是否还有未处理的容器名,是则执行步骤S18-6,否则执行步骤S18-7;
步骤S18-6:所述中间件从应用列表中获取下一个容器名作为当前容器名,返回步骤S18-3;
步骤S18-7:所述中间件判断当前智能密钥设备的设备信息列表中是否还有未处理的应用ID,是则将下一个应用ID作为当前应用ID,返回步骤S18-2,否则执行步骤S19。
进一步地,如所述中间件的CSP检测到调用密钥接口被调用时则执行步骤S22,
步骤S22:所述中间件判断接收到的容器句柄是否合法,是则执行步骤S23,否则报错;
步骤S23:所述中间件根据所述容器句柄定位容器对象,判断所述定位的容器对象的属性中是否存在密钥ID,是则执行步骤S24,否则报错,结束;
步骤S24:所中间件根据所述密钥ID定位密钥对象,根据所述密钥对象中的密钥引用获取对应的密钥,调用所述获取的密钥,返回步骤S1。
进一步地,所述步骤S12包括:
步骤S12-1:所述中间件判断容器名缓存区是否为空,是则获取设备信息列表中的第一个应用列表引用对应的应用列表中的第一个容器列表引用,根据所述容器列表引用对应的容器列表中的第一个容器对象引用,将对应的容器列表中对应的容器名、容器引用和对应的容器对象的属性删除,返回步骤S1;否则执行步骤S12-2;
步骤S12-2:所述中间件解析所述容器名缓存区中的数据,判断解析结果是否符合预设格式,是则执行步骤S12-3,否则执行步骤S12-4;
步骤S12-3:所述中间件从解析结果中提取设备名和容器名,执行步骤S12-5;
步骤S12-4:所述中间件将所述容器名缓存区中的数据作为容器名,执行步骤S12-5;
步骤S12-5:所述中间件判断设备名是否为空,是则执行步骤S12-6,否则执行步骤S12-7;
步骤S12-6:所述中间件获取设备信息列表中的所有设备引用,将第一个设备引用对应的设备当前智能密钥设备,执行步骤S13;
步骤S12-7:所述中间件将与设备名对应的设备作为当前智能密钥设备,执行步骤S13。
进一步地,所述步骤S13包括:
步骤S13-1:所述中间件从当前智能密钥设备的设备信息列表中获取第一个应用ID作为当前应用ID;
步骤S13-2:所述中间件将与当前应用ID对应的应用中的容器列表中的第一个容器名作为当前容器名;
步骤S13-3:所述中间件判断所述获取的容器名是否与当前容器名一致,是则执行步骤S13-4,否则执行步骤S13-5;
步骤S13-4:所述中间件更新查找计数值,并保存容器名所属的设备名,执行步骤S13-5;
步骤S13-5:所述中间件判断当前应用列表中是否还有未处理的容器名,是则执行步骤S13-6,否则执行步骤S13-7;
步骤S13-6:所述中间件从应用列表中获取下一个容器名作为当前容器名,返回步骤S13-3;
步骤S13-7:所述中间件判断当前智能密钥设备的设备信息列表中是否还有未处理的应用ID,是则将下一个应用ID作为当前应用ID,返回步骤S13-2,否则执行步骤S14。
进一步地,所述中间件判断接收到的容器句柄是否合法,具体为:所述中间件判断接收到的容器句柄与保存的容器句柄是否一致,是则接收到的容器句柄合法,否则接收到的容器句柄不合法。
本发明提供另一种实现智能密钥设备多应用的方法,包括:
步骤L1:当中间件的PKCS#11接口被调用时,中间件判断接口的类型,如为初始化接口则执行步骤L2,如为打开会话接口则执行步骤L5,如为创建对象接口则执行步骤L6,如为删除对象接口则执行步骤L12;
步骤L2:所述中间件枚举与主机连接的所有智能密钥设备,并根据枚举到的每个智能密钥设备创建对应的设备信息列表,所述设备信息列表中包括设备名和设备ID;
步骤L3:所述中间件枚举与所述主机连接的每个设备中的所有应用,根据每个设备中的枚举到的所有应用的应用名和应用ID创建对应的应用列表和所述应用列表的引用,并将所述应用列表的引用保存到所述设备信息列表的相应位置;所述设备信息列表中每个设备名对应一个应用列表的引用;
步骤L4:所述中间件枚举与所述主机连接的每个设备中的每个应用中的容器对象,根据枚举到的每个设备中的每个应用中的容器对象的属性和容器名创建对应的容器列表和所述容器列表的引用,根据枚举到的容器对象在所述容器列表中建立对应的容器对象引用,将所述容器列表的引用保存到应用列表的相应位置;返回步骤L1;步骤L5:所述中间件根据接收到的卡槽序号在设备信息列表中查找对应的设备,如找到则所述中间件根据所述卡槽序号创建对应的会话句柄,并将所述会话句柄返回,返回步骤L1;否则报错,结束;
步骤L6:所述中间件接收到的会话句柄在设备信息列表中查找对应的设备ID,如找到则执行步骤L7,否则报错,结束;
步骤L7:所述中间件根据所述设备ID获取对应的智能密钥设备,根据所述智能密钥设备中的应用列表中第一个应用ID对应的应用作为默认应用,根据接收到的密钥模板创建密钥对象;
步骤L8:所述中间件判断所述默认应用中是否存在容器对象,是则执行步骤L9,否则执行步骤L10;
步骤L9:所述中间件将所述密钥对象和所述默认应用中的容器对象进行关联,执行步骤L11;
步骤L10:所述中间件在所述默认应用中创建容器对象,将所述密钥对象中的公钥二进制的哈希值作为容器名,根据所述创建的容器对象的属性和容器名更新容器列表,根据创建的容器对象在所述容器列表中建立对应的容器对象引用,执行步骤L11;
步骤L11:所述中间件为所述密钥对象分配密钥对象句柄并对应存储,并将所述密钥对象句柄返回,返回步骤L1;
步骤L12:所述中间件根据接收到的会话句柄在设备信息列表中查找对应的设备ID,如找到则执行步骤L13,否则报错,结束;
步骤L13:所述中间件根据所述设备ID获取对应的智能密钥设备,根据所述智能密钥设备中的应用列表中第一个应用ID对应的应用作为默认应用;
步骤L14:所述中间件根据接收到的密钥模板在所述默认应用中查找对应的密钥对象,如找到则执行步骤L15,否则报错,结束;
步骤L15:所述中间件根据所述密钥对象获取与之关联的容器对象,判断所述容器对象是否还有其他关联对象,是则执行步骤L16,否则执行步骤L17;
步骤L16:所述中间件删除所述密钥对象,解除所述密钥对象与所述容器对象的关联,返回步骤L1;
步骤L17:所述中间件删除所述密钥对象和与之关联的所述容器对象,并更新所述容器列表,返回步骤L1。
进一步地,所述步骤L3与步骤L4之间包括:
所述中间件通过设备信息列表中的每个设备名连接对应的智能密钥设备,并判断是否连接成功,如有至少一个连接成功则执行步骤L4,否则报错。
本发明提供又一种实现智能密钥设备多应用的方法,包括:
步骤P1:当中间件的国密接口被调用时,所述中间件判断所述国密接口的类型,如为枚举设备接口则执行步骤P2,如为枚举应用接口则执行步骤P3,如创建应用接口则执行步骤P4,如为删除应用接口则执行步骤P5,如为枚举容器接口则执行步骤P6,如为创建容器接口则执行步骤P7,如为删除容器接口则执行步骤P9;
步骤P2:所述中间件枚举与主机连接的所有智能密钥设备,并根据枚举到的每个智能密钥设备创建对应的设备信息列表,所述设备信息列表中包括设备名和设备ID,将所有智能密钥设备的设备名返回,返回步骤P1;
步骤P3:所述中间件根据接收到的设备句柄枚举对应设备中的所有应用,根据枚举到的应用创建对应设备的应用列表和所述应用列表的引用,将所述应用列表的引用保存到设备信息列表的相应位置,将所述应用列表中的应用名返回,返回步骤P1;所述应用列表包括:应用ID和应用名;
步骤P4:所述中间件根据接收到的设备句柄获取对应设备的应用列表,判断接收到的应用名与所述应用列表中的应用名是否匹配,是则报错,结束;否则根据所述应用名在与所述设备名对应的智能密钥设备中创建应用,并根据所述创建的应用更新对应设备的应用列表,返回步骤P1;
步骤P5:所述中间件根据接收到的设备句柄获取对应设备的应用列表,判断所述删除应用接口的应用名是否有所述应用列表中的应用名匹配,是则删除与所述应用名对应的应用,删除应用列表中的对应的应用ID和应用名,返回步骤P1;否则报错,结束;
步骤P6:所述中间件根据接收到的应用句柄在所有的应用列表中查找对应的应用,如找到则根据对应应用中的所有容器名生成容器列表并创建对应的容器列表引用,将所述容器列表引用保存到应用列表的相应位置,并将所有容器名返回,返回步骤P1;如未找到则报错,结束;
步骤P7:所述中间件根据接收到的应用句柄在所有的应用列表中查找对应的应用,如找到则执行步骤P8,如未找到则报错,结束;
步骤P8:所述中间件根据接收到的容器名在对应的应用中的容器列表中查找是否有对应的容器名,是则报错,结束;否则在所述对应的应用中创建容器对象并分配对应的容器对象引用,并根据所述创建的容器对象的属性、容器名和容器对象引用更新容器列表,返回步骤P1;
步骤P9:所述中间件根据接收到的应用句柄在所有的应用列表中查找对应的应用名,如找到则执行步骤P10,如未找到则报错,结束;
步骤P10:所述中间件根据接收到的容器名在对应的应用中的容器列表中查找是否有对应的容器名,是则根据所述容器名删除对应的容器对象,更新所述容器列表,返回步骤P1;否则报错,结束。
进一步地,如所述中间件的国密检测到生成密钥接口被调用则执行步骤P11;
步骤P11:所述中间件根据接收到的容器句柄在所有的容器列表中查找对应的容器对象引用,判断与所述容器对象引用对应的容器对象中的密钥ID是否存在,是则报错,结束,否则执行步骤P12;
步骤P12:所述中间件创建密钥对象,并分配密钥ID,将所述密钥ID和密钥属性存储到所述密钥对象属性中;
步骤P13:所述中间件根据所述密钥ID更新所述容器列表,将所述密钥ID返回,返回步骤P1。
进一步地,所述步骤P9之前包括:所述中间判断所述容器句柄是否正确,是则执行步骤P11,否则报错,结束。
进一步地,如所述中间件的国密检测到调用密钥接口被调用则执行步骤P14;
步骤P14:所述中间件根据接收到的应用句柄在应用列表中查找对应的应用,如找到则执行步骤P15,否则报错,结束;
步骤P15:所述中间件判断接收到的容器名是否与对应的应用中的容器列表中的容器名匹配,是则根据所述容器名查找对应的容器对象,根据所述容器对象中的密钥ID获取对应的密钥对象,调用所述密钥对象中的密钥,返回步骤P1;否则报错,结束。
进一步地,所述步骤P14之前包括:所述中间件检测所述应用句柄是否有效,是则执行步骤P12,否则报错,结束。
进一步地,如所述中间件的国密检测到连接设备接口被调用时则执行步骤P16;
步骤P16:所述中间件判断接收到的设备名是否与设备信息列表中的设备名匹配,是则创建与所述设备名对应的设备句柄,将所述设备句柄保存到设备列表的相应位置然后将所述设备句柄返回,返回步骤P1;如未找到则报错,结束。
进一步地,如所述中间件的国密检测到打开应用接口被调用时则执行步骤P17;
步骤P17:所述中间件通过接收到的设备句柄从设备信息列表中查找对应的设备名,如找到则执行步骤P18,如未找到则报错,结束;
步骤P18:所述中间件判断接收到的应用名是否与所述设备名对应设备的应用列表中的应用名匹配,是则创建对应的应用句柄,将所述应用句柄保存到所述应用列表中的相应位置并将所述应用句柄返回,返回步骤P1;否则报错,结束。
进一步地,在所述步骤P17之前包括:所述中间件判断所述设备句柄是否有效,如果有效则执行步骤P17,否则报错,结束。
进一步地,如所述中间件的国密检测到打开容器接口被调用时则执行步骤P19;
步骤P19:所述中间件根据接收到的应用句柄在应用列表中查找对应的应用,如找到则执行步骤P20,否则报错,结束;
步骤P20:所述中间件根据接收到的容器名在对应的应用中的容器列表中查找是否有对应的容器名,是则创建对应的容器句柄,将所述容器句柄保存到所述容器句柄的相应位置并将所述容器句柄返回,返回步骤P1;否则报错,结束。
进一步地,在所述步骤P19之前包括:所述中间件检测所述应用句柄是否有效,是则执行步骤P19,否则报错,结束。
进一步地,所述步骤P3之前包括:
步骤V1:所述中间件检测所述设备句柄是否有效,是则执行步骤V2,否则报错,结束;
步骤V2:所述中间件通过所述设备句柄从设备信息列表中查找对应的设备名,如找到则执行步骤P3,如未找到则报错,结束。
进一步地,所述步骤P4之前包括:
步骤Y1:所述中间件检测所述设备句柄是否有效,是则执行步骤Y2,否则报错,结束;
步骤Y2:所述中间件通过所述设备句柄从设备信息列表中查找对应的设备名,如找到则执行步骤P4,如未找到则报错,结束。
进一步地,所述步骤P5之前包括:
步骤W1:所述中间件检测所述设备句柄是否有效,是则执行步骤W2,否则报错,结束;
步骤W2:所述中间件通过所述设备句柄从设备信息列表中查找对应的设备名,如找到则执行步骤P5,如未找到则报错,结束。
进一步地,所述步骤P6之前包括:所述中间件检测所述应用句柄是否有效,是则执行步骤P6,否则报错,结束;
所述步骤P7之前包括:所述中间件检测所述应用句柄是否有效,是则执行步骤P7,否则报错,结束;
所述步骤P9之前包括:所述中间件检测所述应用句柄是否有效,是则执行步骤P9,否则报错,结束。
本发明与现有技术相比,
本发明技术方案是在CSP、PKCS#11、国密中通过各自的初始化接口创建三类列表:设备信息列表、应用列表和容器列表,不同的智能密钥设备各自有一个设备信息列表,每个智能密钥设备下的不同应用生成应用列表,根据每个应用中的容器生成该应用的容器列表,在CSP、PKCS#11、国密中通过调用各自的接口访问一个设备,根据接口参数调用当前访问设备的当前应用中的当前容器对象的密钥,来完成签名、加解密等操作,从而实现一个USB Key拥有多个应用的目的。
附图说明
图1-图5为本发明实施例一提供的一种实现智能密钥设备多应用的方法流程图;
图6和图7为本发明实施例二提供的一种实现智能密钥设备多应用的方法流程图;
图8和图9为本发明实施例三提供的一种实现智能密钥设备多应用的方法流程图;
图10为本发明实施例四提供的一种实现智能密钥设备多应用的方法流程图。
具体实施例
为使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明实施例进一步地详细描述。
实施例一
本发明实施例一提供了一种实现智能密钥设备多应用的方法,如图1-图5所示,包括:
步骤101:当中间件的CSP接口被调用时,中间件判断接口的类型,如为初始化接口则执行步骤102,如为查找容器接口则执行步骤107,如为创建容器接口则执行步骤125,如为删除容器接口则执行步骤139;如为创建密钥接口则执行步骤157;如为调用密钥接口则执行步骤161;
在本实施例中,在加密、解密、签名过程中会通过调用相应的接口来调用密钥;
步骤102:中间件枚举与主机连接的所有USB Key,并根据枚举到的USBKey创建设备信息列表,将设备信息列表中的第一个设备名作为当前设备名;
具体的,在本实施例中,设备信息列表包括:设备名、设备ID、设备类型、设备状态、设备中的应用数量、设备对应的应用列表引用;设备信息列表中的上述信息一一对应;
步骤103:中间件通过当前设备名连接对应的当前智能密钥设备,并判断是否连接成功,是则执行步骤104,否则执行步骤106;
在本实施例中,如中间件通过所有的设备名与对应的设备都连接不成功则会报错;
步骤104:中间件枚举当前连接设备中的所有应用,根据枚举到的应用创建应用列表和该应用信息列表的引用,根据枚举到的应用更新设备信息列表;
具体的,本实施例中的应用列表包括:应用ID、应用名、容器列表引用等数据;更新设备信息列表包括:将设备信息列表中对应的设备状态设置为已连接,将对应的设备中的应用数量更新为枚举到的应用的数量,将应用列表的引用保存到设备信息列表的相应位置;本实施例中的设备与设备信息列表中的设备名一一对应;
步骤105:中间件枚举当前智能密钥设备的每个应用中的容器对象,并根据枚举得到的容器对象创建容器列表和该容器列表的引用,根据枚举到的容器对象在所述容器列表中建立对应的容器对象引用,将容器列表的引用保存到应用列表的相应位置,执行步骤106;
具体的,在本实施例中,容器列表中包括容器名、与容器对象一一对应的容器对象引用;
步骤106:中间件判断设备信息列表中是否存在未连接的设备状态,是则将未连接的设备状态所对应的设备名作为当前设备名,返回步骤103,否则返回步骤101;
在本实施例中,中间件通过调用初始化接口来枚举各个USB Key,解析USBKey中的应用和数据对象,将各种信息以列表的形式保存和关联起来;初始化完成后,得到三类表:
设备信息列表,表项内容包括:设备名、设备ID、设备类型、设备状态、设备中的应用数量、应用列表的引用;设备信息列表中的每个表项对应1个或0个应用列表的引用;
应用列表,表项包括:应用ID、应用名、容器列表的引用等信息;每个应用列表的每个表项对应1个或0个容器列表的引用;
容器列表,表项包括:容器名、容器对象引用、容器对象的属性等信息;
步骤107:中间件判断容器名缓存区是否为空,是则获取设备信息列表中的第一个应用列表的引用对应的应用列表中的第一个容器列表引用,执行步骤124;否则执行步骤108;
具体的,本实施例中,中间件判断参数pszContainer是否为NULL,是则容器名为空,否则容器名不为空;
例如,在本实施例中,当pszContainer为NULL时,dwFlags为CRYPT_VERIFYCONTEXT时,需要选择一个默认容器对象,然后分配一个容器句柄,将此句柄赋值给phProv返回;
步骤108:中间件解析容器名缓存区中的数据,判断解析结果是否符合预设格式,是则执行步骤109,否则执行步骤110;
具体的,在本实施例中,如解析结果是以预定的特征串“\\.\”开头,且剩余部分被一个“\”隔开则符合预设格式;
例如,在本实施例中,容器名缓冲区中的数据由字符串组成,如果所述字符串以预定的特征串“\\.\”开头,且剩余部分被一个“\”隔开,则执行步骤109,否则执行步骤110;
步骤109:中间件从解析结果中提取设备名和容器名,执行步骤111;
具体的,本实施例中将解析结果中“\”之前的字符串作为设备名,之后的字符串作为容器名;
如解析结果为\\.\My USB Reader 0\2588006A-7F0C-4e25-9F30-295A23B4B3B8,则将My USB Reader 0作为设备名,将2588006A-7F0C-4e25-9F30-295A23B4B3B8作为容器名;
步骤110:中间件将容器名缓存区中的数据作为容器名,执行步骤111;
例如,容器名缓存区中的数据为2588006A-7F0C-4e25-9F30-295A23B4B3B8,则直接将其作为容器名;
步骤111:中间件判断设备名是否为空,是则执行步骤112,否则执行步骤113;
步骤112:中间件获取设备信息列表中所有设备引用,将第一个设备引用对应的设备作为当前智能密钥设备,执行步骤114;
步骤113:中间件将与设备名对应的设备作为当前智能密钥设备,执行步骤114;
步骤114:中间件从当前智能密钥设备的应用列表中获取第一个应用ID作为当前应用ID;
步骤115:中间件将与当前应用ID对应的应用中的容器列表中的第一个容器名作为当前容器名;
步骤116:中间件判断获取的容器名是否与当前容器名一致,是则执行步骤117,否则执行步骤118;
步骤117:中间件更新查找计数值,并保存容器名所属的设备名和应用名,执行步骤118;
具体的,本实施例中,更新查找计数值为:查找计数值自加1;
步骤118:中间件判断当前应用列表中是否还有未处理的容器名,是则执行步骤119,否则执行步骤120;
步骤119:中间件从应用列表中获取下一个容器名作为当前容器名,返回步骤116;
步骤120:中间件判断当前智能密钥设备的设备信息列表中是否还有未处理的应用ID,是则将下一个应用ID作为当前应用ID,返回步骤115,否则执行步骤121;
步骤121:中间件判断计数器的值,如为0则未找到与容器名对应的容器对象,报错,结束;如大于1则执行步骤122;如为1则执行步骤123;
在本实施例中,如计数器的值等于1则说明当前智能密钥设备中只有一个与容器名对应的容器,如计数器的值大于1则说明当前智能密钥设备中的有多个与容器名对应的容器;
步骤122:中间件输出选择容器对话框,等待并接收用户在当前智能密钥设备下选择的当前应用和当前应用中的容器名,执行步骤123;
在本实施例中,选择容器对话框包括一个列表,如果用户传入一个容器名,此容器名在多个设备中存在,每个设备中有多个应用,该列表中显示设备名和设备中的所有应用,用于供用户选择使用哪个设备中的哪个应用中的容器;
步骤123:中间件根据容器名在容器列表中获取对应的容器对象引用;
步骤124:中间件为容器对象引用所对应的容器对象分配容器句柄,并将该容器句柄返回,返回步骤101;
在本实施例中,当dwFlags的值为CRYPT_VERIFYCONTEXT且pszContainer不为NULL时,通过pszContainer字符串指定的容器名,枚举当前所有可识别智能密钥设备中的所有应用,找到相应的容器对象,如果存在多个容器对象,则需要弹出选择框,让用户选择使用哪个设备中的哪个应用下的容器对象,然后分配句柄并将句柄返回;如果仅仅存在一个容器对象,则直接分配句柄,并将句柄返回;如果未找到容器对象,则报错;
步骤125:中间件判断容器名缓存区是否为空,是则执行步骤126,否则执行步骤127;
具体的,本实施例中,中间件判断pszContainer是否为NULL,是则容器名为空,否则容器名不为空;
步骤126:中间件生成一个容器名,执行步骤131;
在本实施例中,生成一个容器名具体为:采用现有技术中的生成GUID的算法,根据以太网卡地址、纳秒级时间、芯片ID生成一个长度为128位的容器名;
步骤127:中间件解析容器名缓存区中的数据,判断解析结果是否符合预设格式,是则执行步骤128,否则执行步骤129;
具体的,在本实施例中,如解析结果是以预定的特征串“\\.\”开头,且剩余部分被一个“\”隔开则符合预设格式;
步骤128:中间件从解析结果中获取设备名和容器名,执行步骤130;
具体的,本实施例中将解析结果中“\”之前的字符串作为设备名,之后的字符串作为容器名;
步骤129:中间件获取容器名缓存区中的数据并将其作为容器名,执行步骤130;
步骤130:中间件判断设备名是否为空,是则执行步骤131,否则将与设备名对应的设备作为当前智能密钥设备,执行步骤133;
步骤131:中间件输出选择框,等待并接收用户选择的设备列表中的设备名;
具体的,本实施例中,中间件输出选择框后,用户在该选择框中选择将容器创建到哪个设备的哪个应用中,选择信息中包括设备名和应用名;
步骤132:中间件将与用户选择的设备名对应的设备作为当前智能密钥设备,执行步骤133;
步骤133:中间件从设备信息列表中获取当前智能密钥设备的应用列表;
步骤134:中间件根据当前智能密钥设备的应用列表中的第一个容器列表的引用定位对应的容器列表作为当前容器列表;
步骤135:中间件判断获取的容器名是否与当前容器列表中的容器名匹配,是则将该容器列表的引用所属的应用作为当前应用,执行步骤138,否则执行步骤136;
步骤136:中间件判断当前智能密钥设备的应用列表中是否还有未处理的容器列表的引用,是则执行步骤137,否则报错,结束;
步骤137:中间件根据当前智能密钥设备的应用列表中的下一个容器列表的引用定位对应的容器列表作为当前容器列表,返回步骤135;
步骤138:中间件根据容器名在当前智能密钥设备的当前应用中创建容器对象,为创建的容器对象分配容器句柄和容器对象引用,将容器句柄、容器对象引用和容器对象的属性保存在当前应用中的容器列表的相应位置,并返回容器句柄,返回步骤101;
步骤139:中间件判断容器名缓存区是否为空,是则获取设备信息列表中的第一个应用列表引用对应的应用列表中的第一个容器列表引用中的第一个容器对象的引用,执行步骤156;否则执行步骤140;
步骤140:中间件解析容器名缓存区中的数据,判断解析结果是否符合预设格式,是则执行步骤141,否则执行步骤142;
具体的,在本实施例中,如解析结果是以预定的特征串“\\.\”开头,且剩余部分被一个“\”隔开则符合预设格式;
步骤141:中间件从解析结果中获取设备名和容器名,执行步骤143;
具体的,本实施例中将解析结果中“\”之前的字符串作为设备名,之后的字符串作为容器名;
步骤142:中间件获取容器名缓存区中的数据并将其作为容器名,执行步骤143;
步骤143:中间件判断设备名是否为空,是则执行步骤144,否则执行步骤145;
步骤144:中间件获取所有设备中的设备信息列表,将第一个设备信息列表作为当前设备信息列表,执行步骤146;
步骤145:中间件获取与设备名对应的设备中的设备信息列表并作为当前设备信息列表,执行步骤146;
步骤146:中间件从当前智能密钥设备的设备信息列表中获取第一个应用ID作为当前应用ID;
步骤147:中间件将与当前应用ID对应的应用中的容器列表中的第一个容器名作为当前容器名;
步骤148:中间件判断获取的容器名是否与当前容器名一致,是则执行步骤149,否则执行步骤150;
步骤149:中间件更新查找计数值,并保存容器名所属的设备名,执行步骤150;
具体的,本实施例中,更新查找计数值为:查找计数值自加1;
步骤150:中间件判断当前应用列表中是否还有未处理的容器名,是则执行步骤151,否则执行步骤152;
步骤151:中间件从应用列表中获取下一个容器名作为当前容器名,返回步骤148;
步骤152:中间件判断当前智能密钥设备的设备信息列表中是否还有未处理的应用ID,是则将下一个应用ID作为当前应用ID,返回步骤147,否则执行步骤153;
步骤153:中间件判断计数器的值,如为0则未找到与容器名对应的容器对象,报错,结束;如大于1则执行步骤154;如为1则执行步骤155;
在本实施例中,如计数器的值等于1则说明当前智能密钥设备中只有一个与容器名对应的容器,如计数器的值大于1则说明当前智能密钥设备中有多个与容器名对应的容器;
步骤154:中间件输出选择容器对话框,等待并接收用户选择的当前智能密钥设备下的当前应用中的容器名,执行步骤155;
步骤155:中间件根据容器名在容器列表中获取对应的容器对象引用;
步骤156:中间件根据容器对象引用生成删除指令并发送给当前智能密钥设备,将对应的容器列表中对应的容器名、容器引用和对应的容器对象的属性删除,返回步骤101;
在本实施例中,智能密钥设备接收到删除指令后根据删除指令中的容器ID删除对应的容器对象,成功删除对应容器对象后,中间件将对应的容器信息从所述容器列表中移除。
在本实施例中,该方法中的CSP接口枚举所有的USB Key中所有的应用,找到对应的容器对象。容器对象使用容器名作为唯一标识,一个应用下不能存在多个相同容器名的容器对象,不同应用下,可以存在多个相同容器名的容器对象;
步骤157:中间件判断创建密钥接口的第一参数值是否为合法的容器句柄,是则执行步骤158,否则报错,结束;
在本实施例中,创建密钥接口的第一参数为hProv;步骤157具体为:中间件判断hProv的值是否与步骤125中保存的句柄相同,是则执行步骤158,否则报错,结束;
步骤158:中间件根据创建密钥接口的第一参数值定位容器对象,判断容器对象的属性中是否存在密钥ID,是则报错,结束;否则执行步骤159;
步骤159:中间件根据创建密钥接口的第三参数创建密钥对象,并为该密钥对象分配对应的密钥ID,将此密钥ID和密钥用途更新到密钥对象中,将密钥ID保存到容器对象的属性中;
具体的,在本实施例中,创建密钥接口的第三参数为dwFlags;
步骤160:中间件为创建好的密钥对象分配一个密钥句柄并保存,将此密钥句柄返回,返回步骤101;
步骤161:中间件判断调用密钥接口的第一参数值是否为合法的容器句柄,是则执行步骤162,否则报错,结束;
步骤162:中间件根据容器句柄定位容器对象,判断容器对象的属性中是否存在密钥ID,是则执行步骤163,否则报错,结束;
步骤163:中间件根据密钥ID定位密钥对象,根据密钥对象中的密钥引用获取对应的密钥,调用获取的密钥,返回步骤101;
在本实施例中,中间件调用获取的密钥可以用来进行加密、解密或者签名操作。
实施例二
本发明实施例二提供一种实现智能密钥设备多应用的方法,如图6和图7所示,包括:
步骤201:当中间件的PKCS#11接口被调用时,中间件判断接口的类型,如为初始化接口则执行步骤202,如为打开会话接口则执行步骤207,如为创建对象接口则执行步骤209,如为删除对象接口则执行步骤216;
在本实施例中,初始化接口具体为:
打开会话接口具体为:
创建对象接口具体为:
删除对象接口具体为:
步骤202:中间件通过初始化接口枚举与主机连接的所有USB Key,并根据枚举到的USB Key创建设备信息列表,将设备信息列表中的第一个设备名作为当前设备名;
具体的,在本实施例中,设备信息列表包括:设备名、设备ID、设备类型、设备状态、设备中的应用数量、设备对应的应用列表引用;设备信息列表中的上述信息一一对应;
步骤203:中间件通过当前设备名连接对应的当前智能密钥设备,并判断是否连接成功,是则执行步骤204,否则执行步骤206;
在本实施例中,如中间件通过所有的设备名与对应的设备都连接不成功则会报错;
步骤204:中间件枚举当前连接设备中的所有应用,根据枚举到的应用创建应用列表和该应用信息列表的引用,根据枚举到的应用更新设备信息列表;
具体的,本实施例中的应用列表包括:应用ID、应用名、容器列表引用,密钥对象等数据;更新设备信息列表包括:将设备信息列表中对应的设备状态设置为已连接,将对应的设备中的应用数量更新为枚举到的应用的数量,将应用列表的引用保存到设备信息列表的相应位置;本实施例中的设备与设备信息列表一一对应;
步骤205:中间件枚举当前智能密钥设备的每个应用中的容器对象,并根据枚举得到的容器对象创建容器列表和该容器列表的引用,根据枚举到的容器对象在所述容器列表中建立对应的容器对象引用,将容器列表的引用保存到应用列表的相应位置,执行步骤206;
具体的,在本实施例中,容器列表中包括容器名、与容器对象一一对应的容器对象引用;
步骤206:中间件判断设备信息列表中是否存在未连接的设备状态,是则将未连接的设备状态所对应的设备名作为当前设备名,返回步骤203,否则返回步骤201;
在本实施例中,中间件通过调用初始化接口来枚举各个USB Key,解析USBKey中的应用和数据对象,将各种信息以列表的形式保存和关联起来;初始化完成后,得到三类表:
设备信息列表,表项内容包括:设备名,设备ID,设备类型,设备状态,设备中的应用数量,应用列表的引用;设备信息列表中的每个表项对应1个或0个应用列表的引用;
应用列表,表项包括:应用ID,应用名,容器列表引用等信息;每个应用列表的每个表项对应1个或0个容器列表的引用;
容器列表,表项包括:容器名,容器对象引用、容器对象的属性等信息;
步骤207:中间件根据打开会话接口的slotID在设备信息列表中查找对应的设备,如找到则执行步骤208,否则报错,结束;
其中,SlotID为插槽对应的序号,与设备一一对应,即SlotID与设备信息列表中的设备ID一一对应;
步骤208:中间件根据SlotID创建Session句柄,并将Session句柄返回,返回步骤201;
在本实施例中,Session句柄与设备ID一一对应,返回的Session句柄作为后续函数的参数来使用;
步骤209:中间件根据创建对象接口的hSession在设备信息列表中查找对应的设备ID,如找到则执行步骤210,否则报错,结束;
步骤210:中间件根据找到的设备ID获取智能密钥设备,根据智能密钥设备中的应用列表中第一个应用ID对应的应用作为默认应用;
步骤211:中间件根据创建对象接口的pTemplate创建密钥对象;
具体的,在本实施例中,创建的密钥对象包括:证书对象、公钥对象、私钥对象;本实施例中的私钥为交换密钥中的私钥或者是签名密钥中的私钥;
步骤212:中间件判断默认应用中是否存在容器对象,是则执行步骤213,否则执行步骤214;
具体的,在本实施例中,容器对象中的容器名为(公钥、私钥或者证书)公钥二进制的哈希值;
步骤213:中间件将创建的密钥对象和默认应用中的容器对象进行关联,执行步骤215;
在本实施例中,步骤213具体为:将创建的对象的引用(即公钥、私钥、证书对象的引用)存储到默认应用中的容器对象的属性中;
步骤214:中间件在默认应用中创建容器对象,将创建的对象中的公钥二进制的哈希值作为容器名,根据创建的容器的属性和容器名对象更新容器列表,根据创建的容器对象在容器列表中建立对应的容器对象引用,执行步骤215;
具体的,更新容器列表具体为:将创建的容器对象及相关信息存储到容器列表中;
步骤215:中间件为创建的密钥对象分配密钥对象句柄并对应存储,通过创建对象接口的phObject将密钥对象句柄返回,返回步骤201;
在本实施例中,创建的对象的句柄包括:证书对象句柄、公钥对象句柄、私钥对象句柄;通过对象的句柄可以找到的对应对象;
步骤216:中间件根据删除对象接口的hSession在设备信息列表中查找对应的设备ID,如找到则执行步骤217,否则报错,结束;
步骤217:中间件根据找到的设备ID获取对应的智能密钥设备,根据智能密钥设备中的应用列表中第一个应用ID对应的应用作为默认应用;
步骤218:中间件根据删除对象接口的hObject在默认应用中查找对应的密钥对象,如找到则执行步骤219,否则报错,结束;
步骤219:中间件根据找到的密钥对象获取与之关联的容器对象,判断关联的容器对象是否还有其他关联对象,是则执行步骤220,否则执行步骤221;
步骤220:中间件删除找到的密钥对象,解除找到的密钥对象与容器对象的关联,返回步骤201;
在本实施例中,步骤220具体为:删除容器对象的属性中的对象引用(即公钥、私钥、证书对象的引用);
步骤221:中间件删除找到的密钥对象和与之关联的容器对象,并更新容器列表,返回步骤201;
在本实施例中,一个容器对象中可以保存有私钥对象、公钥对象、证书对象,所以删除其中之一,容器对象不为空则应该保留继续使用;如果私钥对象、公钥对象、证书对象全部删除,容器对象为空则删除该容器对象;
更新容器列表具体为:将容器列表中的已删除容器对象的容器对象引用、容器名和容器对象的属性删除。
实施例三
本发明实施例三提供一种实现智能密钥设备多应用的方法,如图8和图9所示,包括:
步骤300:当中间件的国密接口被调用时,中间件检测被调用接口的类型,如为枚举设备接口则执行步骤301,如为连接设备接口则执行步骤302,如为枚举应用接口则执行步骤303,如为创建应用接口则执行步骤305,如为打开应用接口则执行步骤308,如为删除应用接口则执行步骤311,如为枚举容器接口则执行步骤314,如为创建容器接口则执行步骤316,如为打开容器接口则执行步骤319,如为删除容器接口则执行步骤322,如为生成密钥接口则执行步骤325;如为调用密钥接口则执行步骤329;
在本实施例中,枚举设备接口具体为:
连接设备接口具体为:
枚举应用接口具体为:
创建应用接口具体为:
打开应用接口具体为:
删除应用接口具体为:
枚举容器接口具体为:
创建应用接口具体为:
打开容器接口具体为:
删除容器接口具体为:
生成密钥接口以签名密钥对为例进行说明,具体为:
步骤301:中间件枚举当前与主机连接的所有USB Key,并根据枚举到的USB Key创建设备信息列表,将设备信息列表中的所有设备名通过枚举设备接口的szNameList返回,返回步骤300;
步骤302:中间件根据连接设备接口的szName在设备信息列表中查找对应的设备名,如找到,则创建与该设备名对应的设备句柄,将设备句柄保存到设备列表的相应位置,然后通过连接设备接口的phDev将创建的设备句柄返回,返回步骤300;如未找到则报错,结束;
步骤303:中间件检测枚举应用接口的设备句柄hDev是否有效,如果有效则执行步骤304,否则报错,结束;
在本实施例中,步骤303具体包括:中间件判断枚举应用接口的设备句柄hDev是否与连接设备接口中创建的设备句柄相同,是则枚举应用接口的设备句柄hDev有效,否则枚举应用接口的设备句柄hDev无效;
步骤304:中间件通过设备句柄hDev从设备信息列表中查找对应的设备名,如找到则枚举与该设备名对应的设备中的所有应用,根据枚举到的应用创建应用列表和应用列表的引用,将应用列表的引用保存到设备信息列表的相应位置,并通过枚举应用接口的szAppName将所有的应用名返回,返回步骤300,如未找到则报错,结束;
在本实施例中,中间件还将设备中的应用数量存储到设备信息列表中;
应用列表包括:应用ID和对应的应用名;
步骤305:中间件检测创建应用接口的设备句柄hDev是否有效,如果有效则执行步骤306,否则报错,结束;
步骤306:中间件通过设备句柄hDev从设备信息列表中查找对应的设备名,如找到则执行步骤307,如未找到则报错,结束;
步骤307:中间件根据szAppName判断该设备的应用列表中是否有对应的应用名,是则报错,结束;否则根据szAppName在该设备中创建应用,并根据创建的应用更新该设备的应用列表,返回步骤300;
在本实施例中,根据szAppName在该设备中创建应用,具体为:根据szAppName创建对应的文件,并在该文件下创建容器的权限;
根据创建的应用更新该设备的应用列表具体为:为szAppName创建对应的应用ID并将其与szAppName一一对应的存储到应用列表中;还包括更新设备信息列表中的应用的数量。
步骤308:中间件检测打开应用接口的设备句柄hDev是否有效,如果有效则执行步骤309,否则报错,结束;
步骤309:中间件通过设备句柄hDev从设备信息列表中查找对应的设备名,如找到则执行步骤310,如未找到则报错,结束;
步骤310:中间件根据szAppName判断该设备的应用列表中是否有对应的应用名,是则创建对应的应用句柄,将应用句柄保存到应用列表中的相应位置,并通过打开应用接口的phApplication将应用句柄返回,返回步骤300;否则报错,结束;
步骤311:中间件检测删除应用接口的设备句柄hDev是否有效,如果有效则执行步骤312,否则报错,结束;
步骤312:中间件根据设备句柄hDev从设备信息列表中查找对应的设备名,如找到则执行步骤313,如未找到则报错,结束;
步骤313:中间件根据szAppName判断该设备的应用列表中是否有对应的应用,是则删除对应的应用,删除应用列表中对应的应用ID和应用名,返回步骤300;否则报错,结束;
在本实施例中,步骤313判断为是时还包括:更新设备信息列表,具体为:更新设备信息列表中的应用数量;
步骤314:中间件检测枚举容器接口的应用句柄hApplication是否有效,是则执行步骤315,否则报错,结束;
步骤315:中间件根据应用句柄hApplication在所有的应用列表中查找到对应的应用,如找到则根据该应用中的所有容器名生成容器列表并创建对应的容器列表引用,将容器列表引用保存到应用列表的相应位置,并将所有容器名通过枚举容器接口的szContainerName参数返回,返回步骤300;如未找到则报错,结束;
步骤316:中间件检测创建容器接口的应用句柄hApplication是否有效,是则执行步骤317,否则报错,结束;
步骤317:中间件根据hApplication在所有的应用列表中查找对应的应用,如找到则执行步骤318,如未找到则报错,结束;
步骤318:中间件根据szContainerName在对应的应用中的容器列表中查找是否有对应的容器名,是则报错,结束;否则在对应的应用中创建容器对象并分配对应的容器对象引用,并根据创建的容器对象的属性、容器名和容器对象的引用更新容器列表,返回步骤300;
步骤319:中间件检测打开容器接口的应用句柄hApplication是否有效,是则执行步骤320,否则报错,结束;
在本实施例中,步骤319具体为:中间件判断应用句柄hApplication是否为打开应用接口得到的应用句柄,是则执行步骤320,否则报错;
步骤320:中间件根据hApplication在应用列表中查找对应的应用,如找到则执行步骤321,否则报错,结束;
步骤321:中间件根据szContainerName在对应的应用中的容器列表中查找是否有对应的容器名,是则创建对应的容器句柄,将容器句柄保存到容器句柄的相应位置,并通过打开容器接口的phContainer将容器句柄返回,返回步骤300;否则报错,结束;
步骤322:中间件检测删除容器接口的应用句柄hApplication是否有效,是则执行步骤323,否则报错,结束;
步骤323:中间件根据hApplication在应用列表中查找对应的应用,如找到则执行步骤324,否则报错,结束;
步骤324:中间件根据szContainerName在对应的应用中的容器列表中查找是否有对应的容器名,是则根据容器名删除对应的容器对象,删除容器列表中对应的容器对象的属性、容器名和容器对象引用,返回步骤300;否则报错,结束;
在本实施例中,通过删除容器列表中对应的容器对象的属性、容器名和容器对象引用来更新容器列表。
步骤325:中间判断生成密钥接口的容器句柄hContainer是否正确,是则执行步骤326,否则报错,结束;
步骤326:中间件根据生成密钥接口的hContainer在所有的容器列表中查找对应的容器对象引用,判断与容器对象引用对应的容器对象中的密钥ID是否存在,是则报错,结束,否则执行步骤327;
步骤327:中间件创建密钥对象,并分配密钥ID,将密钥ID和签名属性更新到密钥对象的属性中;
步骤328:中间件根据密钥ID更新容器列表,通过生成密钥接口的pBlob将密钥ID返回,返回步骤300;
步骤329:中间件检测调用密钥接口的应用句柄hApplication是否有效,是则执行步骤330,否则报错,结束;
步骤330:中间件根据hApplication在应用列表中查找对应的应用,如找到则执行步骤331,如未找到则报错,结束;
步骤331:中间件根据szContainerName在对应的应用中的容器列表中查找是否有对应的容器名,是则根据容器名查找对应的容器对象,根据该容器对象中密钥ID的获取对应的密钥对象,调用该密钥对象中的密钥,返回步骤300;否则报错,结束。
实施例四
本发明实施例四提供一种实现智能密钥设备多应用的方法,具体以在CSP中生成密钥,在国密中查询该密钥为例进行详细说明,如图10所示,该方法包括:
步骤400:当中间件检测到接口被调用时,判断接口的类型,如为CSP的创建密钥接口则执行步骤401,如为国密的调用密钥接口则执行步骤405;
步骤401:中间件判断创建密钥接口的第一参数值是否为合法的容器句柄,是则执行步骤402,否则报错,结束;
在本实施例中,打开会话接口的第一参数为hProv;
步骤402:中间件根据创建密钥接口的第一参数值获取容器对象,判断容器对象的属性中的密钥ID是否已经存在,是则报错,否则执行步骤403;
步骤403:中间件根据创建密钥接口的第三参数创建密钥对象,并为该密钥对象分配对应的密钥ID,将此密钥ID和密钥用途更新到密钥对象中,用密钥ID保存到容器对象的属性中;
具体的,在本实施例中,创建密钥接口的第三参数为dwFlags;
步骤404:中间件为创建好的密钥对象分配一个密钥句柄并保存,将此密钥句柄通过创建密钥接口的第四参数返回,返回步骤400;
具体的,在本实施例中,创建密钥接口的第四参数为phKey;
步骤405:中间件检测国密的调用密钥接口的应用句柄hApplication是否有效,是则执行步骤406,否则报错,结束;
步骤406:中间件根据hApplication在应用列表中查找对应的应用,如找到则执行步骤407,否则报错,结束;
步骤407:中间件根据szContainerName在对应的应用中的容器列表中查找是否有对应的容器名,是则根据容器名查找对应的容器对象,根据该容器对象中的密钥ID获取对应的密钥对象,调用该密钥对象中的密钥,返回步骤400;否则报错,结束。
以上所述,仅为本发明较佳的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明公开的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应该以权利要求的保护范围为准。
Claims (27)
1.一种实现智能密钥设备多应用的方法,其特征在于,包括:
步骤S1:当中间件的CSP接口被调用时,所述中间件判断所述CSP接口的类型,如为初始化接口则执行步骤S2;如为创建容器接口则执行步骤S5;如为创建密钥接口则执行步骤S8,如为删除容器接口则执行步骤S12;
步骤S2:所述中间件枚举与主机连接的所有智能密钥设备,并根据枚举到的智能密钥设备创建对应的设备信息列表,所述设备信息列表中包括设备名;
步骤S3:所述中间件枚举与所述主机连接的每个设备中的所有应用,根据每个设备中枚举到的所有应用的应用名和应用ID创建应用列表和所述应用列表的引用,并将所述应用列表的引用保存到所述设备信息列表的相应位置;所述设备信息列表中每个设备名对应一个应用列表的引用;
步骤S4:所述中间件枚举与所述主机连接的每个设备中的每个应用中的容器对象,根据枚举到的每个设备中的每个应用中的容器对象的属性和容器名创建对应的容器列表和所述容器列表的引用,根据枚举到的容器对象在所述容器列表中建立对应的容器对象引用,将所述容器列表的引用保存到应用列表的相应位置;返回步骤S1;
步骤S5:所述中间件获取设备名和容器名,根据所述设备名在所述设备信息列表中定位当前智能密钥设备;
步骤S6:所述中间件判断定位的当前智能密钥设备中的所有容器列表中是否存在所述容器名,是则报错,结束,否则执行步骤S7;
步骤S7:所述中间件根据所述容器名在当前智能密钥设备的当前应用中创建容器对象,为所述创建的容器对象分配容器句柄和容器对象引用,将所述容器句柄、所述容器对象引用和所述容器对象的属性保存在当前应用中的容器列表的相应位置,返回所述容器句柄,返回步骤S1;
步骤S8:所述中间件判断接收到的容器句柄是否合法,是则执行步骤S9,否则报错;
步骤S9:所述中间件根据所述容器句柄定位容器对象,判断所述定位的容器对象的属性中是否存在密钥ID,是则报错,结束,否则执行步骤S10;
步骤S10:所述中间件创建密钥对象,为所述密钥对象分配对应的密钥ID,将所述密钥ID和密钥用途存储到所述密钥对象中,将所述密钥ID保存到所述定位的容器对象的属性中;
步骤S11:所述中间件为所述密钥对象分配一个密钥句柄并保存,将所述密钥句柄返回,返回步骤S1;
步骤S12:所述中间件获取设备名和容器名,根据所述设备名在所述设备信息列表中定位当前智能密钥设备;
步骤S13:所述中间件判断定位的当前智能密钥设备中的所有容器列表中是否存在所述容器名,是则执行步骤S14,否则报错,结束;
步骤S14:所述中间判断判断定位的当前智能密钥设备中的所有容器列表中是否只有1个所述容器名,是则执行步骤S16,否则执行步骤S15;
步骤S15:所述中间件输出选择容器对话框,等待并接收用户选择的当前智能密钥设备下的当前应用中的容器名,执行步骤S16;
步骤S16:所述中间件根据所述容器名删除对应的容器对象,更新所述容器列表,返回步骤S1。
2.如权利要求1所述的方法,其特征在于,所述步骤S3与步骤S4之间包括:
所述中间件依次通过设备信息列表中的每个设备名连接对应的智能密钥设备,并判断是否连接成功,如有至少一个连接成功则执行步骤S4,否则报错。
3.如权利要求1所述的方法,其特征在于,所述步骤S5包括:
步骤S5-1:所述中间件判断容器名缓存区是否为空,是则执行步骤S5-2,否则执行步骤S5-3;
步骤S5-2:所述中间件采用GUID的算法,根据以太网卡地址、纳秒级时间、芯片ID生成一个容器名,执行步骤S5-7;
步骤S5-3:所述中间件解析所述容器名缓存区中的数据,判断解析结果是否符合预设格式,是则执行步骤S5-4,否则执行步骤S5-5;
步骤S5-4:所述中间件从解析结果中获取设备名和容器名,执行步骤S5-6;
步骤S5-5:所述中间件获取所述容器名缓存区中的数据并将其作为容器名,执行步骤S5-6;
步骤S5-6:所述中间件判断设备名是否为空,是则执行步骤S5-7,否则将与设备名对应的设备作为当前智能密钥设备,执行步骤S6;
步骤S5-7:所述中间件输出选择框,等待并接收用户选择的设备列表中的设备名;
那种S5-8:所述中间件将与用户选择的设备名所对应的设备作为当前智能密钥设备,执行步骤S6。
4.如权利要求3所述的方法,其特征在于,所述步骤S6包括:
步骤S6-1:所述中间件从设备信息列表中获取当前智能密钥设备的应用列表;
步骤S6-2:中间件根据当前智能密钥设备的应用列表中的第一个容器列表的引用定位对应的容器列表作为当前容器列表;
步骤S6-3:所述中间件判断获取的容器名是否与当前容器列表中的容器名匹配,是则将所述容器列表的引用所属的应用作为当前应用,执行步骤S7,否则执行步骤S6-4;
步骤S6-4:所述中间件判断当前智能密钥设备的应用列表中是否还有未处理的容器列表的引用,是则执行步骤S6-5,否则报错,结束;
步骤S6-5:中间件根据当前智能密钥设备的应用列表中的下一个容器列表的引用定位对应的容器列表作为当前容器列表,返回步骤S6-3。
5.如权利要求1所述的方法,其特征在于,
如所述中间件的CSP检测到查找容器接口被调用时则执行步骤S17;
步骤S17:所述中间件获取设备名和容器名,根据所述设备名在所述设备信息列表中定位当前智能密钥设备;
步骤S18:所述中间件判断定位的当前智能密钥设备中的所有容器列表中是否存在所述容器名,是则执行步骤S19,否则报错,结束;
步骤S19:所述中间判断定位的当前智能密钥设备中的所有容器列表中是否只有1个所述容器名,是则执行步骤S21,否则执行步骤S20;
步骤S20:所述中间件输出选择容器对话框,等待并接收用户在当前智能密钥设备下选择的当前应用和所述当前应用中的容器名,执行步骤S21;
步骤S21:所述中间件根据所述容器名在所述容器列表中获取对应的容器对象引用,为与所述容器对象引用对应的容器对象分配容器句柄,并将所述容器句柄返回,返回步骤S1。
6.如权利要求5所述的方法,其特征在于,所述步骤S17包括:
步骤S17-1:所述中间件判断容器名缓存区是否为空,是则获取设备信息列表中的第一个应用列表的引用对应的应用列表中的第一个容器列表引用,为所述容器列表的引用对应的容器列表中第一个容器对象引用对应容器对象分配容器句柄,并将所述容器句柄返回,返回步骤S1;否则执行步骤S17-2;
步骤S17-2:所述中间件解析所述容器名缓存区中的数据,判断解析结果是否符合预设格式,是则执行步骤S17-3,否则执行步骤S17-4;
步骤S17-3:所述中间件从解析结果中提取设备名和容器名,执行步骤S17-5;
步骤S17-4:所述中间件将所述容器名缓存区中的数据作为容器名,执行步骤S17-5;
步骤S17-5:所述中间件判断设备名是否为空,是则执行步骤S17-6,否则执行步骤S17-7;
步骤S17-6:所述中间件获取设备信息列表中的所有设备引用,将第一个设备引用对应的设备作为当前智能密钥设备,执行步骤S18;
步骤S17-7:所述中间件将与设备名对应的设备作为当前智能密钥设备,执行步骤S18。
7.如权利要求6所述的方法,其特征在于,所述步骤S18包括:
步骤S18-1:所述中间件从当前智能密钥设备的应用列表中获取第一个应用ID作为当前应用ID;
步骤S18-2:所述中间件将与当前应用ID对应的应用中的容器列表中的第一个容器名作为当前容器名;
步骤S18-3:所述中间件判断所述获取的容器名是否与当前容器名一致,是则执行步骤S18-4,否则执行步骤S18-5;
步骤S18-4:所述中间件更新查找计数值,并保存所述获取的容器名所属的设备名和应用名,执行步骤S18-5;
步骤S18-5:所述中间件判断当前应用列表中是否还有未处理的容器名,是则执行步骤S18-6,否则执行步骤S18-7;
步骤S18-6:所述中间件从应用列表中获取下一个容器名作为当前容器名,返回步骤S18-3;
步骤S18-7:所述中间件判断当前智能密钥设备的设备信息列表中是否还有未处理的应用ID,是则将下一个应用ID作为当前应用ID,返回步骤S18-2,否则执行步骤S19。
8.如权利要求1所述的方法,其特征在于,如所述中间件的CSP检测到调用密钥接口被调用时则执行步骤S22,
步骤S22:所述中间件判断接收到的容器句柄是否合法,是则执行步骤S23,否则报错;
步骤S23:所述中间件根据所述容器句柄定位容器对象,判断所述定位的容器对象的属性中是否存在密钥ID,是则执行步骤S24,否则报错,结束;
步骤S24:所中间件根据所述密钥ID定位密钥对象,根据所述密钥对象中的密钥引用获取对应的密钥,调用所述获取的密钥,返回步骤S1。
9.如权利要求8所述的方法,其特征在于,所述步骤S12包括:
步骤S12-1:所述中间件判断容器名缓存区是否为空,是则获取设备信息列表中的第一个应用列表引用对应的应用列表中的第一个容器列表引用,根据所述容器列表引用对应的容器列表中的第一个容器对象引用,将对应的容器列表中对应的容器名、容器引用和对应的容器对象的属性删除,返回步骤S1;否则执行步骤S12-2;
步骤S12-2:所述中间件解析所述容器名缓存区中的数据,判断解析结果是否符合预设格式,是则执行步骤S12-3,否则执行步骤S12-4;
步骤S12-3:所述中间件从解析结果中提取设备名和容器名,执行步骤S12-5;
步骤S12-4:所述中间件将所述容器名缓存区中的数据作为容器名,执行步骤S12-5;
步骤S12-5:所述中间件判断设备名是否为空,是则执行步骤S12-6,否则执行步骤S12-7;
步骤S12-6:所述中间件获取设备信息列表中的所有设备引用,将第一个设备引用对应的设备当前智能密钥设备,执行步骤S13;
步骤S12-7:所述中间件将与设备名对应的设备作为当前智能密钥设备,执行步骤S13。
10.如权利要求9所述的方法,其特征在于,所述步骤S13包括:
步骤S13-1:所述中间件从当前智能密钥设备的设备信息列表中获取第一个应用ID作为当前应用ID;
步骤S13-2:所述中间件将与当前应用ID对应的应用中的容器列表中的第一个容器名作为当前容器名;
步骤S13-3:所述中间件判断所述获取的容器名是否与当前容器名一致,是则执行步骤S13-4,否则执行步骤S13-5;
步骤S13-4:所述中间件更新查找计数值,并保存容器名所属的设备名,执行步骤S13-5;
步骤S13-5:所述中间件判断当前应用列表中是否还有未处理的容器名,是则执行步骤S13-6,否则执行步骤S13-7;
步骤S13-6:所述中间件从应用列表中获取下一个容器名作为当前容器名,返回步骤S13-3;
步骤S13-7:所述中间件判断当前智能密钥设备的设备信息列表中是否还有未处理的应用ID,是则将下一个应用ID作为当前应用ID,返回步骤S13-2,否则执行步骤S14。
11.如权利要求1所述的方法,其特征在于,所述中间件判断接收到的容器句柄是否合法,具体为:所述中间件判断接收到的容器句柄与保存的容器句柄是否一致,是则接收到的容器句柄合法,否则接收到的容器句柄不合法。
12.一种实现智能密钥设备多应用的方法,其特征在于,包括:
步骤L1:当中间件的PKCS#11接口被调用时,中间件判断接口的类型,如为初始化接口则执行步骤L2,如为打开会话接口则执行步骤L5,如为创建对象接口则执行步骤L6,如为删除对象接口则执行步骤L12;
步骤L2:所述中间件枚举与主机连接的所有智能密钥设备,并根据枚举到的每个智能密钥设备创建对应的设备信息列表,所述设备信息列表中包括设备名和设备ID;
步骤L3:所述中间件枚举与所述主机连接的每个设备中的所有应用,根据每个设备中的枚举到的所有应用的应用名和应用ID创建对应的应用列表和所述应用列表的引用,并将所述应用列表的引用保存到所述设备信息列表的相应位置;所述设备信息列表中每个设备名对应一个应用列表的引用;
步骤L4:所述中间件枚举与所述主机连接的每个设备中的每个应用中的容器对象,根据枚举到的每个设备中的每个应用中的容器对象的属性和容器名创建对应的容器列表和所述容器列表的引用,根据枚举到的容器对象在所述容器列表中建立对应的容器对象引用,将所述容器列表的引用保存到应用列表的相应位置;返回步骤L1;步骤L5:所述中间件根据接收到的卡槽序号在设备信息列表中查找对应的设备,如找到则所述中间件根据所述卡槽序号创建对应的会话句柄,并将所述会话句柄返回,返回步骤L1;否则报错,结束;
步骤L6:所述中间件接收到的会话句柄在设备信息列表中查找对应的设备ID,如找到则执行步骤L7,否则报错,结束;
步骤L7:所述中间件根据所述设备ID获取对应的智能密钥设备,根据所述智能密钥设备中的应用列表中第一个应用ID对应的应用作为默认应用,根据接收到的密钥模板创建密钥对象;
步骤L8:所述中间件判断所述默认应用中是否存在容器对象,是则执行步骤L9,否则执行步骤L10;
步骤L9:所述中间件将所述密钥对象和所述默认应用中的容器对象进行关联,执行步骤L11;
步骤L10:所述中间件在所述默认应用中创建容器对象,将所述密钥对象中的公钥二进制的哈希值作为容器名,根据所述创建的容器对象的属性和容器名更新容器列表,根据创建的容器对象在所述容器列表中建立对应的容器对象引用,执行步骤L11;
步骤L11:所述中间件为所述密钥对象分配密钥对象句柄并对应存储,并将所述密钥对象句柄返回,返回步骤L1;
步骤L12:所述中间件根据接收到的会话句柄在设备信息列表中查找对应的设备ID,如找到则执行步骤L13,否则报错,结束;
步骤L13:所述中间件根据所述设备ID获取对应的智能密钥设备,根据所述智能密钥设备中的应用列表中第一个应用ID对应的应用作为默认应用;
步骤L14:所述中间件根据接收到的密钥模板在所述默认应用中查找对应的密钥对象,如找到则执行步骤L15,否则报错,结束;
步骤L15:所述中间件根据所述密钥对象获取与之关联的容器对象,判断所述容器对象是否还有其他关联对象,是则执行步骤L16,否则执行步骤L17;
步骤L16:所述中间件删除所述密钥对象,解除所述密钥对象与所述容器对象的关联,返回步骤L1;
步骤L17:所述中间件删除所述密钥对象和与之关联的所述容器对象,并更新所述容器列表,返回步骤L1。
13.如权利要求12所述的方法,其特征在于,所述步骤L3与步骤L4之间包括:
所述中间件通过设备信息列表中的每个设备名连接对应的智能密钥设备,并判断是否连接成功,如有至少一个连接成功则执行步骤L4,否则报错。
14.一种实现智能密钥设备多应用的方法,其特征在于,包括:
步骤P1:当中间件的国密接口被调用时,所述中间件判断所述国密接口的类型,如为枚举设备接口则执行步骤P2,如为枚举应用接口则执行步骤P3,如创建应用接口则执行步骤P4,如为删除应用接口则执行步骤P5,如为枚举容器接口则执行步骤P6,如为创建容器接口则执行步骤P7,如为删除容器接口则执行步骤P9;
步骤P2:所述中间件枚举与主机连接的所有智能密钥设备,并根据枚举到的每个智能密钥设备创建对应的设备信息列表,所述设备信息列表中包括设备名和设备ID,将所有智能密钥设备的设备名返回,返回步骤P1;
步骤P3:所述中间件根据接收到的设备句柄枚举对应设备中的所有应用,根据枚举到的应用创建对应设备的应用列表和所述应用列表的引用,将所述应用列表的引用保存到设备信息列表的相应位置,将所述应用列表中的应用名返回,返回步骤P1;所述应用列表包括:应用ID和应用名;
步骤P4:所述中间件根据接收到的设备句柄获取对应设备的应用列表,判断接收到的应用名与所述应用列表中的应用名是否匹配,是则报错,结束;否则根据所述应用名在与所述设备名对应的智能密钥设备中创建应用,并根据所述创建的应用更新对应设备的应用列表,返回步骤P1;
步骤P5:所述中间件根据接收到的设备句柄获取对应设备的应用列表,判断所述删除应用接口的应用名是否有所述应用列表中的应用名匹配,是则删除与所述应用名对应的应用,删除应用列表中的对应的应用ID和应用名,返回步骤P1;否则报错,结束;
步骤P6:所述中间件根据接收到的应用句柄在所有的应用列表中查找对应的应用,如找到则根据对应应用中的所有容器名生成容器列表并创建对应的容器列表引用,将所述容器列表引用保存到应用列表的相应位置,并将所有容器名返回,返回步骤P1;如未找到则报错,结束;
步骤P7:所述中间件根据接收到的应用句柄在所有的应用列表中查找对应的应用,如找到则执行步骤P8,如未找到则报错,结束;
步骤P8:所述中间件根据接收到的容器名在对应的应用中的容器列表中查找是否有对应的容器名,是则报错,结束;否则在所述对应的应用中创建容器对象并分配对应的容器对象引用,并根据所述创建的容器对象的属性、容器名和容器对象引用更新容器列表,返回步骤P1;
步骤P9:所述中间件根据接收到的应用句柄在所有的应用列表中查找对应的应用名,如找到则执行步骤P10,如未找到则报错,结束;
步骤P10:所述中间件根据接收到的容器名在对应的应用中的容器列表中查找是否有对应的容器名,是则根据所述容器名删除对应的容器对象,更新所述容器列表,返回步骤P1;否则报错,结束。
15.如权利要求14所述的方法,其特征在于,如所述中间件的国密检测到生成密钥接口被调用则执行步骤P11;
步骤P11:所述中间件根据接收到的容器句柄在所有的容器列表中查找对应的容器对象引用,判断与所述容器对象引用对应的容器对象中的密钥ID是否存在,是则报错,结束,否则执行步骤P12;
步骤P12:所述中间件创建密钥对象,并分配密钥ID,将所述密钥ID和密钥属性存储到所述密钥对象属性中;
步骤P13:所述中间件根据所述密钥ID更新所述容器列表,将所述密钥ID返回,返回步骤P1。
16.如权利要求15所述的方法,其特征在于,所述步骤P9之前包括:所述中间判断所述容器句柄是否正确,是则执行步骤P11,否则报错,结束。
17.如权利要求14所述的方法,其特征在于,如所述中间件的国密检测到调用密钥接口被调用则执行步骤P14;
步骤P14:所述中间件根据接收到的应用句柄在应用列表中查找对应的应用,如找到则执行步骤P15,否则报错,结束;
步骤P15:所述中间件判断接收到的容器名是否与对应的应用中的容器列表中的容器名匹配,是则根据所述容器名查找对应的容器对象,根据所述容器对象中的密钥ID获取对应的密钥对象,调用所述密钥对象中的密钥,返回步骤P1;否则报错,结束。
18.如权利要求17所述的方法,其特征在于,
所述步骤P14之前包括:所述中间件检测所述应用句柄是否有效,是则执行步骤P12,否则报错,结束。
19.如权利要求14所述的方法,其特征在于,
如所述中间件的国密检测到连接设备接口被调用时则执行步骤P16;
步骤P16:所述中间件判断接收到的设备名是否与设备信息列表中的设备名匹配,是则创建与所述设备名对应的设备句柄,将所述设备句柄保存到设备列表的相应位置然后将所述设备句柄返回,返回步骤P1;如未找到则报错,结束。
20.如权利要求14所述的方法,其特征在于,
如所述中间件的国密检测到打开应用接口被调用时则执行步骤P17;
步骤P17:所述中间件通过接收到的设备句柄从设备信息列表中查找对应的设备名,如找到则执行步骤P18,如未找到则报错,结束;
步骤P18:所述中间件判断接收到的应用名是否与所述设备名对应设备的应用列表中的应用名匹配,是则创建对应的应用句柄,将所述应用句柄保存到所述应用列表中的相应位置并将所述应用句柄返回,返回步骤P1;否则报错,结束。
21.如权利要求20所述的方法,其特征在于,
在所述步骤P17之前包括:所述中间件判断所述设备句柄是否有效,如果有效则执行步骤P17,否则报错,结束。
22.如权利要求14所述的方法,其特征在于,
如所述中间件的国密检测到打开容器接口被调用时则执行步骤P19;
步骤P19:所述中间件根据接收到的应用句柄在应用列表中查找对应的应用,如找到则执行步骤P20,否则报错,结束;
步骤P20:所述中间件根据接收到的容器名在对应的应用中的容器列表中查找是否有对应的容器名,是则创建对应的容器句柄,将所述容器句柄保存到所述容器句柄的相应位置并将所述容器句柄返回,返回步骤P1;否则报错,结束。
23.如权利要求22所述的方法,其特征在于,
在所述步骤P19之前包括:所述中间件检测所述应用句柄是否有效,是则执行步骤P19,否则报错,结束。
24.如权利要求14所述的方法,其特征在于,
所述步骤P3之前包括:
步骤V1:所述中间件检测所述设备句柄是否有效,是则执行步骤V2,否则报错,结束;
步骤V2:所述中间件通过所述设备句柄从设备信息列表中查找对应的设备名,如找到则执行步骤P3,如未找到则报错,结束。
25.如权利要求14所述的方法,其特征在于,
所述步骤P4之前包括:
步骤Y1:所述中间件检测所述设备句柄是否有效,是则执行步骤Y2,否则报错,结束;
步骤Y2:所述中间件通过所述设备句柄从设备信息列表中查找对应的设备名,如找到则执行步骤P4,如未找到则报错,结束。
26.如权利要求14所述的方法,其特征在于,
所述步骤P5之前包括:
步骤W1:所述中间件检测所述设备句柄是否有效,是则执行步骤W2,否则报错,结束;
步骤W2:所述中间件通过所述设备句柄从设备信息列表中查找对应的设备名,如找到则执行步骤P5,如未找到则报错,结束。
27.如权利要求14所述的方法,其特征在于,
所述步骤P6之前包括:所述中间件检测所述应用句柄是否有效,是则执行步骤P6,否则报错,结束;
所述步骤P7之前包括:所述中间件检测所述应用句柄是否有效,是则执行步骤P7,否则报错,结束;
所述步骤P9之前包括:所述中间件检测所述应用句柄是否有效,是则执行步骤P9,否则报错,结束。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410636381.2A CN104468116B (zh) | 2014-11-06 | 2014-11-06 | 一种实现智能密钥设备多应用的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410636381.2A CN104468116B (zh) | 2014-11-06 | 2014-11-06 | 一种实现智能密钥设备多应用的方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104468116A true CN104468116A (zh) | 2015-03-25 |
CN104468116B CN104468116B (zh) | 2017-10-31 |
Family
ID=52913546
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201410636381.2A Active CN104468116B (zh) | 2014-11-06 | 2014-11-06 | 一种实现智能密钥设备多应用的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN104468116B (zh) |
Cited By (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104932389A (zh) * | 2015-05-21 | 2015-09-23 | 广州市纬志电子科技有限公司 | 一种中控主机的防伪方法及装置 |
CN105678152A (zh) * | 2016-01-19 | 2016-06-15 | 飞天诚信科技股份有限公司 | 一种与智能密钥设备通讯的方法及装置 |
CN106095327A (zh) * | 2015-04-28 | 2016-11-09 | 株式会社东芝 | 存储装置、控制器及控制方法 |
CN108880792A (zh) * | 2018-05-31 | 2018-11-23 | 北京智芯微电子科技有限公司 | 国密智能密码钥匙应用接口实现方法及装置 |
CN109831304A (zh) * | 2018-12-26 | 2019-05-31 | 北京握奇智能科技有限公司 | 一种身份认证设备的多应用方法及系统 |
CN110502311A (zh) * | 2018-05-18 | 2019-11-26 | 杭州海康威视数字技术股份有限公司 | 容器调度方法、装置、电子设备及可读存储介质 |
CN111124956A (zh) * | 2019-11-22 | 2020-05-08 | 海光信息技术有限公司 | 一种容器保护方法、处理器、操作系统及计算机设备 |
CN112583580A (zh) * | 2019-09-27 | 2021-03-30 | 科大国盾量子技术股份有限公司 | 一种量子密钥的处理方法及相关设备 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101447010A (zh) * | 2008-12-30 | 2009-06-03 | 北京飞天诚信科技有限公司 | 登录系统及登录方法 |
CN103152344A (zh) * | 2013-03-06 | 2013-06-12 | 广东数字证书认证中心有限公司 | 基于数字证书的密码学操作方法及装置 |
CN103368746A (zh) * | 2013-07-24 | 2013-10-23 | 飞天诚信科技股份有限公司 | 一种签名方法 |
-
2014
- 2014-11-06 CN CN201410636381.2A patent/CN104468116B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101447010A (zh) * | 2008-12-30 | 2009-06-03 | 北京飞天诚信科技有限公司 | 登录系统及登录方法 |
CN103152344A (zh) * | 2013-03-06 | 2013-06-12 | 广东数字证书认证中心有限公司 | 基于数字证书的密码学操作方法及装置 |
CN103368746A (zh) * | 2013-07-24 | 2013-10-23 | 飞天诚信科技股份有限公司 | 一种签名方法 |
Non-Patent Citations (1)
Title |
---|
王洪征: "基于文件过滤驱动的加密系统设计与实现", 《中国优秀硕士学位论文全文数据库》 * |
Cited By (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106095327A (zh) * | 2015-04-28 | 2016-11-09 | 株式会社东芝 | 存储装置、控制器及控制方法 |
CN104932389A (zh) * | 2015-05-21 | 2015-09-23 | 广州市纬志电子科技有限公司 | 一种中控主机的防伪方法及装置 |
CN105678152A (zh) * | 2016-01-19 | 2016-06-15 | 飞天诚信科技股份有限公司 | 一种与智能密钥设备通讯的方法及装置 |
CN105678152B (zh) * | 2016-01-19 | 2018-06-05 | 飞天诚信科技股份有限公司 | 一种与智能密钥设备通讯的方法及装置 |
CN110502311A (zh) * | 2018-05-18 | 2019-11-26 | 杭州海康威视数字技术股份有限公司 | 容器调度方法、装置、电子设备及可读存储介质 |
CN108880792A (zh) * | 2018-05-31 | 2018-11-23 | 北京智芯微电子科技有限公司 | 国密智能密码钥匙应用接口实现方法及装置 |
CN109831304A (zh) * | 2018-12-26 | 2019-05-31 | 北京握奇智能科技有限公司 | 一种身份认证设备的多应用方法及系统 |
CN109831304B (zh) * | 2018-12-26 | 2024-04-02 | 北京握奇智能科技有限公司 | 一种身份认证设备的多应用方法及系统 |
CN112583580A (zh) * | 2019-09-27 | 2021-03-30 | 科大国盾量子技术股份有限公司 | 一种量子密钥的处理方法及相关设备 |
CN112583580B (zh) * | 2019-09-27 | 2023-05-02 | 科大国盾量子技术股份有限公司 | 一种量子密钥的处理方法及相关设备 |
CN111124956A (zh) * | 2019-11-22 | 2020-05-08 | 海光信息技术有限公司 | 一种容器保护方法、处理器、操作系统及计算机设备 |
CN111124956B (zh) * | 2019-11-22 | 2023-03-07 | 海光信息技术股份有限公司 | 一种容器保护方法、处理器、操作系统及计算机设备 |
Also Published As
Publication number | Publication date |
---|---|
CN104468116B (zh) | 2017-10-31 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN104468116A (zh) | 一种实现智能密钥设备多应用的方法 | |
EP2988470B1 (en) | Automatic purposed-application creation | |
AU2016201055B2 (en) | Systems, methods, and computer program products for interfacing multiple service provider trusted service managers and secure elements | |
CN100464313C (zh) | 一种移动存储装置及存取移动存储装置中加密数据的方法 | |
EP2442601B1 (en) | Method and system for automatically logging in client | |
US10013841B2 (en) | Method for personalising an electronic device, associated data processing method and device | |
CN104021018A (zh) | 终端、生成升级包的方法及识别升级包的方法 | |
CN108199834B (zh) | 一种智能密钥设备工作的方法及装置 | |
US10803373B2 (en) | Information processing apparatus and information processing method | |
CN106020868A (zh) | 一种智能卡固件更新方法及系统 | |
CN107948170A (zh) | 接口请求参数加密方法、装置、设备及可读存储介质 | |
CN110287208A (zh) | 数据库字段加密的方法和装置、存储介质 | |
CN104360869A (zh) | 一种防止底层驱动拦截消息的方法 | |
CN109104717A (zh) | 蓝牙配对方法、蓝牙设备及蓝牙模块 | |
CN108874429A (zh) | 一种Android系统一体化自动打包方法 | |
CN104639558A (zh) | 一种数据抽取方法和系统以及云平台 | |
CN107315610B (zh) | 实现密码功能的方法、装置及计算机可读存储介质 | |
CN104571962B (zh) | 一种适合批量生产的usbkey设备内固件的实现方法 | |
CN108667647B (zh) | 一种设备参数的设置方法、设备及服务器 | |
CN107220570B (zh) | 一种基于sim卡的stk写卡系统及方法 | |
CN104992134B (zh) | 标签快速处理方法 | |
CN103237359B (zh) | 一种连接终端的方法及装置 | |
CN112306466A (zh) | Aar包生成方法、电子设备及存储介质 | |
JP6763096B1 (ja) | システム | |
US20090111523A1 (en) | Information processing apparatus and information processing method |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |