檢測(cè)系統(tǒng)的外部篡改
電表也會(huì)面對(duì)來自真實(shí)世界的幾種攻擊。這包括系統(tǒng)箱體的損壞,某種信號(hào)的更改等。iRTC會(huì)得到片下防篡改開關(guān)的支持,它可通過MCU上的一個(gè)專門防篡改引腳進(jìn)行連接,如圖2所示,因此可監(jiān)視和檢測(cè)出這些侵入。這些抗篡改開關(guān)需要全時(shí)被監(jiān)控,所以它們需要用電池(RTC)來供電。
這些防篡改開關(guān)更易產(chǎn)生噪音,且易引起錯(cuò)誤的篡改條件。iRTC會(huì)過濾掉這些噪音以防錯(cuò)誤的觸發(fā)行為。
篡改事件是影響CPU的原因之一。篡改事件的固件會(huì)采取必要的行為,如擦除所有安全信息、生成系統(tǒng)重置、在EEPROM或電池備份寄存器中儲(chǔ)存篡改事件,最后清除中斷標(biāo)志。CPU對(duì)一個(gè)篡改事件的響應(yīng)通常都是因應(yīng)用而不同的。
圖2 –外部篡改探測(cè)
值得注意的是,一旦篡改中斷產(chǎn)生,除非主供電(VDD)和電池電源(VBAT)都移除,否是它是不會(huì)被清除的。當(dāng)電源重新連接,篡改會(huì)處于默認(rèn)狀態(tài),只有在CPU內(nèi)使用密碼才可對(duì)其進(jìn)行重置。而在電表中,這個(gè)過程一般都在電表校準(zhǔn)時(shí)完成。
除此之外,固件可以通過使用ADC內(nèi)部溫度傳感器來實(shí)施篡改檢測(cè)。例如,當(dāng)溫度超出一個(gè)特定運(yùn)行范圍或是溫度有迅速的變化(當(dāng)被凍住或同焊接裝置接觸時(shí)),固件就會(huì)在存儲(chǔ)器中記錄這樣一個(gè)行為,然后在讀數(shù)時(shí)(AMR或手工讀數(shù))報(bào)告該篡改,并且點(diǎn)亮篡改LED燈。
篡改事件時(shí)間戳
iRTC可以檢測(cè)到以下篡改事件:
?當(dāng)系統(tǒng)運(yùn)行時(shí)移除電池(即VDD開啟)
?當(dāng)系統(tǒng)關(guān)閉時(shí)移除電池(如,VDD關(guān)閉。POR自動(dòng)檢測(cè))
?如上所述外部篡改事件(如防篡改開關(guān)或標(biāo)志的打開)
當(dāng)有篡改事件被檢測(cè)出來后,iRTC會(huì)在寄存器中記錄日期(年/月/日)和時(shí)間(小時(shí)/分鐘/秒)。在一個(gè)電能表應(yīng)用中,這會(huì)讓授權(quán)讀取數(shù)據(jù)的人了解(通過固件)自電表安裝以來,其受攻擊的時(shí)間和受攻擊次數(shù)。而配電公司也會(huì)就此依據(jù)向消費(fèi)者開出賬單或執(zhí)行罰款。另外,AMR還可在篡改事件發(fā)生后就能立刻發(fā)出提醒。
iRTC補(bǔ)償
iRTC包括一個(gè)專用的振蕩器,它依靠一個(gè)外部晶體作為其運(yùn)行計(jì)時(shí)的時(shí)鐘源。這個(gè)晶體的特性會(huì)依壓力、電壓、溫度或一定化學(xué)物質(zhì)而改變,這會(huì)改變晶體特性,這也會(huì)讓時(shí)鐘變快或變慢。iRTC會(huì)就時(shí)鐘產(chǎn)生的不精準(zhǔn)作出糾正,繼續(xù)在iRTC計(jì)數(shù)器中生成精確的時(shí)間,以保持時(shí)間的精確。如果晶體走的過快,iRTC就會(huì)去除一定的脈沖計(jì)數(shù),反之,如果時(shí)鐘走得慢,它就會(huì)加上一些脈沖,糾正就是這樣完成的。iRT可以糾正時(shí)鐘的不精確,從低至0.119 ppm到高至3906ppm1。
電表開發(fā)者可以使用ADC內(nèi)部溫度傳感器,并在系統(tǒng)內(nèi)存中保留晶體的溫度概況,以決定所需校準(zhǔn)的尺度。iRTC校準(zhǔn)總是在被稱為“糾正間隔”的特殊間隔完成,而被加或去掉的脈沖數(shù)量被稱為“糾正值”。固件必須決定這兩個(gè)值,并將其編程至iRTC寄存器中以執(zhí)行糾正行為。
舉個(gè)例子,如果溫度的變化導(dǎo)致32.768 kHz晶體頻率減緩,如圖3所示,那么iRTC就會(huì)減緩計(jì)數(shù),1Hz時(shí)鐘的周期就會(huì)增加。為將計(jì)秒時(shí)鐘(或1Hz時(shí)鐘)帶至正確數(shù)值,iRTC則會(huì)于特殊糾正間隔內(nèi)減少時(shí)鐘脈沖。
圖3 – iRTC時(shí)鐘補(bǔ)償
同樣道理,當(dāng)晶體頻率走高,iRTC就可以編程增加必要的震蕩器時(shí)鐘數(shù)量以保持正確的時(shí)間。
如果糾正需要在可接受范圍外執(zhí)行,那么固件會(huì)顯示篡改信號(hào)或是晶體失敗。
防止惡意代碼更改RTC注冊(cè)設(shè)置
所有的iRTC注冊(cè)以及備份存儲(chǔ)都由一個(gè)寫入保護(hù)機(jī)制來保護(hù),這樣任何來自惡意或失控代碼的寫入都不能更改iRTC寄存器的設(shè)置,除非它通過一個(gè)預(yù)先規(guī)定的解鎖序列。
圖4顯示了iRTC寄存器上的寫入保護(hù)。這一寄存器在POR上前15秒是未上鎖的,然后自動(dòng)上鎖。在15秒之后如果想對(duì)它進(jìn)行編程,就必須有一個(gè)特殊的序列寫入控制寄存器,該程序只能是有效/安全的程序。一旦解鎖,寄存器也會(huì)在開鎖2秒后自動(dòng)上鎖CPU可以在這兩次失敗前選擇鎖定寄存器。
圖4 –寫入保護(hù)序列
這一寫入序列額外的好處就是保護(hù)寄存器免受ESD或外部噪音的干擾,而這些干擾可以觸發(fā)行為改變寄存器設(shè)置。由于任何寄存器的寫入都必須經(jīng)歷一個(gè)固定的序列,所以ESD或噪音要摧毀寄存器是幾乎不可能的。
評(píng)論