新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 實現安全的USB傳輸

        實現安全的USB傳輸

        作者: 時間:2013-08-31 來源:網絡 收藏

        創建示例應用

          本示例基于Microchip USB固件示例中提供的自定義HID應用示例。此應用使用USB的人機接口設備(Human Interface Device,HID)類發送自定義數據。除固件外,還提供用C++編寫的與設備對話的示例程序。本示例將使用PIC18F46J50 USB演示板(部件編號MA180024)作為硬件平臺。

          加密前,使用任何USB協議分析儀均可查看通過總線發送的數據(見圖2)。在圖2中,主機正在發出獲取按鈕狀態的請求,演示板將返回狀態。第一個字節0x81指示此數據包是按鈕狀態,第二個字節0x01表示按鈕未按下。

        分析儀中的數據以普通視圖顯示,任何人均可查看

        圖2 分析儀中的數據以普通視圖顯示,任何人均可查看

          創建此示例的固件時應執行以下步驟:

          將加密源代碼添加到USB應用示例項目中;

          將發送或接收的數據填充為16字節的倍數,該值是此示例中使用的AES算法的塊大小;

          創建加密/解密密鑰。此示例使用128位版本的AES,因此需要16字節密鑰;

          對通過總線向外傳送的數據加密,而對接收自總線的數據解密。

        圖3 與圖2相同的數據傳輸,但已經過加密

          在圖3中,字節1和2的含義并未改變,但已經過加密。因此,沒有密鑰便無法在總線上解密字節1和2。此外,還增加了一個計數器,使每個數據包之間稍有不同。(后文將介紹為什么可能有人希望增加此功能。)

          在數據傳輸的PC端,第一步是包含所需加密庫。這通過添加一個到內置加密模塊的引用實現。使用固件中之前使用的密鑰創建加密/解密密鑰的實例。現在,通過總線發送的數據將是安全的。這并不意味著系統也安全,但離這個目標已越來越近。

          重放攻擊

          盡管發送的數據值現已安全,但由于有重放攻擊,系統仍然不安全。重放攻擊是指某人在捕捉發送的通信后重放相同的數據。在此處給出的示例中,某人可捕捉請求按鈕狀態的事件序列以及按鈕返回數據包,并使用其創建設備來做出簡單的加密響應,指示按鈕已按下。攻擊者無法判斷他們發送了哪些值,但能夠使USB主機認為按鈕已按下。

          前文所述的加密算法功能有助于保護此應用。由于加密算法的設計機制,任何一位發生變化都會得到完全不同的塊值,因此可向每個數據包中加入一個隨機數。這會在通信過程中產生看似非常隨機的行為。雖然這不能完全消除重放攻擊,但它使應用更加難以攻擊。有多種方法可實現隨機數功能,但都有各自的缺點。

          從主機交換到設備的單個隨機數可在初始通信期間生成,該數字隨后會包括在發送的數據中。雖然這有助于使各會話間的數據看起來隨機化,但只要攻擊者確定出通信會話所采用模式,就無法防止他們劫持總線中間通信。

          每次通信都可發送一個惟一的隨機數。雖然這使系統更難以破解(因為攻擊者需要等待已知請求才能發送已知響應),但它要占用更大的數據存儲空間。此方法只有在使用非對稱加密時才真正可行。如果使用對稱加密,則完整的請求和響應表遲早會被發現,最終破解也會變得輕而易舉。

          基于PC的攻擊

          對USB數據傳輸進行加密有助于防止系統被破解,但只要有一個人成功破解系統并將破解方法公之于眾,任何人都能在將來進行破解。

          數據到達PC后,在處理敏感數據時仍然需要考慮一些注意事項。PC上沒有數據是安全的,即使其已經加密。更為老練的攻擊者能夠編寫應用程序來掃描PC上的RAM,以尋找可能的密鑰或解密數據。如果在PC上解密通過USB發送的數據,則在某一時刻,密鑰與原始解密數據將駐留在RAM中,從而可被應用程序讀取。這需要更長時間和更高級的專業技術才能破解,但仍然存在破解的可能性。在這種情況下,非對稱加密可再次幫助保護數據,因為破解需要用戶在每次連接設備后都檢測新密鑰。但這仍然無法完全保護系統。

          解密后的數據僅存在于安全設備的應用最不可能被破解。此模型在某些應用中尤為適用。例如,加密的自舉程序可加密安全服務器上的。hex文件,并且只在攻擊者無法觸及單片機時才在單片機上解密數據。再比如一個將捕捉的數據文件發送到PC的數據記錄器,其并不在本地解密數據和顯示結果,而是將加密數據通過Internet發送到安全服務器來解密數據,然后將不含敏感數據的結果摘要返回給用戶。

          總結

          對于生成并傳輸惟一或隨機機密數據的應用來說,可以用最少的成本輕而易舉地進行加密。而靜態程度高、傳輸行為可預測的應用則略難保護。在所有加密系統中,都不應假定數據是安全的,而應該通過加密阻止數據竊取。增加密鑰長度、在數據載荷中加入隨機性以及非對稱密鑰交換等技術均可提高對潛在數據竊取的抵御程度。其他一些方法同樣有助于保護傳輸的數據,這些方法各自均有優缺點。在任何應用中設計加密都需要在抵御程度與實現該抵御所需的成本之間找到平衡。

        c++相關文章:c++教程



        上一頁 1 2 下一頁

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 临猗县| 高淳县| 许昌市| 昌邑市| 蒙阴县| 星座| 宁陵县| 定结县| 隆林| 化德县| 来安县| 五指山市| 镇雄县| 乃东县| 略阳县| 罗平县| 彝良县| 南投县| 日喀则市| 临桂县| 岳阳县| 无为县| 和硕县| 前郭尔| 孝感市| 弋阳县| 兰坪| 柳江县| 长垣县| 西贡区| 金寨县| 沙坪坝区| 江都市| 于田县| 白河县| 沁源县| 博爱县| 宁阳县| 炉霍县| 凤山县| 潼南县|