新聞中心

        EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > USB安全鑰功能擴展與優(yōu)化設(shè)計

        USB安全鑰功能擴展與優(yōu)化設(shè)計

        作者: 時間:2009-04-09 來源:網(wǎng)絡(luò) 收藏

        8位隨機數(shù)

        {

        int i;

        for (i = 0; i 8; i++)

        IniDeData[i]=InputDeNum[8];

        return (int *)DESDeData;}

        int* CKeyDllApp::EncryptData(BYTE InputEnNum[8])//導(dǎo)出的獲取加密數(shù)據(jù)的函數(shù)。此函數(shù)需要賦值――8位隨機數(shù),直接調(diào)用并賦8位隨機數(shù)后,此函數(shù)將調(diào)用加密函數(shù)并進(jìn)行加密,最終函數(shù)值為加密后的8位隨機數(shù)

        {

        int i;

        for (i = 0; i 8; i++)

        IniEnData[i]=InputEnNum[i];

        return (int *)DESEnData;}

        編譯、連接后將產(chǎn)生一系列文件,在加上源工程文件,將會有數(shù)量比較龐大的文件系統(tǒng)。最終,只需提供給用戶三個文件即可,它們是:

        ? KeyDllDebugKeyDll.dll,這是DLL文件;

        ? KeyDllDebugKeyDll.lib,這個文件將在應(yīng)用DLL的程序編譯和連接時,提供連接向?qū)?

        ? KeyDllKeyDll.h,這個頭文件告訴用戶此DLL中導(dǎo)出了哪些量可以用。

        DES的DLL導(dǎo)出了一個類:CkeyDllApp。在這個類中共有4個導(dǎo)出函數(shù)可以導(dǎo)入應(yīng)用程序中,用戶在導(dǎo)入了加密DLL后,可以在自己的程序中直接調(diào)用以下函數(shù):

        ? BOOL GetChallenge(),用于在應(yīng)用程序支持循環(huán)結(jié)構(gòu);

        ? int*Challenge(),產(chǎn)生隨機數(shù),并存儲在Challenge[8]中;

        ? int*DecryptData(BYTE []),用于解密隨機數(shù);

        ? int*EncryptData(BYTE []),用于加密隨機數(shù)。

        2.2 鑰新增描述

        鑰和PC傳輸?shù)臄?shù)據(jù)量不大,而且沒有很高的速度要求。因此,在編寫固件時就將其歸類為HID(的人機接口設(shè)備類)。在編寫PC端的驅(qū)動程序時可以直接調(diào)用Windows提供的HID的API函數(shù),大大降低了編程的難度。更重要的是,Windows對HID設(shè)備的支持非常完備,不需要用戶再編寫底層的驅(qū)動。

        鑰端的內(nèi)容主要是:實現(xiàn)在線修改存儲在安全鑰內(nèi)的KeyID和讀取KeyID兩個,分別由函數(shù)Set_KeyID和Get_KeyID實現(xiàn)。KeyID是安全鑰的標(biāo)識符,在安全鑰插到PC上后,被讀出并送往Server進(jìn)行檢查。在初期產(chǎn)品中,KeyID只能是安全鑰首次接到PC上讀取,且不能更改,這為廠家和開發(fā)者造成了不便。因此要更改初期產(chǎn)品中的KeyID,就必須修改安全鑰端的匯編程序,然后再“燒”寫到安全鑰中,非常麻煩。新增可實現(xiàn)KeyID的在線修改。

        PC端的包括兩步。首先要實現(xiàn)在PC上讀取安全鑰內(nèi)的KeyID。通過安全鑰的端點1,8個字節(jié)的KeyID被周期地送出。PC要獲取這些數(shù)據(jù),調(diào)用HID類庫Get_Report(Feature)。從安全鑰發(fā)來的包含KeyID的包的特性及技術(shù)指標(biāo)如表1。

        第2步,在PC上實現(xiàn)修改KeyID功能。調(diào)用HID類庫Set_Report(Feature),將新的KeyID發(fā)送到安全鑰中,具體指標(biāo)如表2所示。

        2.3 如何安全鑰端新增功能的

        (Firmware),就是USB安全鑰硬件上采用的和其他處理器中有關(guān)USB通信的程序。這里采用Motorola公司的8位MC68HC908JB8作為USB安全鑰的控制器芯片。MC68HC908JB8帶有USB接口,8K的Flash,支持USB 1.1版本中的低速(Low Speed)設(shè)備,資源有限,主要用于實現(xiàn)USB通信,價格比較低廉。因此,很適合于USB安全鑰。MC68HC908JB8中USB通信的程序模塊,包含在實現(xiàn)MC68HC908JB8所有功能的匯編程序中。

        圖2是經(jīng)典的的流程圖。考慮到USB安全鑰中USB數(shù)據(jù)通信量很小,不需要考慮通信時間,采用中斷傳輸方式。整個程序就是在等待數(shù)據(jù)傳輸要求的中斷到來,從而進(jìn)入數(shù)據(jù)傳輸模塊。讀/寫數(shù)據(jù)緩沖區(qū),往USB端點(Endpoint)中讀/寫數(shù)據(jù),交給USB模塊收發(fā)數(shù)據(jù)。當(dāng)USB安全鑰不需要傳輸數(shù)據(jù)時,就進(jìn)入掛起狀態(tài)(Suspend)。在得到PC主機遠(yuǎn)程喚醒后啟動,繼續(xù)工作。



        評論


        相關(guān)推薦

        技術(shù)專區(qū)

        關(guān)閉
        主站蜘蛛池模板: 揭西县| 洮南市| 旬邑县| 玛沁县| 兴海县| 道孚县| 白山市| 大庆市| 元阳县| 藁城市| 仙居县| 资兴市| 汕头市| 灵川县| 茌平县| 广东省| 湛江市| 濮阳县| 浠水县| 玉山县| 稻城县| 丽水市| 昂仁县| 道孚县| 富锦市| 深水埗区| 石林| 德保县| 河津市| 钟山县| 鄂温| 宜宾市| 赣州市| 清徐县| 水富县| 巴林左旗| 邵阳县| 营山县| 华宁县| 新源县| 拉萨市|