抗故障攻擊的專用芯片存儲單元設(shè)計
自1996年由Boneh等人[1]提出故障攻擊方法由簡單故障攻擊發(fā)展為差分故障攻擊、安全故障攻擊,攻擊的對象包括功能運(yùn)算單元、存儲單元和狀態(tài)機(jī),已對智能卡、密碼器件等專用芯片的安全造成很大威脅。其中,以存儲單元為對象建立的故障模型最為常用。Bar-El等人[2]建立向RSA密碼算法的私鑰存儲器中導(dǎo)入單比特故障的模型;Berzati等人[3]通過向模數(shù)N中導(dǎo)入故障成功獲得RSA密碼算法的私鑰。如何防護(hù)專用芯片中的存儲單元,抵抗故障攻擊成為專用芯片設(shè)計的一個重要方面。付小兵等人[4]利用奇偶校驗(yàn)碼對128 bit的寄存器進(jìn)行故障測驗(yàn),通過比較輸入數(shù)據(jù)與輸出數(shù)據(jù)中0的個數(shù)是否相等來檢測故障,這種方法對芯片性能影響較大,實(shí)時寄存數(shù)據(jù)時易造成誤判。Ocheretnij等人[5]利用奇偶校驗(yàn)碼對ROM實(shí)現(xiàn)的S盒進(jìn)行故障檢測,屬于固定表形式。Bar-El等人[2]提出復(fù)用比較的抗故障攻擊方案,但是不能夠檢測出同步對稱故障。
1 存儲單元的防護(hù)技術(shù)背景
在抗故障攻擊的芯片設(shè)計中,存儲單元的常用防護(hù)措施是復(fù)用檢測和奇偶校驗(yàn)碼檢測。復(fù)用檢測是指復(fù)制存儲單元,存儲數(shù)據(jù)時,把數(shù)據(jù)分別存儲在2個或多個存儲單元中;讀取數(shù)據(jù)時,把各個存儲單元中的數(shù)據(jù)讀出,通過比較讀取數(shù)據(jù)是否一致來檢測故障。奇偶校驗(yàn)碼檢測是指為存儲數(shù)據(jù)添加奇偶校驗(yàn)位,讀取數(shù)據(jù)時,重新計算數(shù)據(jù)的奇偶位,通過與原校驗(yàn)位比對檢測故障。
Ocheretnij等人[5] 把S盒設(shè)計為8進(jìn)9出的查找表,附加位是奇偶校驗(yàn)位。在故障監(jiān)測過程中,計算輸入的校驗(yàn)和,并與所有S盒的附加位“異或”,即得經(jīng)S盒修正的奇偶校驗(yàn)值。在此基礎(chǔ)上進(jìn)一步設(shè)計了監(jiān)測AES輪運(yùn)算的奇偶校驗(yàn)機(jī)制,奇偶校驗(yàn)碼原理簡單,使用方便,但是只能檢測奇數(shù)個故障,檢測概率低。隨著數(shù)據(jù)位數(shù)的增加,只簡單的進(jìn)行奇偶校驗(yàn)編碼將降低設(shè)計的性能。本文主要針對大數(shù)存儲器進(jìn)行設(shè)計,但是防護(hù)方法同樣適用于寄存器、緩存器等存儲單元。
2 抗故障攻擊的存儲單元設(shè)計
2.1 互補(bǔ)存儲單元設(shè)計
復(fù)用檢測是重要的抗故障攻擊設(shè)計技術(shù),具有故障檢測率高、設(shè)計簡單的優(yōu)點(diǎn)?;パa(bǔ)存儲單元在復(fù)用的基礎(chǔ),存儲的內(nèi)容是互反的,同時各自的存儲位置也是互反的,其結(jié)構(gòu)如圖1所示。
故障檢測函數(shù)EDF(Error Detection Function)是互補(bǔ)存儲器兩個輸出的函數(shù),函數(shù)關(guān)系式為:
顯然,當(dāng)輸出XA和XA互反時,兩者每位的“異或”值恒為1,因此逐位相“與”的值恒為1。當(dāng)兩者不互反時,判決位check值為0,表明存儲單元發(fā)生故障?;パa(bǔ)存儲結(jié)構(gòu)避免了簡單復(fù)用易受同步故障導(dǎo)入的攻擊,即向復(fù)用存儲單元的同一位置同時導(dǎo)入比特翻轉(zhuǎn)故障。
2.2 奇偶校驗(yàn)存儲單元設(shè)計
根據(jù)參考文獻(xiàn)[5]對S盒防護(hù)的策略,設(shè)計“在線”奇偶校驗(yàn)編碼的大數(shù)存儲器。存儲單元的每個位置設(shè)計存儲一個字和一個校驗(yàn)位,即33 bit。存儲數(shù)據(jù)時,數(shù)據(jù)先輸入校驗(yàn)位編碼器PDC(Parity Detection Coder),獲得輸入字的校驗(yàn)位,輸入字與校驗(yàn)位合并存儲在存儲單元的一個位置。讀取數(shù)據(jù)時,輸出字和校驗(yàn)位同時輸入PDC,計算所讀取數(shù)據(jù)(33 bit)的校驗(yàn)值,獲得判決位check,由check檢測存儲器的故障。奇偶檢驗(yàn)存儲單元結(jié)構(gòu)如圖2所示。
奇偶校驗(yàn)編碼過程為逐位“異或”,PDC的輸入輸出函數(shù)為:
輸出check=1,表明讀取數(shù)據(jù)與原數(shù)據(jù)不相符,即發(fā)生故障;若check=0,表明存儲單元可能無故障發(fā)生。奇偶校驗(yàn)碼的故障檢測范圍僅限于奇數(shù)個故障位。由于碼間的最小距離越大,糾檢錯能力越強(qiáng)[6]。增加校驗(yàn)位數(shù)能夠加大碼的最小距離,也就能夠提高故障檢測能力。結(jié)合字節(jié)故障模型,采取分組奇偶校驗(yàn)方法,把輸入字分為4個字節(jié),設(shè)置8個奇偶校驗(yàn)位,每個校驗(yàn)位檢測4個字節(jié)中的一個比特,能夠有效抵抗故障攻擊。
編碼時,按校驗(yàn)關(guān)系式計算出P0、P1、P2、P3,置于信息位之后;譯碼時,用監(jiān)督矩陣乘以碼字,得S值,若S不等于0,則碼字中存在故障比特;反之,可能無故障發(fā)生。
漢明碼的監(jiān)測范圍是8 bit,采用分組漢明碼檢測的設(shè)計方法,把輸入字分為4個字節(jié),對每一個字節(jié)分別進(jìn)行漢明編碼,共得四組16 bit監(jiān)督位。為了減小所需存儲空間,把四組監(jiān)督位的對應(yīng)位分別“異或”,獲得一組總監(jiān)督位(4 bit),并與輸入字合并存儲在一個地址中。漢明碼檢測器HDC(Hamming Detection Coder)的設(shè)計結(jié)構(gòu)如圖3所示。
設(shè):漢明編碼函數(shù)為P=H(x),x∈[0,28-1],P∈[0,11],P′為存儲單元中存儲的總監(jiān)督位,對輸入字進(jìn)行漢明編碼后的總監(jiān)督位和讀取數(shù)據(jù)的校驗(yàn)子、判決位分別為:
輸出check=1,表明存儲單元中的某個字節(jié)發(fā)生故障;若check=0,則可能無故障發(fā)生。假如4個字節(jié)中發(fā)生對稱故障時,則check=0,不能正確反映故障發(fā)生情況。
3 功能驗(yàn)證與分析
設(shè)計實(shí)現(xiàn)了抗故障攻擊雙端口RAM存儲器,按字存儲,存儲深度為32 B。在均衡速度和面積的條件下,Quartus II6.0綜合結(jié)果如表1所示。
在互補(bǔ)檢測、1位奇偶碼校驗(yàn)、4位奇偶碼校驗(yàn)和漢明碼檢驗(yàn)防護(hù)方案中,互補(bǔ)檢測RAM的故障檢測概率最高。當(dāng)奇偶校驗(yàn)位增加時,故障檢測概率也會隨之增大,以一個字節(jié)的故障檢測情況進(jìn)行仿真統(tǒng)計,4位奇偶校驗(yàn)位數(shù)的故障檢測率是0.937 2,比1位奇偶位的故障檢測率提高了80%,但是僅增加了約0.9%的存儲負(fù)擔(dān)。權(quán)衡兩者利弊,4位奇偶校驗(yàn)位檢測方案更可取。漢明碼的故障檢測能力與4位奇偶校驗(yàn)碼相同,但是漢明碼能夠檢測單個字節(jié)中的兩個任意故障和連續(xù)發(fā)生的故障,故障檢測范圍更具有針對性,適用于以字節(jié)故障為模型的抗故障攻擊設(shè)計。漢明碼檢測RAM在Modesim中的仿真波形如圖4所示,check是高電平時表示發(fā)生故障,單個字節(jié)中的連續(xù)故障及其他不屬于對稱故障的多比特故障都能夠檢測出來。
根據(jù)以上分析,存儲單元的抗故障攻擊設(shè)計,適合采用復(fù)用或線性校驗(yàn)碼的方式實(shí)現(xiàn),不僅具有較高的故障檢測概率,而且對設(shè)計的性能影響不大。本文提出的互補(bǔ)檢測、奇偶碼檢驗(yàn)和漢明碼檢驗(yàn)三種抗故障攻擊方案具有較廣的應(yīng)用范圍,互補(bǔ)存儲單元適用于故障檢測率要求高和安全級別高的位置,奇偶校驗(yàn)存儲單元適用于安全級別較低和隨機(jī)故障類型,漢明碼校驗(yàn)存儲器適用于故障發(fā)生較集中、連續(xù)的場合。而且,同時存儲校驗(yàn)位與數(shù)據(jù)位,實(shí)現(xiàn)了實(shí)時的故障檢測功能,避免了數(shù)據(jù)存儲讀取變換時的誤判行為。
評論