值進行平方運算。
[0055]由于數(shù)據(jù)位的值不同,執(zhí)行步驟102操作時所消耗的能量也就不同,因此,現(xiàn)有的應用RSA算法的電路中,由于存在步驟102,使得在執(zhí)行所獲得的數(shù)據(jù)的不同的數(shù)據(jù)位的值時所消耗的能量存在差異,攻擊者可以通過所述功耗差異來破解RSA算法的關鍵信息。
[0056]參考圖2所示的另一種現(xiàn)有的RSA模冪運算的方法,包括如下步驟:
[0057]步驟200:獲取數(shù)據(jù);
[0058]步驟202:獲取所述數(shù)據(jù)后,通過移位的方式選擇所述數(shù)據(jù)中的某一數(shù)據(jù)位,所述某一數(shù)據(jù)位的值為t,當所述數(shù)據(jù)位的值t與I相與的結果為I時,即t&l=l,執(zhí)行步驟206 ;當所述數(shù)據(jù)位的值t與I相與的結果為O時,即t&l=0,執(zhí)行步驟204 ;
[0059]步驟204:對所述數(shù)據(jù)位的值進行平方運算;
[0060]步驟206:對所述數(shù)據(jù)位的值進行平方運算;
[0061]步驟208:對步驟206平方運算的結果進行乘法運算。
[0062]相對于圖1中的RSA模冪運算的方法,圖2中所述RSA模冪運算的方法雖然可以省去對所述數(shù)據(jù)位的值進行判斷的步驟,即步驟102,但卻增加了步驟202。并且在步驟202中,由于要判斷的數(shù)據(jù)位的值不同,選擇要判斷的數(shù)據(jù)位時所移位的長度也就不同,導致執(zhí)行不同的數(shù)據(jù)位的值時,所需要的時間和所消耗的能量不同。
[0063]也就是說,圖2中的RSA模冪運算的方法,相對于圖1中的RSA模冪運算的方法,雖然可以避免因對所述數(shù)據(jù)位的值是否為I進行判斷的操作所引起的功耗差異,但卻在通過移位的方式選擇要判斷的數(shù)據(jù)位時引起執(zhí)行不同數(shù)據(jù)位時的功耗差異,攻擊者仍然可以通過分析執(zhí)行不同數(shù)據(jù)位的值時所發(fā)生的功耗和時間上的變化,獲得RSA算法的關鍵信息。
[0064]針對上述問題,本發(fā)明的實施例提供了一種數(shù)據(jù)的防攻擊方法,通過將數(shù)據(jù)中所要判斷的數(shù)據(jù)位的值寫入第一寄存器,而無須通過移位的方式選擇要判斷的數(shù)據(jù)位,避免因移位的方式選擇要判斷的數(shù)據(jù)位的操作所引起的功耗差異。并且,將根據(jù)第一寄存器中數(shù)據(jù)位的值為第二值的個數(shù)是否為奇數(shù),向第二寄存器中寫入相關數(shù)據(jù),直接將第二寄存器中的相關數(shù)據(jù)作為所要判斷的數(shù)據(jù)位的值,從而可以避免因執(zhí)行判斷數(shù)據(jù)位的值的操作所帶來的功耗差異。這樣,應用本發(fā)明實施例所述的方法時,可以有效地減小執(zhí)行數(shù)據(jù)中不同的數(shù)據(jù)位所引起的功耗差異,降低攻擊者從所述功耗差異上獲取RSA算法的關鍵信息,從而提高應用RSA算法的安全性。
[0065]為使本發(fā)明的上述目的、特征和優(yōu)點能夠更為明顯易懂,下面結合附圖對本發(fā)明的具體實施例做詳細的說明。
[0066]實施例一
[0067]參考圖3,本發(fā)明實施例提供了一種數(shù)據(jù)的防攻擊方法,所述防攻擊方法可以包括如下步驟:
[0068]步驟300:獲取數(shù)據(jù);
[0069]步驟302:將所述數(shù)據(jù)中所要判斷的數(shù)據(jù)位的值寫入第一寄存器,所述數(shù)據(jù)位的值為第一值或第二值,并將所述第一寄存器的其他數(shù)據(jù)位的值置為第一值;
[0070]其中,所述第一寄存器可以為ACC寄存器。
[0071]所述數(shù)據(jù)大小可以為I字節(jié),也可以為其他大小的數(shù)據(jù),本領域技術人員可以根據(jù)應用所述RSA算法的運算電路的能力進行選擇。以所述數(shù)據(jù)大小為I字節(jié)為例,所述數(shù)據(jù)的數(shù)據(jù)位共8位,每一數(shù)據(jù)位的大小為I比特,則所要判斷的數(shù)據(jù)位可以是所述數(shù)據(jù)的任意一位。
[0072]采用本實施例中所述的防攻擊方法對所述數(shù)據(jù)的某一位進行處理以后,可以任意選擇所述數(shù)據(jù)中的其他數(shù)據(jù)位進行處理。比如,可以按照所述數(shù)據(jù)位的排列順序依次選擇所述數(shù)據(jù)位,也可以隨機選擇所述數(shù)據(jù)位,還可以按照某一特定的順序選擇所述數(shù)據(jù)位。
[0073]步驟304:判斷所述第一寄存器中的數(shù)據(jù)位的值為第二值的個數(shù)是否為奇數(shù),當所述第一寄存器中的數(shù)據(jù)位的值為第二值的個數(shù)為奇數(shù)時,執(zhí)行步驟306;當所述第一寄存器中數(shù)據(jù)位的值為第二值的個數(shù)為偶數(shù)時,執(zhí)行步驟308 ;
[0074]步驟304中的判斷操作是針對所述第一寄存器中的數(shù)據(jù)位的值為第二值的個數(shù)是否為奇數(shù)所進行的判斷操作,而不是對數(shù)據(jù)位本身的值所進行的判斷操作,并不會因數(shù)據(jù)位本身的值不同而引起功耗差異,也就是說,在執(zhí)行不同的數(shù)據(jù)位的值時,步驟304中的判斷操作不會引起功耗上的差異。
[0075]步驟306:向第二寄存器中寫入第二值;
[0076]步驟308:向所述第二寄存器中寫入第一值;
[0077]其中,所述第二寄存器可以為P寄存器。
[0078]需要說明的是,所述P寄存器為PSW寄存器中的一位,所述PSW寄存器可以有多位。
[0079]在步驟302、步驟304、步驟306以及步驟308中,當所述第一值為O時,所述第二值為I ;當所述第一值為I時,所述第二值為O。
[0080]也就是說,當所述第一值為O時,在步驟302中,將所述數(shù)據(jù)中所要判斷的數(shù)據(jù)位的值寫入第一寄存器,則所述第一寄存器的其他數(shù)據(jù)位的值置為O。在步驟304中,判斷所述第一寄存器中數(shù)據(jù)位的值為I的個數(shù)是否為奇數(shù)。在步驟306中,當所述數(shù)據(jù)位的值為I的個數(shù)為奇數(shù)時,向第二寄存器中寫入I。在步驟308中,當所述數(shù)據(jù)位的值為I的個數(shù)為偶數(shù)時,向所述第二寄存器中寫入O。
[0081]同理,當所述第一值為I時,按照上述的方法進行設置時,僅第一值與第二值不同,此處不再贅述。
[0082]步驟310:讀取所述第二寄存器的值,將所述第二寄存器的值作為所述要判斷的數(shù)據(jù)位的值t。
[0083]當所述第一值為O時,所述第二值為1,此時,若所述第一寄存器中數(shù)據(jù)位的值為I的個數(shù)為奇數(shù)時,則所述第二寄存器的值為1,即所要判斷的數(shù)據(jù)位的值為I ;若所述第一寄存器中數(shù)據(jù)位的值為I的個數(shù)為偶數(shù)時,則所述第二寄存器的值為0,即所要判斷的數(shù)據(jù)位的值為O。
[0084]當所述第一值為I時,所述第二值為0,此時,若所述第一寄存器中數(shù)據(jù)位的值為O的個數(shù)為奇數(shù)時,則所述第二寄存器的值為0,即所要判斷的數(shù)據(jù)位的值為O ;若所述第一寄存器中數(shù)據(jù)位的值為O的個數(shù)為偶數(shù)時,則所述第二寄存器的值為1,即所要判斷的數(shù)據(jù)位的值為I。
[0085]本實施例中還提供了一種RSA模冪運算方法,參考圖3,所述方法除包括上述的步驟300至步驟310外,還包括如下步驟:
[0086]經(jīng)過步驟302至310后,當所獲得的要判斷的數(shù)據(jù)位的值t為第二值時,執(zhí)行步驟312 ;當所獲得的要判斷的數(shù)據(jù)位的值t為第一值時,執(zhí)行步驟316。
[0087]步驟312:對所述數(shù)據(jù)位的值t進行平方運算;
[0088]步驟314::對步驟312中平方運算的結果作乘法運算;
[0089]步驟316:對所述要判斷的數(shù)據(jù)位的值t作平方運算;
[0090]由此可見,本實施例所述的RSA模冪運算方法,在對數(shù)據(jù)中的數(shù)據(jù)位進行處理時,無須通過移位的方式選擇所述數(shù)據(jù)位。并且所述數(shù)據(jù)位的值直接從所述第二寄存器中讀取,無須進行對所述數(shù)據(jù)位的值是否為I的判斷操作。這樣,相對于圖1以及圖2中所示的RSA模冪運算方法,可以有效地減小執(zhí)行數(shù)據(jù)中不同數(shù)據(jù)位的功耗差異,防止應用RSA模冪運算方法的電路被攻擊。
[0091]為了使本領域技術人員更好地理解和實現(xiàn)本發(fā)明,以下對上述數(shù)據(jù)的防攻擊方法以及RSA模冪運算方法對應的裝置進行詳細描述。
[0092]實施例二
[0093]參考圖4,本實施例提供了一種數(shù)據(jù)的防攻擊裝置40,所述裝置40可以包括:
[0094]第一寫入單元402,用于將數(shù)據(jù)中所要判斷的數(shù)據(jù)位的值寫入第一寄存器410,所述數(shù)據(jù)位的值為第一值或第二值,并將所述第一寄存器410的其他數(shù)據(jù)位的值置為第一值;
[0095]判斷單元404,用于判斷所述第一寄存器410中數(shù)據(jù)位的值為第二值的個數(shù)是否為奇數(shù);
[0096]第二寫入單元406,用于在所述數(shù)據(jù)位的值為第二值的個數(shù)為奇數(shù)時,向第二寄存器420中寫入第二值,在所述數(shù)據(jù)位為第二值的個數(shù)為偶數(shù)時,向所述第二寄存器420中寫入第一值;
[0097]讀取單元408,用于讀取所述第二寄存器420的值,將所述第二寄存器420的值作為所述要判斷的數(shù)據(jù)位的值。
[0098]其中,所述第一寄存器410可以為ACC寄存器,所述第二寄存器420可以為P寄存器。
[0099]當所述第一值為O時,所述第二值為1,當所述第一值為I時,所述第二值為O。
[0100]參考圖4,本實施例還提供了一種RSA模冪運算裝置,所述RSA模冪運算裝置可以包括所述數(shù)據(jù)防攻擊裝置40,以及與所述數(shù)據(jù)防攻