?
?
不同指令導(dǎo)致不同級別的指令解碼和運(yùn)算單元的活動(dòng),可被清晰地區(qū)別開,故運(yùn)算部分能被推測出。處理器的不同單元在時(shí)鐘沿相關(guān)的不同時(shí)間里有獨(dú)有的開關(guān)狀態(tài),能被高頻儀器分離出來。有多種不同的功耗分析技術(shù)用在破解密碼算法上。整個(gè)分析過程是相對簡單的,只需要標(biāo)準(zhǔn)的現(xiàn)有的廉價(jià)儀器設(shè)備。 功耗分析技術(shù)主要有兩種:簡單功耗分析(SPA:Simple Power Analysis)和差分功耗分析(DPA:Difference Power Analysis)。SPA是在密碼或別的安全相關(guān)操作時(shí)直接觀察功耗,可以得知設(shè)備運(yùn)行時(shí)的信息如密鑰資料。如果破解者知道密碼算法,很容易通過觀察處理器指令次序,特別是移位條件轉(zhuǎn)移,找到一些位的信息。如果算法或邏輯運(yùn)算的結(jié)果很容易被看出,如進(jìn)位狀態(tài),零或負(fù)標(biāo)志,就可以獲得更多的信息。
DPA是種更有效的技術(shù),因?yàn)槠平庹卟恍枰烂艽a算法是如何執(zhí)行的。它使用靜態(tài)分析和已知密碼運(yùn)算的大量功耗跡線來獲取隱藏信息。用統(tǒng)計(jì)方法鑒別功耗的微小區(qū)別,可用來恢復(fù)密鑰中的單個(gè)的位信息。 功耗特性當(dāng)然包括噪聲部分。額外的噪聲可以通過減少獲取信號的探針長度并小心使用測量儀器來降低它。測量接在地線上的電阻的功耗有一些優(yōu)勢。首先,減少了噪聲電平。其次,可以用示波器的探頭直接測量信號,因?yàn)榇蟛糠痔结樥居泄驳牡鼐€與外部電源地相連。為了增加信噪比,可以通過提高平均采樣數(shù)來獲得。
有源探頭能降低輸入電容,增加對輸入信號的帶寬。一種方法是用高速低噪聲的運(yùn)放來構(gòu)建相對簡單的探頭,另一種是用很短的同軸電纜直連到示波器的輸入端。在這些情況下,探頭的輸入電容顯著減少。
對現(xiàn)有的功耗分析步驟進(jìn)行了改進(jìn)。這是一種新的方法,尚未有類似的。我們用鐵芯變壓器來取代連到電源或地的電阻,那樣波形就有點(diǎn)不一樣,因?yàn)樾盘柕闹绷鞒煞謥G失了,同時(shí)又有些有利條件。常用的方法對直流電流幾乎沒有什么限制。但對于10歐電阻來講100mA的電流意味著有1V的電壓降,那可能中斷微控制器的正常操作。
減少這個(gè)電阻可以解決這個(gè)問題,但會使得難以識別功耗的微小變動(dòng)。使用變壓器后,不需要使用昂貴的有源探頭,標(biāo)準(zhǔn)的無源探頭就可以給出幾乎相同的結(jié)果。如果信號太小,調(diào)節(jié)二次側(cè)的線圈就可以增加振幅。變壓器也擔(dān)當(dāng)無源濾波器的角色,如波形,同樣的處理器指令對電阻和變壓器所測量到的波形有不同的影響。那可以通過對獲得的信號進(jìn)行處理。為了攻擊獲得成功,需要采集數(shù)千的樣本,然后快速分析處理所展現(xiàn)的秘密。
最近,芯片設(shè)計(jì)上已考慮這種攻擊,并將使得這種攻擊方法更難獲得成功。
五、噪聲攻擊(Glitch attacks)
噪聲攻擊是快速改變輸入到微控制器的信號,以影響它的正常運(yùn)行。通常噪聲是疊加在電源上或時(shí)鐘信號上,但噪聲也可以是外加的短暫電場或電磁脈沖。在離芯片表面數(shù)百微米處放置兩根金屬針,然后加上少于1微秒的數(shù)百伏電壓的窄脈沖,晶圓襯底會感應(yīng)出一個(gè)電場,使得鄰近晶體管的閾值電壓發(fā)生變化。最近出現(xiàn)一種改進(jìn)的方法:使用幾百圈金屬線繞在微探針的針尖構(gòu)成一個(gè)小型電感。當(dāng)電流進(jìn)入線圈會產(chǎn)生磁場,針尖將集中磁力線。
每個(gè)晶體管和與它相連的線路構(gòu)成有時(shí)延特性的RC電路。處理器的最大可用時(shí)鐘頻率取決于該電路的最大延遲。同樣的,每個(gè)觸發(fā)器在接收輸入電壓和由此引致的輸出電壓之間有個(gè)特征時(shí)間窗口。這個(gè)窗口由給定的電壓和溫度來確定。如果用時(shí)鐘噪聲(比正常的時(shí)鐘脈沖要短得多)或電源噪聲(電源電壓的快速波動(dòng))將會影響芯片里的某些晶體管,導(dǎo)致一個(gè)或多個(gè)觸發(fā)器進(jìn)入錯(cuò)誤狀態(tài)。通過改變參數(shù),處理器會被導(dǎo)致執(zhí)行許多完全不同的錯(cuò)誤指令,有時(shí)甚至是不被微碼支持的。經(jīng)管我們不會預(yù)先知道何種噪聲會導(dǎo)致何種芯片的何種錯(cuò)誤,但它能相當(dāng)簡單地進(jìn)行系統(tǒng)的搜索。
1、時(shí)鐘噪聲攻擊(Clock glitches)
時(shí)鐘信號的噪聲攻擊在目前是最簡單的,且相當(dāng)實(shí)用。實(shí)際應(yīng)用中的噪聲通常用來取代跳轉(zhuǎn)條件并試驗(yàn)先前的測試指令??梢栽诎踩艽a問詢處理時(shí)創(chuàng)建一個(gè)攻擊窗口,簡單預(yù)防執(zhí)行這些指令。指令噪聲也能用來擴(kuò)大循環(huán)的時(shí)間。如,串口子程序在輸出緩沖后再讀更多的內(nèi)容;或在密鑰操作時(shí)減少循環(huán)次數(shù)來傳一個(gè)弱的密碼。 為獲得噪聲,時(shí)鐘需要臨時(shí)增加一個(gè)或大于半個(gè)周期,有些觸發(fā)器在到達(dá)新狀態(tài)之前就獲得輸入。時(shí)鐘噪聲通常針對處理器的指令流。對硬件執(zhí)行安全保護(hù)的微控制器沒有什么效果。實(shí)際中,僅使用時(shí)鐘噪聲來攻擊微控制器或智能卡的軟件程序接口。
這類保護(hù)的破解是相對容易的。如處理器在循環(huán)里只執(zhí)行一個(gè)指令,攻擊時(shí)可用不同的時(shí)鐘噪聲導(dǎo)致處理器誤操作。不需要小心地與時(shí)鐘信號同步,只需要隨機(jī)制造噪聲就可在數(shù)次攻擊內(nèi)成功。插入噪聲是相對容易的,無需使用外部發(fā)生器,瞬間短路晶振即可。當(dāng)諧振器在不同的泛音上產(chǎn)生震蕩會發(fā)出很多噪聲。大部分情況下需要在確定的時(shí)鐘周期內(nèi)獲得所需結(jié)果,在這種情況下用信號發(fā)生器更好。
使用時(shí)鐘噪聲來攻擊某些微控制器也許是很困難的。例如德儀的MPS430微控制器在內(nèi)部RC震蕩器工作的啟動(dòng)模塊。很難與內(nèi)部時(shí)鐘同步,攻擊時(shí)很難估計(jì)精確的時(shí)間。一些智能卡在處理器指令流里會隨機(jī)插入延遲,使得攻擊更為困難。使用功耗分析會有幫助,但要求非常昂貴的設(shè)備來實(shí)時(shí)獲得參考信號。
2、電源噪聲攻擊(Power glitches)
電源供應(yīng)電壓的波動(dòng)會導(dǎo)致晶體管閾值電平的漂移。結(jié)果就是一些觸發(fā)器在不同的時(shí)間里采樣它們的輸入,或讀出錯(cuò)誤的安全熔絲的狀態(tài)。 通常用瞬間增加電源電壓或電壓跌落來制造噪聲,一般在10個(gè)時(shí)鐘周期內(nèi)。電源噪聲通常用在微控制器的程序接口上,能影響處理器運(yùn)行或硬件安全電路。一般地,弱點(diǎn)比時(shí)鐘噪聲更難找到并利用,因?yàn)閷τ跁r(shí)域參數(shù),振幅,上升/下降時(shí)間都是變量。
一個(gè)例子是上例提到的攻擊MC68C05B6.如果在執(zhí)行AND $0100指令時(shí)電源電壓減少50-70%,處理器從EEPROM中取出的值是FFh而不是實(shí)際的值。這會對應(yīng)熔絲未加密狀態(tài)。竅門是小心計(jì)算執(zhí)行時(shí)間來減少電源電壓,否則處理器會停止運(yùn)行或進(jìn)入復(fù)位狀態(tài)。這種任務(wù)并不難,復(fù)位后目標(biāo)指令在第一個(gè)一百周期內(nèi)被執(zhí)行。破解者可以使用矢量發(fā)生器或構(gòu)建一個(gè)自己的噪聲源。
另一個(gè)是微芯的老舊的PIC16F84。芯片的擦除操作會解除安全保護(hù)。但同時(shí)會芯片上程序和數(shù)據(jù)存儲器中的內(nèi)容。安全保護(hù)電路在硬件設(shè)計(jì)上是在安全熔絲復(fù)位之前擦掉存儲器。但我們發(fā)現(xiàn)在芯片擦除操作時(shí)電源電壓幾微秒內(nèi)增加到大約10V,會中斷存儲器擦除操作,但安全熔絲正常完成復(fù)位,這使得有可能讀出存儲器里的內(nèi)容。如此高壓需要謹(jǐn)慎使用,如果時(shí)間過長會損傷芯片。新版本的PIC16F84A增加了防欠壓和過壓攻擊的能力。如果電源電壓低于3V或6V,通過編程接口的任意修改存儲器的操作會被立即中斷。
不是一直需要電源噪聲超過電源電壓范圍的規(guī)格。例如,PIC18F84A微控制器,保護(hù)機(jī)制可以阻止在芯片擦除操作開始后使用大于50mV的噪聲。那會導(dǎo)致中止程序存儲器的擦除操作但不會擦掉熔絲。
上述例子表明噪聲攻擊時(shí)無需特殊工具就有很好的效果。智能卡里有時(shí)鐘監(jiān)控電路但極少微控制器有。
六、數(shù)據(jù)保持能力分析(Data remanence)
處理器一般會把密鑰保存在靜態(tài)RAM里,如果元器件被篡改就會掉電,RAM內(nèi)容丟失,從而保護(hù)密鑰不被竊取。眾所周知的是在低于零下20度時(shí),SRAM里的內(nèi)容會“冰凍”。很多元器件把溫度低于這個(gè)閾值視為發(fā)生篡改事件。我們做了一些實(shí)驗(yàn)來確定現(xiàn)代SRAM數(shù)據(jù)保持能力與溫度的關(guān)系。我們的實(shí)驗(yàn)表明傳統(tǒng)的思維不再有效。即使在高溫下,數(shù)據(jù)保持能力也是個(gè)問題。數(shù)據(jù)保持能力不僅僅對SRAM有影響,對DRAM, UV EPROM, EEPROM和閃存也有影響。結(jié)果是,仍然可以從已擦除的存儲器中獲得一些信息。
這會給安全設(shè)備帶來很多問題。 安全工程師都很關(guān)注斷電后SRAM器件能保持?jǐn)?shù)據(jù)的時(shí)間。原因如下:很多產(chǎn)品使用密鑰或類似的方法進(jìn)行加密和別的安全相關(guān)的計(jì)算,需要不能被讀出或改變。最普遍的解決方法是把安全密鑰放在帶篡改傳感器的易失存儲器中。一旦檢測到發(fā)生篡改,易失傳感器會掉電或短路到地。但如果數(shù)據(jù)保留時(shí)間大于破解者打開元器件并對存儲器上電的時(shí)間,那保護(hù)機(jī)制就被摧毀了。
在二十世紀(jì)八十年代,發(fā)現(xiàn)低溫能將SRAM的數(shù)據(jù)保存時(shí)間增加到幾秒甚至幾分鐘。對于那個(gè)時(shí)候的元器件,發(fā)現(xiàn)零下20度就可以增加數(shù)據(jù)保存時(shí)間,并且會隨著溫度的降低而增加保持的時(shí)間。有些就增加了溫度傳感器,溫度低于零下20度就觸發(fā)篡改事件,立即清零存儲器。本次試驗(yàn)是重復(fù)這個(gè)工作,察看2000年后的產(chǎn)品是否也有此特性。
另一個(gè)需要關(guān)注的是即使部分內(nèi)容已被破壞,安全信息也能被復(fù)原。假設(shè)破解者獲得了n=128位密鑰中的m=115位,也就是90%的信息。他可以通過搜索n!/(m?。╪-m)!=128!/(115!13?。?2.12*1017~258個(gè)可能的密鑰。通過1萬臺電腦,每臺每秒進(jìn)行10億次搜索密鑰的操作,破解者只需6個(gè)小時(shí)就能搜遍所有密鑰。如果只有80%的信息,也就是知道128位密鑰中的103位,那就有2.51*1026~288種可能。幾乎增大了一百倍,破解者要花百萬年來搜索密鑰,故認(rèn)為均勻的128位密鑰不能被恢復(fù)。
評論
查看更多