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