在遠端控制的運作系統中,安全性始終是令人關注的問題,系統必須被設計成能夠預防未經授權的存取。特殊的軟體及加密方式被運用來防止竊取,這就是為何這類系統使用加密的通訊方式。在一個完美的情境中,僅有已被授權的接收方,能解碼並處理該資訊,適當程度的加密處理通常就可符合這類標準。然而,一個有效的數據傳輸還是有可能會被複製及重新傳送,雖然市面上已有多種不同的方式可用來預防這種情況,但這些方法中並沒有一種是完美的。
|
圖1 安全電路設計對嵌入式遠端控制系統的重要性正與日俱增 |
本文旨在實作高度安全性的遠端控制系統(圖1),以讓截取(Capture)及重送攻擊變得無效。該系統所傳送的數據封包,其中包含時間同步化資訊,而且它僅在很短的時間框架內有效,因此任何進一步的截取及重送(Replay)攻擊將完全無效。即使一個截取及重送的訊息,在本質上包含正確的資訊,該訊息也會因為它遺失其有效的時間框架而被丟棄,在此將說明設計這類系統時,所面臨的技術挑戰及解決方案。
此處介紹的技術是採用微芯(Microchip)新推出的MCS3142高安全性編碼器參考設計(圖2、圖3),可顯著強化嵌入式系統的資料傳輸安全性。
|
圖2 高安全性編碼器電路圖 |
資安問題不可輕忽 遠端控制設計提高安全性層級
|
圖3 高安全性編碼器參考設計示意圖 |
通常遠端控制的設計牽涉到不同的運用與安全性層級。當然,一般而言,價格也會隨著安全性層級而增加,然而,隨著智慧型韌體的出現,以及現今的微控制器(MCU)在板上可利用的周邊愈來愈多,使得設計一套擁有強大安全性的遠端控制系統,在今日已經變得更具成本效益。
一般而言,遠端控制的安全性層級是直接與終端應用息息相關的,例如控制一個光源或是風扇並不真的須要加密處理,然而,當系統是被設計成允許(或不允許)存取有價值的屬性時,就須增加某種安全性層級,而這些功能並非免費可得的。
目前有著各式各樣的加密演算法可茲運用,其選擇則多是與特定系統相關。一般而言,認證與安全性之間是有差距的,更多時候認證是被運用在加密的數據本身並沒有攜帶任何特定資訊時,例如像是指令及訊息。它較常被運用在認證裝置上,一個很好的例子就是更換零件,製造商可選擇在安裝時進行認證作業,在使用它們之前,系統首先會對它們進行認證,而且只有在系統認為其有效之後,裝置才會開始正常運作。這些裝置一般包括印表機碳粉匣、牙刷頭、行動電話電池或甚至是電子模組,通常使用雜湊演算法(Hash Algorithms),例如像是SHA-2密碼雜湊函數(Cryptographic Hash Functions),這是一種從較長的訊息中計算求得金鑰的函數。
舉例來說,在從網路下載大型檔案時,就會使用到MD5校驗碼(Checksum),MD5演算法會讀取整個檔案,並且在之後產生金鑰。這項運算的雜湊數值在稍後被運用來確認下載檔案的完整性(或真實性),而不須提供任何方法來復原原始的數據。換言之,僅僅只有金鑰並不意味著你可以反向產生原始的數據,而金鑰就是從該數據而產生的。在這種應用之中,認證是較常被用來做為業務保全之用,而不是提供隱私之用。
加密程度與系統開發成本成正比
一個採用隱私保護的系統將會使用XTEA或AES這類加密演算法。這些是業界標準的加密演算法,被使用在各種電子裝置上,而且被認為對大多數應用而言都有著足夠的安全性。這些演算法可在硬體或是軟體上來執行,不過對於究竟是在硬體或軟體上執行的效果更為安全,至今尚未有定論(專家的看法亦是如此)。
一般而言,一個較強的安全性層級將導致系統的整體成本增加,在安全性層級上,無論是硬體或軟體的執行,都將會影響到整體成本。就算完全是軟體的執行方式,也將會增加額外新的成本。這是因為韌體也須占用更多的記憶體,所需要的記憶體越多,則所需的額外成本也就愈大。
如同先前所述,有些實施方式是使用硬體加密模組,而另外有些實施方式則是採用軟體來執行,但基本上這兩種實施方式都一定會增加額外成本。軟體實施方式在程式與數據兩者的記憶體上,有著較大的要求;相反的,硬體的實施方式則在矽晶的尺寸大小方面有著較大的要求,這兩方面都互有利弊,端視系統設計人員的決定。
不過,即便使用非常高層級的安全性,這並不意味著就能封鎖住截取及重送式攻擊,或是干擾及選擇性地重送資訊。
時間戳記可預防安全性威脅
暴力式攻擊是一種非常基本的密碼分析攻擊,其中牽涉到使用所有可能組合,直到命中正確的密碼為止。當然,這比較是理論上的方式,而不是一個真正的實施方法,而且依賴於數字的可能性組合,將必須耗費很長的時間來完成。隨著現代加密法的實施,類似這樣的攻擊將會耗費許多年才能完成。
截取與重送攻擊,則是利用欺騙的方式來截取並重新傳送有效的數據。有好幾種對策可以避免這類的攻擊。一種方法就是使用連線代碼(Session Tokens),這個代碼被用來做為加密系統的一部分,這個代碼僅對這個特定的連線有效,這個代碼(以及從這個代碼衍生的傳輸)不能被使用在其他的連線上。單次密碼非常類似於連線代碼,除了它們會被用來在一個連線中做為個別交易的認證之用。然而,在單向系統中,這些方式將會難以執行。
訊息認證碼是被附加在數據交易中的一小段資訊,而且是被用來認證該訊息並提供數據的完整性。數據的完整性可確保偵測到意外及蓄意的訊息變更,同時數據的真實性可確保訊息的原始來源,這種方式並不提供隱私方面的功能,而是更著重在認證方面。
時間戳記(Timestamping)是預防截取及重送攻擊的另一種方式。它牽涉到送出週期性的時間標記。在接收端,這個時間戳記會與本地預計的時間戳記,在合理的誤差範圍內來進行比較。這也造成了一些特殊設計上的挑戰。
結合時間戳記 數據封包限時讀取更安全
|
圖4 典型編碼流程圖 |
為克服一些今日所面臨到主要的安全性威脅,業界提出一個以有時限的有效數據封包為概念的系統。換言之,發射器/編碼器透過無線方式所傳送的每一個數據封包,其有效性是有時間限制的。數據封包本身的適當加密及所包含的數據等都是有效的,但是數據封包僅只在非常有限的時間內有效,因此截取及重送攻擊很少能夠成功的攻擊此類系統。這是因為這些攻擊牽涉到截取數據封包,並在稍後的時間重新傳送該數據封包,然而這類數據封包僅只有在它被傳送的時間框架內有效。
為實施這種系統,每一個數據封包必須納入一個時間戳記,因此,發射器必須要有一個時間紀錄來源(Timekeeping Source)。最簡單方式為透過使用晶體振盪器(頻率為32.768kHz的振盪器是一個好選擇)來達成此一目標,現今的微控制器能以晶體驅動的時間記錄周邊,甚至可以在低功率狀態下來運作。因此,處理器甚至可以在休眠模式下來保持時間的追蹤。任何其他的時間記錄方法也同樣可茲運用,前提是,隨著時間和溫度的推移,它必須具有良好的穩定性。
解碼器這方面也會使用一個類似的時間記錄機制(假如不是相同的)(圖4)。首先,編碼器必須與解碼器配對,解碼器會儲存序列號碼及它的計時器數值等資訊,然後它會儲存一個時間差(Delta Time)數值,該數值代表著編碼器與解碼器的板上計時器的時間差異。此時,編碼器與解碼器已經同步化。
當來自編碼器的傳送被接收到時,該解碼器會以來自於編碼器的時間戳記,來評估它所預期的時間數值(根據解碼器的計時器以及來自編碼器最後所儲存的時間戳記)。假如這兩個數值符合,解碼器將會採取適當的行動(例如開門)。
然而,接收器/解碼器這方面所需支援的並非僅有一個,而是更多類似的編碼器,所以與解碼器配對的所有編碼器,都必須有著各自不同的時間數值。很明顯地,解碼器無法提供這麼多這樣的計時器。解決方案為在解碼器端使用單一計時器,並且在每一個編碼器上使用時間差數值。
當來自於編碼器的數據封包抵達時,解碼器將讀取該特定編碼器上所儲存的時間差數值,並且使用它目前的時間數值來預估由編碼器所傳送的時間數值。解碼器將再度比較這兩種時間數值,而且如果兩者相符時(或是有著可接受的小差異),它將會採取合適的行動。
編碼器/解碼器注重同步化設計
整個同步機制是圍繞在自由運行計時器而打造的,無論在編碼器端和解碼器端都是如此。在理想的情況下,這些計時器將會同步運行,而且將會持續不斷的進行同步化,然而,所有的時間記錄元件,其穩定性與精確性是有限的。具有高穩定性及精確性的元件可能是非常昂貴的,所以選擇正確的時間記錄機制,將會是一個設計上的權衡。
典型的實施方式是同時在編碼器端與解碼器端,使用相同的時間記錄電路,若想要有一個具成本效益的解決方案,則可使用晶體振盪器;然而,就算是在編碼器與解碼器這兩端都使用相同的晶體,還是會有些許的頻率差異。
首先,是有一個初始的晶體精確性。這是由晶體製造商所標明,而通常它的範圍是在5~40ppm(百萬分之一)。這個初始的晶體精確性是由製程而定。晶體頻率是無法以明確的數值來準確標示出,而是僅能以相對非常接近的數值來代表。對於每一個晶體而言,隨著時間的推移,這都是特定的且固定的。
其次是,晶體對於溫度是靈敏的。振盪的頻率是被標示在攝氏25度,介於-20?50度之間,該頻率可變化多達額外的20ppm。
第三,設計人員必須將晶體的老化列入考量,這是比較不重要的項目,因為它是在很長的時間後才會發生的事情,同時將所有上述的誤差列入考量,這意味著在編碼器與解碼器這兩端的計時器將不可能處於完美的同步化狀態(除了第一次的配對之外)。解碼器將無法計算得到一個完全符合編碼器的真實時間數值。它將僅能夠計算得到一個近似的數值而已。
透過使用可接受的範圍,則解碼器依然可與所有的編碼器維持同步化。舉例而言,一但同步化之後,則介於編碼器與解碼器之間的計時器誤差將得以最小化。隨著時間推移,則介於編碼器與解碼器之間的時間偏移將會增加,之後它將會視解碼器而定,來決定它可接受做為有效封包的最大時間差異性為何。
高安全性編碼器阻斷各種系統攻擊
這個系統仰賴一個事實,也就是兩端的計時器必須持續同步,因此計時器的運作不被打斷就變得非常重要。有一些例子就是因為電力失效(像是電力網意外或電池更換等)導致無法同步。
在編碼器這端,當電池電力耗盡且須更換時,這種情況就會發生了,工程師可透過手動重新同步編碼器來輕易解決這個問題。在解碼器這端,電力的喪失則通常是較嚴重的,特別是由於解碼器須追蹤數個編碼器。只有當編碼器數目不多時,重新熟悉所有編碼器才算得上是一種可行的方式。
如果系統擁有不只一些的編碼器,則手動同步所有的編碼器便不是一個好選擇,在這種情況下,解碼器最好具有一個計時備援電路,例如具有電池備援的即時時脈電路。這樣的實施方式可提供非常高的安全層級,讓截取、重送及無線干擾等系統攻擊基本上是無法發揮作用的。另一個重要的好處,在於編碼器可與多個解碼器一起運作,因為解碼器通常只會驗證編碼器的時間同步及真實性。
整體而言,這是一個具有高度安全性及成本效益的安全解決方案。從使用者的觀點來看,這個解決方案並無不同且使用非常容易,此技術能輕易與驗證方法結合,所以它也能提供良好的原始設備製造商(OEM)保護層級。
(本文作者任職於Microchip)