專利名稱:一種抵抗簡單電耗攻擊的點(diǎn)乘計算方法
技術(shù)領(lǐng)域:
本發(fā)明屬于公鑰密碼體制的安全執(zhí)行領(lǐng)域,涉及集成電路安全技術(shù)。
背景技術(shù):
橢圓曲線公鑰密碼體制,例如,橢圓曲線數(shù)字簽名算法(ECDSA),都是依賴定義在有限域上的橢圓曲線點(diǎn)群的離散對數(shù)問題設(shè)計而成。使用橢圓曲線點(diǎn)群的最大好處是,不存在如同整數(shù)乘法循環(huán)群上的索引攻擊這樣的亞指數(shù)時間復(fù)雜度的離散對數(shù)計算方法,因此,在維持同樣安全強(qiáng)度的情況下,可以使用相對較小的安全參數(shù),從而改善公鑰密碼系統(tǒng)的各方面執(zhí)行性能。在橢圓曲線密碼體制中,主要是在某類橢圓曲線點(diǎn)群上計算點(diǎn)乘d·P,這里P是橢圓曲線上的點(diǎn),系數(shù)d為整數(shù)。而在這些橢圓曲線公鑰密碼體制中,總有部分點(diǎn)乘中的系數(shù)d需要嚴(yán)格保密。
現(xiàn)代密碼設(shè)備的計算部件是集成電路芯片。芯片都是由晶體管門電路組成,電路在執(zhí)行不同的程序操作時,電能消耗有所不同,這一點(diǎn)可以通過示波器觀察。據(jù)此,Kocher等人提出了電耗分析攻擊。電耗分析攻擊的前提是電耗軌跡與設(shè)備執(zhí)行的指令相關(guān),并與處理的操作數(shù)的值有關(guān)。這樣檢查電耗軌跡能夠暴露正在執(zhí)行的指令和寄存器中數(shù)據(jù)的信息。當(dāng)密碼設(shè)備正在執(zhí)行秘密密鑰操作時,攻擊者有可能推導(dǎo)出秘密密鑰。研究表明,幾乎所有的公鑰密碼系統(tǒng)都潛在存在電耗分析攻擊問題,特別是,智能卡這樣的需要外界提供電源的嵌入式設(shè)備受到電耗分析攻擊的威脅尤為巨大。簡單電耗分析(SPA)攻擊是攻擊者通過簡單觀測秘密密鑰操作的電耗軌跡,直接推導(dǎo)出關(guān)于秘密密鑰保密信息的技術(shù)。SPA攻擊對攻擊的環(huán)境和攻擊者的設(shè)備要求不高,容易實(shí)現(xiàn),因此,是實(shí)際應(yīng)用中的主要安全威脅。在防止SPA攻擊點(diǎn)乘計算的技術(shù)方面,主要從防護(hù)算法設(shè)計和保護(hù)電路設(shè)計兩方面著手。由于設(shè)備上的公鑰密碼體制需要依靠具體執(zhí)行算法實(shí)現(xiàn),同時算法容易維護(hù)、更新、修改,因而算法防護(hù)措施得到廣泛重視。防護(hù)算法的設(shè)計關(guān)鍵在點(diǎn)乘計算方法。目前,抵抗SPA攻擊的點(diǎn)乘計算方法主要思路是程序執(zhí)行路線固定化或隨機(jī)化。典型的方法有始終平方乘計算方法、Joye改進(jìn)二進(jìn)制計算方法、Clavier和Joye通用計算方法。需要指出的是,這些點(diǎn)乘計算方法常常都是以犧牲效率為代價的。此外,由于SPA攻擊技術(shù)的發(fā)展,不少現(xiàn)有點(diǎn)乘計算方法已經(jīng)不能很好抵抗SPA攻擊。
發(fā)明內(nèi)容
鑒于抵抗SPA攻擊的點(diǎn)乘計算方法存在的問題,本發(fā)明目的是提供一種適合密碼設(shè)備硬件或軟件實(shí)現(xiàn)的抵抗SPA攻擊的點(diǎn)乘計算方法。計算方法具有更強(qiáng)的抵抗SPA攻擊的能力,同時,具有較快的計算速度。因此,特別適合于智能卡等計算資源受限的嵌入式設(shè)備應(yīng)用。
本發(fā)明采用如下的技術(shù)方案 一種抵抗SPA的點(diǎn)乘計算方法,當(dāng)潛在受到SPA攻擊的軟件或硬件密碼設(shè)備運(yùn)行公鑰體制時,在需要使用秘密密鑰或保密參數(shù)為系數(shù)計算點(diǎn)乘情況下,具體執(zhí)行下列步驟 (1)讀取橢圓曲線點(diǎn)群上符合要求的點(diǎn)P和點(diǎn)乘系數(shù)d; (2)將系數(shù)d的二進(jìn)制串分成等長的二進(jìn)制子串
和
算符
表示不小于c的最小整數(shù),k為系數(shù)d的二進(jìn)制比特串長度; (3)使用固定從右向左二進(jìn)制算法計算點(diǎn)乘對{d1·P,d2·P}={(d1AND(NOT d2)+d1 ANDd2)·P,((NOT d1)AND d2+d1 AND d2)·P}; (4)根據(jù)公式
通過點(diǎn)乘對{d1·P,d2·P}計算點(diǎn)乘d·P的值,算符‖表示連接,算符
表示對橢圓曲線點(diǎn)群上的點(diǎn)P做m次倍點(diǎn)操作。
作為優(yōu)選實(shí)施方式,其中的步驟(3)具體按照下列步驟執(zhí)行 3.1 將P賦值給S,并令C0=1;C1=1;C2=1;C3=1; 3.2 將S賦值給 3.3 從i=2至
步長為1,執(zhí)行循環(huán)語句 S=S+S; 3.4 計算C1=C1+C3;C2=C2+C3。
其中的步驟(3)若采用硬件實(shí)現(xiàn),提供兩個點(diǎn)加法器,實(shí)現(xiàn)步驟如下 3.1 將P賦值給寄存器S,開辟C0,C1,C2,C3四個寄存器,令C0=1;C1=1;C2=1;C3=1; 3.2 將S賦值給
并計算S=S+S; 3.3 從i=2至
步長為1,在邏輯控制器的控制下利用兩個點(diǎn)加法器分別執(zhí)行以下循環(huán)體的兩條語句 S=S+S; 3.4 計算
3.5 計算C1=C1+C3;C2=C2+C3。
本發(fā)明所提出的點(diǎn)乘計算方法是安全的,即攻擊者不能通過其獲取的計算方法執(zhí)行信息推斷出需要嚴(yán)格保密的系數(shù)d的任何1比特取值。與同類算法相比,本發(fā)明提出的計算方法各方面的特性非常適合于密碼設(shè)備執(zhí)行,具有更好的安全性和計算速度。
圖1采用兩個點(diǎn)加法器實(shí)現(xiàn)固定從右向左二進(jìn)制算法的硬件結(jié)構(gòu)圖; 圖2本發(fā)明的抵抗SPA攻擊的點(diǎn)乘計算方法流程總框圖。
具體實(shí)施例方式 在對本發(fā)明的技術(shù)方案做進(jìn)一步說明之前,首先說明本發(fā)明所采用的符號。
B1 AND B2表示對等長的二進(jìn)制串B1和B2按位進(jìn)行邏輯與操作,例如,01011011AND11001101=01001001。
NOT B表示對二進(jìn)制串B按位進(jìn)行邏輯非操作,例如,NOT10101101=01010010。
B1‖B2表示對二進(jìn)制串B1和B2進(jìn)行連接操作,例如,01011011‖11001101=0101101111001101。
P1+P2表示對橢圓曲線點(diǎn)群上的點(diǎn)P1和P2進(jìn)行點(diǎn)加操作,特殊情況當(dāng)P1=P2時,為倍點(diǎn)操作,即2·P1。
sq(m)(P)表示對橢圓曲線點(diǎn)群上的點(diǎn)P做m次倍點(diǎn)操作,例如,sq(3)(P)=2·(2·(2·P))=23·P。
表示不小于c的最小整數(shù),例如,
1表示全部位都為1的二進(jìn)制串,即1=111...。
下面詳細(xì)介紹本發(fā)明的抵抗SPA攻擊的點(diǎn)乘計算方法 橢圓曲線公鑰密碼體制執(zhí)行中,計算點(diǎn)乘d·P,這里P是橢圓曲線點(diǎn)群上的點(diǎn),系數(shù)d為整數(shù)需要嚴(yán)格保密。系數(shù)d的二進(jìn)制表示為(bkbk-1...b1)2。點(diǎn)乘d·P按如下步驟計算 第1步,將系數(shù)d的二進(jìn)制串分成等長的二進(jìn)制子串d1和d2并滿足d=d1‖d2。如果二進(jìn)制長度k是奇數(shù),在系數(shù)d的二進(jìn)制串的最高位添加1比特0。兩個二進(jìn)制子串分別為
和
第2步,使用固定從右向左二進(jìn)制算法計算點(diǎn)乘對{d1·P,d2·P}={(d1 AND(NOT d2)+d1AND d2)·P,((NOT d1)AND d2+d1 AND d2)·P}。固定從右向左二進(jìn)制算法描述如下 輸入
輸出d1·P和d2·P存儲于寄存器C1和C2中。
(1) S=P;C0=0;C1=0;C2=0;C3=0; (2 ) (3) for i=2 to
{ (3.1) S=S+S; /*倍點(diǎn)*/ (3.2) /*點(diǎn)加*/} (4) C1=C1+C3;C2=C2+C3; /*點(diǎn)加*/ 若點(diǎn)乘計算方法采用硬件實(shí)現(xiàn),且提供兩個點(diǎn)加法器,固定從右向左二進(jìn)制算法可做如下變形,其中,計算第(4)步一次循環(huán)的高效硬件結(jié)構(gòu)如圖1。
輸入
輸出d1·P和d2·P存儲于寄存器C1和C2中。
(1) S=P;C0=0;C1=0;C2=0;C3=0; (2) (3) S=S+S; /*倍點(diǎn)*/ (4) for i=2 to
{ (4.1) /*點(diǎn)加*/ (4.2) S=S+S; /*倍點(diǎn)*/} (5)
/*點(diǎn)加*/ (6) C1=C1+C3;C2=C2+C3; /*點(diǎn)加*/ 第3步,使用如下公式通過點(diǎn)乘對{d1·P,d2·P}計算點(diǎn)乘d·P的值。
圖2描述了抵抗SPA攻擊的點(diǎn)乘計算方法的流程。
點(diǎn)乘計算方法正確性闡述如下 考慮上面計算點(diǎn)乘d·P的方法,可以發(fā)現(xiàn)對于任意的等長二進(jìn)制串d1和d2有 d1 AND(NOT d2)+d1 AND d2=d1 AND((NOT d2)+d2)=d1 AND 1=d1和 (NOT d1)AND d2+d1 AND d2=((NOT d1)+d1)AND d2=1 AND d2=d2。
因此,計算點(diǎn)乘d1·P和d2·P可以先分別計算出點(diǎn)乘(d1 AND(NOT d2))·P,((NOT d1)ANDd2)·P,和(d1 AND d2)·P,再通過兩次點(diǎn)加得到d1·P=(d1 AND(NOT d2))·P+(d1AND d2)·P和d2·P=((NOT d1)AND d2)·P+(d1 AND d2)·P。觀察固定從右向左二進(jìn)制算法(變形情況完全類似),第(1)至(3)步是經(jīng)典從右向左二進(jìn)制算法的擴(kuò)展,可以同時計算出((NOT d1)AND(NOTd2))·P,(d1AND(NOT d2))·P,((NOT d1)AND d2)·P,和(d1 AND d2)·P存儲于寄存器C0,C1,C2,和C3之中。原因是當(dāng)(NOT b1,i)AND(NOT b2,i)=1時,2·b2,i+b1,i=0;當(dāng)b1,iAND(NOT b2,i)=1時,2·b2,i+b1,i=1;當(dāng)(NOTb1,i)AND b2,i=1時,2·b2,i+b1,i=2;當(dāng)b1,iAND b2,i=1時,2·b2,i+b1,i=3。因此,固定從右向左二進(jìn)制算法第(3.2)步將按照經(jīng)典從右向左二進(jìn)制算法的模式將各個應(yīng)該計算的點(diǎn)加正確存入對應(yīng)寄存器并最終得到對應(yīng)結(jié)果。固定從右向左二進(jìn)制算法第(4)步再通過2次點(diǎn)加得到d1·P和d2·P存于寄存器C1和C2。
由于d=d1‖d2且d2的二進(jìn)制長度為
有
進(jìn)而有
因此,點(diǎn)乘計算方法的第3步將計算出點(diǎn)乘d·P的值。
對本發(fā)明的點(diǎn)乘計算方法技術(shù)效果的詳細(xì)說明如下 一、點(diǎn)乘計算方法的SPA安全特性 (1)SPA攻擊模型。對于任意點(diǎn)乘計算操作,設(shè)定攻擊者可以通過對執(zhí)行過程中的電耗軌跡進(jìn)行分析得到計算方法的如下信息 1)區(qū)分所有不同程序語句,例如,“if”條件語句。
2)區(qū)分點(diǎn)加和倍點(diǎn)操作。
3)發(fā)現(xiàn)操作數(shù)完全相同的所有點(diǎn)加和所有倍點(diǎn)操作,確定一個操作數(shù)為固定值的所有點(diǎn)加操作。
(2)點(diǎn)乘計算方法的SPA安全特性。在以上SPA攻擊模型下,前面提出的點(diǎn)乘計算方法是安全的,即攻擊者不能通過其獲取的計算方法執(zhí)行信息推斷出需要嚴(yán)格保密的系數(shù)d的任何1比特取值。
現(xiàn)在說明點(diǎn)乘計算方法在執(zhí)行的過程中不會泄露嚴(yán)格保密的系數(shù)d的任何1比特取值。第1步不會泄露系數(shù)d的任何1比特取值,這是因為第1步僅僅是將系數(shù)d分成等長的兩個二進(jìn)制子串d1和d2。雖然攻擊者可以區(qū)分所有不同程序語句,但不能得到系數(shù)d的任何1比特取值,因為在這一步所有程序行為都與系數(shù)d的具體取值無關(guān)。而第3步對于任何輸入都是固定地做
次倍點(diǎn)和1次點(diǎn)加操作,因此,即使攻擊者具有上述1)至3)的電耗分析攻擊能力也不可能得到系數(shù)d的任何1比特取值。
剩下需要討論的就是第2步的安全問題。觀察固定從右向左二進(jìn)制算法(變形情況完全類似)可以發(fā)現(xiàn) 1)對于任何輸入,算法中的所有程序語句都與需要嚴(yán)格保密的系數(shù)d沒有任何關(guān)系。因此,雖然攻擊者可以區(qū)分所有不同程序語句,但并不能通過這一能力分析得出系數(shù)d的任何1比特取值。
2)在算法中,有兩個操作與系數(shù)d有關(guān)系,也就是點(diǎn)加和倍點(diǎn)操作。因為在循環(huán)中任何(b1,i,b2,i)∈{(0,0),(0,1),(1,0),(1,1)}
所以每次循環(huán)有且僅有1次點(diǎn)加操作。這樣對于任何系數(shù)d,點(diǎn)加和倍點(diǎn)操作都以同樣的間隔順序執(zhí)行。雖然攻擊者可以區(qū)分點(diǎn)加和倍點(diǎn)操作,但這一能力并不能幫助分析出系數(shù)d的任何1比特取值。
3)算法中一次循環(huán)中的點(diǎn)加操作可寫成CJ=S+CJ(j=0,1,2,3)。在寄存器S中的值由前一次循環(huán)中的倍點(diǎn)操作更新,因此,寄存器S中是隨機(jī)值。在寄存器Cj(j=0,1,2,3)中的值由相應(yīng)以往循環(huán)中的點(diǎn)加操作更新,因此,寄存器Cj(j=0,1,2,3)中也是隨機(jī)值。由于寄存器S和CJ(j=0,1,2,3)中存儲的都是隨機(jī)值,所以攻擊者即使能發(fā)現(xiàn)操作數(shù)完全相同的點(diǎn)加和倍點(diǎn)操作,以及一個操作數(shù)為固定值的點(diǎn)加操作,也不能依靠其分析得出系數(shù)d的任何1比特取值。
綜合以上,得出在SPA攻擊模型下,攻擊者不能通過其獲取的點(diǎn)乘計算方法執(zhí)行信息推斷出需要嚴(yán)格保密的系數(shù)d的任何1比特取值。
二、點(diǎn)乘計算方法的執(zhí)行效率 在計算效率方面,按照評價此類計算方法的慣例,不區(qū)分點(diǎn)加和倍點(diǎn)操作,統(tǒng)一看作點(diǎn)加操作,其它操作相對于點(diǎn)加操作計算開銷可以忽略。由于在第2步中,任意(b1,i,b2,i)∈{(0,0),(0,1),(1,0),(1,1)}
因而在每次循環(huán)中,點(diǎn)加S+C0,S+C1,S+C2,和S+C3操作之中必有一個執(zhí)行。在第3步中,需要
次點(diǎn)加操作。因此,在平均和最差情況下總的點(diǎn)加數(shù)量都為
次。在同時提供兩個點(diǎn)加法器的情況下,第2步中第(4.1)步和第(4.2)步并行執(zhí)行,可以看作1次點(diǎn)加,因此,在平均和最差情況下總的點(diǎn)加數(shù)量都為
次。
在存儲效率方面,開銷都來源于第2步,很顯然,需要5個寄存器,即S和Cj(j=0,1,2,3)。
三、同類算法比較 目前已經(jīng)存在的抵抗SPA攻擊的點(diǎn)乘計算方法主要包括始終平方乘計算方法、Joye改進(jìn)二進(jìn)制計算方法、Clavier和Joye通用計算方法幾種??梢詫⑦@些計算方法與本專利提出計算方法做簡要比較,如表1所示。在安全等級方面,都使用前面提到的SPA攻擊模型加以評估。計算方法實(shí)施評估主要考查計算方法在具體實(shí)現(xiàn)時技術(shù)復(fù)雜程度。在計算效率方面,按照傳統(tǒng)考慮平均和最差的情況,且都假定點(diǎn)乘系數(shù)的二進(jìn)制表示長度為偶數(shù)k。在存儲開銷方面,主要考慮計算方法在做點(diǎn)乘計算時需要的寄存器數(shù)量,此外,還考慮需要始終安全存儲的附加數(shù)據(jù)。
表1 目前典型相關(guān)計算方法特性比較
從表1可以看出,與同類計算方法比較,本專利提出的計算方法各方面的特性非常適合于實(shí)際密碼設(shè)備執(zhí)行。唯一不足之處就是,計算過程中寄存器需求略大,但在多數(shù)情況下,安全性,計算速度,和實(shí)施復(fù)雜度才是評價和選擇抵抗SPA攻擊的點(diǎn)乘計算方法主要考慮的因素。
下面舉一個實(shí)例說明抵抗SPA攻擊的點(diǎn)乘計算方法如何運(yùn)行。
根據(jù)目前對橢圓曲線公鑰密碼系統(tǒng)的安全參數(shù)要求,點(diǎn)乘d·P的各個操作數(shù)常常為160比特左右。但本實(shí)例只是為了說明計算方法如何運(yùn)行,為簡單明了反映計算方法技術(shù)特征,僅選擇21比特的操作數(shù)。若系數(shù)d=1801707=(110110111110111101011)2,而P為橢圓曲線點(diǎn)群上符合要求的點(diǎn)。按照
圖2的步驟,計算方法運(yùn)行過程如下 第1步,將系數(shù)d按二進(jìn)制等分為子串d1=(01101101111)2=879和d2=(10111101011)2=1515,這里顯然d=d1‖d2。
第2步,在二進(jìn)制子串d1和d2為輸入的情況下,固定從右向左二進(jìn)制算法的主要計算過程可以由表2描述。
第3步,通過點(diǎn)乘對{d1·P=879·P,d2·P=1515·P}計算點(diǎn)乘d·P=(d1‖d2)·P=211·879·P+1515·P=1800192·P+1515·P=1801707·P。
表2當(dāng)d1=(01101101111)2=879和d2=(10111101011)2=1515時,固定從右向左二進(jìn)制算法的運(yùn)行過程
權(quán)利要求
1.一種抵抗簡單電耗攻擊的點(diǎn)乘計算方法,其特征是,當(dāng)潛在受到簡單電耗攻擊的軟件或硬件密碼設(shè)備運(yùn)行公鑰體制時,在需要使用秘密密鑰或保密參數(shù)為系數(shù)計算點(diǎn)乘情況下,具體執(zhí)行下列步驟
(1)讀取橢圓曲線點(diǎn)群上符合要求的點(diǎn)P和點(diǎn)乘系數(shù)d;
(2)將系數(shù)d的二進(jìn)制串分成等長的二進(jìn)制子串
和
算符
表示不小于c的最小整數(shù),k為系數(shù)d的二進(jìn)制比特串長度;
(3)使用固定從右向左二進(jìn)制算法計算點(diǎn)乘對{d1·P,d2·P}={(d1AND(NOT d2)+d1ANDd2)·P,((NOT d1)AND d2+d1AND d2)·P};
(4)根據(jù)公式
通過點(diǎn)乘對{d1·P,d2·P}計算點(diǎn)乘d·P的值,算符‖表示連接,算符sq(m)(P)表示對橢圓曲線點(diǎn)群上的點(diǎn)P做m次倍點(diǎn)操作。
2.根據(jù)權(quán)利要求1所述的抵抗簡單電耗攻擊的點(diǎn)乘計算方法,其特征是,其中的步驟(3)具體按照下列步驟執(zhí)行
3.1將P賦值給S,并令C0=1;C1=1;C2=1;C3=1;
3.2將S賦值給
3.3從i=2至
步長為1,執(zhí)行循環(huán)語句
S=S+S;
3.4計算C1=C1+C3;C2=C2+C3。
3.根據(jù)權(quán)利要求1所述的抵抗簡單電耗攻擊的點(diǎn)乘計算方法,其特征是,其中的步驟(3)采用硬件實(shí)現(xiàn),提供兩個點(diǎn)加法器,實(shí)現(xiàn)步驟如下
3.1將P賦值給寄存器S,開辟C0,C1,C2,C3四個寄存器,令C0=1;C1=1;C2=1;C3=1;
3.2將S賦值給
,并計算S=S+S;
3.3從i=2至
步長為1,在邏輯控制器的控制下利用兩個點(diǎn)加法器分別執(zhí)行以下循環(huán)體的兩條語句
S=S+S;
3.4計算
3.5計算C1=C1+C3;C2=C2+C3。
全文摘要
本發(fā)明屬于公鑰密碼體制的安全執(zhí)行領(lǐng)域,涉及一種抵抗簡單電耗攻擊的點(diǎn)乘計算方法,當(dāng)潛在受到簡單電耗攻擊的軟件或硬件密碼設(shè)備運(yùn)行公鑰體制時,按下列步驟執(zhí)行讀取橢圓曲線點(diǎn)群上符合要求的點(diǎn)P和點(diǎn)乘系數(shù)d;將系數(shù)d的二進(jìn)制串分成等長的二進(jìn)制子串d1和d2;使用固定從右向左二進(jìn)制算法計算點(diǎn)乘對{d1·P,d2·P}={(d1AND(NOT d2)+d1AND d2)·P,((NOT d1)AND d2+d1AND d2)·P};根據(jù)公式d·P=(d1‖d2)·P=sq(「k/2(d1·P)+d2·P,通過點(diǎn)乘對{d1·P,d2·P}計算點(diǎn)乘d·P的值,算符‖表示連接,算符sq(m)(P)表示對橢圓曲線點(diǎn)群上的點(diǎn)P做m次倍點(diǎn)操作。本發(fā)明提供的計算方法具有更強(qiáng)的抵抗SPA攻擊能力,同時,具有較快的計算速度。
文檔編號G06F7/60GK101436929SQ20081015423
公開日2009年5月20日 申請日期2008年12月18日 優(yōu)先權(quán)日2008年12月18日
發(fā)明者孫達(dá)志, 孫濟(jì)洲, 張加萬 申請人:天津大學(xué)