AES 256被破解了?

對于TLNR(Too Long, Not Read)的讀者來說,先把答案放在這:是的,但也不盡然。

 

事件回顧如下:前幾日在互聯(lián)網(wǎng)上轉(zhuǎn)發(fā)的一條題為“AES 256加密被破 一套1500元設(shè)備5分鐘內(nèi)搞定”的新聞引起了各界的關(guān)注。新聞在國內(nèi)各大媒體轉(zhuǎn)載,熱門評論里不乏各種被高贊但實(shí)際上并不正確的說法:有說是字典攻擊無線信號,和破解AES是兩回事的,也有所是根據(jù)無線電特性來攻擊的,和AES沒關(guān)系的。還有想搞個大新聞的媒體直接說是路由器被破解,甚至還說成了5分鐘破解任何WiFi密碼的,唯恐天下不亂。

 

實(shí)際上這次的破解來自Fox-IT [1],確實(shí)攻擊了AES算法本身,利用了電磁輻射泄露的信息,可以實(shí)現(xiàn)無線攻擊(隔墻有耳)。這樣的攻擊形式稱為旁路攻擊(Side Channel Attack),在學(xué)術(shù)界和工業(yè)界已經(jīng)研究了20多年,是一種較為系統(tǒng)完善的攻擊方法,此次攻破AES256的方法是利用電磁旁路信號來完成差分功耗分析(DPA),獲取了密鑰。從介紹本身來看,是一個很不錯的工作,但不是AES首次被破解,AES 128早就可以用類似的方式破解,AES 256在DPA看來,和前者沒有本質(zhì)差異,在實(shí)驗(yàn)室中早已破解。當(dāng)然也做不到5分鐘破解任何WiFi密碼。原因是SCA需要一定的物理?xiàng)l件,目前AES算法本身還是安全的,不必驚慌過度。

 

背景知識

以AES為例,AES是高級加密標(biāo)準(zhǔn)Advanced Encryption Standard的縮寫,是美國聯(lián)邦政府采用的一種分組加密標(biāo)準(zhǔn),也是目前分組密碼實(shí)際上的工業(yè)標(biāo)準(zhǔn)。AES廣泛使用在各個領(lǐng)域(當(dāng)然包括WiFi的加密過程),實(shí)際上目前主流的處理器中廣泛包含了AES的硬件加速器(低至售價(jià)幾美元的STM32中有CRYP [2],高至售價(jià)上千美元的Intel CPU中有AES-NI [3])。對于這樣一個成熟的密碼學(xué)標(biāo)準(zhǔn),密碼算法本身設(shè)計(jì)的十分完善,傳統(tǒng)的差分分析,線性分析等方法基本上不能在有限復(fù)雜度內(nèi)完成,AES在理論上是安全的。但是正如本文標(biāo)題描述的那樣,即便有絕對安全的算法,也做不到絕對安全的系統(tǒng)。唯物辯證法中有聯(lián)系的普遍性和多樣性原理,現(xiàn)代密碼系統(tǒng)在設(shè)計(jì)上理論安全,并不能替代密碼系統(tǒng)的實(shí)現(xiàn)安全性。攻擊者可以在不干擾密碼芯片運(yùn)行的前提下,觀測時(shí)間,功耗,電磁輻射等旁路泄露,然后結(jié)合算法的實(shí)現(xiàn)進(jìn)行密鑰還原,實(shí)現(xiàn)所謂的旁路攻擊。對于旁路攻擊的防御,涉及到密碼算法實(shí)現(xiàn)安全性這一范疇,很顯然,這次攻擊成功的AES 256,表明實(shí)現(xiàn)安全性的研究還有很長的路要走。

 

這里簡要介紹一下AES算法。AES算法包含了多個輪,每一輪(除了最后一輪)中,都有4個步驟[4][5]:

(1)AddRoundKey—矩陣中的每一個字節(jié)都與該次回合密鑰(round key)做XOR運(yùn)算;每個子密鑰由密鑰生成方案產(chǎn)生。

(2)SubBytes—通過一個非線性的替換函數(shù),用查找表的方式把每個字節(jié)替換成對應(yīng)的字節(jié)。

(3)ShiftRows—將矩陣中的每個橫列進(jìn)行循環(huán)式移位。

(4)MixColumns—為了充分混合矩陣中各個直行的操作。這個步驟使用線性轉(zhuǎn)換來混合每內(nèi)聯(lián)的四個字節(jié)。最后一個加密循環(huán)中省略MixColumns步驟,而以另一個AddRoundKey取代。

AES流程圖

 

接下來留意2個數(shù)字,2^256(2的256次方)和8192。2^256是整個密鑰空間,這是一個相當(dāng)大的數(shù)字,表明如果要一個一個猜密鑰,需要這么多次才能確保猜對,這個數(shù)太大了,所以沒法猜,暴力破解不可取。

但如果是猜8192次呢,這個數(shù)字對于計(jì)算機(jī)來說就完全可以接受了。怎么猜才能在8192次中猜對呢。信息論告訴我們,必須有額外的信息輸入。簡言之就是分治的思想:一個一個猜。256 bits的密鑰,也就是32個Bytes,如果逐字節(jié)猜,每個字節(jié)有256種可能,32個字節(jié)需要256*32 = 8192次猜測就可以了。

 

而芯片工作受限于位寬和算法實(shí)現(xiàn),是不會一次完成整個256bits密鑰的處理的,正如飯要一口一口吃,數(shù)據(jù)也是逐字節(jié)處理的,這就給我們我們逐字節(jié)猜提供了實(shí)現(xiàn)依據(jù)。

 

本次旁路分析依然按慣例關(guān)注其中的非線性環(huán)節(jié)SubBytes。所謂的非線性替換函數(shù),在實(shí)現(xiàn)中就是一個查表操作。查表操作的輸出(S-box output)是攻擊點(diǎn)。當(dāng)然算法的優(yōu)化會合并一些操作以提高運(yùn)算速度,這里攻擊者可以偷著樂。原因是雖然優(yōu)化需要做大量的工作,但實(shí)際上,最終結(jié)果還是查表,查較大的表和較小的表,在旁路攻擊中沒有實(shí)質(zhì)的區(qū)別。AES 128和256的區(qū)別也是輪數(shù),密鑰長度的區(qū)別,查表操作本身是沒有本質(zhì)變化的(劃重點(diǎn))。

 

接下來用一張關(guān)系圖來說明各要素的關(guān)聯(lián)。

 

AES的輸入是密鑰和明文,對于攻擊者來說,明文已知,密鑰未知,也是分析目標(biāo)。

 

接下來初始密鑰和明文會進(jìn)行一個異或操作(首次AddRoundKey),得到的值,作為查表索引輸入,進(jìn)行查表操作,注意到查表的數(shù)據(jù)是和密鑰和明文的異或有關(guān)的。而明文已知,查找表本身固定已知,異或運(yùn)算又是簡單的可逆運(yùn)算,所以可以認(rèn)為查表的輸出和密鑰有關(guān)。查表操作在現(xiàn)代計(jì)算機(jī)體系結(jié)構(gòu)中是一次訪存操作,那么,地址和數(shù)據(jù)都會出現(xiàn)在總線上。如果能知道總線上是什么數(shù)據(jù),就可以簡單的反推出密鑰。接下來考慮總線是什么?低頻上看是導(dǎo)線,射頻上看是天線,對于安全分析人員來說,天線都是個好東西。高速數(shù)字電路的信號翻轉(zhuǎn),包含了豐富的頻譜分量,會輻射到芯片外部。理論上能準(zhǔn)確探測到這樣的輻射,就能完成攻擊了,so easy。

 

當(dāng)然,在實(shí)踐中,呵呵。

 

問題一方面出在測量精度上。實(shí)際上我們并不能如此高精度地測量電磁輻射。我們可以測量的是電磁輻射的相對高低。例如1根導(dǎo)線上信號翻轉(zhuǎn)和8根導(dǎo)線上信號一起翻轉(zhuǎn),就有明顯的信號強(qiáng)度差異。這里涉及到一個術(shù)語稱為泄露模型(model of leakage),描述泄露的情況。這次攻擊使用了Hamming distance模型,也就是說信號跳變程度是可以觀測的,這在電磁旁路分析中也是較為常見的建模方式。

 

問題另一方面出在信噪比。(即便用上雅魯藏布江的水電),環(huán)境中始終有大量的干擾,提高信號質(zhì)量的方式是多次測量,然后通過相關(guān)性分析的方法提取統(tǒng)計(jì)上的最大相關(guān)性。

 

還有一些問題限于篇幅這里不展開,反正DPA都很巧妙地解決了:

(1)首先輸入一個明文,在加密過程中,明文會和密鑰的第i個字節(jié)異或,輸入到查找表中查表,查表結(jié)果會出現(xiàn)在總線上,然后產(chǎn)生電磁輻射。這個過程是真實(shí)物理發(fā)生的,在此期間使用硬件記錄這個電磁輻射。

(2)分析軟件模擬計(jì)算過程(1),當(dāng)然因?yàn)椴恢烂荑€的第i個字節(jié)具體數(shù)值,每一種可能都要算,利用泄露模型計(jì)算256個模擬的電磁輻射相對值。

(3)變換不同的明文重復(fù)(1)和(2)的過程,得到N次結(jié)果。一共有N個實(shí)際測量值和N*256個計(jì)算值。

(4)使用相關(guān)性分析的方法,比對這256種猜測中,和實(shí)際測量值相關(guān)性最大的猜測值,就是實(shí)際上密鑰的第i個字節(jié)真實(shí)值。

(5)重復(fù)(1)到(4),分別猜測32個密鑰字節(jié),得到完整密鑰。

 

以上就是電磁/功耗差分分析的主要流程(通俗版)。由于密碼芯片在加密過程中,是逐字節(jié)處理的,而處理每個字節(jié)的時(shí)候,都會有電磁信息的泄露,給了攻擊者逐字節(jié)猜測的機(jī)會,從而可以在前文提到的8192次猜測中完成破解。實(shí)際分析中,還會遇到很多的困難,接下來看看Fox-IT的專家是怎么完成這次攻擊的。

 

實(shí)戰(zhàn)

以下是Fox-IT的專家給出的攻擊流程。

 

 

首先使用射頻采集設(shè)備采集目標(biāo)芯片的電磁輻射,混頻量化后存儲到分析計(jì)算機(jī)中。分析計(jì)算機(jī)首先對采集的信號進(jìn)行預(yù)處理后,使用上述DPA的方式得出密鑰。

 

攻擊的目標(biāo)硬件為來自Microsemi的SmartFusion2,這是一個混合了ARM和FPGA的SoC。攻擊針對的是ARM部分,一個Cortex-M3的內(nèi)核。目標(biāo)軟件是來自O(shè)penSSL [6]的AES 256實(shí)現(xiàn)。雖然SoC是一個混合芯片,但是只是用了ARM部分,Cortex-M3是很經(jīng)典的ARM core,軟件上也是OpenSSL的標(biāo)準(zhǔn)實(shí)現(xiàn),可以認(rèn)為這樣的攻擊很具有代表性。

 

SmartFusion2 SoC FPGA 結(jié)構(gòu)[7]

 

接下來看看信號鏈部分。

首先是天線。理論上,設(shè)計(jì)天線是一個非常嚴(yán)謹(jǐn)且套路很深的活,比如下圖只是冰山一角(圖片來自網(wǎng)絡(luò))。

 

 

回到實(shí)踐中,下圖是本次攻擊中使用的天線。

 

 

就是一根電纜外加膠帶“隨意”制作的環(huán)狀天線。

攻擊場景如下:

 

 

綠色的PCB是目標(biāo)板,環(huán)狀天線懸空固定在芯片上方,信號通過了外部的放大器和帶通濾波器,這些都是標(biāo)準(zhǔn)的工業(yè)器件,價(jià)格也不貴。

比較有意思的是采集設(shè)備,通常時(shí)域采集可以使用示波器,或者專用的數(shù)據(jù)記錄儀,再不濟(jì)也得用個USRP之類的軟件無線電設(shè)備。Fox-IT的專家一開始自然也是這么考慮的。

 

 

圖中左邊是專用的數(shù)據(jù)記錄儀,傻大粗,價(jià)格倒是很美麗。中間是USRP板子,這個板子的性能夠用,價(jià)格也是一般的研究機(jī)構(gòu)或者個(tu)人(hao)可以承受了。有趣的部分在圖中右邊,這個標(biāo)識為RTLSDR的USB小玩意玩無線電的小伙伴一定不陌生。實(shí)際上國內(nèi)也有賣,價(jià)格只需要幾十到上百人民幣。本次研究表明,這么一個入門級的小東西已經(jīng)完全可以用來完成攻擊。

 

 

上圖就是用上述硬件觀測到的AES模式,可以清晰地看到I/O操作之間的AES加密流程,包括Key Schedule過程和14輪的操作,都是清晰可見。

 

接下來是分析過程,這方面,文獻(xiàn)[1]中并沒有詳細(xì)介紹。但是DPA是一個比較標(biāo)準(zhǔn)的套路,他們也使用了業(yè)界標(biāo)桿級的軟件Riscure's Inspector,因?yàn)榭梢越Y(jié)合筆者的經(jīng)驗(yàn)來談一談。

首先是信號預(yù)處理,這部分主要包括數(shù)字濾波,復(fù)信號轉(zhuǎn)為實(shí)信號,當(dāng)然也包括重采樣,截取等步驟。還有一個比較重要的過程是不同traces之間的對齊,比較簡單的方法是使用滑動窗和相關(guān)性分析的方法,使得所有traces能夠精確對準(zhǔn)。

 

接下來就是真正的DPA了,這在Inspector軟件中有標(biāo)準(zhǔn)的模塊,反而不需要自己實(shí)現(xiàn)。不過也有一些技巧,文獻(xiàn)[1]中就提到了一個。為了快速驗(yàn)證采集到的電磁信號和設(shè)備功耗有直接關(guān)聯(lián),以及采集的位置是否正確。使用輸入的明文(或輸出的密文)和采集的trace做一次相關(guān)性分析,并驗(yàn)證泄露模型是否有效。

 

 

這條相關(guān)性曲線說明了數(shù)據(jù)和信號之間確實(shí)有相關(guān)性的點(diǎn),即確實(shí)可以從采集的信號中檢測到數(shù)據(jù)。

接下來就是猜測密鑰了,下圖中相關(guān)性最高的猜測就是正確的密鑰。實(shí)驗(yàn)表明SmartFusion2中,泄露來自AHB,這是符合預(yù)期的。因?yàn)锳HB連接了Cortex-M3和片上RAM,查表操作就是M3內(nèi)核訪問RAM的一個操作。相比于簡單的MCU,這里還要考慮cache的影響,對于指令cache,使用Hamming distance模型即可,而SmartFusion2為了和FPGA模塊連接,考慮到數(shù)據(jù)一致性而沒有設(shè)置數(shù)據(jù)cache,這也算是簡化了攻擊者的工作。

 

 

以上操作在幾厘米之內(nèi)探測電磁信號就完成了整個攻擊過程,硬件成本小于200歐元(約1500人民幣)。實(shí)際上這些硬件在國內(nèi)購買的話,完全可能低于1000元。

在軟件方面,Inspector是商業(yè)軟件,需要支付授權(quán)費(fèi)用。好在核心算法早已是公開的,可以自己編寫,也可以使用便宜的解決方案,所以這方面的費(fèi)用不計(jì)在總價(jià)內(nèi)也是可以理解的。

 

局限性

通過梳理整個攻擊流程,我們可以總結(jié)出這類旁路攻擊的先決條件,也是它的局限性所在。

(1)必須完全可以控制目標(biāo)設(shè)備,給它輸入不同的明文,控制其完成加密操作。

(2)必須可以接近到目標(biāo)設(shè)備,因?yàn)橐獪y量設(shè)備的物理屬性(電磁特征),究竟距離多近需要看現(xiàn)場的電磁環(huán)境。

(3)必須熟悉目標(biāo)設(shè)備使用的算法和實(shí)現(xiàn)細(xì)節(jié)。算法本身比較容易確認(rèn),實(shí)現(xiàn)細(xì)節(jié)很多設(shè)備不會公開源代碼,但是密碼學(xué)算法通常有若干標(biāo)準(zhǔn)實(shí)現(xiàn),不難猜測確定。

 

要完成攻擊攻擊,條件(1)是基礎(chǔ),所以不用擔(dān)心鄰居家可以只通過旁路攻擊來破解你家的路由器了。

條件(2)主要看距離要多近,這里有一些深入的研究。

前文使用的手工制作的環(huán)狀天線,工作距離只有若干厘米,稍遠(yuǎn)一點(diǎn)就淹沒在噪聲里了。

 

 

于是(早已坐不住的)天線工程師制造了下圖的PCB天線,它的性能好很多,可惜為了降低尺(jia)寸(ge),它的工作頻率是400MHz。而SmarFusion2只能最高工作到142MHz。既然是研究,不如換個目標(biāo)設(shè)備(就是這么任性),比如Xilinx的Pynq board就可以穩(wěn)穩(wěn)地跑在400MHz。實(shí)踐表明,依然可以用RTL-SDR完成攻擊。這次攻擊可以在30厘米內(nèi)完成,但是不要忘了需要采集400k條traces,而且是在一定電磁屏蔽的環(huán)境下完成的。

 

PCB天線

使用急救毯包裹的攻擊環(huán)境

 

最后再沖擊一下1米的距離,這需要在理想條件下完成。

首先,測試在微波暗室中進(jìn)行,盡可能地排除了干擾信號。天線方面使用了盤錐天線,并保證了測量子系統(tǒng)和加密子系統(tǒng)之間的電氣隔離。1米的距離很艱難的達(dá)到了,使用了240萬條traces。這個理想實(shí)驗(yàn)證明了,在足夠好的條件下,1米的攻擊距離是完全可行的。

 

 

防御

旁路攻擊之所以可以生效,主要在于密碼設(shè)備泄露的旁路信息和操作的數(shù)據(jù)有關(guān)聯(lián)性。在算法實(shí)現(xiàn)上,可以通過掩碼(masking)或者隱藏(hiding)的方式來消除這種關(guān)聯(lián)性。這方面的具體細(xì)節(jié)本文不再展開。在密碼學(xué)算法這一領(lǐng)域,對于一般的應(yīng)用或者系統(tǒng)開發(fā)者,是不推薦自己造輪子的。特別是不可以認(rèn)為自己略懂密碼學(xué)的算法,就去修改它們,一個簡單的小修改,可能會破壞理論安全性和實(shí)現(xiàn)安全性,這些都不是普通的開發(fā)者可以做好的事情,還是用成熟的輪子最為靠譜。

 

以SmartFusion 2為例,完全可以不使用OpenSSL的算法實(shí)現(xiàn),而使用帶有保護(hù)的實(shí)現(xiàn),例如Microsemi官方提供的FPGA實(shí)現(xiàn)。在電路級別上,功耗平衡等技術(shù)也可以從一定程度上解決這類泄露,使用專有的硬件來完成密碼學(xué)操作,就可以很好地防御這類攻擊了。

 

參考文獻(xiàn)

[1] https://www.fox-it.com/en/insights/blogs/blog/tempest-attacks-aes/

[2] http://www.st.com/zh/embedded-software/stm32-cryp-lib.html

[3] https://www.intel.com/content/www/us/en/architecture-and-technology/advanced-encryption-standard--aes-/data-protection-aes-general-technology.html

[4] https://en.wikipedia.org/wiki/Advanced_Encryption_Standard

[5] Pub N F. 197: Advanced encryption standard (AES)[J]. Federal information processing standards publication, 2001, 197(441): 0311.

[6] https://www.openssl.org/

[7] https://www.microsemi.com/products/fpga-soc/soc-fpga/smartfusion2

[8] Mangard S, Oswald E, Popp T. Power analysis attacks: Revealing the secrets of smart cards[M]. Springer Science & Business Media, 2008.

 

* 作者:cyxu,更多安全類知識分享及熱點(diǎn)資訊,請關(guān)注阿里聚安全的官方博客

http://www.cnblogs.com/alisecurity/p/7233874.html