首先明白MCU是什么——即結(jié)構(gòu)與組成
Ⅰ:中央處理器CPU,包括運(yùn)算器、控制器和寄存器組。是MCU內(nèi)部的核心部件,由運(yùn)算部件和控制部件兩大部分組成。前者能完成數(shù)據(jù)的算術(shù)邏輯運(yùn)算、位變量處理和數(shù)據(jù)傳送操作,后者是按一定時(shí)序協(xié)調(diào)工作,是分析和執(zhí)行指令的部件。
Ⅱ:存儲(chǔ)器,包括ROM和RAM。ROM程序存儲(chǔ)器,MCU的工作是按事先編制好的程序一條條循序執(zhí)行的,ROM程序存儲(chǔ)器即用來(lái)存放已編的程序(系統(tǒng)程序由制造廠家編制和寫(xiě)入)。存儲(chǔ)數(shù)據(jù)掉電后不消失。ROM又分為片內(nèi)存儲(chǔ)器和片外(擴(kuò)展)存儲(chǔ)器兩種。 RAM數(shù)據(jù)存儲(chǔ)器,在程序運(yùn)行過(guò)程中可以隨時(shí)寫(xiě)入數(shù)據(jù),又可以隨時(shí)讀出數(shù)據(jù)。存儲(chǔ)數(shù)據(jù)在掉電后不能保持。RAM也分為片內(nèi)數(shù)據(jù)存儲(chǔ)器和片外(擴(kuò)展)存儲(chǔ)器兩種。
Ⅲ:輸入、輸出I/O接口,與外部輸入、輸出(電路)設(shè)備相連接。PO/P1/P2/P3等數(shù)字I/O接口,內(nèi)部電路含端口鎖存器、輸出驅(qū)動(dòng)器和輸入緩沖器等電路。其中PO為三態(tài)雙向接口,P1/P2/P3數(shù)字I/O端口,內(nèi)部驅(qū)動(dòng)器為“開(kāi)路集電極”輸出電路,應(yīng)用時(shí)內(nèi)部或外部電路接有上拉電阻。每個(gè)端口均可作為數(shù)字信號(hào)輸入或輸出口,并具有復(fù)用功能(指端口功能有第一功能、第二功能甚至數(shù)個(gè)功能,在應(yīng)用中可靈活設(shè)置)。
MCU器件,除數(shù)字I/O端口外,還有ADC模擬量輸入、輸出端口,輸入信號(hào)經(jīng)內(nèi)部A/D轉(zhuǎn)換電路,變換為數(shù)字(頻率)信號(hào),再進(jìn)行處理;對(duì)輸出模擬量信號(hào),則先經(jīng)D/A轉(zhuǎn)換后,再輸出至外部電路。
再來(lái)談幾種如何破解MCU方法
一、非侵入式攻擊
不需要對(duì)元器件進(jìn)行初始化。攻擊時(shí)可以把元器件放在測(cè)試電路中分析,也可單獨(dú)連接元器件。一旦成功,這種攻擊很容易普及,并且重新進(jìn)行攻擊不需要很大的開(kāi)銷(xiāo)。另外,使用這種攻擊不會(huì)留下痕跡。因此,這被認(rèn)為是對(duì)任意元器件的硬件安全最大的威脅。同時(shí),通常需要很多時(shí)間和精力來(lái)尋找對(duì)特定元器件的非侵入式攻擊方法。這通常對(duì)元器件進(jìn)行反向工程,包括反匯編軟件和理解硬件版圖。
非侵入式攻擊可以是被動(dòng)的或主動(dòng)的。被動(dòng)攻擊,也叫側(cè)面攻擊,不會(huì)對(duì)被攻擊元器件發(fā)生作用,但通常是觀察它的信號(hào)和電磁輻射。如功耗分析和時(shí)鐘攻擊。主動(dòng)攻擊,如窮舉攻擊和噪聲攻擊,特點(diǎn)是將信號(hào)加到元器件上,包括電源線。
一個(gè)簡(jiǎn)單的非侵入式攻擊可以是復(fù)制一個(gè)上電配置的基于SRAM的FPGA。接上配置芯片用的JATG接口,用示波器或邏輯分析儀,捕捉所有信號(hào)。然后可以通過(guò)分析波形并回復(fù)獨(dú)有的命令。
只使用到一半的FPGA資源時(shí),可以輕微改變數(shù)據(jù)流來(lái)偽裝盜版的事實(shí)。配置時(shí)留下一點(diǎn)空間而不影響元器件的運(yùn)行。JTAG接口在發(fā)送信號(hào)時(shí)序時(shí)也有一些自由,故盜版的波形可以設(shè)置成看上去與原始信號(hào)不一樣的。另外,破解者可以在上傳時(shí)交換行地址,給人的印象是完全不同的設(shè)計(jì)。
含糊與安全
半導(dǎo)體制造商給大客戶(hù)提供了增強(qiáng)產(chǎn)品防破解能力的措施:包裝上的客戶(hù)印字代替了標(biāo)準(zhǔn)的芯片型號(hào)。這給人的印象是產(chǎn)品是由定制的集成電路設(shè)計(jì)的。眾所周知,ASIC提供了很好地保護(hù)措施來(lái)防止多種攻擊,只有極少數(shù)經(jīng)驗(yàn)豐富且裝備精良的破解者才有可能成功破解。這會(huì)使很多潛在的破解者望而卻步。但一個(gè)信心堅(jiān)定的破解者會(huì)嘗試用簡(jiǎn)單的方法確定芯片是不是真的ASIC。最簡(jiǎn)單的方法是觀察連接到電源,地,時(shí)鐘,復(fù)位,串口或別的接口的引腳。與數(shù)據(jù)庫(kù)中被懷疑的微控制器相比較,這種結(jié)果非??煽浚糠N微控制器都有自己的引腳特點(diǎn)。一旦發(fā)現(xiàn)相似的,就把它放在通用燒寫(xiě)器上嘗試讀出結(jié)果。
另一個(gè)簡(jiǎn)單的方法是限制訪問(wèn)程序存儲(chǔ)器。通常用在智能卡中,但一些微控制器中也用到。這不是很可靠且實(shí)用的方法。當(dāng)然在智能卡中用得很好,所有的客戶(hù)被與芯片制造商迫簽署不擴(kuò)散協(xié)議。但微控制器極少這樣,能被通用燒寫(xiě)器燒寫(xiě)的微控制器世界上很多公司都能提供。即使文件中沒(méi)有燒寫(xiě)的規(guī)格,用低成本的示波器幾個(gè)小時(shí)就可以套出需要的波形。如果微控制器不被特殊通用燒寫(xiě)器所支持,仍然可以通過(guò)從制造商購(gòu)買(mǎi)開(kāi)發(fā)板來(lái)獲得直接完整的協(xié)議。
二、時(shí)序攻擊(TIming attacks)
一些安全相關(guān)的操作使用輸入的值和密鑰,由半導(dǎo)體芯片執(zhí)行不同的時(shí)間來(lái)比較。小心的時(shí)序測(cè)量和分析就能恢復(fù)出密鑰。這個(gè)方法最早在1996年的文獻(xiàn)上提到。稍后這種攻擊成功破解了實(shí)際的RSA簽名的智能卡。
為了攻擊成功,需要收集裝置的信息,與處理時(shí)間整合比較,如問(wèn)答延遲(quesTIon-answer delay)。很多密碼算法容易受到時(shí)序攻擊,主要原因是軟件來(lái)執(zhí)行算法。那包括執(zhí)行適時(shí)跳過(guò)需要的分支和操作條件;使用緩存;不固定時(shí)間處理指令如倍頻和分頻;還有大量的其他原因。結(jié)果就是執(zhí)行能力典型地取決于密鑰和輸入的數(shù)據(jù)。 為防止此類(lèi)攻擊可以使用盲簽名(Blinding signatures)技術(shù)。這個(gè)方法是利用選定的隨機(jī)數(shù)與輸入數(shù)據(jù)混合來(lái)防止破解者知道輸入數(shù)據(jù)的數(shù)學(xué)運(yùn)算法則。
時(shí)序攻擊可用在安全保護(hù)是基于密碼的微控制器,或使用確定數(shù)字的卡或密碼來(lái)進(jìn)行訪問(wèn)控制的系統(tǒng),如達(dá)拉斯的iButton產(chǎn)品。這些系統(tǒng)中共有的風(fēng)險(xiǎn)是輸入的連續(xù)數(shù)字在數(shù)據(jù)庫(kù)進(jìn)行再次校驗(yàn)。系統(tǒng)需經(jīng)常檢查輸入到數(shù)據(jù)庫(kù)的密鑰的每個(gè)字節(jié),一旦發(fā)現(xiàn)不正確的字節(jié)就會(huì)立即停止,然后切換到下一個(gè)直到最后一個(gè)。所以破解者很容易測(cè)量出輸入最后一個(gè)密鑰倒請(qǐng)求另一個(gè)的時(shí)間,并得出發(fā)現(xiàn)的密鑰相似度。嘗試相對(duì)小的數(shù)字,有可能找到匹配的密鑰。
為防止這些攻擊,設(shè)計(jì)者需要小心計(jì)算處理器的周期。當(dāng)密碼進(jìn)行比較時(shí)確保正確和錯(cuò)誤的時(shí)間是一樣的,例如:飛思卡爾的68HC08微控制器的內(nèi)部存儲(chǔ)器載入模塊在輸入正確的八字節(jié)密碼后可以訪問(wèn)內(nèi)部閃存。為達(dá)到正確和錯(cuò)誤的密碼都處理相同的時(shí)間,程序中增加了額外的空操作指令。這對(duì)時(shí)序攻擊提供了很好的保護(hù)。一些微控制器有內(nèi)部阻容振蕩器,那樣處理器的工作頻率與電壓和芯片的溫度相關(guān)。這使得時(shí)序分析很困難,攻擊時(shí)需要穩(wěn)定元器件的溫度并減少電源線上的噪聲和電壓波動(dòng)。一些智能卡有內(nèi)部隨機(jī)時(shí)鐘信號(hào)使得攻擊時(shí)測(cè)量時(shí)間延遲無(wú)效。
三、窮舉攻擊(也稱(chēng)暴力攻擊Brute force attacks)
暴力對(duì)于半導(dǎo)體硬件和密碼來(lái)說(shuō)是另一種意思。對(duì)于密碼,暴力攻擊是對(duì)系統(tǒng)嘗試數(shù)量眾多的密鑰。通常是使用高速計(jì)算機(jī)來(lái)尋找匹配的密鑰。 一個(gè)例子是微控制器中的密碼保護(hù)設(shè)置。以TI的MSP430為例,密碼本身長(zhǎng)度為32字節(jié)(256位),抵擋暴力攻擊已經(jīng)足夠了。但密碼分配在與處理器中斷矢量相同的存儲(chǔ)器地址。那么,首先減少存儲(chǔ)器內(nèi)矢量一直指向的區(qū)域。然后當(dāng)軟件被更新時(shí),只有小部分的密碼被修改,因?yàn)榇蟛糠种袛嘧映绦蛑赶虻氖噶渴窍嗤牡刂贰?br />
結(jié)果是,如果破解者知道早前密碼中的一個(gè),就很容易做系統(tǒng)的搜索,在合理的時(shí)間內(nèi)找到正確的密碼。 暴力攻擊也可用在ASIC或CPLD的硬件設(shè)計(jì)來(lái)實(shí)現(xiàn)。這種情況下,破解者使用所有可能的邏輯組合到元器件可能的輸入端并觀察所有輸出。這種方法也稱(chēng)為黑箱分析(Black-box analysis),因?yàn)槠平庹卟恢辣粶y(cè)試元器件的情況。通過(guò)所有可能的信號(hào)組合,嘗試獲得元器件的功能。這種方法對(duì)相對(duì)小的邏輯器件很有效。另一個(gè)問(wèn)題是破解者使用的ASIC或CPLD有觸發(fā)器,故輸出將可能是當(dāng)前狀態(tài)或輸入的狀態(tài)。但如果預(yù)先檢查并分析信號(hào),搜索的范圍可以顯著減少。例如,時(shí)鐘輸入,數(shù)據(jù)總線和一些控制信號(hào)是很容易認(rèn)出的。
另一種可能的暴力攻擊,對(duì)很多半導(dǎo)體芯片有效,是將外部高壓信號(hào)(通常是兩倍于電源電壓)加到芯片引腳上,來(lái)試圖進(jìn)入工廠測(cè)試或編程模式。事實(shí)上,這些引腳用數(shù)字萬(wàn)用表很容易發(fā)現(xiàn),因?yàn)樗鼈儧](méi)有保護(hù)二極管到電源腳。一旦發(fā)現(xiàn)對(duì)高壓敏感的引腳,破解者就可以嘗試可能的邏輯信號(hào)組合來(lái)加到別的引腳上,找出用于進(jìn)入工廠測(cè)試或編程模式的部分。 破解者也可用元器件的通信協(xié)議來(lái)找出設(shè)計(jì)者嵌入在軟件中的測(cè)試和更新用得隱藏功能。
芯片制造商經(jīng)常提供給后期測(cè)試用得嵌入硬件測(cè)試接口。如果這些接口的安全保護(hù)沒(méi)有適當(dāng)設(shè)計(jì),破解者很容易利用它來(lái)讀寫(xiě)片上存儲(chǔ)器。在智能卡中,這些測(cè)試接口通常位于芯片電路之外,并在測(cè)試后從物理上除去。 任何安全系統(tǒng),不管軟件和硬件,在設(shè)計(jì)上都可能有缺陷,對(duì)于破解者來(lái)說(shuō)都是機(jī)會(huì),暴力攻擊有可能找到它。小心設(shè)計(jì)安全保護(hù)系統(tǒng),進(jìn)行適當(dāng)?shù)脑u(píng)估,可以避免很多問(wèn)題,并使得這些攻擊事實(shí)上不可行。
四、功耗分析(Power analysis)
一個(gè)運(yùn)算設(shè)備的功耗取決于它當(dāng)前的狀態(tài)。依照CMOS晶體管的原理,各部分動(dòng)態(tài)時(shí)的功耗比靜態(tài)的要大。當(dāng)輸入電壓加到反向器上,會(huì)引起一個(gè)晶體管短路,這個(gè)晶體管電流的增加比靜態(tài)消耗的寄生漏電要大得多。在電源線上加個(gè)10-20歐的電阻,就可以測(cè)量電流的波動(dòng)。為達(dá)到更好的效果,需要使用至少12位精度和50MHz采樣速度的模數(shù)轉(zhuǎn)換器。
這些獲得的參數(shù)可以用來(lái)區(qū)別處理器的不同指令并估計(jì)總線上同時(shí)翻轉(zhuǎn)的位數(shù)。 通過(guò)平均多次重復(fù)同樣操作的電流,即使是沒(méi)有通過(guò)總線的很小信號(hào)也能區(qū)別開(kāi)。有些信號(hào)如移位狀態(tài)特別有用,因?yàn)楹芏嗝艽a的密鑰產(chǎn)生算法使用移位操作來(lái)逐一移出單個(gè)密鑰倒進(jìn)位標(biāo)志。即使?fàn)顟B(tài)位的變化不能直接測(cè)量,它們通常會(huì)改變指令次序或微碼的執(zhí)行,這會(huì)導(dǎo)致功耗的明顯變化。 不同指令導(dǎo)致不同級(jí)別的指令解碼和運(yùn)算單元的活動(dòng),可被清晰地區(qū)別開(kāi),故運(yùn)算部分能被推測(cè)出。處理器的不同單元在時(shí)鐘沿相關(guān)的不同時(shí)間里有獨(dú)有的開(kāi)關(guān)狀態(tài),能被高頻儀器分離出來(lái)。
有多種不同的功耗分析技術(shù)用在破解密碼算法上。整個(gè)分析過(guò)程是相對(duì)簡(jiǎn)單的,只需要標(biāo)準(zhǔn)的現(xiàn)有的廉價(jià)儀器設(shè)備。 功耗分析技術(shù)主要有兩種:簡(jiǎn)單功耗分析(SPA:Simple Power Analysis)和差分功耗分析(DPA:Difference Power Analysis)。SPA是在密碼或別的安全相關(guān)操作時(shí)直接觀察功耗,可以得知設(shè)備運(yùn)行時(shí)的信息如密鑰資料。如果破解者知道密碼算法,很容易通過(guò)觀察處理器指令次序,特別是移位條件轉(zhuǎn)移,找到一些位的信息。如果算法或邏輯運(yùn)算的結(jié)果很容易被看出,如進(jìn)位狀態(tài),零或負(fù)標(biāo)志,就可以獲得更多的信息。
DPA是種更有效的技術(shù),因?yàn)槠平庹卟恍枰烂艽a算法是如何執(zhí)行的。它使用靜態(tài)分析和已知密碼運(yùn)算的大量功耗跡線來(lái)獲取隱藏信息。用統(tǒng)計(jì)方法鑒別功耗的微小區(qū)別,可用來(lái)恢復(fù)密鑰中的單個(gè)的位信息。 功耗特性當(dāng)然包括噪聲部分。額外的噪聲可以通過(guò)減少獲取信號(hào)的探針長(zhǎng)度并小心使用測(cè)量?jī)x器來(lái)降低它。測(cè)量接在地線上的電阻的功耗有一些優(yōu)勢(shì)。首先,減少了噪聲電平。其次,可以用示波器的探頭直接測(cè)量信號(hào),因?yàn)榇蟛糠痔结樥居泄驳牡鼐€與外部電源地相連。為了增加信噪比,可以通過(guò)提高平均采樣數(shù)來(lái)獲得。
有源探頭能降低輸入電容,增加對(duì)輸入信號(hào)的帶寬。一種方法是用高速低噪聲的運(yùn)放來(lái)構(gòu)建相對(duì)簡(jiǎn)單的探頭,另一種是用很短的同軸電纜直連到示波器的輸入端。在這些情況下,探頭的輸入電容顯著減少。
對(duì)現(xiàn)有的功耗分析步驟進(jìn)行了改進(jìn)。這是一種新的方法,尚未有類(lèi)似的。我們用鐵芯變壓器來(lái)取代連到電源或地的電阻,那樣波形就有點(diǎn)不一樣,因?yàn)樾盘?hào)的直流成分丟失了,同時(shí)又有些有利條件。常用的方法對(duì)直流電流幾乎沒(méi)有什么限制。但對(duì)于10歐電阻來(lái)講100mA的電流意味著有1V的電壓降,那可能中斷微控制器的正常操作。
減少這個(gè)電阻可以解決這個(gè)問(wèn)題,但會(huì)使得難以識(shí)別功耗的微小變動(dòng)。使用變壓器后,不需要使用昂貴的有源探頭,標(biāo)準(zhǔn)的無(wú)源探頭就可以給出幾乎相同的結(jié)果。如果信號(hào)太小,調(diào)節(jié)二次側(cè)的線圈就可以增加振幅。變壓器也擔(dān)當(dāng)無(wú)源濾波器的角色,如波形,同樣的處理器指令對(duì)電阻和變壓器所測(cè)量到的波形有不同的影響。那可以通過(guò)對(duì)獲得的信號(hào)進(jìn)行處理。為了攻擊獲得成功,需要采集數(shù)千的樣本,然后快速分析處理所展現(xiàn)的秘密。
最近,芯片設(shè)計(jì)上已考慮這種攻擊,并將使得這種攻擊方法更難獲得成功。
五、噪聲攻擊(Glitch attacks)
噪聲攻擊是快速改變輸入到微控制器的信號(hào),以影響它的正常運(yùn)行。通常噪聲是疊加在電源上或時(shí)鐘信號(hào)上,但噪聲也可以是外加的短暫電場(chǎng)或電磁脈沖。在離芯片表面數(shù)百微米處放置兩根金屬針,然后加上少于1微秒的數(shù)百伏電壓的窄脈沖,晶圓襯底會(huì)感應(yīng)出一個(gè)電場(chǎng),使得鄰近晶體管的閾值電壓發(fā)生變化。最近出現(xiàn)一種改進(jìn)的方法:使用幾百圈金屬線繞在微探針的針尖構(gòu)成一個(gè)小型電感。當(dāng)電流進(jìn)入線圈會(huì)產(chǎn)生磁場(chǎng),針尖將集中磁力線。
每個(gè)晶體管和與它相連的線路構(gòu)成有時(shí)延特性的RC電路。處理器的最大可用時(shí)鐘頻率取決于該電路的最大延遲。同樣的,每個(gè)觸發(fā)器在接收輸入電壓和由此引致的輸出電壓之間有個(gè)特征時(shí)間窗口。這個(gè)窗口由給定的電壓和溫度來(lái)確定。如果用時(shí)鐘噪聲(比正常的時(shí)鐘脈沖要短得多)或電源噪聲(電源電壓的快速波動(dòng))將會(huì)影響芯片里的某些晶體管,導(dǎo)致一個(gè)或多個(gè)觸發(fā)器進(jìn)入錯(cuò)誤狀態(tài)。通過(guò)改變參數(shù),處理器會(huì)被導(dǎo)致執(zhí)行許多完全不同的錯(cuò)誤指令,有時(shí)甚至是不被微碼支持的。經(jīng)管我們不會(huì)預(yù)先知道何種噪聲會(huì)導(dǎo)致何種芯片的何種錯(cuò)誤,但它能相當(dāng)簡(jiǎn)單地進(jìn)行系統(tǒng)的搜索。
1、時(shí)鐘噪聲攻擊(Clock glitches)
時(shí)鐘信號(hào)的噪聲攻擊在目前是最簡(jiǎn)單的,且相當(dāng)實(shí)用。實(shí)際應(yīng)用中的噪聲通常用來(lái)取代跳轉(zhuǎn)條件并試驗(yàn)先前的測(cè)試指令??梢栽诎踩艽a問(wèn)詢(xún)處理時(shí)創(chuàng)建一個(gè)攻擊窗口,簡(jiǎn)單預(yù)防執(zhí)行這些指令。指令噪聲也能用來(lái)擴(kuò)大循環(huán)的時(shí)間。如,串口子程序在輸出緩沖后再讀更多的內(nèi)容;或在密鑰操作時(shí)減少循環(huán)次數(shù)來(lái)傳一個(gè)弱的密碼。 為獲得噪聲,時(shí)鐘需要臨時(shí)增加一個(gè)或大于半個(gè)周期,有些觸發(fā)器在到達(dá)新?tīng)顟B(tài)之前就獲得輸入。時(shí)鐘噪聲通常針對(duì)處理器的指令流。對(duì)硬件執(zhí)行安全保護(hù)的微控制器沒(méi)有什么效果。實(shí)際中,僅使用時(shí)鐘噪聲來(lái)攻擊微控制器或智能卡的軟件程序接口。
這類(lèi)保護(hù)的破解是相對(duì)容易的。如處理器在循環(huán)里只執(zhí)行一個(gè)指令,攻擊時(shí)可用不同的時(shí)鐘噪聲導(dǎo)致處理器誤操作。不需要小心地與時(shí)鐘信號(hào)同步,只需要隨機(jī)制造噪聲就可在數(shù)次攻擊內(nèi)成功。插入噪聲是相對(duì)容易的,無(wú)需使用外部發(fā)生器,瞬間短路晶振即可。當(dāng)諧振器在不同的泛音上產(chǎn)生震蕩會(huì)發(fā)出很多噪聲。大部分情況下需要在確定的時(shí)鐘周期內(nèi)獲得所需結(jié)果,在這種情況下用信號(hào)發(fā)生器更好。
使用時(shí)鐘噪聲來(lái)攻擊某些微控制器也許是很困難的。例如德儀的MPS430微控制器在內(nèi)部RC震蕩器工作的啟動(dòng)模塊。很難與內(nèi)部時(shí)鐘同步,攻擊時(shí)很難估計(jì)精確的時(shí)間。一些智能卡在處理器指令流里會(huì)隨機(jī)插入延遲,使得攻擊更為困難。使用功耗分析會(huì)有幫助,但要求非常昂貴的設(shè)備來(lái)實(shí)時(shí)獲得參考信號(hào)。
2、電源噪聲攻擊(Power glitches)
電源供應(yīng)電壓的波動(dòng)會(huì)導(dǎo)致晶體管閾值電平的漂移。結(jié)果就是一些觸發(fā)器在不同的時(shí)間里采樣它們的輸入,或讀出錯(cuò)誤的安全熔絲的狀態(tài)。 通常用瞬間增加電源電壓或電壓跌落來(lái)制造噪聲,一般在10個(gè)時(shí)鐘周期內(nèi)。電源噪聲通常用在微控制器的程序接口上,能影響處理器運(yùn)行或硬件安全電路。一般地,弱點(diǎn)比時(shí)鐘噪聲更難找到并利用,因?yàn)閷?duì)于時(shí)域參數(shù),振幅,上升/下降時(shí)間都是變量。
一個(gè)例子是上例提到的攻擊MC68C05B6.如果在執(zhí)行AND $0100指令時(shí)電源電壓減少50-70%,處理器從EEPROM中取出的值是FFh而不是實(shí)際的值。這會(huì)對(duì)應(yīng)熔絲未加密狀態(tài)。竅門(mén)是小心計(jì)算執(zhí)行時(shí)間來(lái)減少電源電壓,否則處理器會(huì)停止運(yùn)行或進(jìn)入復(fù)位狀態(tài)。這種任務(wù)并不難,復(fù)位后目標(biāo)指令在第一個(gè)一百周期內(nèi)被執(zhí)行。破解者可以使用矢量發(fā)生器或構(gòu)建一個(gè)自己的噪聲源。
另一個(gè)是微芯的老舊的PIC16F84。芯片的擦除操作會(huì)解除安全保護(hù)。但同時(shí)會(huì)芯片上程序和數(shù)據(jù)存儲(chǔ)器中的內(nèi)容。安全保護(hù)電路在硬件設(shè)計(jì)上是在安全熔絲復(fù)位之前擦掉存儲(chǔ)器。但我們發(fā)現(xiàn)在芯片擦除操作時(shí)電源電壓幾微秒內(nèi)增加到大約10V,會(huì)中斷存儲(chǔ)器擦除操作,但安全熔絲正常完成復(fù)位,這使得有可能讀出存儲(chǔ)器里的內(nèi)容。如此高壓需要謹(jǐn)慎使用,如果時(shí)間過(guò)長(zhǎng)會(huì)損傷芯片。新版本的PIC16F84A增加了防欠壓和過(guò)壓攻擊的能力。如果電源電壓低于3V或6V,通過(guò)編程接口的任意修改存儲(chǔ)器的操作會(huì)被立即中斷。
不是一直需要電源噪聲超過(guò)電源電壓范圍的規(guī)格。例如,PIC18F84A微控制器,保護(hù)機(jī)制可以阻止在芯片擦除操作開(kāi)始后使用大于50mV的噪聲。那會(huì)導(dǎo)致中止程序存儲(chǔ)器的擦除操作但不會(huì)擦掉熔絲。
上述例子表明噪聲攻擊時(shí)無(wú)需特殊工具就有很好的效果。智能卡里有時(shí)鐘監(jiān)控電路但極少微控制器有。
六、數(shù)據(jù)保持能力分析(Data remanence)
處理器一般會(huì)把密鑰保存在靜態(tài)RAM里,如果元器件被篡改就會(huì)掉電,RAM內(nèi)容丟失,從而保護(hù)密鑰不被竊取。眾所周知的是在低于零下20度時(shí),SRAM里的內(nèi)容會(huì)“冰凍”。很多元器件把溫度低于這個(gè)閾值視為發(fā)生篡改事件。我們做了一些實(shí)驗(yàn)來(lái)確定現(xiàn)代SRAM數(shù)據(jù)保持能力與溫度的關(guān)系。我們的實(shí)驗(yàn)表明傳統(tǒng)的思維不再有效。即使在高溫下,數(shù)據(jù)保持能力也是個(gè)問(wèn)題。數(shù)據(jù)保持能力不僅僅對(duì)SRAM有影響,對(duì)DRAM, UV EPROM, EEPROM和閃存也有影響。結(jié)果是,仍然可以從已擦除的存儲(chǔ)器中獲得一些信息。
這會(huì)給安全設(shè)備帶來(lái)很多問(wèn)題。 安全工程師都很關(guān)注斷電后SRAM器件能保持?jǐn)?shù)據(jù)的時(shí)間。原因如下:很多產(chǎn)品使用密鑰或類(lèi)似的方法進(jìn)行加密和別的安全相關(guān)的計(jì)算,需要不能被讀出或改變。最普遍的解決方法是把安全密鑰放在帶篡改傳感器的易失存儲(chǔ)器中。一旦檢測(cè)到發(fā)生篡改,易失傳感器會(huì)掉電或短路到地。但如果數(shù)據(jù)保留時(shí)間大于破解者打開(kāi)元器件并對(duì)存儲(chǔ)器上電的時(shí)間,那保護(hù)機(jī)制就被摧毀了。
在二十世紀(jì)八十年代,發(fā)現(xiàn)低溫能將SRAM的數(shù)據(jù)保存時(shí)間增加到幾秒甚至幾分鐘。對(duì)于那個(gè)時(shí)候的元器件,發(fā)現(xiàn)零下20度就可以增加數(shù)據(jù)保存時(shí)間,并且會(huì)隨著溫度的降低而增加保持的時(shí)間。有些就增加了溫度傳感器,溫度低于零下20度就觸發(fā)篡改事件,立即清零存儲(chǔ)器。本次試驗(yàn)是重復(fù)這個(gè)工作,察看2000年后的產(chǎn)品是否也有此特性。
另一個(gè)需要關(guān)注的是即使部分內(nèi)容已被破壞,安全信息也能被復(fù)原。假設(shè)破解者獲得了n=128位密鑰中的m=115位,也就是90%的信息。他可以通過(guò)搜索n!/(m!(n-m)!=128!/(115!13!)=2.12*1017~258個(gè)可能的密鑰。通過(guò)1萬(wàn)臺(tái)電腦,每臺(tái)每秒進(jìn)行10億次搜索密鑰的操作,破解者只需6個(gè)小時(shí)就能搜遍所有密鑰。如果只有80%的信息,也就是知道128位密鑰中的103位,那就有2.51*1026~288種可能。幾乎增大了一百倍,破解者要花百萬(wàn)年來(lái)搜索密鑰,故認(rèn)為均勻的128位密鑰不能被恢復(fù)。