無驅動USB認證模塊在電子商務中的應用
關鍵詞:USB 人機接口設備(HID) 電子商務 安全認證 接口技術
USB是由Compaq(康柏)、DEC、IBM、Intel、NEC、微軟以及Northern Telecom(北京電訊)等公司于1994年11月共同提出的,自1995年在Comdex上亮相以來至今已廣泛地為各PC廠家所支持,近年來應用日益廣泛。
但是,國內的USB產品還是相對較少。首先,是硬件開發(fā)系統的問題,國內沒有自己USB芯片產品,所有的關于USB接口方面的芯片全部由國外供給,而國內卻沒有任何技術方面的支持,因此開發(fā)進度很難保證。面向芯片的開發(fā)系統更是相對的遲緩。其次,USB產品的軟件研發(fā)也并不是很容易的。USB協議將設備分為不同的類型,每個設備類型都定義了類似功能設備的共同行為和協議。例如,HID人機接口設備主指用于人控制計算機系統操作的器件。對設備進行分類是了消除不同硬件廠商之間的差異,相同類型的設備都由一組標準定義的功能模塊組成。這樣,如果自己開發(fā)的一些設備類,可能是沒有驅動程序的,就面臨著驅動的開發(fā)問題;而驅動開發(fā)是大家公認的有難度的問題等待,都限制了國內USB產品的開發(fā)。
USB產品同時也沖南昌著電子商務平臺?,F在電子商務在社會生產日益廣泛,但是網絡系統是一個開放的系統,存在大量不安全的因素。因此,利用各個電子商務公司開發(fā)出的各種密鑰管理系統、證書系統;同時,利用計算機的USB接口特點開發(fā)出方便的硬件安全認證證書,已經成為各個認證公司追求的安全解決方案。該產品以其方便、靈活、安全等特點,在電子商務中已經應用,并且近年來在金融行業(yè)與智能卡逐漸形成并立的趨勢。
1 安全認證模塊硬件結構
圖1為認證模塊的簡要結構框圖。
幾乎所有的硬件廠商都有USB接口芯片的相關產品,選擇也很多,這里選用的是PDIUSBD12。它是一種性能優(yōu)化的USB器件,通常用于基于微控制器的系統并與微控制器通過高速并行接口進行通信,也支持本地DMA傳輸。該器件采用模塊化的方法實現一個USB接口,允許在眾多可用的微控制器中選擇最合適的作為系統微控制器;允許使用現存的體系結構并使固件投資減到最小,是開發(fā)低成本且高效的USB外圍設備的解決方案。
微處理器和EEPROM是市場上已經成熟的硬件產品,這里采用Atmel公司的單片機和Xicor公司的EEPROM芯片。
2 HID設備類固件程序設計
USB1.1協議定義了11種標準請求,同時定義了6種有關HID控制流程的特定請求。其中:set_report,get_report,給主機和設備提供了一條相互傳遞數據的途徑。
USB單片機控制程序一般須實現三個步驟:
①初始化單片機和所有的外圍電路(包括PDIUSBD12),然后進入主程序循環(huán);
②在接口要求中斷后必須進入相應的中斷服務程序;
③固件程序須完成鑒權、加密、解密的算法。
圖2是模塊程序處理的總體流程圖,可以比較直觀地顯示程序結構。
2.1 系統啟動必須執(zhí)行的通信過程
在沒有安裝驅動程序時,主機提取51固件程序中設備描述表,然后設置USB地址。啟動驅動程序(如果沒有正確的驅動程序,則啟動安裝先導),驅動程序讀取設備描述表、配置描述符等,設置配置,即發(fā)出連接USB命令后,PC先讀取設備描述符,然后發(fā)出設置USB地址SETUP包。設置USB地址后,進行PC客戶驅動與設備初始化。
2.2 USB設備啟動流程
①USB設備接入USB口,發(fā)出連接USB命令。
②主機發(fā)出讀設備描述符兩次。
③主機根據設備描述符―廠商ID、產品ID,啟動相應設備驅動程序。
④設備驅動程序初始化USB設備:
a讀設備描述符;
b讀配置描述符;
c選擇接口、端點(管道),確定傳輸方式。
注意:在發(fā)送配置[,接口(1),端點(1),接口(2),端點(2),…,類,廠商等]聯合描述表時,各描述表的先后順序可隨意,主機USBD根據描述表類型標識區(qū)分各種分描述表。
2.3 固件主程序通信主程序
中斷后主程序主要是通過中斷事件標志判斷并且執(zhí)行相應的程序代碼。主程序流程簡圖如圖3所示。
主程序的示例程序代碼見網絡補充版(http://www.dpj.com.cn)。
2.4 處理主機標準控制請求
由于中斷程序是通過USB接口芯片觸發(fā)的,因此它必須判斷是何種中斷,是否進行處理等情況。中斷程序流程簡圖如圖4所示。
2.5 系統中斷程序中斷處理代碼示例
unsigned char ENDPOINT_A0_FIFO[8];
//判斷輸入的是SETUP請求,并將其讀入緩沖區(qū)ENDPOINT_A0_FIFO...
if((ENDPOINT_A0_FIFO[0]0b01100000)= =0x00){
if(ENDPOINT_A0_FIFO[1]=0x0C){
(*StandardFunctionTable[ENDPOINT_A0_FIFO[1]])();
return;
}
}
[1]處理主機標準控制請求:
void SetAddress(void){
if(ENDPOINT_A0_FIFO[0]= =0b00000000){
//保存USB地址x80|ENDPOINT_A0_FIFO[2];
}
}
注:SetAddress請求實際可分成三個階段:第一階段,Setup包被送至設備;第二個階段是可有可無的階段,數據在設備與主機之間傳送;第三階段,狀態(tài)信息在主機與設備之間傳送。
數據與狀態(tài)傳送的方向要看是主機發(fā)數據給設備還是設備發(fā)數據給主機。狀態(tài)的傳送方向總是與數據傳送方向是相反的。如果沒有數據傳輸階段,則狀態(tài)由設備傳向主機。
Setup包傳送以后的兩個階段的地址保持與Setup包傳送階段一致。USB設備只有在Status階段過后才能改變設備地址。
獲取設備描述符的程序網絡補充版(http://www.dpj.com.cn)。
2.6 數據通信處理以及安全認證處理程序
由于本模塊的主要功能是作為電子商務中的鑰匙和證明書,因此是關鍵技術。其中以內部密鑰的處理過程及加密解密算法模塊為核心技術。
get_report和set_report是HID類設備與主機通信的特定方式,HID規(guī)范定義的特定的標準請求。當主機與HID設備通過get_report(主機從設備獲?。┗騭et_report(設備接受數據)傳遞數據時,必須有一個密鑰的傳送遞鑒定過程。圖5是主機和模塊讀取數據的過程描述。
值得指出的是,EEPROM中的數據都是經過CPU加密寫入的,同時對重要數據設置了保護,即使別人獲取也很難短破譯;用戶只要申請丟失,即可馬上報廢。
3 HID類應用軟件設計
建立設備驅動程序與Windows應用程序接口有兩種方法:
① 設備驅動程序創(chuàng)建內核設備名和符號連接名,Widows應用程序調用。
CreateFile(" u31526符號連接名",
GENERIC_READ|GENERIC_WRITE,
FILE_SHARE_READ|FILE_SHARE_WRITE,
NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
②設備驅動程序創(chuàng)建設備接口。Windows應用程序可調用下列包裝好的函數,打開一個設備,見網絡補充版。
③應用API函數進行應用程序和硬件設備的通信,常用方法:ReadFile WriteFile DeviceIoControl CloseHandle。
為應用USB_Createfile需包含下列頭文件:
#include Setupapi.h
#include initguid.h
#include winioctl.h
結語
USB接口硬件認證模塊裝上計算機后會立刻被系統識別為HID類設備,并且自動裝上驅動程序。實際證明,該無驅動的認證模塊已經在我公司的應用中起到了不可替代的作用,時它的安全性、控制的靈活性、無驅動的方便性也使客戶非常滿意。
評論