在理論上,理論和實踐是一致的。在實踐中凡人,呵呵西傀。
——(應(yīng)該是)愛因斯坦(說的)
(INFO:本文中不會出現(xiàn)公式饼齿,請放心閱讀)
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)載,熱門評論里不乏各種被高贊但實際上并不正確的說法:有說是字典攻擊無線信號括细,和破解AES是兩回事的伪很,也有所是根據(jù)無線電特性來攻擊的,和AES沒關(guān)系的奋单。還有想搞個大新聞的媒體直接說是路由器被破解锉试,甚至還說成了5分鐘破解任何WiFi密碼的,唯恐天下不亂览濒。
實際上這次的破解來自Fox-IT [1]呆盖,確實攻擊了AES算法本身,利用了電磁輻射泄露的信息匾七,可以實現(xiàn)無線攻擊(隔墻有耳)絮短。這樣的攻擊形式稱為旁路攻擊(Side Channel Attack),在學(xué)術(shù)界和工業(yè)界已經(jīng)研究了20多年昨忆,是一種較為系統(tǒng)完善的攻擊方法,此次攻破AES256的方法是利用電磁旁路信號來完成差分功耗分析(DPA)杉允,獲取了密鑰邑贴。從介紹本身來看,是一個很不錯的工作叔磷,但不是AES首次被破解拢驾,AES 128早就可以用類似的方式破解,AES 256在DPA看來改基,和前者沒有本質(zhì)差異繁疤,在實驗室中早已破解。當(dāng)然也做不到5分鐘破解任何WiFi密碼秕狰。原因是SCA需要一定的物理條件稠腊,目前AES算法本身還是安全的,不必驚慌過度鸣哀。
背景知識
以AES為例架忌,AES是高級加密標(biāo)準(zhǔn)Advanced Encryption Standard的縮寫,是美國聯(lián)邦政府采用的一種分組加密標(biāo)準(zhǔn)我衬,也是目前分組密碼實際上的工業(yè)標(biāo)準(zhǔn)叹放。AES廣泛使用在各個領(lǐng)域(當(dāng)然包括WiFi的加密過程),實際上目前主流的處理器中廣泛包含了AES的硬件加速器(低至售價幾美元的STM32中有CRYP [2]挠羔,高至售價上千美元的Intel CPU中有AES-NI [3])井仰。對于這樣一個成熟的密碼學(xué)標(biāo)準(zhǔn),密碼算法本身設(shè)計的十分完善破加,傳統(tǒng)的差分分析俱恶,線性分析等方法基本上不能在有限復(fù)雜度內(nèi)完成,AES在理論上是安全的。但是正如本文標(biāo)題描述的那樣速那,即便有絕對安全的算法俐银,也做不到絕對安全的系統(tǒng)。唯物辯證法中有聯(lián)系的普遍性和多樣性原理端仰,現(xiàn)代密碼系統(tǒng)在設(shè)計上理論安全捶惜,并不能替代密碼系統(tǒng)的實現(xiàn)安全性。攻擊者可以在不干擾密碼芯片運行的前提下荔烧,觀測時間吱七,功耗,電磁輻射等旁路泄露鹤竭,然后結(jié)合算法的實現(xiàn)進行密鑰還原踊餐,實現(xiàn)所謂的旁路攻擊。對于旁路攻擊的防御臀稚,涉及到密碼算法實現(xiàn)安全性這一范疇吝岭,很顯然,這次攻擊成功的AES 256吧寺,表明實現(xiàn)安全性的研究還有很長的路要走窜管。
這里簡要介紹一下AES算法。AES算法包含了多個輪稚机,每一輪(除了最后一輪)中幕帆,都有4個步驟[4][5]:
(1)AddRoundKey—矩陣中的每一個字節(jié)都與該次回合密鑰(round key)做XOR運算;每個子密鑰由密鑰生成方案產(chǎn)生赖条。
(2)SubBytes—通過一個非線性的替換函數(shù)失乾,用查找表的方式把每個字節(jié)替換成對應(yīng)的字節(jié)。
(3)ShiftRows—將矩陣中的每個橫列進行循環(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ù)字對于計算機來說就完全可以接受了。怎么猜才能在8192次中猜對呢缠借。信息論告訴我們干毅,必須有額外的信息輸入。簡言之就是分治的思想:一個一個猜泼返。256 bits的密鑰硝逢,也就是32個Bytes,如果逐字節(jié)猜绅喉,每個字節(jié)有256種可能渠鸽,32個字節(jié)需要256*32 = 8192次猜測就可以了。
而芯片工作受限于位寬和算法實現(xiàn)柴罐,是不會一次完成整個256bits密鑰的處理的徽缚,正如飯要一口一口吃,數(shù)據(jù)也是逐字節(jié)處理的革屠,這就給我們我們逐字節(jié)猜提供了實現(xiàn)依據(jù)凿试。
本次旁路分析依然按慣例關(guān)注其中的非線性環(huán)節(jié)SubBytes。所謂的非線性替換函數(shù)似芝,在實現(xiàn)中就是一個查表操作红省。查表操作的輸出(S-box output)是攻擊點。當(dāng)然算法的優(yōu)化會合并一些操作以提高運算速度国觉,這里攻擊者可以偷著樂。原因是雖然優(yōu)化需要做大量的工作虾啦,但實際上麻诀,最終結(jié)果還是查表,查較大的表和較小的表傲醉,在旁路攻擊中沒有實質(zhì)的區(qū)別蝇闭。AES 128和256的區(qū)別也是輪數(shù),密鑰長度的區(qū)別硬毕,查表操作本身是沒有本質(zhì)變化的(劃重點)呻引。
接下來用一張關(guān)系圖來說明各要素的關(guān)聯(lián)。
AES的輸入是密鑰和明文吐咳,對于攻擊者來說逻悠,明文已知,密鑰未知韭脊,也是分析目標(biāo)童谒。
接下來初始密鑰和明文會進行一個異或操作(首次AddRoundKey),得到的值沪羔,作為查表索引輸入饥伊,進行查表操作,注意到查表的數(shù)據(jù)是和密鑰和明文的異或有關(guān)的。而明文已知琅豆,查找表本身固定已知愉豺,異或運算又是簡單的可逆運算,所以可以認(rèn)為查表的輸出和密鑰有關(guān)茫因。查表操作在現(xiàn)代計算機體系結(jié)構(gòu)中是一次訪存操作蚪拦,那么,地址和數(shù)據(jù)都會出現(xiàn)在總線上节腐。如果能知道總線上是什么數(shù)據(jù)外盯,就可以簡單的反推出密鑰。接下來考慮總線是什么翼雀?低頻上看是導(dǎo)線饱苟,射頻上看是天線,對于安全分析人員來說狼渊,天線都是個好東西箱熬。高速數(shù)字電路的信號翻轉(zhuǎn),包含了豐富的頻譜分量狈邑,會輻射到芯片外部城须。理論上能準(zhǔn)確探測到這樣的輻射,就能完成攻擊了米苹,so easy糕伐。
當(dāng)然,在實踐中蘸嘶,呵呵良瞧。
問題一方面出在測量精度上。實際上我們并不能如此高精度地測量電磁輻射训唱。我們可以測量的是電磁輻射的相對高低褥蚯。例如1根導(dǎo)線上信號翻轉(zhuǎn)和8根導(dǎo)線上信號一起翻轉(zhuǎn),就有明顯的信號強度差異况增。這里涉及到一個術(shù)語稱為泄露模型(model of leakage)赞庶,描述泄露的情況。這次攻擊使用了Hamming distance模型澳骤,也就是說信號跳變程度是可以觀測的歧强,這在電磁旁路分析中也是較為常見的建模方式。
問題另一方面出在信噪比宴凉。(即便用上雅魯藏布江的水電)誊锭,環(huán)境中始終有大量的干擾,提高信號質(zhì)量的方式是多次測量弥锄,然后通過相關(guān)性分析的方法提取統(tǒng)計上的最大相關(guān)性丧靡。
還有一些問題限于篇幅這里不展開蟆沫,反正DPA都很巧妙地解決了:
(1)首先輸入一個明文,在加密過程中温治,明文會和密鑰的第i個字節(jié)異或饭庞,輸入到查找表中查表,查表結(jié)果會出現(xiàn)在總線上熬荆,然后產(chǎn)生電磁輻射舟山。這個過程是真實物理發(fā)生的,在此期間使用硬件記錄這個電磁輻射卤恳。
(2)分析軟件模擬計算過程(1)累盗,當(dāng)然因為不知道密鑰的第i個字節(jié)具體數(shù)值,每一種可能都要算突琳,利用泄露模型計算256個模擬的電磁輻射相對值若债。
(3)變換不同的明文重復(fù)(1)和(2)的過程,得到N次結(jié)果拆融。一共有N個實際測量值和N*256個計算值蠢琳。
(4)使用相關(guān)性分析的方法,比對這256種猜測中镜豹,和實際測量值相關(guān)性最大的猜測值傲须,就是實際上密鑰的第i個字節(jié)真實值。
(5)重復(fù)(1)到(4)趟脂,分別猜測32個密鑰字節(jié)泰讽,得到完整密鑰。
以上就是電磁/功耗差分分析的主要流程(通俗版)昔期。由于密碼芯片在加密過程中菇绵,是逐字節(jié)處理的,而處理每個字節(jié)的時候镇眷,都會有電磁信息的泄露,給了攻擊者逐字節(jié)猜測的機會翎嫡,從而可以在前文提到的8192次猜測中完成破解欠动。實際分析中,還會遇到很多的困難惑申,接下來看看Fox-IT的專家是怎么完成這次攻擊的具伍。
實戰(zhàn)
以下是Fox-IT的專家給出的攻擊流程。
首先使用射頻采集設(shè)備采集目標(biāo)芯片的電磁輻射圈驼,混頻量化后存儲到分析計算機中人芽。分析計算機首先對采集的信號進行預(yù)處理后,使用上述DPA的方式得出密鑰绩脆。
攻擊的目標(biāo)硬件為來自Microsemi的SmartFusion2萤厅,這是一個混合了ARM和FPGA的SoC橄抹。攻擊針對的是ARM部分,一個Cortex-M3的內(nèi)核惕味。目標(biāo)軟件是來自O(shè)penSSL [6]的AES 256實現(xiàn)楼誓。雖然SoC是一個混合芯片,但是只是用了ARM部分名挥,Cortex-M3是很經(jīng)典的ARM core疟羹,軟件上也是OpenSSL的標(biāo)準(zhǔn)實現(xiàn),可以認(rèn)為這樣的攻擊很具有代表性禀倔。
SmartFusion2 SoC FPGA 結(jié)構(gòu)[7]
接下來看看信號鏈部分榄融。
首先是天線。理論上救湖,設(shè)計天線是一個非常嚴(yán)謹(jǐn)且套路很深的活愧杯,比如下圖只是冰山一角(圖片來自網(wǎng)絡(luò))。
回到實踐中捎谨,下圖是本次攻擊中使用的天線民效。
就是一根電纜外加膠帶“隨意”制作的環(huán)狀天線。
攻擊場景如下:
綠色的PCB是目標(biāo)板涛救,環(huán)狀天線懸空固定在芯片上方畏邢,信號通過了外部的放大器和帶通濾波器,這些都是標(biāo)準(zhǔn)的工業(yè)器件检吆,價格也不貴舒萎。
比較有意思的是采集設(shè)備,通常時域采集可以使用示波器蹭沛,或者專用的數(shù)據(jù)記錄儀臂寝,再不濟也得用個USRP之類的軟件無線電設(shè)備。Fox-IT的專家一開始自然也是這么考慮的摊灭。
圖中左邊是專用的數(shù)據(jù)記錄儀咆贬,傻大粗,價格倒是很美麗帚呼。中間是USRP板子掏缎,這個板子的性能夠用,價格也是一般的研究機構(gòu)或者個(tu)人(hao)可以承受了煤杀。有趣的部分在圖中右邊眷蜈,這個標(biāo)識為RTLSDR的USB小玩意玩無線電的小伙伴一定不陌生。實際上國內(nèi)也有賣沈自,價格只需要幾十到上百人民幣酌儒。本次研究表明,這么一個入門級的小東西已經(jīng)完全可以用來完成攻擊枯途。
上圖就是用上述硬件觀測到的AES模式忌怎,可以清晰地看到I/O操作之間的AES加密流程籍滴,包括Key Schedule過程和14輪的操作,都是清晰可見呆躲。
接下來是分析過程异逐,這方面,文獻[1]中并沒有詳細(xì)介紹插掂。但是DPA是一個比較標(biāo)準(zhǔn)的套路灰瞻,他們也使用了業(yè)界標(biāo)桿級的軟件Riscure's Inspector,因為可以結(jié)合筆者的經(jīng)驗來談一談辅甥。
首先是信號預(yù)處理酝润,這部分主要包括數(shù)字濾波,復(fù)信號轉(zhuǎn)為實信號璃弄,當(dāng)然也包括重采樣要销,截取等步驟。還有一個比較重要的過程是不同traces之間的對齊夏块,比較簡單的方法是使用滑動窗和相關(guān)性分析的方法疏咐,使得所有traces能夠精確對準(zhǔn)。
接下來就是真正的DPA了脐供,這在Inspector軟件中有標(biāo)準(zhǔn)的模塊浑塞,反而不需要自己實現(xiàn)。不過也有一些技巧政己,文獻[1]中就提到了一個酌壕。為了快速驗證采集到的電磁信號和設(shè)備功耗有直接關(guān)聯(lián),以及采集的位置是否正確歇由。使用輸入的明文(或輸出的密文)和采集的trace做一次相關(guān)性分析卵牍,并驗證泄露模型是否有效。
這條相關(guān)性曲線說明了數(shù)據(jù)和信號之間確實有相關(guān)性的點沦泌,即確實可以從采集的信號中檢測到數(shù)據(jù)糊昙。
接下來就是猜測密鑰了,下圖中相關(guān)性最高的猜測就是正確的密鑰谢谦。實驗表明SmartFusion2中溅蛉,泄露來自AHB,這是符合預(yù)期的他宛。因為AHB連接了Cortex-M3和片上RAM,查表操作就是M3內(nèi)核訪問RAM的一個操作欠气。相比于簡單的MCU厅各,這里還要考慮cache的影響,對于指令cache预柒,使用Hamming distance模型即可队塘,而SmartFusion2為了和FPGA模塊連接袁梗,考慮到數(shù)據(jù)一致性而沒有設(shè)置數(shù)據(jù)cache,這也算是簡化了攻擊者的工作憔古。
以上操作在幾厘米之內(nèi)探測電磁信號就完成了整個攻擊過程遮怜,硬件成本小于200歐元(約1500人民幣)。實際上這些硬件在國內(nèi)購買的話鸿市,完全可能低于1000元锯梁。
在軟件方面,Inspector是商業(yè)軟件焰情,需要支付授權(quán)費用陌凳。好在核心算法早已是公開的,可以自己編寫内舟,也可以使用便宜的解決方案合敦,所以這方面的費用不計在總價內(nèi)也是可以理解的。
局限性
通過梳理整個攻擊流程验游,我們可以總結(jié)出這類旁路攻擊的先決條件充岛,也是它的局限性所在。
(1)必須完全可以控制目標(biāo)設(shè)備耕蝉,給它輸入不同的明文崔梗,控制其完成加密操作。
(2)必須可以接近到目標(biāo)設(shè)備赔硫,因為要測量設(shè)備的物理屬性(電磁特征)炒俱,究竟距離多近需要看現(xiàn)場的電磁環(huán)境。
(3)必須熟悉目標(biāo)設(shè)備使用的算法和實現(xiàn)細(xì)節(jié)爪膊。算法本身比較容易確認(rèn)权悟,實現(xiàn)細(xì)節(jié)很多設(shè)備不會公開源代碼,但是密碼學(xué)算法通常有若干標(biāo)準(zhǔn)實現(xiàn)推盛,不難猜測確定峦阁。
要完成攻擊攻擊,條件(1)是基礎(chǔ)耘成,所以不用擔(dān)心鄰居家可以只通過旁路攻擊來破解你家的路由器了榔昔。
條件(2)主要看距離要多近,這里有一些深入的研究瘪菌。
前文使用的手工制作的環(huán)狀天線撒会,工作距離只有若干厘米,稍遠一點就淹沒在噪聲里了师妙。
于是(早已坐不住的)天線工程師制造了下圖的PCB天線诵肛,它的性能好很多,可惜為了降低尺(jia)寸(ge)默穴,它的工作頻率是400MHz怔檩。而SmarFusion2只能最高工作到142MHz褪秀。既然是研究,不如換個目標(biāo)設(shè)備(就是這么任性)薛训,比如Xilinx的Pynq board就可以穩(wěn)穩(wěn)地跑在400MHz媒吗。實踐表明,依然可以用RTL-SDR完成攻擊乙埃。這次攻擊可以在30厘米內(nèi)完成闸英,但是不要忘了需要采集400k條traces,而且是在一定電磁屏蔽的環(huán)境下完成的膊爪。
PCB天線
使用急救毯包裹的攻擊環(huán)境
最后再沖擊一下1米的距離自阱,這需要在理想條件下完成。
首先米酬,測試在微波暗室中進行沛豌,盡可能地排除了干擾信號。天線方面使用了盤錐天線赃额,并保證了測量子系統(tǒng)和加密子系統(tǒng)之間的電氣隔離加派。1米的距離很艱難的達到了,使用了240萬條traces跳芳。這個理想實驗證明了芍锦,在足夠好的條件下,1米的攻擊距離是完全可行的飞盆。
防御
旁路攻擊之所以可以生效娄琉,主要在于密碼設(shè)備泄露的旁路信息和操作的數(shù)據(jù)有關(guān)聯(lián)性。在算法實現(xiàn)上吓歇,可以通過掩碼(masking)或者隱藏(hiding)的方式來消除這種關(guān)聯(lián)性孽水。這方面的具體細(xì)節(jié)本文不再展開。在密碼學(xué)算法這一領(lǐng)域城看,對于一般的應(yīng)用或者系統(tǒng)開發(fā)者女气,是不推薦自己造輪子的。特別是不可以認(rèn)為自己略懂密碼學(xué)的算法测柠,就去修改它們炼鞠,一個簡單的小修改,可能會破壞理論安全性和實現(xiàn)安全性轰胁,這些都不是普通的開發(fā)者可以做好的事情谒主,還是用成熟的輪子最為靠譜。
以SmartFusion 2為例赃阀,完全可以不使用OpenSSL的算法實現(xiàn)霎肯,而使用帶有保護的實現(xiàn),例如Microsemi官方提供的FPGA實現(xiàn)。在電路級別上姿现,功耗平衡等技術(shù)也可以從一定程度上解決這類泄露,使用專有的硬件來完成密碼學(xué)操作肖抱,就可以很好地防御這類攻擊了备典。