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