實(shí)現(xiàn)安全的USB傳輸
USB定義了多組指定設(shè)備工作方式的設(shè)備類別。這些設(shè)備中有許多已具有預(yù)定義的通信數(shù)據(jù)格式,設(shè)備必須遵守這些數(shù)據(jù)格式才能正常工作。這使得鼠標(biāo)、鍵盤和U盤等設(shè)備可在所有平臺(tái)上工作,而無需在首次連接時(shí)安裝驅(qū)動(dòng)程序。這些設(shè)備實(shí)際不需要任何類型的安全機(jī)制,因?yàn)槠渌瑪?shù)據(jù)是已知的。其他不使用預(yù)定義數(shù)據(jù)格式的設(shè)備可以靈活地發(fā)送自定義應(yīng)用數(shù)據(jù)。由于大多數(shù)USB都是針對(duì)預(yù)定義數(shù)據(jù)應(yīng)用,而不是自定義應(yīng)用設(shè)計(jì)的,因此沒有針對(duì)這些設(shè)備類型的內(nèi)置安全或加密機(jī)制。
對(duì)于自定義USB應(yīng)用的開發(fā)人員來說, USB分析儀的廉價(jià)(甚至免費(fèi))和易用使問題更加棘手。這些分析儀可捕捉USB通信,因此任何人只需非常少的專業(yè)技術(shù)知識(shí)便可看到USB通信并可能獲得機(jī)密信息。
設(shè)計(jì)注意事項(xiàng)
創(chuàng)建更安全的USB自定義應(yīng)用的第一步是選擇滿足應(yīng)用需求的加密算法?,F(xiàn)在有多種算法可供選擇,它們?cè)谔峁┑陌踩?、大小、加密或解密?shù)據(jù)塊所需時(shí)間以及對(duì)各種編譯器的固有支持方面有所差異。高級(jí)加密標(biāo)準(zhǔn)(Advanced Encryption Standard,AES)是一個(gè)很好的選擇,因?yàn)樗喈?dāng)安全。例如,美國政府已批準(zhǔn)將AES用于標(biāo)有SECRET(機(jī)密)和TOP SECRET(絕密)且對(duì)密鑰大小有不同要求的應(yīng)用(http://www.cnss.gov/Assets/pdf/cnssp_15_fs.pdf)。AES可通過一段規(guī)模不大的代碼(約8 KB)實(shí)現(xiàn)。就提供的安全級(jí)別而言,AES是一種較好的算法。此外,。NET Framework默認(rèn)支持AES。
.NET framework默認(rèn)支持的算法還有數(shù)據(jù)加密標(biāo)準(zhǔn)(Data Encryption Standard,DES)和三重?cái)?shù)據(jù)加密標(biāo)準(zhǔn)(Triple Data Encryption Standard,TDES),它們都能用來替代ASE算法,因而對(duì)此無需花費(fèi)過多時(shí)間。與AES相比,它們速度較慢,安全性較差且代碼更大,但仍在許多應(yīng)用中使用。
微型加密算法(XTEA)的第二版也是一個(gè)備選算法。它在默認(rèn)情況下不受編譯器工具支持,但其非常簡單且容易實(shí)現(xiàn)。XTEA是最小的可用算法之一,特別適合于存儲(chǔ)空間較小的應(yīng)用。XTEA的安全級(jí)別不如AES明確,因?yàn)樗形唇?jīng)過嚴(yán)格的測試。但根據(jù)迄今為止執(zhí)行的測試來看,它還是比較安全的。有關(guān)各種加密算法的更多信息,請(qǐng)參見圖1以及Microchip應(yīng)用筆記AN953和AN1044。
圖1 AES和XTEA加密算法比較
選擇加密算法時(shí)首先要考慮其有效密鑰大小以及是否應(yīng)該使用加密。一些國家(包括美國)將具有特定密鑰大小的算法視為軍需品。因此,這些算法的出口會(huì)受到限制。根據(jù)算法類型和所用密鑰大小,應(yīng)用程序可能需要政府批準(zhǔn)才能出口。
選擇算法后,下一步是考慮塊大小對(duì)應(yīng)用的影響。在本例中,AES的塊大小為16字節(jié)。這意味著應(yīng)用通過USB總線發(fā)送的數(shù)據(jù)量必須是16字節(jié)的倍數(shù)。如果需要發(fā)送小于16字節(jié)的數(shù)據(jù)載荷,則需要填充數(shù)據(jù)以滿足塊大小要求。如果使用填充法將數(shù)據(jù)塊補(bǔ)充完整,還必須將這些字節(jié)傳送到解密設(shè)備。加密算法的設(shè)計(jì)機(jī)制是:只要某一位出錯(cuò)或丟失,數(shù)據(jù)塊便無法解密。
Microchip Technology(美國微芯科技公司)提供免費(fèi)的USB協(xié)議棧,其中包括多個(gè)自定義應(yīng)用風(fēng)格的演示,以及AES、DES、XTEA和其他加密算法的實(shí)現(xiàn)。該協(xié)議??稍谖⑿竟镜木W(wǎng)站中找到,數(shù)據(jù)加密庫(部件編號(hào)SW300052)也可在網(wǎng)站內(nèi)找到。該協(xié)議棧和數(shù)據(jù)加密庫可與免費(fèi)的Microsoft Visual Studio C++ Express Edition編譯器及其對(duì)AES算法的固有支持相結(jié)合,以創(chuàng)建加密的自定義USB應(yīng)用示例。
需要考慮的最后一點(diǎn)是加密密鑰的生成和維護(hù)。對(duì)于目前可用的高級(jí)加密算法而言,數(shù)據(jù)失竊的根源通常并不是加密算法,而是系統(tǒng)背后的人。對(duì)稱加密算法(例如AES、TDES和XTEA)具有快速、小巧和安全等優(yōu)點(diǎn)。其主要缺點(diǎn)是雙方必須都知道同一密鑰才能加密或解密數(shù)據(jù)。一旦系統(tǒng)被破解,就會(huì)始終保持在破解狀態(tài),因此破解將來的傳輸不再需要額外的精力。這正是存在非對(duì)稱加密算法的主要原因。非對(duì)稱算法創(chuàng)建一個(gè)公鑰和一個(gè)私鑰,這樣在交換信息時(shí)無須使用共享密鑰。這有助于防止系統(tǒng)的共享密鑰泄露并保護(hù)系統(tǒng)免遭“破解”,因?yàn)槊看芜B接都生成一個(gè)新算法。非對(duì)稱算法常用于交換惟一生成的可用對(duì)稱密鑰,以使后續(xù)通信安全快速。非對(duì)稱算法的主要缺點(diǎn)是,與對(duì)稱加密算法相比,需要占用大量固件空間才能實(shí)現(xiàn),且速度非常慢。本文介紹的示例中使用對(duì)稱加密算法,非對(duì)稱算法的實(shí)現(xiàn)過程十分相似。
c++相關(guān)文章:c++教程
評(píng)論