在以前的安全解決方案博客中,我們討論了數據完整性的重要性,以及為什么加密本身不能提供語義安全性。我們引入了消息身份驗證代碼 (MAC) 和數字簽名作為對數據進行身份驗證和保護數據不被修改的方法。
在另一篇博客中,jwallrabenstein啟發了我們關于資源受限環境(如物聯網和嵌入式系統)的輕量級加密技術。這些新的輕量級算法中的大多數都是使用附加數據(AEAD)密碼進行身份驗證的加密,這些密碼既可以通過加密提供機密性,也可以提供數據的完整性(保證數據未被修改)和真實性(保證數據來自特定實體),從而保護其免受修改。在本博客中,我們將更深入地討論AEAD加密。
什么是AEAD?
加密僅提供機密性,但不提供完整性或真實性。如果可以對密文進行修改,從而導致對生成的明文進行可預測的修改,則密文具有延展性。可以對郵件進行更改,這些更改可能無法檢測到。單獨加密郵件并不能防止這種情況。
例如,假設愛麗絲想向鮑勃發送 100 美元。金融服務使用流密碼加密交易,流密碼的工作原理是將明文交易與密鑰流進行異或運算。每筆交易都有一個固定的格式,它指定誰是收款人以及要轉移的金額。Alice 對 100 美元的交易進行加密,并將密文發送給 Bob。
攻擊者攔截加密交易,并希望修改數據而不被檢測到。攻擊者將數字 9 的密文與事務格式中的千個占位符的位置進行 XOR 運算。盡管攻擊者無法解密消息,但了解事務格式會告訴他們在哪里進行修改。
Bob 接收修改后的密文并使用他的密鑰流解密。由于對手的修改,Bob 收到一筆金額交易。由于只使用了加密,因此 Bob 無法檢測到此修改!
為了保護消息不被修改,我們必須傳輸其他數據以及可用于驗證消息的消息。對于AEAD,這通常采用消息身份驗證代碼(MAC)的形式。MAC 必須具有在不知道身份驗證密鑰的情況下難以為任何消息找到有效 MAC 的屬性。對于給定的消息和 MAC 標記,還必須很難找到具有相同 MAC 的第二條消息(第二原像電阻)。還必須很難找到導致相同MAC標記(抗碰撞性)的一對消息。
密鑰(加密)哈希函數通常用于生成消息身份驗證代碼。當與加密算法配對時,它們可用于創建AEAD密碼系統,該系統可以加密和驗證數據。示例包括AES CCM,它將AES CTR模式與AES CBCMAC相結合進行身份驗證。另一個例子是AES GCM,它將AES CTR模式與MAC的GHASH算法相結合。在每一個中,一個稱為標簽的MAC通過傳輸的消息計算,并與消息一起發送。對于每條消息,標簽通常為 16 個字節長,并將此額外開銷添加到消息中。消息的接收方可以與消息一起驗證標記。如果消息或標簽以任何方式被修改,則接收方將拒絕該消息無效。這將防止篡改消息。
2 TinyJAMBU (NIST 輕量級加密決賽入圍者) [TinyJAMBU: A Family of Lightwieght Certified Encryption Algorithms, Wu et al]
其他數據
AEAD提供數據的真實性,機密性是可選的。它允許使用其他數據與加密數據一起發送,而無需對其進行加密。額外的明文數據和加密數據都一起進行身份驗證:如果其中任何一個部分發生更改,則將導致無效標記。這在許多上下文中都很有用,例如在數據包標頭中。如果數據被打包并通過網絡發送,則數據包通常包含一個標頭,其中包含發送方和接收方地址等元數據。此數據在發送時無法加密,因為路由上的其他節點需要能夠讀取此信息,以便可以將數據包發送到正確的目的地。我們仍然希望保護此信息不被修改。AEAD 允許此明文數據與消息的其余部分一起進行身份驗證,即使消息的某些部分已加密。AEAD 甚至可以用于在不加密任何數據的情況下發送消息,同時仍提供消息的真實性。
易于使用
AEAD 的一個主要好處是身份驗證內置于算法中。這使得實施者更難犯錯誤。
HMAC 是一種鍵控哈希函數,可以與加密一起使用,以實現經過身份驗證的加密。數據可以通過HMAC運行以生成MAC,該MAC可以與數據一起發送以對其進行身份驗證。這可以通過任何算法完成,但在組合加密原語時必須小心。一個潛在的錯誤是沒有驗證所有必要的數據。例如,加密算法中通常使用初始化向量。這需要包含在經過身份驗證的數據中。
需要包括全部數據。如果數據長度可變,這也可能會出現問題。發射器可能會向接收器發送一個字段,其中包含消息的長度。此長度也需要包含在經過身份驗證的數據中,以便不會省略消息的某些部分或添加部分。
另一個風險是將接收到的標簽與計算的標簽進行比較時側信道泄漏。如果標記是按每個字節計算的字節數,并在達到不匹配時立即退出,則此比較所需的時間取決于匹配或不匹配的字節數。如果使用函數 memcmp() 天真地比較標簽,則可能會發生這種情況。這會泄露信息,這些信息可能有助于攻擊者測量執行時間并確定匹配或不匹配的字節數。在大多數 AEAD 模式下,這仍然是一個風險,但比較可能會以安全的方式在加密庫中實現。
在標準協議中使用現有的 AEAD 模式可降低引入此類漏洞的風險,這些漏洞可能難以預料。
加密協議
AEAD本身也無法抵御整類攻擊。這可能包括重播攻擊、反射攻擊和其他攻擊。在重放攻擊中,攻擊者可以監控受 AEAD 保護的流量并記錄它。攻擊者稍后可以嘗試重新發送它觀察到的先前傳輸的消息,而無需對其進行修改。消息尚未修改,因此將具有有效的 MAC 標記,并且 AEAD 算法不會檢測到它是由對手發送的。這些類型的攻擊無法在算法級別解決,但可以通過加密協議解決。該協議可能包括類似單調遞增的數據包編號之類的內容,接收方在對消息進行身份驗證之前會檢查該數據包編號。如果接收方已經收到相同的數據包編號(或者可能已經收到更高的編號),它將拒絕該數據包以防止重放。此數據包編號或其他信息也可以包含在其他經過身份驗證的數據中。AES CCM 也是 IEEE 802.15.4 下的加密協議,在某些配置中,它還可以防止重放攻擊和其他協議級攻擊。
總之,加密只能保證機密性,但我們數據的完整性和真實性也很重要。AEAD模式提供了這種保證,并且比單獨的結構更容易正確使用。密碼學是一個雷區,即使對專家來說也是危險的。采用AEAD加密并僅使用標準加密協議是保護我們數據的最佳實踐。
審核編輯:郭婷
-
嵌入式
+關注
關注
5123文章
19428瀏覽量
312889 -
發射器
+關注
關注
6文章
863瀏覽量
54053 -
物聯網
+關注
關注
2921文章
45663瀏覽量
384929
發布評論請先 登錄
相關推薦
無線身份驗證的門禁控制系統設計方案
Vivado和SDK身份驗證錯誤
是否有支持WSS + websockets身份驗證的庫?
PN5180無法使用mifare classic進行身份驗證怎么解決?
如何創建一個經過身份驗證的會話以使用DeleteAll函數?
什么是身份驗證和授權
什么是詢問握手身份驗證協議
ATECC508A加密引擎身份驗證器件的詳細中文數據手冊

基于DS28S60的雙向身份驗證示例
HDCP 2.2:使用中繼器進行局部性檢查、SKE和身份驗證

使用加密和身份驗證來保護UltraScale/UltraScale+ FPGA比特流

評論