文章横幅PC版
文章横幅iPad版
文章横幅手机版

智能密码钥匙用通用数据总线传输数据的方法

TIME:2019-03-20 14:19  click: 180 次 来源: 未知

智能密码钥匙采用通用数据总线进行数据传输的方法,通过如下过程实现。

(1)主机应用程序通过磁盘设备发送INQUIRY SCSI命令识别智能密码钥匙。在智能密码钥匙接入计算机系统时,操作系统会向智能密码钥匙发送取描述符指令,该指令主要是获得该硬件的厂商和产品及序列号信息。在加载时,操作系统首先要向其发送一个INQUIRY命令包,其中关键是将DeviceType域设置为DIRECT _ACCESS_DEVICE,则智能密码钥匙就表现为磁盘设备,同时,在其中赋以厂商和产品字符串,以后在程序中就可以根据这两个标志来识别智能密码钥匙。在这里主要利用idVendor idProduct iManufacturer iSerialNumber域定义生产商、产品ID及硬件序列号。这时iManufacturer iSerialNumber是指向一个字符串的索引,这个字符串就是下面所提到的取字符串描述符的命令。

(2)当操作系统处理完设备描述符后,将会发送取配置描述符的命令,该命令主要含有配置描述符、接口描述符、端点描述符和字符串描述符。

本发明中,实现磁盘类设备的关键在于处理接口描述符,其中关键的域是bInterfaceClass和bInterfaceProtocol,在本发明中bInterfaceClass的值为08H,该值表示智能密码钥匙的类是MESS STORAGE,bInterfaceProtocol的值是50H,表示智能密码钥匙的通信协议选择BULK-ONLY协议。将该描述符处理完后,操作系统会自动加载驱动,接着由MESS STORAGE生成磁盘物理设备对象,再由磁盘驱动加载成磁盘设备。字符串描述符主要提供第一步中取设备描述符需要的字符串,iManufacturer和iSerialNumber等只是索引,该索引指向本次字符串描述符中所发送的字符串。这三个域分别是字符串的字节数、描述符类型和字符串。经过以上几步,智能密码钥匙的初始化就完成了。

此外,通过READCAPS获得智能密码钥匙能力。操作系统通过该SCSI命令来获得智能密码钥匙容量等信息,只需将SCSI命令包的DataBuf域填充一个READ_CAPACITY_DATA结构的数据,就完成了智能密码钥匙能力的处理。其中,LogicalBlockAddress域表示逻辑块的数量,BytesPerBlock域表示块大小,这个块的大小是一次通信的最小数据量,根据软件保护产品的特点,可将这个数据设置为256、128或更低,智能密码钥匙的总容量就是这两个数量的乘积。

(3)智能密码钥匙初始化完毕后,应用程序可通过API来与智能密码钥匙通信,当程序与智能密码钥匙通信时,智能密码钥匙在接收到的CBW数据包中解析出SCSI数据包。

当上层应用程序通过ReadFile对智能密码钥匙读取数据时,系统磁盘驱动程序将该命令转换为相应的SCSI命令READ10并传递到下层。由于处理该命令与标准磁盘不同,只实现部分协议,无需考虑偏移与长度等信息,只需考虑DataBuf域,该域含了自定义的通信协议,即向智能密码钥匙发送命令时由智能密码钥匙返回的用户数据。

(4)智能密码钥匙根据SCSI命令来进行处理,最后返回一个状态包CSW给应用程序,这样就完成了应用程序与智能密码钥匙的一次通信过程。

智能密码钥匙根据通用串行总线通信协议,把数据包逐步解析成用户数据包,并根据用户数据包执行相关指令,包括密码运算与自定义处理。在此过程中,通过解析数据包内的指令与数据,鉴别使用者的身份,从而确定对智能密码钥匙内数据读写的权限。

(5)当上层应用程序通过WriteFile对智能密码钥匙写入数据时,系统磁盘驱动程序将该命令转换为相应的SCSI命令WRITE10并传递到下层。由于处理该命令与标准磁盘不同,只实现部分协议,不需要考虑偏移和长度等信息,只需考虑DataBuf域,该域含了自定义的通信协议,即向智能密码钥匙发送命令时的用户数据。

另外,主机程序直接与智能密码钥匙交互,通过智能密码钥匙内的操作系统控制,而不是直接通过文件系统操作智能密码钥匙中的文件。

上一篇:智能密码钥匙基于非对称密码算法的PIN传输 下一篇:密钥是什么