閱讀671 返回首頁    go iPhone_iPad_Mac_apple


您當前的位置: 安全博客 > 技術研究 > 沒有絕對安全的係統:寫在AES 256破解之後

NULL

在理論上,理論和實踐是一致的。在實踐中,嗬嗬。

——(應該是)愛因斯坦(說的)


(INFO:本文中不會出現公式,請放心閱讀)


AES 256被破解了?

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


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


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


背景知識

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


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

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

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

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

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

AES流程圖


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

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


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


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


接下來用一張關係圖來說明各要素的關聯。


AES的輸入是密鑰和明文,對於攻擊者來說,明文已知,密鑰未知,也是分析目標。


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


當然,在實踐中,嗬嗬。


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


問題另一方麵出在信噪比。(即便用上雅魯藏布江的水電),環境中始終有大量的幹擾,提高信號質量的方式是多次測量,然後通過相關性分析的方法提取統計上的最大相關性。


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

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

(2)分析軟件模擬計算過程(1),當然因為不知道密鑰的第i個字節具體數值,每一種可能都要算,利用泄露模型計算256個模擬的電磁輻射相對值。

(3)變換不同的明文重複(1)和(2)的過程,得到N次結果。一共有N個實際測量值和N*256個計算值。

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

(5)重複(1)到(4),分別猜測32個密鑰字節,得到完整密鑰。


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


實戰

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



首先使用射頻采集設備采集目標芯片的電磁輻射,混頻量化後存儲到分析計算機中。分析計算機首先對采集的信號進行預處理後,使用上述DPA的方式得出密鑰。


攻擊的目標硬件為來自Microsemi的SmartFusion2,這是一個混合了ARM和FPGA的SoC。攻擊針對的是ARM部分,一個Cortex-M3的內核。目標軟件是來自OpenSSL [6]的AES 256實現。雖然SoC是一個混合芯片,但是隻是用了ARM部分,Cortex-M3是很經典的ARM core,軟件上也是OpenSSL的標準實現,可以認為這樣的攻擊很具有代表性。



SmartFusion2 SoC FPGA 結構[7]


接下來看看信號鏈部分。

首先是天線。理論上,設計天線是一個非常嚴謹且套路很深的活,比如下圖隻是冰山一角(圖片來自網絡)。




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



就是一根電纜外加膠帶“隨意”製作的環狀天線。

攻擊場景如下:



綠色的PCB是目標板,環狀天線懸空固定在芯片上方,信號通過了外部的放大器和帶通濾波器,這些都是標準的工業器件,價格也不貴。

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




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




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


接下來是分析過程,這方麵,文獻[1]中並沒有詳細介紹。但是DPA是一個比較標準的套路,他們也使用了業界標杆級的軟件Riscure's Inspector,因為可以結合筆者的經驗來談一談。

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


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




這條相關性曲線說明了數據和信號之間確實有相關性的點,即確實可以從采集的信號中檢測到數據。

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




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

在軟件方麵,Inspector是商業軟件,需要支付授權費用。好在核心算法早已是公開的,可以自己編寫,也可以使用便宜的解決方案,所以這方麵的費用不計在總價內也是可以理解的。


局限性

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

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

(2)必須可以接近到目標設備,因為要測量設備的物理屬性(電磁特征),究竟距離多近需要看現場的電磁環境。

(3)必須熟悉目標設備使用的算法和實現細節。算法本身比較容易確認,實現細節很多設備不會公開源代碼,但是密碼學算法通常有若幹標準實現,不難猜測確定。


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

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

前文使用的手工製作的環狀天線,工作距離隻有若幹厘米,稍遠一點就淹沒在噪聲裏了。




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



PCB天線

使用急救毯包裹的攻擊環境

 

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

首先,測試在微波暗室中進行,盡可能地排除了幹擾信號。天線方麵使用了盤錐天線,並保證了測量子係統和加密子係統之間的電氣隔離。1米的距離很艱難的達到了,使用了240萬條traces。這個理想實驗證明了,在足夠好的條件下,1米的攻擊距離是完全可行的。



防禦

旁路攻擊之所以可以生效,主要在於密碼設備泄露的旁路信息和操作的數據有關聯性。在算法實現上,可以通過掩碼(masking)或者隱藏(hiding)的方式來消除這種關聯性。這方麵的具體細節本文不再展開。在密碼學算法這一領域,對於一般的應用或者係統開發者,是不推薦自己造輪子的。特別是不可以認為自己略懂密碼學的算法,就去修改它們,一個簡單的小修改,可能會破壞理論安全性和實現安全性,這些都不是普通的開發者可以做好的事情,還是用成熟的輪子最為靠譜。


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


參考文獻

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

[2] https://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,更多安全類知識分享及熱點資訊,請關注阿裏聚安全的官方博客

最後更新:2017-07-25 15:02:41

  上一篇:go  FastDFS分布式文件係統
  下一篇:go  【人生苦短,我用Python】Python免費精品課連載(2)——序列、列表、元組與字符串