一种支持多逻辑通道通信的方法和设备.pdf

上传人:大师****2 文档编号:973509 上传时间:2018-03-22 格式:PDF 页数:42 大小:2.17MB
返回 下载 相关 举报
摘要
申请专利号:

CN200910092787.8

申请日:

2009.09.17

公开号:

CN101650700A

公开日:

2010.02.17

当前法律状态:

授权

有效性:

有权

法律详情:

授权|||实质审查的生效IPC(主分类):G06F 13/38申请日:20090917|||公开

IPC分类号:

G06F13/38; G06F13/42; G06F13/24

主分类号:

G06F13/38

申请人:

北京飞天诚信科技有限公司

发明人:

陆 舟; 于华章

地址:

100191北京市海淀区学院路40号研7A楼5层

优先权:

专利代理机构:

北京三高永信知识产权代理有限责任公司

代理人:

何文彬

PDF下载: PDF下载
内容摘要

本发明公开了一种支持多逻辑通道通信的方法和设备,属于通信领域。所述方法包括:USB key上电;所述USB key响应USB主机的设备枚举;所述USB key的片式操作系统向USB主机声明至少配置一对块端点和一对控制端点;所述USB Key的片式操作系统判断发生中断的端点类型,根据判断出的端点类型接收APDU,并处理所述接收到的APDU。所述设备包括:上电模块、响应枚举模块、配置模块、判断处理模块。本发明通过同时启用USB key的不同类型端点来传输数据,实现了支持多逻辑通道通信,从而使得片式

权利要求书

1: 一种支持多逻辑通道通信的方法,其特征在于,所述方法包括: USB key上电; 所述USB key响应USB主机的设备枚举; 所述USB key的片式操作系统向USB主机声明至少配置一对块端点和一对 控制端点; 所述USB Key的片式操作系统判断发生中断的端点类型,根据判断出的端 点类型接收APDU,并处理所述接收到的APDU。
2: 如权利要求1所述的方法,其特征在于,所述USB key的片式操作系统 向主机声明至少配置一对块端点和一对控制端点的步骤之后,所述判断发生中 断的端点类型之前,还包括创建与所述声明的端点类型相匹配的当前应用环境 的步骤,具体为:所述片式操作系统设置端点和逻辑通道间的对应关系,并配 置各端点对应的当前应用环境。
3: 如权利要求2所述的方法,其特征在于,所述片式操作系统设置端点和 逻辑通道间的对应关系具体为将端点和逻辑通道建立一一映射关系。
4: 如权利要求2所述的方法,其特征在于,所述片式操作系统配置各端点 的当前应用环境具体为将各个端点对应的当前应用环境的所有内容初始化。
5: 如权利要求2所述的方法,其特征在于,所述USB Key的片式操作系统 根据所述判断出的端点类型处理所述APDU数据之前还包括返回逻辑通道号的 步骤。
6: 如权利要求2所述的方法,其特征在于,所述当前应用环境包括当前目 录、当前文件、当前安全状态、当前逻辑通道的标志位和当前安全环境,所述 当前文件具有共享属性。
7: 如权利要求6所述的方法,其特征在于,当所述共享属性为允许时,所 述USB主机通过块端点和控制端点对所述当前文件进行访问; 当所述共享属性为不允许时,所述USB主机通过块端点或控制端点对所述 当前文件进行访问。
8: 如权利要求6所述的方法,其特征在于,所述当前安全环境包括加解密 算法和密钥索引。
9: 如权利要求1所述的方法,其特征在于,所述USB key响应USB主机 的设备枚举包括: 所述USB key接受所述USB主机的复位操作; 所述USB key向所述USB主机发送设备描述符; 所述USB key接受所述USB主机设置的设备地址; 所述USB key向所述USB主机发送完整的设备描述符; 所述USB key向所述USB主机发送配置描述符; 所述USB key向所述USB主机发送配置集合,所述配置集合包括配置描述 符,接口描述符,端点描述符。
10: 如权利要求5所述的方法,其特征在于,所述USB Key的片式操作系 统判断发生中断的端点类型,根据所述判断出的端点类型接收APDU,并返回 相应的逻辑通道号之前包括: 所述USB key的片式操作系统调用APDU接收函数; 所述USB key的片式操作系统设置逻辑通道号变量; 所述USB key的片式操作系统初始化所述逻辑通道号变量为未接收到 APDU数据; 所述USB key的片式操作系统打开USB中断,查询是否有USB中断。
11: 如权利要求5所述的方法,其特征在于,所述USB Key的片式操作系 统判断发生中断的端点类型,根据所述判断出的端点类型接收APDU,并返回 相应的逻辑通道号包括: 当有USB中断时,判断发生所述USB中断的端点类型; 如果发生所述USB中断的端点类型是控制端点,接收来自所述控制端点的 APDU数据,并设置所述逻辑通道号变量为所述控制端点的逻辑通道号; 如果发生所述USB中断的端点类型是块端点,接收来自所述块端点的 APDU数据,并设置所述逻辑通道号变量为所述块端点的逻辑通道号。
12: 如权利要求5所述的方法,其特征在于,所述USB Key的片式操作系 统判断发生中断的端点类型,根据所述判断出的端点类型接收APDU,并设置 相应的逻辑通道号之后包括: 所述USB key的片式操作系统关闭USB中断,并将所述逻辑通道变量的值 返回给上层调用函数。
13: 如权利要求1所述的方法,其特征在于,所述片式操作系统根据所述 判断出的端点类型处理所述APDU数据的步骤之前还包括:所述片式操作系统 返回发生中断的端点号,并为所述发生中断的端点配置当前应用环境。
14: 如权利要求13所述的方法,其特征在于,所述片式操作系统判断发生 中断的端点类型,根据所述判断出的端点类型接收APDU,并返回相应的端点 号之前包括: 所述USB key的片式操作系统调用APDU接收函数; 所述USB key的片式操作系统设置端点号变量; 所述USB key的片式操作系统初始化所述端点号变量为未接收到APDU数 据; 所述USB key的片式操作系统打开USB中断,查询是否有USB中断。
15: 如权利要求13所述的方法,其特征在于,所述片式操作系统为所述发 生中断的端点配置当前应用环境具体为将所述当前应用环境的所有内容初始 化。
16: 如权利要求13所述的方法,其特征在于,所述片式操作系统判断发生 中断的端点类型,根据所述判断出的端点类型接收APDU,并返回相应的逻辑 通道号包括: 当有USB中断时,判断发生所述USB中断的端点类型; 如果发生所述USB中断的端点类型是控制端点,接收来自所述控制端点的 APDU数据,并设置所述端点号变量为所述控制端点的端点号; 如果发生所述USB中断的端点类型是块端点,接收来自所述块端点的 APDU数据,并设置所述端点号变量为所述块端点的端点号。
17: 如权利要求13所述的方法,其特征在于,所述片式操作系统判断发生 中断的端点类型,根据所述判断出的端点类型接收APDU,并设置相应的端点 号之后包括: 所述USB key的片式操作系统关闭USB中断,并将所述端点号变量的值返 回给上层调用函数。
18: 如权利要求5或13所述的方法,其特征在于,所述USB Key的片式操 作系统判断发生中断的端点类型,根据所述判断出的端点类型接收APDU,并 返回相应的逻辑通道号或端点号之前包括: 所述USB key的片式操作系统设置APDU处理状态标志位; 所述USB key的片式操作系统设置发生中断的端点状态标志位; 所述USB key的片式操作系统调用APDU接收函数、设置逻辑通道号或端 点号变量; 所述USB key的片式操作系统初始化所述APDU处理状态标志位、所述发 生中断的端点状态标志位、所述逻辑通道号变量或端点号变量; 所述USB key的片式操作系统打开USB中断,查询是否有USB中断。
19: 如权利要求18所述的方法,其特征在于,所述USB key的片式操作系 统初始化所述APDU处理状态标志位、所述发生中断的端点状态标志位、和所 述逻辑通道号变量或端点号变量包括: 所述USB key的片式操作系统初始化所述APDU处理状态标志位为准备接 收APDU数据,初始化所述发生中断的端点状态标志位为未接收到APDU数据, 初始化所述逻辑通道号或端点号变量为未接收到APDU数据。
20: 如权利要求18所述的方法,其特征在于,所述USB Key的片式操作系 统判断发生中断的端点类型,根据所述判断出的端点类型接收APDU,并返回 相应的逻辑通道号或端点号包括: 当有USB中断时,所述片式操作系统根据发生中断的端点状态标志位,判 断发生所述USB中断的端点类型; 如果发生所述USB中断的端点类型是控制端点,继续判断所述APDU处理 状态标志位的状态,如果是正在处理APDU数据,则发送忙状态,不接收APDU 数据;如果没在处理APDU数据,则将所述发生中断的端点状态标志位设置为 控制端点,接收APDU数据,并设置所述逻辑通道号变量或端点号变量为所述 控制端点的逻辑通道号或端点号; 如果发生所述USB中断的端点类型是块端点,将所述发生中断的端点状态 标志位设置为块端点,继续判断所述APDU处理状态标志位的状态,如果是正 在处理APDU数据,则发送忙状态,不接收APDU数据;如果没在处理APDU 数据,则将所述发生中断的端点状态标志位设置为块端点,接收APDU数据, 并设置所述逻辑通道号变量或端点号变量为所述块端点的逻辑通道号或端点 号。
21: 如权利要求18所述的方法,其特征在于,所述USB Key的片式操作系 统判断发生中断的端点类型,根据所述判断出的端点类型接收APDU,并返回 相应的逻辑通道号或端点号之后包括: 所述USB key的片式操作系统关闭USB中断,并将所述逻辑通道变量或端 点号变量的值返回给上层调用函数。
22: 如权利要求1所述的方法,其特征在于,所述方法还包括: 对接收的所述APDU数据进行加密或解密。
23: 一种支持多逻辑通道通信的设备,其特征在于,所述设备包括: 上电模块,用于上电,与所述USB主机之间建立电连接; 响应枚举模块,用于响应所述USB主机的设备枚举; 配置模块,用于向所述USB主机声明至少配置一对块端点和一对控制端点; 判断处理模块,用于判断发生中断的端点类型,根据所述判断出的端点类 型接收APDU,并处理所述接收到的APDU。
24: 如权利要求23所述的设备,其特征在于,所述设备还包括: 应用环境建立模块,用于在所述配置模块向USB主机声明至少配置一对块 端点和一对控制端点之后,所述判断处理模块判断发生中断的端点类型之前, 创建与所述声明的端点类型相匹配的当前应用环境; 所述应用环境建立模块包括: 逻辑通道设置单元,用于设置端点和逻辑通道间的对应关系; 应用环境配置单元,用于配置各端点对应的当前应用环境。
25: 如权利要求24所述的设备,其特征在于,所述逻辑通道设置单元,具 体用于将端点和逻辑通道建立一一映射关系。
26: 如权利要求24所述的设备,其特征在于,所述应用环境配置单元,具 体用于将各个端点对应的当前应用环境的所有内容初始化。
27: 如权利要求24所述的设备,其特征在于,所述设备还包括: 逻辑通道号返回模块,用于根据所述判断处理模块判断出的端点类型处理 所述APDU数据之前,返回逻辑通道号。
28: 如权利要求24所述的设备,其特征在于,所述应用环境建立模块中的 当前应用环境包括当前目录、当前文件、当前安全状态、当前逻辑通道的标志 位和当前安全环境,所述当前文件具有共享属性; 当所述共享属性为允许时,所述USB主机通过块端点和控制端点对所述当 前文件进行访问; 当所述共享属性为不允许时,所述USB主机通过块端点或控制端点对所述 当前文件进行访问; 所述当前安全环境包括加解密算法和密钥索引。
29: 如权利要求23所述的设备,其特征在于,所述响应枚举模块,具体用 于接受所述USB主机的复位操作; 向所述USB主机发送设备描述符; 接受所述USB主机设置的设备地址; 向所述USB主机发送完整的设备描述符; 向所述USB主机发送配置描述符; 向所述USB主机发送配置集合,所述配置集合包括配置描述符,接口描述 符,端点描述符。
30: 如权利要求27所述的设备,其特征在于,所述设备还包括: 第一接收设置模块,用于判断发生中断的端点类型,根据所述判断出的端 点类型接收APDU,并返回相应的逻辑通道号之前, 调用APDU接收函数; 设置逻辑通道号变量; 初始化所述逻辑通道号变量为未接收到APDU数据; 打开USB中断,查询是否有USB中断。
31: 如权利要求30所述的设备,其特征在于,所述判断处理模块,具体用 于 当有USB中断时,判断发生所述USB中断的端点类型; 如果发生所述USB中断的端点类型是控制端点,接收来自所述控制端点的 APDU数据,并设置所述逻辑通道号变量为所述控制端点的逻辑通道号; 如果发生所述USB中断的端点类型是块端点,接收来自所述块端点的 APDU数据,并设置所述逻辑通道号变量为所述块端点的逻辑通道号; 关闭USB中断,并将所述逻辑通道变量的值返回给上层调用函数。
32: 如权利要求23所述的设备,其特征在于,所述设备还包括: 端点号返回模块,用于根据所述判断出的端点类型处理所述APDU数据的 步骤之前,返回发生中断的端点号,为所述发生中断的端点配置当前应用环境。
33: 如权利要求32所述的设备,其特征在于,所述设备还包括: 第二接收设置模块,用于判断发生中断的端点类型,根据所述判断出的端 点类型接收APDU,并返回相应的端点号之前, 调用APDU接收函数; 设置端点号变量; 初始化所述端点号变量为未接收到APDU数据; 打开USB中断,查询是否有USB中断。
34: 如权利要求32所述的设备,其特征在于,所述端点号返回模块,具体 用于根据所述判断出的端点类型处理所述APDU数据的步骤之前,返回发生中 断的端点号,将所述当前应用环境的所有内容初始化。
35: 如权利要求32所述的设备,其特征在于,所述判断处理模块,具体用 于 当有USB中断时,判断发生所述USB中断的端点类型; 如果发生所述USB中断的端点类型是控制端点,接收来自所述控制端点的 APDU数据,并设置所述端点号变量为所述控制端点的端点号; 如果发生所述USB中断的端点类型是块端点,接收来自所述块端点的 APDU数据,并设置所述端点号变量为所述块端点的端点号; 关闭USB中断,并将所述端点号变量的值返回给上层调用函数。
36: 如权利要求27或32所述的设备,其特征在于,所述设备还包括: 第三接收设置模块,用于判断发生中断的端点类型,根据所述判断出的端 点类型接收APDU,并返回相应的逻辑通道号或端点号之前, 设置APDU处理状态标志位; 设置发生中断的端点状态标志位; 调用APDU接收函数、设置逻辑通道号或端点号变量; 初始化所述APDU处理状态标志位为准备接收APDU数据,初始化所述发 生中断的端点状态标志位为未接收到APDU数据,初始化所述逻辑通道号或端 点号变量为未接收到APDU数据; 打开USB中断,查询是否有USB中断。
37: 如权利要求36所述的设备,其特征在于,所述判断处理模块,具体用 于 当有USB中断时,根据所述发生中断的端点状态标志位,判断发生所述USB 中断的端点类型; 如果发生所述USB中断的端点类型是控制端点,继续判断所述APDU处理 状态标志位的状态,如果是正在处理APDU数据,则发送忙状态,不接收APDU 数据;如果没在处理APDU数据,则将所述发生中断的端点状态标志位设置为 控制端点,接收APDU数据,并设置所述逻辑通道号变量或端点号变量为所述 控制端点的逻辑通道号或端点号; 如果发生所述USB中断的端点类型是块端点,继续判断所述APDU处理状 态标志位的状态,如果是正在处理APDU数据,则发送忙状态,不接收APDU 数据;如果没在处理APDU数据,则将所述发生中断的端点状态标志位设置为 块端点,接收APDU数据,并设置所述逻辑通道号变量或端点号变量为所述块 端点的逻辑通道号或端点号; 关闭USB中断,并将所述逻辑通道变量或端点号变量的值返回给上层调用 函数。
38: 如权利要求23所述的设备,其特征在于,所述设备还包括: 加解密模块,用于对接收的所述APDU数据进行加密或解密。

说明书


一种支持多逻辑通道通信的方法和设备

    【技术领域】

    本发明涉及信息安全领域,特别涉及一种支持多逻辑通道通信的方法和设备。

    背景技术

    USB Key(智能密钥设备)是一种具有USB接口、内置有单片机或智能卡芯片、采用片式操作系统的USB设备。

    USB设备定义了控制传输、同步传输、中断传输、块传输4种传送类型。其中,控制传输:可靠的、非周期的、由主机软件发起的请求或者回应的发送,通常用于命令事务和状态事务。同步传输:在主机和设备之间的周期性的、连续的通信,一般用于传送与时间相关的信息,这种类型保留了将时间概念包含于数据中的能力。中断传输:小规模数据的、低速的、固定延迟的传送。块传输:非周期性的,大包的可靠传送。

    端点是USB设备的逻辑设备。支持控制传输的端点被称为“控制端点”,支持中断传输的端点就被称为“中断端点”,支持块传输的端点被称为“块端点”。控制端点只有8个字节,用于USB类设备枚举过程。块端点拥有64个字节,用于快速、大量得传输数据。

    在实现本发明的过程中,发明人发现现有技术至少存在以下问题:

    目前USB Key的片式操作系统仅支持块传输方式来处理APDU(applicationprotocol data unit,应用协议数据单元),不支持多个应用同时访问。

    【发明内容】

    为了在USB Key中支持多逻辑通道通信,本发明实施例提供了一种支持多逻辑通道通信的方法和设备,包括下列步骤:

    一种支持多逻辑通道通信的方法,所述方法包括:

    所述USB key上电;

    所述USB key响应USB主机的设备枚举;

    所述USB key的片式操作系统向USB主机声明至少配置一对块端点和一对控制端点;

    所述USB Key的片式操作系统判断发生中断的端点类型,根据所述判断出的端点类型接收APDU,并处理所述APDU。

    其中,所述USB key的片式操作系统向主机声明至少配置一对块端点和一对控制端点的步骤之后,所述判断发生中断的端点类型之前,还包括创建与所述声明的端点类型相匹配的当前应用环境的步骤,具体为:所述片式操作系统设置端点和逻辑通道间的对应关系,并配置各端点对应的当前应用环境。

    其中,所述片式操作系统设置端点和逻辑通道间的对应关系具体为将端点和逻辑通道建立一一映射关系。

    其中,所述片式操作系统配置各端点的当前应用环境具体为将各个端点对应的当前应用环境的所有内容初始化。

    其中,所述USB Key的片式操作系统根据所述判断出的端点类型处理所述APDU数据之前还包括返回逻辑通道号的步骤。

    其中,所述当前应用环境包括当前目录、当前文件、当前安全状态、当前逻辑通道的标志位和当前安全环境,所述当前文件具有共享属性。

    其中,当所述共享属性为允许时,所述USB主机通过块端点和控制端点对所述当前文件进行访问;

    当所述共享属性为不允许时,所述USB主机通过块端点或控制端点对所述当前文件进行访问。

    其中,所述当前安全环境包括加解密算法和密钥索引。

    其中,所述USB key响应USB主机的设备枚举包括:

    所述USB key接受所述USB主机的复位操作;

    所述USB key向所述USB主机发送设备描述符;

    所述USB key接受所述USB主机设置的设备地址;

    所述USB key向所述USB主机发送完整的设备描述符;

    所述USB key向所述USB主机发送配置描述符;

    所述USB key向所述USB主机发送配置集合,所述配置集合包括配置描述符,接口描述符,端点描述符。

    其中,所述USB Key的片式操作系统判断发生中断的端点类型,根据所述判断出的端点类型接收APDU,并返回相应的逻辑通道号之前包括:

    所述USB key的片式操作系统调用APDU接收函数;

    所述USB key的片式操作系统设置逻辑通道号变量;

    所述USB key的片式操作系统初始化所述逻辑通道号变量为未接收到APDU数据;

    所述USB key的片式操作系统打开USB中断,查询是否有USB中断。

    其中,所述USB Key的片式操作系统判断发生中断的端点类型,根据所述判断出的端点类型接收APDU,并返回相应的逻辑通道号包括:

    当有USB中断时,判断发生所述USB中断的端点类型;

    如果发生所述USB中断的端点类型是控制端点,接收来自所述控制端点的APDU数据,并设置所述逻辑通道号变量为所述控制端点的逻辑通道号;

    如果发生所述USB中断地端点类型是块端点,接收来自所述块端点的APDU数据,并设置所述逻辑通道号变量为所述块端点的逻辑通道号。

    其中,所述USB Key的片式操作系统判断发生中断的端点类型,根据所述判断出的端点类型接收APDU,并设置相应的逻辑通道号之后包括:

    所述USB key的片式操作系统关闭USB中断,并将所述逻辑通道变量的值返回给上层调用函数。

    其中,所述片式操作系统根据所述判断出的端点类型处理所述APDU数据的步骤之前还包括:所述片式操作系统返回发生中断的端点号,并为所述发生中断的端点配置当前应用环境。

    其中,所述片式操作系统判断发生中断的端点类型,根据所述判断出的端点类型接收APDU,并返回相应的端点号之前包括:

    所述USB key的片式操作系统调用APDU接收函数;

    所述USB key的片式操作系统设置端点号变量;

    所述USB key的片式操作系统初始化所述端点号变量为未接收到APDU数据;

    所述USB key的片式操作系统打开USB中断,查询是否有USB中断。

    其中,所述片式操作系统为所述发生中断的端点配置当前应用环境具体为将所述当前应用环境的所有内容初始化。

    其中,所述片式操作系统判断发生中断的端点类型,根据所述判断出的端点类型接收APDU,并返回相应的逻辑通道号包括:

    当有USB中断时,判断发生所述USB中断的端点类型;

    如果发生所述USB中断的端点类型是控制端点,接收来自所述控制端点的APDU数据,并设置所述端点号变量为所述控制端点的端点号;

    如果发生所述USB中断的端点类型是块端点,接收来自所述块端点的APDU数据,并设置所述端点号变量为所述块端点的端点号。

    其中,所述片式操作系统判断发生中断的端点类型,根据所述判断出的端点类型接收APDU,并设置相应的端点号之后包括:

    所述USB key的片式操作系统关闭USB中断,并将所述端点号变量的值返回给上层调用函数。

    其中,所述USB Key的片式操作系统判断发生中断的端点类型,根据所述判断出的端点类型接收APDU,并返回相应的逻辑通道号或端点号之前包括:

    所述USB key的片式操作系统设置APDU处理状态标志位;

    所述USB key的片式操作系统设置发生中断的端点状态标志位;

    所述USB key的片式操作系统调用APDU接收函数、设置逻辑通道号或端点号变量;

    所述USB key的片式操作系统初始化所述APDU处理状态标志位、所述发生中断的端点状态标志位、所述逻辑通道号变量或端点号变量;

    所述USB key的片式操作系统打开USB中断,查询是否有USB中断。

    其中,所述USB key的片式操作系统初始化所述APDU处理状态标志位、所述发生中断的端点状态标志位、和所述逻辑通道号变量或端点号变量包括:

    所述USB key的片式操作系统初始化所述APDU处理状态标志位为准备接收APDU数据,初始化所述发生中断的端点状态标志位为未接收到APDU数据,初始化所述逻辑通道号或端点号变量为未接收到APDU数据。

    其中,所述USB Key的片式操作系统判断发生中断的端点类型,根据所述判断出的端点类型接收APDU,并返回相应的逻辑通道号或端点号包括:

    当有USB中断时,根据所述发生中断的端点状态标志位,判断发生所述USB中断的端点类型;

    如果发生所述USB中断的端点类型是控制端点,将所述发生中断的端点状态标志位设置为控制端点,判断所述APDU处理状态标志位的状态,如果是正在接收APDU数据,则不接收APDU数据,如果是准备接收APDU数据,则接收APDU数据,并设置所述逻辑通道号变量或端点号变量为所述控制端点的逻辑通道号或端点号;

    如果发生所述USB中断的端点类型是块端点,将所述发生中断的端点状态标志位设置为块端点,判断所述APDU处理状态标志位的状态,如果是正在接收APDU数据,则不接收APDU数据,如果是准备接收APDU数据,则接收APDU数据,并设置所述逻辑通道号变量或端点号变量为所述块端点的逻辑通道号或端点号。

    其中,所述USB Key的片式操作系统判断发生中断的端点类型,根据所述判断出的端点类型接收APDU,并返回相应的逻辑通道号或逻辑通道号之后包括:

    所述USB key的片式操作系统关闭USB中断,并将所述逻辑通道变量或端点号变量的值返回给上层调用函数。

    其中,所述方法还包括:

    对接收的所述APDU数据进行加密或解密。

    一种支持多逻辑通道通信的设备,所述设备包括:

    上电模块,用于上电,与所述USB主机之间建立电连接;

    响应枚举模块,用于响应所述USB主机的设备枚举;

    配置模块,用于向所述USB主机声明至少配置一对块端点和一对控制端点;

    判断处理模块,用于判断发生中断的端点类型,根据所述判断出的端点类型接收APDU,并处理所述APDU。

    其中,所述设备还包括:

    应用环境建立模块,用于向USB主机声明至少配置一对块端点和一对控制端点的步骤之后,判断发生中断的端点类型之前,创建与所述声明的端点类型相匹配的当前应用环境的步骤;

    所述应用环境建立模块包括:

    逻辑通道设置单元,用于设置端点和逻辑通道间的对应关系;

    应用环境配置单元,用于配置各端点对应的当前应用环境。

    其中,所述逻辑通道设置单元,具体用于将端点和逻辑通道建立一一映射关系。

    其中,所述应用环境配置单元,具体用于将各个端点对应的当前应用环境的所有内容初始化。

    其中,所述设备还包括:

    逻辑通道返回模块,用于根据所述判断出的端点类型处理所述APDU数据之前,返回逻辑通道号的步骤。

    其中,所述应用环境建立模块中的当前应用环境包括当前目录、当前文件、当前安全状态、当前逻辑通道的标志位和当前安全环境,所述当前文件具有共享属性;

    当所述共享属性为允许时,所述USB主机通过块端点和控制端点对所述当前文件进行访问;

    当所述共享属性为不允许时,所述USB主机通过块端点或控制端点对所述当前文件进行访问;

    所述当前安全环境包括加解密算法和密钥索引。

    其中,所述响应枚举模块,具体用于接受所述USB主机的复位操作;

    向所述USB主机发送设备描述符;

    接受所述USB主机设置的设备地址;

    向所述USB主机发送完整的设备描述符;

    向所述USB主机发送配置描述符;

    向所述USB主机发送配置集合,所述配置集合包括配置描述符,接口描述符,端点描述符。

    其中,所述设备还包括:

    第一接收设置模块,用于判断发生中断的端点类型,根据所述判断出的端点类型接收APDU,并返回相应的逻辑通道号之前,

    调用APDU接收函数;

    设置逻辑通道号变量;

    初始化所述逻辑通道号变量为未接收到APDU数据;

    打开USB中断,查询是否有USB中断。

    其中,所述判断处理模块,具体用于

    当有USB中断时,判断发生所述USB中断的端点类型;

    如果发生所述USB中断的端点类型是控制端点,接收来自所述控制端点的APDU数据,并设置所述逻辑通道号变量为所述控制端点的逻辑通道号;

    如果发生所述USB中断的端点类型是块端点,接收来自所述块端点的APDU数据,并设置所述逻辑通道号变量为所述块端点的逻辑通道号;

    关闭USB中断,并将所述逻辑通道变量的值返回给上层调用函数。

    其中,所述设备还包括:

    端点号返回模块,用于根据所述判断出的端点类型处理所述APDU数据的步骤之前,返回发生中断的端点号,为所述发生中断的端点配置当前应用环境。

    其中,所述设备还包括:

    第二接收设置模块,用于判断发生中断的端点类型,根据所述判断出的端点类型接收APDU,并返回相应的端点号之前,

    调用APDU接收函数;

    设置端点号变量;

    初始化所述端点号变量为未接收到APDU数据;

    打开USB中断,查询是否有USB中断。

    其中,所述端点号返回模块,具体用于根据所述判断出的端点类型处理所述APDU数据的步骤之前,返回发生中断的端点号,将所述当前应用环境的所有内容初始化。

    其中,所述判断处理模块,具体用于

    当有USB中断时,判断发生所述USB中断的端点类型;

    如果发生所述USB中断的端点类型是控制端点,接收来自所述控制端点的APDU数据,并设置所述端点号变量为所述控制端点的端点号;

    如果发生所述USB中断的端点类型是块端点,接收来自所述块端点的APDU数据,并设置所述端点号变量为所述块端点的端点号;

    关闭USB中断,并将所述端点号变量的值返回给上层调用函数。

    其中,所述设备还包括:

    第三接收设置模块,用于判断发生中断的端点类型,根据所述判断出的端点类型接收APDU,并返回相应的逻辑通道号或端点号之前,

    设置APDU处理状态标志位;

    设置发生中断的端点状态标志位;

    调用APDU接收函数、设置逻辑通道号或端点号变量;

    初始化所述APDU处理状态标志位为准备接收APDU数据,初始化所述发生中断的端点状态标志位为未接收到APDU数据,初始化所述逻辑通道号或端点号变量为未接收到APDU数据;

    打开USB中断,查询是否有USB中断。

    其中,所述判断处理模块,具体用于

    当有USB中断时,根据所述发生中断的端点状态标志位,判断发生所述USB中断的端点类型;

    如果发生所述USB中断的端点类型是控制端点,将所述发生中断的端点状态标志位设置为控制端点,判断所述APDU处理状态标志位的状态,如果是正在接收APDU数据,则不接收APDU数据,如果是准备接收APDU数据,则接收APDU数据,并设置所述逻辑通道号变量或端点号变量为所述控制端点的逻辑通道号或端点号;

    如果发生所述USB中断的端点类型是块端点,将所述发生中断的端点状态标志位设置为块端点,判断所述APDU处理状态标志位的状态,如果是正在接收APDU数据,则不接收APDU数据,如果是准备接收APDU数据,则接收APDU数据,并设置所述逻辑通道号变量或端点号变量为所述块端点的逻辑通道号或端点号;

    关闭USB中断,并将所述逻辑通道变量或端点号变量的值返回给上层调用函数。

    其中,所述设备还包括:

    加解密模块,用于对接收的所述APDU数据进行加密或解密。

    本发明实施例提供的技术方案带来的有益效果是:通过同时启用USB key的不同类型端点来传输数据,实现了支持多逻辑通道通信,从而使得片式操作系统能够同时支持多个应用的访问。

    【附图说明】

    图1是现有技术提供的USB key文件树型结构示意图;

    图2是本发明实施例1提供的一种在USB key中支持多逻辑通道通信的方法流程图;

    图3是本发明实施例1提供的第一种接收并判断APDU数据写入的端点类型步骤流程图;

    图4是本发明实施例1提供的第二种接收并判断APDU数据写入的端点类型步骤流程图;

    图5是本发明实施例2提供的支持多逻辑通道通信的设备结构图。

    【具体实施方式】

    为使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明实施方式作进一步地详细描述。

    ISO/IEC 7816标准规定,USB key的数据在用户存储器EEPROM(electricallyerasable programmable read-only memory,电可擦写可编程只读存储器)以树型文件结构的形式组织存放。参见图1,文件分成三种层次级别:

    主文件(MF,Master File),形成文件系统的根,类似于DOS(Disk OperatingSystem,磁盘操作系统)的根目录;主文件只能有一个并且随操作系统一起生成,用户无法控制;

    专用文件(DF,Dedicated File),在主文件之下,类似于DOS中的目录;DF之下还可以有CDF(Child-DF,子专有文件),类似于DOS中的子目录,它存储了某个应用的全部数据以及与应用操作相关的安全数据;

    基本文件(EF,Elementary File),主要存储实际应用数据和相应的系统管理信息,EF可以存在于任何一个文件层次上。类似于DOS中的文件。

    需要强调的是:(1)在文件存取过程中,不能越层存取,若想读写子专有文件下的元文件必须经过其高层文件层次;(2)专有文件的大小在申请生成时预定且不可修改。

    USB key的片式操作系统对文件数据的操作和管理规则如下:

    (1)对某个文件做操作之前,必须先选择该文件。

    (2)按文件系统的三层结构操作,片式操作系统不支持以路径方式选择文件,所以在选择某文件前必须先选择它的上一层文件,不允许跨层选择。片式操作系统上电后自动选择主文件。

    (3)访问文件中的数据要受文件的安全属性的控制。

    (4)对文件的建立要受该文件的上层文件的安全属性的控制。

    (5)文件分为多种类型,主要包括:二进制文件、记录文件、密钥文件、终端数据元文件。

    (6)数据结构分为:二进制数据、定长记录文件、循环记录文件、变长记录文件。

    (7)密钥形式分为:个人密码(PIN)、外部认证密钥、内部认证密钥、PIN解锁密钥、PIN重装密钥、应用维护密钥等。

    实施例1

    参加图2,本实施例提供了一种在USB key中支持多逻辑通道通信的方法,该方法包括:

    步骤101:USB key上电,也即USB key与USB主机之间建立电连接;

    步骤102:USB主机对USB key进行设备枚举,相应的,USB key响应USB主机的设备枚举;

    步骤103:USB key的片式操作系统向主机声明至少配置有一对块端点和控制端点,并创建与声明的端点类型相匹配的应用环境。

    进一步的,USB key还可以根据具体需要,配置多对块端点。

    片式操作系统创建与声明的端点类型相匹配的应用环境的过程具体包括设置端点和逻辑通道的对应关系,并配置各端点对应的当前应用环境。其中,设置端点和逻辑通道的对应关系具体为将端点和逻辑通道建立一一映射关系;配置各端点对应的应用环境具体为将各端点对应的当前应用环境的所有内容初始化,具体为将默认端点的当前应用环境的MF设定,其它值,如:DF、EF等值初始化,其它的端点对应的应用环境下的所有值初始化。

    步骤104:USB Key的片式操作系统判断发生中断的端点类型,根据所述判断出的端点类型接收APDU,并返回相应的逻辑通道号。

    其中,端点是USB key的逻辑设备。USB主机为每个端点分配一个唯一的逻辑地址。USB key的端点与USB主机的逻辑地址构成了一个USB逻辑通道。

    步骤105:片式操作系统根据从步骤104中配置好的逻辑通道中接收到的APDU数据配置当前应用环境,并进一步对该应用环境指定的文件进行读或写操作。

    其中,步骤102为:

    设备枚举的作用是:USB主机从设备(USB key)中读取一些信息,知道设备是什么样的设备,如何进行通信,这样USB主机就可以根据这些信息来加载合适的驱动程序。

    USB主机检测到USB key插入后,设备枚举的具体过程如下:

    首先,USB主机检测到设备(USB key)插入后,进行设备复位。所有的设备在总线复位后其地址都为0,这样USB主机就可以跟那些刚刚插入的设备通过地址0通信。

    其次,进入建立阶段,获取设备描述符。具体的,USB主机对地址为0的设备发送获取设备描述符的标准请求,设备收到该请求后,将设备描述符返回给USB主机。USB主机在成功获取到一个数据包的设备描述符后并且确认没有错误后,返回一个0长度的状态数据包给设备。需要注意:有些设备的端点0大小不足18字节(但至少具有8字节),而标准的设备描述有18字节,在这种情况下,设备只能暂时按最大包返回部分设备描述符,而USB主机在成功获取到前面一部分描述符后,不再请求剩下的设备描述符部分,而是进入设置地址阶段)。

    再次,USB主机对设备再次复位,进入设置地址阶段。具体的,USB主机发出一个设置地址的请求,地址包含在建立包中,具体的地址USB主机会负责管理,它会分配一个唯一的地址给新的设备。设备在收到地址后,返回0长度的状态包,USB主机收到0长度的状态包之后,会返回一个ACK给设备。设备在收到这个ACK之后,就可以启用新的地址了。这样设备就分配到了一个唯一的设备地址,此后USB主机就通过设备地址进行访问该设备。

    再次,USB主机再次获取设备描述符,此次获取18字节完整的设备描述符。

    然后,USB主机获取配置描述符。配置描述符总共为9字节。

    最后,USB主机再获取到配置描述符后,根据其中的配置集合总长度,再获取配置集合。具体的,配置集合包括配置描述符,接口描述符,端点描述符等等。如果有字符串描述符,还要获取字符串描述符。如果是HID设备还要获取HID描述符等。

    其中,步骤104为:

    发生中断的端点类型包括:控制端点或块端点。如果发生中断的是控制端点,片式操作系统就从控制端点接收一个APDU数据,并返回与该控制端点对应的逻辑通道号;如果发生中断的是块端点,片式操作系统就从块端点接收一个APDU数据,并返回与该块端点对应的逻辑通道号。

    具体的,APDU数据从某个端点写入后,该端点会产生一个中断,USB key的状态寄存器会根据该中断设置相应的标识,片式操作系统通过查询状态寄存器中的标识获知哪个端点发生中断,即哪个端点有APDU数据写入。本实施例提供了两种判断APDU数据写入的端点类型的方法,下面结合附图详细叙述。

    参见图3,本实施例提供的第一种接收并判断APDU数据写入的端点类型的具体步骤为:

    1041:片式操作系统调用APDU接收函数;

    1042:片式操作系统设置逻辑通道号变量;

    其中,逻辑通道号变量用于保存接收APDU数据的逻辑通道号,为局部变量。具体的,将逻辑通道号局部变量初始值设为0XFF,表示未接收到APDU数据。

    1043:片式操作系统打开USB中断,不断查询是否有USB中断;

    1044:当有USB中断时,判断发生USB中断的端点类型,并设置相应的逻辑通道号变量;

    具体的,当有USB中断时,判断该USB中断是否是来自控制端点的中断,如果是,则接收来自控制端点的APDU数据,并设置逻辑通道号变量为对应控制端点的逻辑通道号(本实施例定义控制端点的逻辑通道号为0);否则,接收来自块端点的APDU数据,并设置逻辑通道号变量为对应块端点的逻辑通道号(本实施例定义块端点的逻辑通道号为1)。

    1045:接收完APDU数据后,片式操作系统关闭USB中断,并将逻辑通道号返回给上层调用函数。

    以上接收并判断APDU数据写入的端点类型的过程,具体可以采用以下指令实现。

    //接收APDU的函数

    //输入参数为:apdu缓冲区,由调用函数负责申请空间

    //返回参数:接收APDU的逻辑通道号

    unsigned char ucReceiveApdu(unsigned char*pApdu)

    {

        //局部变量,用于保存逻辑通道号

        unsigned char ucLogicalChannel;

        //初始化为0XFF,表示尚未接收到APDU

        ucLogicalChannel=0x0FF;

        //打开USB中断

        vEnableUsbInterrupt();

        //等待USB中断

        while(1)

        {

         //中断查询

         if(USB_INTERRUPT)

      {

         //判断是否是来自控制端点的中断

         if(IS_CONTROL)

         {

             //接收来自控制端点的APDU

             vReceiveDataFromControl(pApdu);

             //表示接收的APDU来自控制端点

             ucLogicalChannel=0;

             //跳出循环

             break;

      }

      //是否是来自BULK端点的中断

      else(IS_BULK)

      {

            //接收来自BULK端点的APDU

            vReceiveDataFromBulk(pApdu);

            //表示接收的APDU来自BULK端点

             ucLogicalChannel=1;

             //跳出循环

             break;

          }

      }

        }

        //关闭USB中断

        vDisableUsbInterrupt();

        //将逻辑通道号返回给上层调用函数

        return ucLogicalChannel;

    }

    参见图4,本实施例提供的第二种接收并判断APDU数据写入的端点类型的具体步骤为:

    1041’:片式操作系统设置APDU处理状态标志位;

    具体的,APDU处理状态标志位通过设置全局变量ucApduDeal来实现,该变量用于保存APDU处理状态。本实施例设定:ucApduDeal值为0x00代表片式操作系统准备接收APDU数据(即不在处理);ucApduDeal值为0x01代表片式操作系统已经接收到APDU数据(即正在处理);

    1042’:片式操作系统设置发生中断的端点状态标志位;

    具体的,发生中断的端点状态标志位通过设置全局变量ucApduFrom来实现,该变量用于保存中断来自何种端点的数值记录。本实施例设定:ucApduFrom值为0x00代表无APDU数据接收;ucApduFrom值为0x01表示从控制端点接收APDU数据;该值为0x02表示从块端点接收APDU数据;

    1043’:片式操作系统调用APDU接收函数和设置逻辑通道号变量;

    其中,逻辑通道号变量用于保存接收APDU数据的逻辑通道号,为局部变量。具体的,在本实施例中,片式操作系统设置逻辑通道号局部变量为0x0FF,表示尚未接收到APDU;

    1044’:片式操作系统对APDU处理状态标志位和发生中断的端点状态标志位赋值;

    具体为:片式操作系统设置全局变量ucApduDeal为0x00,表示准备接收APDU;设置发生中断的端点状态标志位为ucApduFrom为0x00,表示尚无APDU需要接收;

    1045’:片式操作系统判断发生中断的端点类型,并根据所述判断出的端点类型进一步判断APDU处理状态标志位的值,如果该值表明发生中断的端点忙,则发送忙状态,继续处理APDU;否则,从发生中断的端点接收APDU,并设置相应的逻辑通道号局部变量,返回逻辑通道号给上层调用函数。

    片式操作系统设置相应的逻辑通道号变量,也就是将发生中断的端点与主机间建立逻辑通道。本实施例中,将控制端点对应的逻辑通道号设置为0,将块端点对应的逻辑通道号设置为1,设置过程是通过为步骤1043’设置的逻辑通道号局部变量来完成的。

    具体的,片式操作系统将APDU接收函数ucReceiveApdu()设置成USB中断处理函数,接着读USB中断标志寄存器,判断产生中断的端点类型,如果中断来自控制端点,则继续判断步骤1041’中设置的ucApduDeal是否表明APDU正在处理,如果正在处理,则片式操作系统不接收新的APDU,继续处理已有的APDU,仅发送忙状态;如果不在处理,则片式操作系统对控制端点变量赋值,具体为设置ucApduFrom的值为0x01,之后,通过控制端点接收新的APDU;否则,如果中断来自块端点,则继续判断步骤1041’中设置的ucApduDeal是否表明APDU正在处理,如果正在处理,则片式操作系统不接收新的APDU,仅发送忙状态;如果不在处理,则片式操作系统对块端点变量赋值,具体为设置ucApduFrom的值为0x02,之后,通过控制端点接收新的APDU。

    以上接收并判断APDU数据写入的端点类型的过程,具体可以采用以下指令实现。

    //全局变量,用于保存APDU处理状态。

    //0x00表示准备接收APDU,0x01表示APDU已收到,正处理

    //其它值保留

    unsigned char ucApduDeal;

    //全局变量,用于保存中断来自哪个端点(即:需要从哪个端点接收APDU)

    //0x00表示无APDU数据可接收,0x01表示需要从控制端点接收APDU,

    //0x02表示需要从bulk端点接收APDU

    //其它值保留

    unsigned char ucApduFrom;

    //接收APDU的函数

    //输入参数为:apdu缓冲区,由调用函数负责申请空间

    //返回参数:接收APDU的逻辑通道号

    unsigned char ucReceiveApdu(unsigned char*pApdu)

    {

        //局部变量,用于保存逻辑通道号

        unsigned char ucLogicalChannel;

        //初始化为0XFF,表示尚未接收到APDU

        ucLogicalChannel=0x0FF;

        //全局变量ucApduDeal赋值,表示准备接收APDU

        ucApduDeal=0x00;

        //全局变量ucApduFrom赋值,表示尚无APDU可收

        ucApduFrom=0x00;

        //等待接收APDU

        while(1)

        {

      //判断是否需要从控制端点接收

      if(ucApduFrom==0x01)

      {

        //接收来自控制端点的APDU

        vReceiveDataFromControl(pApdu);

        //表示接收的APDU来自控制端点

        ucLogicalChannel=0;

        //跳出循环

        break;

      }

      //判断是否需要从bulk端点接收

      else(ucApduFrom==0x02)

      {

          //接收来自BULK端点的APDU

          vReceiveDataFromBulk(pApdu);

          //表示接收的APDU来自BULK端点

          ucLogicalChannel=1;

          //跳出循环

          break;

      }

        }

        //全局变量ucApduDeal赋值,表示已接收到APDU

        ucApduDeal=0x01;

        //将逻辑通道号返回给上层调用函数

        return ucLogicalChannel;

    }

    //USB中断处理函数

    //输入参数为:无

    //返回参数:无

    void ucReceiveApdu()interrupt for usb

    {

        //读USB中断标志寄存器,判断中断来自哪里

        if(IS_CONTROL)//来自控制端点的处理

        {

      //判断是否正在处理APDU

      if(ucApduDeal==0x01)

      {

          //APDU正在处理,不接收新APDU,仅发送忙状态

          vSendBusyStateFromControl();

      }

      else

      {

        //设置全局变量ucApduFrom,表示需要从控制端点接收APDU

        ucApduFrom=0x01;

      }

       }

       else if(IS_BULK)//来自BULK端点的处理

       {

      //判断是否正在处理APDU

      if(ucApduDeal==0x01)

      {

         //APDU正在处理,不接收新APDU,仅发送忙状态

         vSendBusyStateFrombulk();

      }

      else

      {

         //设置全局变量ucApduFrom,表示需要从bulk端点接收APDU

         ucApduFrom=0x02;

      }

        }

    }

    步骤105具体包括以下内容:片式操作系统根据从步骤104中配置好的逻辑通道接收到的APDU数据配置当前应用环境,并对相应的应用运行环境指定的文件进行读或写操作。该应用运行环境包括:USB key的当前专用文件DF、当前基本文件EF、该当前基本文件EF的当前安全状态以及当前安全环境;当前安全环境包括加解密算法和密钥索引。

    每个文件都内设有不同操作的安全等级,这些安全等级是在文件建立初期就设置好的,且一经设置不会再改变。通常情况下,文件的读操作的安全等级较低,写操作的安全等级较高。每个文件所在的当前目录DF下都可能设置有至少一个PIN码,每个PIN码与每个文件的安全等级设置有一一对应关系。举例来说:如DF1目录下有三个EF文件,分别为EF1、EF2和EF3,DF1设置的三个PIN码分别为1、2、3号PIN码,EF1文件的安全等级为5,EF2文件的安全等级为4,EF3文件的安全等级为3,那么在DF1目录下设置有一张配置表,表中PIN码的标号与各个文件的安全等级建立一一映射,具体可以为1号PIN码对应安全等级5的EF1文件,2号PIN码对应安全等级4的EF2文件,3号PIN码对应安全等级3的EF3文件。APDU指令决定验证哪个PIN码,只有PIN码验证通过后才能对与该PIN码对应的安全等级的文件进行操作。当主机通过不同的端点对文件进行操作时,不同的应用在通过不同的端点访问应用环境时,可能对是否需要PIN码验证有不同的要求。如:应用1在通过控制端点访问应用环境时要求进行PIN码验证,而应用2在通过块端点访问应用环境时却不要求进行PIN码验证。对需要验证PIN码的应用,主机发来的APDU指令在通过某个端点进入到文件所在的当前目录(当前应用运行环境)时必须先进行PIN码验证,具体为验证APDU指令指定的PIN码,验证通过后才能对上述指定安全等级的文件进行操作。

    USB key的随机存储器RAM中缓存有USB key运算过程中的中间数据,该中间数据分为两部分,一部分存储有通过某个端点进行操作的APDU指令,另一部分存储有运行环境数据,包括:当前DF信息、当前EF信息、当前安全状态、当前逻辑通道的一些标志位、安全环境等。其中,安全运行环境具体包括加解密算法、公钥索引等信息。

    下面,结合具体的APDU指令说明配置当前应用运行环境,及在配置好的应用运行环境中执行各类操作的流程。

    执行步骤103的APDU复位操作,RAM中的全部运行环境数据被初始化,当前DF信息、当前EF信息、当前安全状态、逻辑通道的标志位和安全环境因子都被设置为0。

    如果步骤104中片式操作系统判断数据由控制端点传入,设接下来片式操作系统通过控制端点接收如下APDU指令:

    (1)00 A4 00 00 02 DF 01*/选择目录DF1指令/*

    片式操作系统成功选择了该DF1目录后,返回成功码9000;

    本实施例中DF1下设有两个PIN码,分别为PIN0和PIN1,其中PIN0的值为1234,可使当前安全等级设置为1;PIN1的值为5678,可使当前安全等级设置为2。

    (2)00 A4 00 00 02 EF 01*/选择文件EF1指令/*

    片式操作系统成功选择了该EF1文件后,返回成功码9000;

    本实施例中设定EF1文件的读操作的安全等级为1,写操作的安全等级为2,共享属性为“可以”。

    (3)00 B0 00 00 05*/读文件EF1指令/*

    因为当前文件EF1的读操作安全等级为1,因此该指令无法读取EF1文件,片式操作系统向主机返回代码6982,表示读权限不满足。

    (4)00 20 00 80 02 12 34*/校验PIN0/*

    校验PIN0,将当前安全状态等级修改为1,对EF1进行读操作的权限满足,片式操作系统返回成功码9000。

    (5)00 B0 00 00 05 01 02 03 04 05*/读EF1指令/*

    因为步骤(4)中片式操作系统已经通过了对PIN0的检验,所以可以读取EF1中的内容了。

    (6)00 06 00 00 02 88 99*/主机向片式操作系统发出更新EF1指令/*由于对EF1文件进行写操作的安全等级为2,而根据(4),对EF1操作的安全状态等级已经被设置为1,因此无法对EF1文件进行写操作,片式操作系统向主机返回代码6982,表示写权限不满足。

    (7)00 20 00 81 02 56 78*/校验PIN1/*

    根据步骤(6)中片式操作系统向主机返回的代码,主机向片式操作系统发出了校验PIN1的指令,因为PIN1对应着对EF1文件的写操作权限2,因此校验通过,片式操作系统对文件EF1操作的安全等级被设置为2,片式操作系统向主机返回成功码9000。

    (8)00 06 00 00 02 88 99*/主机再次向片式操作系统发出更新EF1指令/*

    因为步骤(7)中片式操作系统成功校验了对EF1进行写操作的权限,所以该步骤中主机能够成功对EF1文件进行写入操作。

    以上为本实施例中主机经由控制端点对文件EF1进行读写操作的范例,主机经由块端点对文件EF1进行读写操作的步骤与此相同,不再赘述。

    本实施例中,如果主机既通过块端点对EF1进行访问,又要通过控制端点对EF1进行访问,则片式操作系统需要判断EF1文件的共享属性是否设置为“可以”。如果EF1文件的共享属性设置为“可以”,则主机可以分别通过块端点和控制端点对EF1文件进行读写操作。其中,对文件EF1进行读写操作的APDU指令同上,都是在校验相应安全等级的PIN码后对EF1文件进行相应的操作。

    如果片式操作系统判断EF1文件的共享属性设置为“不可以”,则如果主机正在通过控制端点对EF1文件进行读或写操作,又接收到了来自块端点的选择EF1文件的APDU指令(对应上述的00 A4 00 00 02 EF 01命令行),则会通过块端点向主机返回报错信息,表明当前选择文件不可使用;如果主机接到该命令后,又通过块端点向片式操作系统发出APDU指令(00 A4 00 00 02 EF 02)选择了另一个文件EF2,则可以对EF2文件进行读或写操作。

    本实施例中,也可以对通过控制端点或块端点接收的APDU数据进行加解密,下面以对控制端点来的数据加密为例:

    (1)00 A4 00 00 02 DF 01*/选择DF1指令/*

    (2)00 22 41 B8 07 80 01 80 83 02 01 22*/该指令为设置管理安全环境指令/*

    该指令中规定了加密APDU数据所用的密钥及密钥相关信息。

    (3)00 2A 86 80 80明文数据*/该指令为执行安全操作指令/*

    通过该指令,明文数据被加密成密文数据传输。

    本实施例中,步骤103还可以为:USB key的片式操作系统向主机声明至少配置有一对块端点和一对控制端点,但不创建与声明的端点类型相匹配的应用环境。

    相应地:步骤104为:USB Key的片式操作系统判断发生中断的端点类型,根据判断结果接收APDU数据,并返回与发生中断的端点相对应的端点号,之后为该端点建立应用环境。建立应用环境具体为建立MF、DF、EF和安全状态等等各项存储空间,并将各项内容初始化。

    此时,步骤1041至步骤1046具体为:

    1041:片式操作系统调用APDU接收函数;

    1042:片式操作系统设置用于端点号变量;

    其中,端点号变量为局部变量,用于将各个端点与数字建立一一对应关系,本实施例中,可以设定控制端点的端点号为0,块端点的端点号为1、2、3、4等等。具体的,将端点号局部变量初始化为0XFF,表示未接收到APDU数据。

    1043:片式操作系统打开USB中断,不断查询是否有USB中断;

    1044:当有USB中断时,判断发生USB中断的端点类型,并设置相应的端点号;

    过程如下:当有USB中断时,判断该USB中断是否是来自控制端点的中断,如果是,则接收来自控制端点的APDU数据,并设置端点号变量为对应控制端点的端点号(本实施例定义控制端点的端点号为0);否则,接收来自块端点的APDU数据,并设置端点号变量为对应块端点的端点号(本实施例定义块端点的端点号为1)。

    1045:接收完APDU数据后,片式操作系统关闭USB中断,并将端点号返回给上层调用函数。

    步骤1041至1046的代码部分唯一的改变就是ucLogicalChannel的名称改为ucPortNumber。

    此时,步骤1041’至1046’具体为:

    1041’:片式操作系统设置APDU处理状态标志位;

    具体的,APDU处理状态标志位通过设置全局变量ucApduDeal来实现,该变量用于保存APDU处理状态。本实施例设定:ucApduDeal值为0x00代表片式操作系统准备接收APDU数据(即不在处理);ucApduDeal值为0x01代表片式操作系统已经接收到APDU数据(即正在处理);

    1042’:片式操作系统设置发生中断的端点状态标志位;

    具体的,发生中断的端点状态标志位通过设置全局变量ucApduFrom来实现,该变量用于保存中断来自何种端点的数值记录。本实施例设定:ucApduFrom值为0x00代表无APDU数据接收;ucApduFrom值为0x01表示从控制端点接收APDU数据;该值为0x02表示从块端点接收APDU数据;

    1043’:片式操作系统调用APDU接收函数和设置端点号变量;

    其中,端点号变量用于保存接收APDU数据的端点号,为局部变量。具体的,在本实施例中,片式操作系统设置端点号局部变量为0x0FF,表示尚未接收到APDU;

    1044’:片式操作系统APDU对处理状态标志位和发生中断的端点状态标志位赋值;

    具体为:片式操作系统设置全局变量ucApduDeal为0x00,表示准备接收APDU;设置发生中断的端点状态标志位为ucApduFrom为0x00,表示尚无APDU需要接收;

    1045’:片式操作系统判断发生中断的端点类型,并根据判断结果进一步判断APDU处理状态标志位的值,如果该值表明发生中断的端点忙,则发送忙状态,继续处理APDU;否则,从发生中断的端点接收APDU,并设置发生中断的端点的局部变量,返回端点号给上层调用函数。并为每个端点配置相应的当前应用环境,包括为每个端点建立MF、DF、EF及安全状态等项的存储空间,并将其中的内容都进行初始化。

    片式操作系统设置相应的端点号变量。本实施例中,将控制端点对应的端点号设置为0,将块端点对应的端点号设置为1,设置过程是通过为步骤1043’设置的端点号局部变量来完成的。

    具体的,片式操作系统将APDU接收函数ucReceiveApdu()设置成USB中断处理函数,接着读USB中断标志寄存器,判断产生中断的端点类型,如果中断来自控制端点,则继续判断步骤1041’中设置的ucApduDeal是否表明APDU正在处理,如果正在处理,则片式操作系统不接收新的APDU,继续处理已有的APDU,仅发送忙状态;如果不在处理,则片式操作系统对控制端点变量赋值,具体为设置ucApduFrom的值为0x01,之后,通过控制端点接收新的APDU;否则,如果中断来自块端点,则继续判断步骤1041’中设置的ucApduDeal是否表明APDU正在处理,如果正在处理,则片式操作系统不接收新的APDU,仅发送忙状态;如果不在处理,则片式操作系统对块端点变量赋值,具体为设置ucApduFrom的值为0x02,之后,通过控制端点接收新的APDU。

    步骤1041’至1045’的代码部分唯一的改变就是ucLogicalChannel的名称改为ucPortNumber。

    相应地,步骤105为:片式操作系统根据从步骤104中配置好的端点号中接收到的APDU数据配置当前应用环境,并进一步对该应用环境指定的文件进行读或写操作。配置应用环境的步骤同上。具体为:用步骤104中接收到的APDU配置发生中断的端点对应的应用环境,也就是将应用环境中的MF、DF、EF及安全状态等项从初始状态改写成当前状态。

    本发明中的USB key中还可以配置有多对块端点,其中每对块端点对应着一个应用运行环境,片式操作系统在判断出APDU数据从哪个端点写入后,同样需要根据上述操作进入相应的应用运行环境对文件进行操作。

    本发明提供的方法,通过同时启用USB key的控制端点和块端点来传输数据,使得片式操作系统能够同时支持多个应用的访问,从而实现了支持多逻辑通道通信。

    实施例2

    参见图5,本发明实施例还提供了一种支持多逻辑通道通信的设备,包括:

    上电模块201,用于上电,与USB主机之间建立电连接;

    响应枚举模块202,用于响应USB主机的设备枚举;

    配置模块203,用于向USB主机声明至少配置一对块端点和一对控制端点;

    判断处理模块204,用于判断发生中断的端点类型,根据判断结果接收APDU数据,并根据判断出的端点类型处理APDU数据。

    进一步的,该设备还包括:

    应用环境建立模块205,用于向USB主机声明至少配置一对块端点和一对控制端点的步骤之后,判断发生中断的端点类型之前,创建与声明的端点类型相匹配的当前应用环境的步骤;

    应用环境建立模块205包括:

    逻辑通道设置单元,用于设置端点和逻辑通道间的对应关系;

    应用环境配置单元,用于配置各端点对应的当前应用环境。

    其中,逻辑通道设置单元,具体用于将端点和逻辑通道建立一一映射关系。

    其中,应用环境配置单元,具体用于将各个端点对应的当前应用环境的所有内容初始化。

    进一步的,该设备还包括:

    逻辑通道号返回模块206,用于根据判断出的端点类型处理APDU数据之前,返回逻辑通道号。

    其中,应用环境建立模块205中的当前应用环境包括当前目录、当前文件、当前安全状态、当前逻辑通道的标志位和当前安全环境,当前文件具有共享属性;

    当共享属性为允许时,USB主机通过块端点和控制端点对当前文件进行访问;

    当共享属性为不允许时,USB主机通过块端点或控制端点对当前文件进行访问;

    当前安全环境包括加解密算法和密钥索引。

    其中,响应枚举模块202,具体用于接受USB主机的复位操作;

    向USB主机发送设备描述符;

    接受USB主机设置的设备地址;

    向USB主机发送完整的设备描述符;

    向USB主机发送配置描述符;

    向USB主机发送配置集合,配置集合包括配置描述符,接口描述符,端点描述符。

    进一步的,该设备还包括:

    第一接收设置模块207,用于判断发生中断的端点类型,根据判断结果接收APDU数据,并返回相应的逻辑通道号之前,

    调用APDU接收函数;

    设置逻辑通道号变量;

    初始化逻辑通道号变量为未接收到APDU数据;

    打开USB中断,查询是否有USB中断。

    其中,判断处理模块204,具体用于

    当有USB中断时,判断发生USB中断的端点类型;

    如果发生USB中断的端点类型是控制端点,接收来自控制端点的APDU数据,并设置逻辑通道号变量为控制端点的逻辑通道号;

    如果发生USB中断的端点类型是块端点,接收来自块端点的APDU数据,并设置逻辑通道号变量为块端点的逻辑通道号;

    关闭USB中断,并将逻辑通道变量的值返回给上层调用函数。

    进一步的,设备还包括:

    端点号返回模块208,用于根据判断出的端点类型处理APDU数据的步骤之前,返回发生中断的端点号,为发生中断的端点配置当前应用环境。

    其中,端点号返回模块208,具体用于根据判断出的端点类型处理APDU数据的步骤之前,返回发生中断的端点号,将当前应用环境的所有内容初始化。

    进一步的,设备还包括:

    第二接收设置模块209,用于判断发生中断的端点类型,根据判断结果接收APDU数据,并返回相应的端点号之前,

    调用APDU接收函数;

    设置端点号变量;

    初始化端点号变量为未接收到APDU数据;

    打开USB中断,查询是否有USB中断。

    其中,判断处理模块204,具体用于:

    当有USB中断时,判断发生USB中断的端点类型;

    如果发生USB中断的端点类型是控制端点,接收来自控制端点的APDU数据,并设置端点号变量为控制端点的端点号;

    如果发生USB中断的端点类型是块端点,接收来自块端点的APDU数据,并设置端点号变量为块端点的端点号;

    关闭USB中断,并将端点号变量的值返回给上层调用函数。

    进一步的,设备还包括:

    第三接收设置模块210,用于判断发生中断的端点类型,根据判断结果接收APDU数据,并返回相应的逻辑通道号或端点号之前,

    设置APDU处理状态标志位;

    设置发生中断的端点状态标志位;

    调用APDU接收函数、逻辑通道号或端点号变量;

    初始化APDU处理状态标志位为准备接收APDU数据,初始化发生中断的端点状态标志位为未接收到APDU数据,初始化逻辑通道号或端点号变量为未接收到APDU数据;

    打开USB中断,查询是否有USB中断。

    其中,判断处理模块204,具体用于

    当有USB中断时,根据发生中断的端点状态标志位,判断发生USB中断的端点类型;

    如果发生USB中断的端点类型是控制端点,继续判断APDU处理状态标志位的状态,如果是正在处理APDU数据,则发送忙状态,不接收APDU数据;如果没在处理APDU数据,则将发生中断的端点状态标志位设置为控制端点,接收APDU数据,并设置逻辑通道号变量或端点号变量为控制端点的逻辑通道号或端点号;

    如果发生USB中断的端点类型是块端点,继续判断APDU处理状态标志位的状态,如果是正在处理APDU数据,则发送忙状态,不接收APDU数据;如果没在处理APDU数据,则将发生中断的端点状态标志位设置为块端点,接收APDU数据,并设置逻辑通道号变量或端点号变量为块端点的逻辑通道号或端点号;

    关闭USB中断,并将逻辑通道变量或端点号变量的值返回给上层调用函数。

    进一步的,设备还包括:

    加解密模块211,用于对接收的APDU数据进行加密或解密。

    下面,结合具体的APDU指令说明配置当前应用运行环境,及在配置好的应用运行环境中执行各类操作的流程。

    应用环境建立模块205执行APDU复位操作,RAM中的全部运行环境数据被初始化,当前DF信息、当前EF信息、当前安全状态、逻辑通道的标志位和安全环境因子都被设置为0。

    如果判断数据由控制端点传入,则接下来应用环境建立模块205通过控制端点接收如下APDU指令:

    (1)00 A4 00 00 02 DF 01*/选择目录DF1指令/*

    应用环境建立模块205成功选择了该DF1目录后,返回成功码9000;

    本实施例中DF1下设有两个PIN码,分别为PIN0和PIN1,其中PIN0的值为1234,可使当前安全等级设置为1;PIN1的值为5678,可使当前安全等级设置为2。

    (2)00 A4 00 00 02 EF 01*/选择文件EF1指令/*

    应用环境建立模块205成功选择了该EF1文件后,返回成功码9000;

    本实施例中设定EF1文件的读操作的安全等级为1,写操作的安全等级为2,共享属性为“可以”。

    (3)00 B0 00 00 05*/读文件EF1指令/*

    因为当前文件EF1的读操作安全等级为1,因此该指令无法读取EF1文件,应用环境建立模块205向主机返回代码6982,表示读权限不满足。

    (4)00 20 00 80 02 12 34*/校验PIN0/*

    校验PIN0,将当前安全状态等级修改为1,对EF1进行读操作的权限满足,应用环境建立模块205返回成功码9000。

    (5)00 B0 00 00 05 01 02 03 04 05*/读EF1指令/*

    因为步骤(4)中应用环境建立模块205已经通过了对PIN0的检验,所以可以读取EF1中的内容了。

    (6)00 06 00 00 02 88 99*/主机向应用环境建立模块205发出更新EF1指令/*由于对EF1文件进行写操作的安全等级为2,而根据(4),对EF1操作的安全状态等级已经被设置为1,因此无法对EF1文件进行写操作,应用环境建立模块205向主机返回代码6982,表示写权限不满足。

    (7)00 20 00 81 02 56 78*/校验PIN1/*

    根据步骤(6)中应用环境建立模块205向主机返回的代码,主机向应用环境建立模块205发出了校验PIN1的指令,因为PIN1对应着对EF1文件的写操作权限2,因此校验通过,应用环境建立模块205对文件EF1操作的安全等级被设置为2,应用环境建立模块205向主机返回成功码9000。

    (8)00 06 00 00 02 88 99*/主机再次向应用环境建立模块205发出更新EF1指令/*

    因为步骤(7)中应用环境建立模块205成功校验了对EF1进行写操作的权限,所以该步骤中主机能够成功对EF1文件进行写入操作。

    以上为本实施例中主机经由控制端点对文件EF1进行读写操作的范例,主机经由块端点对文件EF1进行读写操作的步骤与此相同,不再赘述。

    本实施例中,如果主机既通过块端点对EF1进行访问,又要通过控制端点对EF1进行访问,则应用环境建立模块205需要判断EF1文件的共享属性是否设置为“可以”。如果EF1文件的共享属性设置为“可以”,则主机可以分别通过块端点和控制端点对EF1文件进行读写操作。其中,对文件EF1进行读写操作的APDU指令同上,都是在校验相应安全等级的PIN码后对EF1文件进行相应的操作。

    如果应用环境建立模块205判断EF1文件的共享属性设置为“不可以”,则如果主机正在通过控制端点对EF1文件进行读或写操作,又接收到了来自块端点的选择EF1文件的APDU指令(对应上述的00 A4 00 00 02 EF 01命令行),则会通过块端点向主机返回报错信息,表明当前选择文件不可使用;如果主机接到该命令后,又通过块端点向应用环境建立模块205发出APDU指令(00 A400 00 02 EF 02)选择了另一个文件EF2,则可以对EF2文件进行读或写操作。

    本实施例中,也可以对通过控制端点或块端点接收的APDU数据进行加解密,下面以对控制端点来的数据加密为例:

    (1)00 A4 00 00 02 DF 01*/选择DF1指令/*

    (2)00 22 41 B8 07 80 01 80 83 02 01 22*/该指令为设置管理安全环境指令/*

    该指令中规定了加密APDU数据所用的密钥及密钥相关信息。

    (3)00 2A 86 80 80明文数据*/该指令为执行安全操作指令/*

    通过该指令,明文数据被加密成密文数据传输。

    本实施例提供的支持多逻辑通道通信的设备,具体可以是智能密钥设备,其具体实现过程详见方法实施例,这里不再赘述。

    本发明提供的设备,通过同时启用USB key的控制端点和块端点来传输数据,使得片式操作系统能够同时支持多个应用的访问,从而实现了支持多逻辑通道通信。

    以上实施例提供的技术方案中的全部或部分内容可以通过软件编程实现,其软件程序存储在可读取的存储介质中,存储介质例如:计算机中的硬盘、光盘或软盘。

    以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

一种支持多逻辑通道通信的方法和设备.pdf_第1页
第1页 / 共42页
一种支持多逻辑通道通信的方法和设备.pdf_第2页
第2页 / 共42页
一种支持多逻辑通道通信的方法和设备.pdf_第3页
第3页 / 共42页
点击查看更多>>
资源描述

《一种支持多逻辑通道通信的方法和设备.pdf》由会员分享,可在线阅读,更多相关《一种支持多逻辑通道通信的方法和设备.pdf(42页珍藏版)》请在专利查询网上搜索。

本发明公开了一种支持多逻辑通道通信的方法和设备,属于通信领域。所述方法包括:USB key上电;所述USB key响应USB主机的设备枚举;所述USB key的片式操作系统向USB主机声明至少配置一对块端点和一对控制端点;所述USB Key的片式操作系统判断发生中断的端点类型,根据判断出的端点类型接收APDU,并处理所述接收到的APDU。所述设备包括:上电模块、响应枚举模块、配置模块、判断处理模块。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 物理 > 计算;推算;计数


copyright@ 2017-2020 zhuanlichaxun.net网站版权所有
经营许可证编号:粤ICP备2021068784号-1