有很多情況都是這樣的,你自己低估創建一個安全設備的重要性,結果只會淪為黑客的一個好玩游戲罷了。沒有什么借口不使用經過驗證的、真實的、符合標準的加密算法,因為幾乎任何編程語言都有大量的加密庫可供使用。
現代加密學可以幫助物聯網變得更安全和更可靠。一些實用方法如下:
加密通信協議
在物聯網中,密碼技術最大的應用領域是確保通信信道安全方面。以物聯網為中心的通信協議(如MQTT和AMQP)允許開發人員使用安全傳輸層協議(TLS)來確保通過網絡發送的所有數據外部各方都無法讀取。TLS是眾所周知的安全套接層(SSL)標準的合法繼承者,SSL是Web加密的長期標準(請參閱HTTPS),但現在被認為是不安全的。TLS確保兩個實體之間的數據不可讀,也不容易被第三方操縱。
除了加密主要數據連接之外,加密任何可用的輔助通信通道也很重要。例如,如果物聯網設備帶有供消費者使用的門戶界面(想想打印機的WEB界面接口),則在默認情況下也應該加密。如果不是,則同一網絡上的任何人都可以攔截用戶名、密碼或使用會話數據來模擬登錄用戶來控制這些設備。出于同樣原因,像遠程登錄這樣不安全的維護接口應該關閉,以支持像安全外殼協議(SSH)這樣的安全方法。
加鹽密碼哈希
有句老話,最安全的系統就是那些沒有東西可偷的系統,存儲哈希密碼是實現此目的的一種方法。哈希函數是一種加密算法,它是一種單向密碼體制,即一個從明文到密文的不可逆映射,只有加密過程,沒有解密過程。
好的哈希函數幾乎是無法逆轉。換句話說,一旦原始密碼被哈希,原始密碼經哈希函數計算后得到一個哈希值,然后你就不能反轉哈希值來確定密碼是什么。但是,哈希值仍可用于驗證提交的密碼,因為同樣的密碼,哈希值也是相同的。哈希函數的一些例子是MD5(流行的,但不再被認為是安全的)、SAH256和BooFISH。
哈希值的一個流行攻擊方式是生成所謂的彩虹表或查找表。這是一個表格,其中對每個可能的(或至少是常見的)文本輸入進行哈希處理,并存儲其相應的輸出。這使得某人可以快速執行帶有哈希輸出的反向查找。
如果黑客從受感染系統中檢索出密碼哈希值列表,那么使用彩虹表將這些哈希值轉換為原始密碼并不困難。然而,這種攻擊可以通過使用所謂的加鹽來減輕。鹽是一組隨機數據,在對字符串進行哈希處理之前,會將其附加到一串字符中(放在前面或后面都可以)。
鹽也存儲在哈希值結果中,但是對于每一個哈希計算的變化使得沒有兩個哈希值將使用相同的鹽。因為鹽使密碼變得更長、更隨機,它使得彩虹表和反查表不在有效。攻擊者無法確知鹽值,于是就不能預先計算出一個查詢表或者彩虹表。這樣每個用戶的密碼都混入不同的鹽值后再進行哈希,因此反向查表法也變得難以實施。
非對稱加密算法
非對稱加密算法是提供兩個密鑰,一個公鑰,一個私鑰。如果數據是用私鑰加密的,則只能用公鑰解密,反之亦然。這種加密功能特別適合于物聯網基礎設施的幾個方面。
首先是加入物聯網網絡的單臺機器認證。例如,終端點可能需要連接到中央MQTT代理,以便向上游發布數據。在加入網絡時,使用私鑰為每臺機器提供了一個秘密且唯一的標識符,并且由于其長度而實際上不可能被暴力破解。
私鑰認證在物聯網中可以提供幫助的第二個領域是設備之間的消息驗證。哈希或其他完整性檢查算法將根據消息進行計算,然后使用私鑰進行加密并附加到消息中。再然后,該檢查由消息接收方用公鑰解密,證明它只能由私鑰持有者生成。
最后,驗證完整性檢查的結果,以確保消息在傳輸過程中不被破壞或更改。在安全通信信道不可用的情況下,這種電子簽名方法可能是有用的。
簽名固件(Signed Firmware)與安全引導(Secure Boot)
上一節中描述的電子簽名方法也可以用于安全引導和固件映像的簽名。這種所謂的簽名可確保授權用戶或機器在執行前已在固件上貼上批準標記,這使得惡意個人創建惡意固件并劫持一臺機器變得困難。
安全引導是利用這一特性,確保在設備上運行的任何代碼都是適當的。設備啟動后運行的第一個代碼位包括計算和驗證電子簽名功能。此外,使用具有安全引導的私鑰基礎設施(private key infrastructure)給維護人員提供了一種補救途徑,在用于簽名代碼的密鑰被泄露情況下。
資源受限設備
你可能認為這一切都很好,但是如果你在物聯網中工作了很長時間,你會遇到在邊緣使用資源匱乏設備的情況。這些設備在功率、處理能力和內存方面都受到限制,這可能會給開發人員帶來一些巨大技術障礙。更不幸的是,現代密碼方法還需要消耗大量資源,因此自然會產生這樣問題:我們如何構建既安全又有保障的設備,同時又滿足這些設備的限制條件?
別沮喪!可以在這種環境中做出明智妥協。例如,如果數據完整性很重要,但不一定是數據的保密性,那么可以放棄對數據流的完全加密,轉而采取一種更簡單的方法,用共享隱秘鹽來計算哈希值——你可以說這是窮人用的電子簽名。
這將使接收系統能夠驗證數據,并有把握確保數據是由授權機器生成的。這并不理想,但在某些環境下是可接受的風險。這只是一個例子,它的理念是,憑借一些創造力和良好密碼學知識,你可以在物聯網系統中有效平衡這些風險和安全性。