U盘唯一性标识信息的构建与识别方法
- 格式:doc
- 大小:16.52 KB
- 文档页数:6
U盘唯一性标识信息的构建与识别方法 摘 要: 根据涉密存储介质保密管理的要求,以U盘为例,提出一种新颖的、以USB协议和大容量存储类协议为基础的移动存储介质管理架构。存储介质的唯一性标识由VID、PID和硬件序列号组成。同时还提出了基于CY7C67300嵌入式主机控制器的USB总线介质管理方案。通过USB总线枚举方式,逐一识别介质唯一性标识并通过超级终端显示。测试结果证明,该标识和识别方法可以用于移动存储介质安全管理系统,从而使涉密移动存储介质处于实时监控状态下,大大减少了泄密风险。 关键词: 信息安全; 移动存储介质; 唯一性标识; 嵌入式USB主机控制器; USB总线枚举
按照保密管理规定,涉密单位职工使用完U盘等移动存储介质必须当天按时归还保密员,并存储在密码文件柜中(如部队的枪支入架)。保密文件柜由保密员人工管理,涉及借出、归还、监督、提醒等事项,难免疏漏。若个别人员违规(未经审批许可)携带涉密U盘外出,可能导致涉密U盘丢失或涉密数据失窃,泄漏国家或商业秘密,造成巨大的损失。因此,涉密U盘的保密管理,需要依靠创新的技术手段,保障保密管理规章制度的贯彻落实。为了实现涉密U盘保密管理的智能化“机控”,需要为每个U盘定义一个可查询、不易修改的唯一性标识(Unique identifier),且该标识应很容易与使用者绑定,从而使涉密U盘的保密管理责任到人,以减少泄密隐患。 本文以通用串行总线USB1.0、USB2.0协议为基础,采用CY7C67300单芯片实现嵌入式USB主机控制器,完成该控制器对U盘的控制以及读取U盘唯一性标识信息的功能。 1 工作原理 1.1 唯一性标识的构建 USB控制/批量/中断CBI(Control/Bulk/Interrupt)传输协议和USB Bulk-Only协议中规定,U盘等符合大容量存储类MSC(Mass Storage Class)协议的设备,如果其序列号索引值不为0,则U盘内必定含有一个唯一的序列号与之匹配[1-2]。如表1所示,在其设备描述符中偏移值为16的字段只规定了其序列号的索引值,如果其索引值为0,则说明此设备不含序列号,反之,设备必定含有一个唯一的序列号。序列号的格式如表2所示,表中,第一项为序列号的长度,其最小值为26;第二项为序列号的类型,其值为3,说明序列号为字符串描述符;第三至第n×2项为序列号的内容。USB CBI 和Bulk-Only协议中规定序列号至少由12个有效的数字字符组成,这些数字字符的有效范围为:数字0~9,字符A~F。
本文采用16 bit VID(设备描述符偏移量为8)+16 bit PID(设备描述符偏移量为10)+序列号构成GUID(全球唯一ID)作为U盘的唯一性标识。 1.2 唯一性标识的识别 如前所述,获取U盘唯一性标识就是获取设备描述符中的VID、PID和字符串描述符中的序列号。本文采用USB总线枚举方式获得U盘的唯一性标识。 总线枚举是指对总线上接入的USB设备进行识别和寻址操作。当USB主机发现有设备连接时,立刻通过默认的地址0发送读取设备描述符的命令,然后利用控制传输的标准命令为其动态配置设备地址,再通过该地址继续读取有关设备、配置、接口以及字符串描述符,并建立有关信息的资料区[3]。这些信息主要包括VID、PID和端点信息等。其中,VID、PID的获取是通过Get_descriptor( )标准请求命令实现的。字符串描述符信息的获取没有明确的定义,需要开发一种用于获取字符串信息的命令请求。 本文利用嵌入式控制器完成USB主机功能,通过USB主机实现总线枚举、控制传输以及获取设备描述符的标准请求命令和获取字符串描述符的请求命令,从而实现U盘唯一性标识信息识别装置的设计。 2 装置设计 2.1 硬件结构 U盘唯一性标识识别装置的硬件结构框图。采用CY7C67300作为核心处理器,CY16工作在独立模式下,控制CY7C67300芯片内部的USB串行接口引擎SIE(Serial Interface Engine)完成USB主机的功能,控制LTC3186芯片进行电平转换,完成异步串行收发器UART可以用来调试。通过I2C接口控制EEPROM以下载程序。通过外部存储器接口控制外部存储器以扩展代码和数据存储空间。
核心处理芯片CY7C67300是CYPRESS公司的嵌入式主机/外设控制器,其内部结构。主机部分包括高性能16位48 MHz RISC微处理器CY16,该处理器可以独立工作(独立模式),也可以与其他处理器协同工作(协处理器模式);2个SIE,每个可单独配置,有2个端口USB-A、USB-B;可配置的I/O电路模块能连接众多标准接口,高达16位可编双向数据I/O,多达32位通用I/O;4 K×16 bit内部掩模板ROM,内有基本输入输出系统BIOS,支持I2C、EEPROM,外部ROM、UART、USB等外设端口通信就绪状态;8 K×16 bit内部RAM能由用户配置;具有外接SRAM,DRAM和ROM存储器接口,芯片外部可以扩展512 KB存储空间;芯片内部集成有定时器和看门狗电路;工作电压3.3 V,100引脚TQFP封装。
2.2 嵌入式USB主机设计 采用CY7C67300芯片实现嵌入式USB主机,嵌入式主机结构。
嵌入式主机由BIOS、框架结构(Frameworks)和应用驱动层(AppDrive)三部分组成。其工作原理为:Frameworks发现有新的设备连接时,创建一个device object(设备列表)并查询是否与USB大容量存储类驱动USB MSC Driver匹配,如果匹配,Frameworks则调用设备驱动程序中的start-device()函数;如果不匹配,则返回继续监测是否有新的设备连接。在嵌入式主机结构中,应用程序和设备驱动程序并未完全分开,而是集成在一起称之为AppDrive,当AppDrive开始运行时,它会创建USB请求块URBs(USB Requst Block)给Frameworks去处理。当URB处理完成后,Frameworks调用由AppDrive指定的回调函数。Frameworks利用在通用主机控制器接口UHCI(Universal Host Controller Interface)标准中定义的调度算法建立传输描述列表TD-List(Transfer Descriptor List)并将TD-List传输给EZ-HOST的BIOS去处理,BIOS返回一个新的TD-List状态信息给Frameworks,并将TD-List内容传给USB总线。Frameworks开始创建下一帧的TD-List,TD_List结构体定义[4]如下: typedef struct TD { void *address; uint16 length; uint16 port_num; uint16 ep; uint16 pid; uint16 dev_address ; uint8 control; uint8 status; uint16 retry_cnt; uint16 retry_xfer_type; uint16 retry_active; uint16 unused_3; uint16 residue; struct TD *next_TD; } TD; 该结构体包含数据缓存的基地址、数据长度和端口号以及传输的包标识pid(packet identifier)、主机给设备分配的地址、控制位和状态位、重传次数、传输类型以及传输是否有效等成员变量。 2.2.1 嵌入式USB主机 BIOS USB主机BIOS包含HUSB-SIE1-INIT-INT, HUSB-SIE2-INIT-INT和HUSB-RESET-INT3个软件中断,其中,HUSB-SIEx-INIT-INT(x=1,2)用于执行TD-List,主要实现以下功能:设置SIE为主机并执行初始化,检测是否有等待传输的TD-List,如果有,继续进行TD-List的传输;通过USB传输所有的TD 数据;更新TD状态并对错误进行处理。HUSB-RESET-INT执行以下3个功能:USB 复位;速度检测;帧开始SOF(Start of Frame)和包结束EOP(End of Packet)产生。 2.2.2 USB主机控制器 Frameworks 自主开发USB主机固件任务相当艰巨,而CYPRESS公司提供了大量的USB主机固件程序,系统在此基础上可进行修改,节约了大量的开发时间,提高了系统完成的效率。 当系统上电时,Frameworks会不断地查询是否有新的设备连接,如果发现有新的设备,Frameworks会建立如下所示的设备对象。 typedef struct USB_DEVICE { uint8 sie; uint8 port; uint8 address; uint8 hub_port; uint8 speed; uint8 EP0_max_pkt; uint8 enum_state; uint8 otg_attributes; USB_DEVICE_DESCRIPTOR dev_descr; STRING_DESCRIPTOR_NODE dev_string_descr; uint8 cfg_descr[]; uint8 setup_packet_buffer[] USB_INTERFACE_DESCRIPTOR *inf_descr; USB_HUB_DESCRIPTOR hub_descr; void *hub_context; void *msc_context; bool idleCheck;