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