實(shí)現安全的USB傳輸
創(chuàng )建示例應用
本示例基于Microchip USB固件示例中提供的自定義HID應用示例。此應用使用USB的人機接口設備(Human Interface Device,HID)類(lèi)發(fā)送自定義數據。除固件外,還提供用C++編寫(xiě)的與設備對話(huà)的示例程序。本示例將使用PIC18F46J50 USB演示板(部件編號MA180024)作為硬件平臺。
加密前,使用任何USB協(xié)議分析儀均可查看通過(guò)總線(xiàn)發(fā)送的數據(見(jiàn)圖2)。在圖2中,主機正在發(fā)出獲取按鈕狀態(tài)的請求,演示板將返回狀態(tài)。第一個(gè)字節0x81指示此數據包是按鈕狀態(tài),第二個(gè)字節0x01表示按鈕未按下。
圖2 分析儀中的數據以普通視圖顯示,任何人均可查看
創(chuàng )建此示例的固件時(shí)應執行以下步驟:
將加密源代碼添加到USB應用示例項目中;
將發(fā)送或接收的數據填充為16字節的倍數,該值是此示例中使用的AES算法的塊大??;
創(chuàng )建加密/解密密鑰。此示例使用128位版本的AES,因此需要16字節密鑰;
對通過(guò)總線(xiàn)向外傳送的數據加密,而對接收自總線(xiàn)的數據解密。
圖3 與圖2相同的數據傳輸,但已經(jīng)過(guò)加密
在圖3中,字節1和2的含義并未改變,但已經(jīng)過(guò)加密。因此,沒(méi)有密鑰便無(wú)法在總線(xiàn)上解密字節1和2。此外,還增加了一個(gè)計數器,使每個(gè)數據包之間稍有不同。(后文將介紹為什么可能有人希望增加此功能。)
在數據傳輸的PC端,第一步是包含所需加密庫。這通過(guò)添加一個(gè)到內置加密模塊的引用實(shí)現。使用固件中之前使用的密鑰創(chuàng )建加密/解密密鑰的實(shí)例?,F在,通過(guò)總線(xiàn)發(fā)送的數據將是安全的。這并不意味著(zhù)系統也安全,但離這個(gè)目標已越來(lái)越近。
重放攻擊
盡管發(fā)送的數據值現已安全,但由于有重放攻擊,系統仍然不安全。重放攻擊是指某人在捕捉發(fā)送的通信后重放相同的數據。在此處給出的示例中,某人可捕捉請求按鈕狀態(tài)的事件序列以及按鈕返回數據包,并使用其創(chuàng )建設備來(lái)做出簡(jiǎn)單的加密響應,指示按鈕已按下。攻擊者無(wú)法判斷他們發(fā)送了哪些值,但能夠使USB主機認為按鈕已按下。
前文所述的加密算法功能有助于保護此應用。由于加密算法的設計機制,任何一位發(fā)生變化都會(huì )得到完全不同的塊值,因此可向每個(gè)數據包中加入一個(gè)隨機數。這會(huì )在通信過(guò)程中產(chǎn)生看似非常隨機的行為。雖然這不能完全消除重放攻擊,但它使應用更加難以攻擊。有多種方法可實(shí)現隨機數功能,但都有各自的缺點(diǎn)。
從主機交換到設備的單個(gè)隨機數可在初始通信期間生成,該數字隨后會(huì )包括在發(fā)送的數據中。雖然這有助于使各會(huì )話(huà)間的數據看起來(lái)隨機化,但只要攻擊者確定出通信會(huì )話(huà)所采用模式,就無(wú)法防止他們劫持總線(xiàn)中間通信。
每次通信都可發(fā)送一個(gè)惟一的隨機數。雖然這使系統更難以破解(因為攻擊者需要等待已知請求才能發(fā)送已知響應),但它要占用更大的數據存儲空間。此方法只有在使用非對稱(chēng)加密時(shí)才真正可行。如果使用對稱(chēng)加密,則完整的請求和響應表遲早會(huì )被發(fā)現,最終破解也會(huì )變得輕而易舉。
基于PC的攻擊
對USB數據傳輸進(jìn)行加密有助于防止系統被破解,但只要有一個(gè)人成功破解系統并將破解方法公之于眾,任何人都能在將來(lái)進(jìn)行破解。
數據到達PC后,在處理敏感數據時(shí)仍然需要考慮一些注意事項。PC上沒(méi)有數據是安全的,即使其已經(jīng)加密。更為老練的攻擊者能夠編寫(xiě)應用程序來(lái)掃描PC上的RAM,以尋找可能的密鑰或解密數據。如果在PC上解密通過(guò)USB發(fā)送的數據,則在某一時(shí)刻,密鑰與原始解密數據將駐留在RAM中,從而可被應用程序讀取。這需要更長(cháng)時(shí)間和更高級的專(zhuān)業(yè)技術(shù)才能破解,但仍然存在破解的可能性。在這種情況下,非對稱(chēng)加密可再次幫助保護數據,因為破解需要用戶(hù)在每次連接設備后都檢測新密鑰。但這仍然無(wú)法完全保護系統。
解密后的數據僅存在于安全設備的應用最不可能被破解。此模型在某些應用中尤為適用。例如,加密的自舉程序可加密安全服務(wù)器上的。hex文件,并且只在攻擊者無(wú)法觸及單片機時(shí)才在單片機上解密數據。再比如一個(gè)將捕捉的數據文件發(fā)送到PC的數據記錄器,其并不在本地解密數據和顯示結果,而是將加密數據通過(guò)Internet發(fā)送到安全服務(wù)器來(lái)解密數據,然后將不含敏感數據的結果摘要返回給用戶(hù)。
總結
對于生成并傳輸惟一或隨機機密數據的應用來(lái)說(shuō),可以用最少的成本輕而易舉地進(jìn)行加密。而靜態(tài)程度高、傳輸行為可預測的應用則略難保護。在所有加密系統中,都不應假定數據是安全的,而應該通過(guò)加密阻止數據竊取。增加密鑰長(cháng)度、在數據載荷中加入隨機性以及非對稱(chēng)密鑰交換等技術(shù)均可提高對潛在數據竊取的抵御程度。其他一些方法同樣有助于保護傳輸的數據,這些方法各自均有優(yōu)缺點(diǎn)。在任何應用中設計加密都需要在抵御程度與實(shí)現該抵御所需的成本之間找到平衡。
c++相關(guān)文章:c++教程
評論