USB 演算法 MCU 安全 加密 微芯

對稱/非對稱加密技術把關 USB傳輸安全滴水不漏

2013-02-04
越來越多的嵌入式設計趨向於與電腦進行通訊,促使裝置對通用序列匯流排(USB)連接的需求持續增長。然而,若USB沒有內置安全機制來保護匯流排上通訊的資料,對於許多商業應用而言,將會是麻煩的問題。
USB定義了多組指定裝置工作方式的裝置類別,這些裝置有許多已具有預定義的通訊資料格式,裝置必須遵守這些資料格式才能正常工作。這使得滑鼠、鍵盤和隨身碟等裝置可在所有平台上工作,而毋須在首次連接時安裝驅動程式。這些裝置實際上不需要任何類型的安全機制,因為其所含資料是已知的。

另一方面,其他不使用預定義資料格式的裝置可以靈活地發送自訂應用資料。主要是由於大多數USB都是針對預定義資料應用,而不是自訂應用所設計的,因此並沒有針對這些裝置類型的內置安全或者是加密機制。

對於自訂USB應用的開發人員來說,廉價的USB訊號分析儀和易於使用的資料讀取介面,讓USB在傳輸時的資料安全問題更加棘手。這些分析儀可擷取USB通訊,因此任何人只需要非常少的專業技術知識,便可輕易看到USB通訊並可能獲得機密資訊。

全盤考量應用需求 各式加密演算法特性迥異

建立安全的USB通訊應用第一步是選擇滿足應用需求的加密演算法。目前市場上有多種演算法可供工程師選擇,這些演算法在安全性、大小、加密或解密資料所需時間,以及對各種編譯器的固有支援方面皆有所差異。進階加密標準(Advanced Encryption Standard, AES)是一個很好的選擇,因為它相當安全。例如,美國政府已批准將AES用於標有機密(SECRET)和極機密(TOP SECRET)的資料,且對金鑰大小有不同要求的應用。AES可透過一段規模不大的程式碼實現,就提供的安全級別而言,AES是一種較好的演算法。此外,NET Framework內定有支援AES。

NET Framework預設支援的演算法還有資料加密標準(Data Encryption Standard, DES)和三重資料加密標準(Triple Data Encryption Standard, TDES),它們都能用來替代ASE演算法。與AES相比,它們速度不僅較慢,而且安全性較差且代碼更大,但目前仍在許多應用中使用。

另外,微型加密演算法(XTEA)的第二版也是一個備選演算法。它在預設情況下不受編譯器工具支援,但其非常簡單且容易實現。XTEA是最小的可用演算法之一,特別適合於存儲空間較小的應用。XTEA的安全級別不如AES明確,因為它尚未經過嚴格的測試。但根據迄今為止執行的測試來看,它仍是較為安全。表1為AES和XTEA加密演算法比較。

選擇加密演算法時,首先要考慮其有效金鑰大小以及是否應該使用加密。目前有一些國家將具有特定金鑰大小的演算法視為軍用需求品,因此,這些演算法的出口基本上會受到限制。根據演算法類型和所用金鑰大小,應用程式可能須要政府批准才能出口。

選擇演算法後,下一步是考慮區塊大小對應用的影響。在本例中,AES的區塊大小為16位元組,這意味著應用通過USB匯流排發送的資料量必須是16位元組的倍數;如果須要發送小於16位元組的資料長度,則須要填充資料以滿足區塊大小要求;如果使用填充法將資料區塊補充完整,還須將這些位元組傳送到解密裝置。至於加密演算法的設計機制則是只要某一位元出錯或遺失,資料區塊便無法解密。目前已有業者可提供免費的USB協議堆疊,其中包括多個自訂應用風格的演示,以及AES、DES、XTEA和其他加密演算法的實現。

對於演算法的選擇,須考慮的最後一點是加密金鑰的生成和維護。對於目前可用的進階加密演算法而言,資料失竊的根源通常並不是加密演算法,而是系統背後的人。如AES、TDES和XTEA等對稱加密演算法具有快速、小巧和安全等優點,其主要缺點是雙方必須都知道同一金鑰才能加密或解密資料。一旦系統被破解,就會始終保持在破解狀態,因此破解將來的傳輸不再需要額外的精力,這正是非對稱加密演算法存在的主要原因。

非對稱演算法建立一個公開金鑰和一個私密金鑰,這樣在交換資訊時無須使用共用金鑰。這有助於防止系統的共用金鑰洩漏並保護系統免遭「破解」,因為每次連接都生成一個新演算法。非對稱演算法常用於交換唯一生成的可用對稱金鑰,以使後續通訊安全快速。與對稱加密演算法相比,非對稱演算法的主要缺點是須要占用大量韌體空間才能實現,且速度非常慢。本文介紹的範例中使用對稱加密演算法,但安全性與非對稱演算法的實現過程十分相似。

導入加密模組 輕鬆建立USB加密金鑰

本範例為基於微芯(Microchip)USB韌體範例中所提供的自訂人機介面裝置(HID)應用範例。此應用使用USB的HID類發送自訂資料。除了韌體之外,還提供用C++編寫、用來與裝置對話的範例程式,本範例將使用PIC18F46J50 USB演示板作為硬體平台。

加密前,使用任何USB協議分析儀均可查看通過匯流排發送的資料。在圖1中,主機正在發出獲取按鈕狀態的請求,演示板將返回狀態,第一個位元組0x81指示此資料包是按鈕狀態,第二個位元組0x01表示按鈕未按下。

圖1 尚未加密的普通視圖顯示

建立此範例的韌體時應執行四個步驟。第一,將加密原始程式碼添加到USB應用示範專案中;其次,將發送或接收的資料填充為16位元組的倍數,該值是此範例中使用的AES演算法的區塊大小;第三,建立加密/解密金鑰。此範例使用128位元版本的AES,因此需要16位元組金鑰;最後對通過匯流排向外傳送的資料加密,而對接收自匯流排的資料解密。

如圖2所示,由於位元組1和2的含義並未改變,但已經過加密,因此,沒有金鑰便無法在匯流排上解密位元組1和2。此外,還增加了一個計數器,使每個資料包之間稍有不同。

圖2 已加密的資料傳輸視圖

另一方面,在資料傳輸的PC端,第一步是包含所需加密庫,透過添加一個到內置加密模組的引用實現;然後使用韌體中之前的金鑰建立加密/解密金鑰。現在,透過匯流排發送的資料將更為安全,雖然這並不意味著系統也安全,但離這個目標已越來越近。

非對稱加密技術護體 重放攻擊威脅有解 

儘管發送的資料值現已安全,但由於有「重放攻擊」,系統仍然不安全。重放攻擊是指某人在擷取發送的通訊後重新放入相同的資料。在此處的範例中,某人可擷取請求按鈕狀態的事件序列以及按鈕返回資料包,並使用其建立裝置來做出簡單的加密回應,指示按鈕已按下。攻擊者無法判斷他們發送了哪些值,但能夠使USB主機認為按鈕已按下。

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

從主機交換到裝置的單個亂數可在初始通訊期間生成,該數位會包括在發送的資料中,雖然這有助於使各會話間的資料看起來隨機化,但只要攻擊者確定出通訊會話所採用模式,就無法防止他們劫持匯流排中間的通訊。

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

善用加密技術 降低USB資料傳輸遭受攻擊機率

儘管對USB資料傳輸進行加密有助於防止系統被破解,但只要有一個人成功破解系統並將破解方法公諸於眾,任何人都能在將來進行破解。資料到達PC後,在處理敏感性資料時,仍然須考慮一些注意事項。事實上,即使已經加密,PC上仍沒有資料是真正安全。更為老練的攻擊者能夠編寫應用程式來掃描PC上的記憶體(RAM),以尋找可能的金鑰或解密資料。

若在PC上解密通過USB發送的資料,則在某一時刻,金鑰與原始解密資料將駐留在RAM中,從而可被應用程式讀取。當然,這需要更長時間和更高級的專業技術才能破解,但仍存在破解的可能性。在這種情況下,非對稱加密可再次保護資料安全,因為破解需使用者在每次連接裝置後都檢測新金鑰,但仍無法完全保護系統。

解密後的資料存在於安全裝置中,是最難被攻擊者所破解。本文的範例在某些應用中尤為適用。例如,加密的自舉程式可加密安全伺服器上的hex檔,並且只在攻擊者無法觸及微控制器(MCU)時,才在微控制器上解密資料。例如將擷取的資料檔案發送到PC的資料記錄器,其並不在本地解密資料和顯示結果,而是將加密資料通過網際網路發送到安全伺服器來解密資料,然後將不含敏感性資料的結果摘要返回給用戶。

總結而言,在所有加密系統中,都不應假定資料是安全的,而應通過加密阻止資料竊取。增加金鑰長度、在資料傳輸中加入隨機性以及非對稱金鑰交換等技術均可提高對潛在資料竊取的抵禦程度。其他一些方法同樣有助於保護傳輸的資料,這些方法各自均有優缺點。在任何資料傳輸應用設計加密,須在防衛程度等級與實現該資料安全所需成本之間找到平衡。

(本文作者為微芯高級微控制器架構部主任應用工程師)

本站使用cookie及相關技術分析來改善使用者體驗。瞭解更多

我知道了!