本公開內(nèi)容總體上涉及電子電路,并且更具體地涉及執(zhí)行模冪運算操作的電路。本公開內(nèi)容更具體地涉及保護這樣的計算免受故障注入攻擊。
背景技術(shù):
在許多應用中,電子電路實施加密、認證、簽名計算的算法,并且更一般地實施操縱對其的訪問期望被保留給特定用戶或電路的數(shù)據(jù)(被稱為秘密數(shù)據(jù))的算法。在這樣的算法之中,一些算法使用對包括秘密數(shù)據(jù)中的全部或部分的模冪運算操作。
存在用于嘗試發(fā)現(xiàn)或盜取這樣的秘密數(shù)據(jù)的許多方法(被稱為攻擊)。在這樣的攻擊之中,所謂的故障注入攻擊包括在對電路操作的執(zhí)行的特定時間擾亂該操作。對這樣的故障注入對電路操作或所提供的結(jié)果的后果的解譯給出了與秘密數(shù)據(jù)有關(guān)的盜取信息。
技術(shù)實現(xiàn)要素:
實施例有助于克服用于保護由執(zhí)行模冪運算的算法操縱的數(shù)據(jù)免受故障注入攻擊的常用方法和電路的缺點中的全部或部分。
在實施例中,由電子電路對模冪運算的計算的方法有助于克服常用方法的缺點中的全部或部分。
實施例提供一種驗證故障注入攻擊對執(zhí)行模冪計算的電子電路的敏感度的方法。
實施例提供使用第一寄存器和第二寄存器來保護由電子電路所執(zhí)行的模冪計算的方法,連續(xù)地包括針對指數(shù)的每個比特:
第一步驟:將寄存器中根據(jù)指數(shù)比特的狀態(tài)從第一寄存器和第二寄存器之間選擇的一個寄存器的內(nèi)容乘以第一寄存器和第二寄存 器中的另一個寄存器的內(nèi)容,并且將結(jié)果放置在寄存器中的一個寄存器中;
第二步驟:對寄存器中的另一個寄存器的內(nèi)容求平方,并且將結(jié)果放置在該另一個寄存器中,
其中寄存器中的另一個寄存器的內(nèi)容在第一步之前被存儲在第三寄存器中并且在第二步之前被恢復在寄存器中的所述另一個寄存器中。
根據(jù)實施例,寄存器中的一個寄存器是針對狀態(tài)1處的指數(shù)的比特的第一寄存器。
根據(jù)實施例,模冪運算的結(jié)果被包含在所述第一寄存器中。
根據(jù)實施例,該方法包括以下步驟:
將第一寄存器初始化為值1;
將第二寄存器初始化為要提交給模冪運算的數(shù)的值;
連續(xù)地針對指數(shù)的每個比特;
如果指數(shù)的當前比特的狀態(tài)是1:
則將第二寄存器的內(nèi)容傳送到第三寄存器中;
將第一寄存器的內(nèi)容乘以第二寄存器的內(nèi)容并且將結(jié)果存儲在第一寄存器中;
將第三寄存器的內(nèi)容傳送到第二寄存器中;
對第二寄存器的內(nèi)容求平方并且將結(jié)果存儲在第二寄存器中;或者
如果指數(shù)的當前比特的狀態(tài)是0:
則將第一寄存器的內(nèi)容傳送到第三寄存器中;
將第二寄存器的內(nèi)容乘以第一寄存器的內(nèi)容并且將結(jié)果存儲在第二寄存器中;
將第三寄存器的內(nèi)容傳送到第一寄存器中;
對第一寄存器的內(nèi)容求平方并且將結(jié)果存儲在第一寄存器中;以及
當已經(jīng)處理指數(shù)的所有比特時,恢復第一寄存器的內(nèi)容。
根據(jù)實施例,在RSA模冪運算中實施模冪運算。
實施例提供電子電路,其在操作時實現(xiàn)本文所公開的方法中的一種或多種方法。
在實施例中,一種方法包括:在電子電路的模冪計算的執(zhí)行期間,使用第一寄存器和第二寄存器并通過以下步驟來保護電子電路免受攻擊,連續(xù)地針對計算的指數(shù)的每個比特:將第一寄存器和第二寄存器中的一個寄存器的內(nèi)容存儲在第三寄存器中,第一寄存器和第二寄存器中的一個基于指數(shù)的當前比特的狀態(tài);將第一寄存器和第二寄存器中的另一個寄存器的內(nèi)容乘以第一寄存器和第二寄存器中的一個寄存器的內(nèi)容,并且將乘法的結(jié)果存儲在第一寄存器和第二寄存器中的另一個寄存器中;將第三寄存器的內(nèi)容存儲在第一寄存器和第二寄存器中的一個中;并且對第一寄存器和第二寄存器中的一個寄存器的內(nèi)容求平方并且將求平方的結(jié)果存儲在第一寄存器和第二寄存器中的一個寄存器中。在實施例,所述寄存器中的一個寄存器是針對狀態(tài)1處的指數(shù)位的第一寄存器。在實施例中,模冪運算的結(jié)果被包含在第二寄存器中。在實施例中,該方法包括:將第二寄存器初始化為值1;將第一寄存器初始化為要提交給模冪運算的數(shù)的值;連續(xù)地針對指數(shù)的每個比特:如果指數(shù)的當前比特的狀態(tài)是1:則將第一寄存器的內(nèi)容傳送到第三寄存器中;將第二寄存器的內(nèi)容乘以第一寄存器的內(nèi)容并且將乘法的結(jié)果存儲在第二寄存器中;將第三寄存器的內(nèi)容傳送到第一寄存器中;并且對第一寄存器的內(nèi)容求平方并且將求平方的結(jié)果存儲在第一寄存器中;并且如果指數(shù)的當前比特的狀態(tài)是0:則將第二寄存器的內(nèi)容傳送到第三寄存器中;將第一寄存器的內(nèi)容乘以第二寄存器的內(nèi)容并且將乘法的結(jié)果存儲在第一寄存器中;將第三寄存器的內(nèi)容傳送到第二寄存器中;并且對第二寄存器的內(nèi)容求平方并且將結(jié)果存儲在第二寄存器中;并且當已經(jīng)處理指數(shù)的所有比特時,輸出第二寄存器的內(nèi)容。在實施例中,在RSA算法中實施模冪運算。
在實施例中,一種裝置包括:多個寄存器;和耦合到多個寄存 器的電路裝置,電路裝置在操作時通過連續(xù)地針對計算的指數(shù)的每個比特執(zhí)行以下操作來執(zhí)行模冪計算:將第一寄存器和第二寄存器中的一個寄存器的內(nèi)容存儲在第三寄存器中,第一寄存器和第二寄存器中的一個寄存器基于指數(shù)的當前比特的狀態(tài);將第一寄存器和第二寄存器中的另一個寄存器的內(nèi)容乘以第一寄存器和第二寄存器中的一個寄存器的內(nèi)容,并且乘法的結(jié)果存儲在第一寄存器和第二寄存器中的所述另一個寄存器中;將第三寄存器中的內(nèi)容存儲在第一寄存器和第二寄存器中的一個寄存器中;并且對第一寄存器和第二寄存器中的一個寄存器的內(nèi)容求平方并且將求平方的結(jié)果存儲在第一寄存器和第二寄存器中的一個寄存器中。在實施例中,第一寄存器和第二寄存器中的一個寄存器是針對狀態(tài)1處的指數(shù)的比特的第一寄存器。在實施例中,模冪運算的結(jié)果被包含在第二寄存器中。在實施例中,電路裝置在操作時:將第二寄存器初始化為值1;將第一寄存器初始化為要提交給模冪運算的數(shù)的值;連續(xù)地針對指數(shù)的每個比特:如果指數(shù)的當前比特的狀態(tài)是1:則將第一寄存器的內(nèi)容傳送到第三寄存器中;將第二寄存器的內(nèi)容乘以第一寄存器的內(nèi)容并且將乘法的結(jié)果存儲在第二寄存器中;將第三寄存器的內(nèi)容傳送到第一寄存器中;并且對第一寄存器的內(nèi)容求平方并且將求平方的結(jié)果存儲在第一寄存器中;并且如果指數(shù)的當前比特的狀態(tài)是0:則將第二寄存器的內(nèi)容傳送到第三寄存器中;將第一寄存器的內(nèi)容乘以第二寄存器的內(nèi)容并且將乘法的結(jié)果存儲在第一寄存器中;將第三寄存器的內(nèi)容傳送到第二寄存器中;并且對第二寄存器的內(nèi)容求平方并且將結(jié)果存儲在第二寄存器中;并且當已經(jīng)處理指數(shù)的所有比特時,輸出第二寄存器的內(nèi)容。在實施例中,在RSA算法中實施模冪運算。
在實施例中,系統(tǒng)包括:一個或多個存儲器;和耦合到一個或多個存儲器并且被配置為執(zhí)行模冪計算的電路裝置,其中電路裝置連續(xù)地針對計算的指數(shù)的每個比特:將第一寄存器和第二寄存器中的一個寄存器的內(nèi)容存儲在第三寄存器中,第一寄存器和第二寄存 器中的一個寄存器基于指數(shù)的當前比特的狀態(tài);將第一寄存器和第二寄存器中的另一個寄存器的內(nèi)容乘以第一寄存器和第二寄存器中的一個寄存器的內(nèi)容;將乘法的結(jié)果存儲在第一寄存器和第二寄存器中的另一個寄存器中;將第三寄存器中的內(nèi)容存儲在第一寄存器和第二寄存器中的一個寄存器中;并且對第一寄存器和第二寄存器中的一個寄存器的內(nèi)容求平方并且將求平方的結(jié)果存儲在第一寄存器和第二寄存器中的一個寄存器中。在實施例中,所述第一寄存器和第二寄存器中的一個寄存器是針對狀態(tài)1處的指數(shù)的比特的第一寄存器。在實施例中,模冪運算的結(jié)果被包含在第二寄存器中。在實施例中,電路裝置在操作時:將第二寄存器初始化為值1;將第一寄存器初始化為要提交給模冪運算的數(shù)的值;連續(xù)地針對指數(shù)的每個比特:如果指數(shù)的當前比特的狀態(tài)是1:則將第一寄存器的內(nèi)容傳送到第三寄存器中;將第二寄存器的內(nèi)容乘以第一寄存器的內(nèi)容并且將乘法的結(jié)果存儲在第二寄存器中;將第三寄存器的內(nèi)容傳送到第一寄存器中;并且對第一寄存器的內(nèi)容求平方并且將求平方的結(jié)果存儲在第一寄存器中;并且如果指數(shù)的當前比特的狀態(tài)是0:則將第二寄存器的內(nèi)容傳送到第三寄存器中;將第一寄存器的內(nèi)容乘以第二寄存器的內(nèi)容并且將乘法的結(jié)果存儲在第一寄存器中;將第三寄存器的內(nèi)容傳送到第二寄存器中;并且對第二寄存器的內(nèi)容求平方并且將結(jié)果存儲在第二寄存器中;并且當已經(jīng)處理指數(shù)的所有比特時,輸出第二寄存器的內(nèi)容。在實施例中,系統(tǒng)集成電路,該集成電路包括電路裝置。在實施例中,集成電路包括第一寄存器、第二寄存器和第三寄存器。
在實施例中,系統(tǒng)包括:多個寄存器;和耦合到多個寄存器的、用于執(zhí)行模冪計算的裝置,其中執(zhí)行模冪計算包括連續(xù)地針對計算的指數(shù)的每個比特:將第一寄存器和第二寄存器中的一個寄存器的內(nèi)容存儲在第三寄存器中,第一寄存器和第二寄存器中的一個寄存器基于指數(shù)的當前比特的狀態(tài);將第一寄存器和第二寄存器中的另一個寄存器的內(nèi)容乘以第一寄存器和第二寄存器中的一個寄存器的 內(nèi)容;將乘法的結(jié)果存儲在第一寄存器和第二寄存器中的另一個寄存器中;將第三寄存器中的內(nèi)容存儲在第一寄存器和第二寄存器中的一個寄存器中;對第一寄存器和第二寄存器中的一個寄存器的內(nèi)容求平方;并且將平方的結(jié)果存儲在第一寄存器和第二寄存器中的一個寄存器中。在實施例中,用于執(zhí)行的裝置包括以下中各項的至少一項:狀態(tài)機;微處理器;可編程邏輯電路和接線邏輯。在實施例中,用于執(zhí)行的裝置在操作時:將第二寄存器初始化為值1;將第一寄存器初始化為要提交給模冪運算的數(shù)的值;連續(xù)地針對指數(shù)的每個比特:如果指數(shù)的當前比特的狀態(tài)是1:則將第一寄存器的內(nèi)容傳送到第三寄存器中;將第二寄存器的內(nèi)容乘以第一寄存器的內(nèi)容并且將乘法的結(jié)果存儲在第二寄存器中;將第三寄存器的內(nèi)容傳送到第一寄存器中;并且對第一寄存器的內(nèi)容求平方并且將求平方的結(jié)果存儲在第一寄存器中;并且如果指數(shù)的當前比特的狀態(tài)是0:則將第二寄存器的內(nèi)容傳送到第三寄存器中;將第一寄存器的內(nèi)容乘以第二寄存器的內(nèi)容并且將乘法的結(jié)果存儲在第一寄存器中;將第三寄存器的內(nèi)容傳送到第二寄存器中;并且對第二寄存器的內(nèi)容求平方并且將結(jié)果存儲在第二寄存器中;以及當已經(jīng)處理指數(shù)的所有比特時,輸出第二寄存器的內(nèi)容。在實施例中,系統(tǒng)包括集成電路,該集成電路包括用于執(zhí)行的裝置、第一寄存器、第二寄存器和第三寄存器。
附圖說明
圖1示意性地示出了電子電路的實施例;
圖2以方框的形式圖示了由平方乘法方法進行的計算的步驟;
圖3圖示了在計算中使用的兩個寄存器的內(nèi)容的示例;
圖4以方框圖的形式圖示了在Montgomery階梯中執(zhí)行的乘法的步驟;
圖5以方框圖形式示出了常用對策的實施例;并且
圖6是圖示了在Montgomery階梯中執(zhí)行的保護模冪計算的方法 的實施例的方框圖。
具體實施方式
除非上下文另行指出,否則在不同附圖中已經(jīng)利用相同的參考標記來指代相同的元件。具體地,不同實施例共同的結(jié)構(gòu)元件和/或功能元件可以利用相同的附圖標記來指代并且可以具有相同的結(jié)構(gòu)屬性、尺寸屬性和材料屬性。為清楚起見,已經(jīng)示出了并將詳細描述僅僅對理解所描述的實施例有用的那些步驟和元件。具體地,還沒有詳細描述對執(zhí)行的計算的應用或?qū)?zhí)行其的電路的應用,所描述的實施例與常用應用兼容。當對術(shù)語“約”、“大致”或“大約”進行引用時,這意味著在10%內(nèi),在一些實施例中在5%內(nèi)。
在許多加密算法中能夠找到模冪運算操作,例如被稱為RSA、DSA、Diffie-Hellman等的算法。
模冪運算包括計算數(shù)b的整數(shù)e(指數(shù))次冪并進行取n的模的結(jié)果c,也就是說,應用以下公式:
c=be(mod n)。
通常來說:
數(shù)b表示期望被加密、被認證、被簽名、等等的數(shù)(或表示數(shù)的信息);并且
指數(shù)e和模數(shù)n(對(e,n))表示對密鑰(或表示密鑰的信息)進行加密、驗證、簽名、等等。
在對RSA加密的應用的示例中,加密密鑰是對(e,n)并且解密密鑰是對(e',n),其中n是加密模數(shù),并且e'是解密指數(shù)。
由電子電路(狀態(tài)機,以程序的形式執(zhí)行方法的處理器,可編程邏輯電路,等等)對模冪運算的計算通常通過應用所謂的平方乘法方法而被執(zhí)行。
圖1正是示意性地示出了對將描述的實施例應用的類型的電子電路1。
電路1包括:
計算電路11(UC),例如,狀態(tài)機、微處理器、可編程邏輯電路、等等,包括或使用任意地示出在圖1中的在電路11的外部的寄存器2;
一個或多個易失性存儲區(qū)和/或非易失性存儲區(qū)13(MEM),其用于存儲數(shù)據(jù)和密鑰中的全部或一部分;
一個或多個數(shù)據(jù)總線、地址總線和/或控制總線15,其位于電路1內(nèi)部的不同元件與輸入輸出接口17(I/O)之間以用于與電路1的外部進行通信。
電路1可以包括根據(jù)應用的各種其他電路,在圖1中由框19(FCT)表示。例如,框19可以包括被配置為使計算電路11經(jīng)受功耗分析攻擊的電路(例如,控制器等),框19可以包括被配置為處理移動電話信號的電路,可以包括被配置為處理金融交易的電路等???9可以在電路1外部。
根據(jù)平方乘法方法對模冪運算的計算使用對計算的多項式分解。
圖2以方框的形式示出了由平方乘法方法進行的計算的步驟,包括保護免受簡單功耗分析(SPA)攻擊和計時攻擊。
要被提交到模冪運算的消息(例如,數(shù)b)被加載到電路1的寄存器(記為M)中。指數(shù)e被加載到電路1的另一寄存器中。將di記為指數(shù)e的每個比特,其中i指代范圍從0到n-1(或從1到n)的排序。
計算使用兩個寄存器2,任意地被稱為R0和R1,其中,操作將被執(zhí)行。
在后文中,為簡單起見,寄存器和它們的內(nèi)容將被混在一起,也就是說,當對寄存器上的操作進行引用時,這意味著對它們的內(nèi)容進行引用。
在第一步驟(框21)中,將寄存器R0初始化為1(R0=1)。
之后開始對指數(shù)e的比特的循環(huán)計算。例如,將計數(shù)器i初始化為n-1(框22,i=n-1),并且只要還沒有處理完所有比特(框24, i=0?),i就在每次指數(shù)的比特di被處理時減1(框23,i=i-1)。
針對每次迭代,也就是說,針對每個比特di,通過對R0的內(nèi)容求平方并將結(jié)果放置在寄存器R0中來開始(框25,R0=R02)。在此之后,執(zhí)行對指數(shù)比特的值的測試(框26,di=1?)。如果當前比特di為1(框26的輸出是),則將寄存器R0的內(nèi)容乘以寄存器M的內(nèi)容(框27,R0=R0*M)并將結(jié)果放置在寄存器R0中。如果當前比特di為0(框26的輸出否),則通過將寄存器R0的內(nèi)容乘以寄存器M的內(nèi)容的結(jié)果放置在寄存器R1(框28,R1=R0*M)中來執(zhí)行對實際計算無用的掩碼操作。
只要還沒有處理完指數(shù)的所有比特(框24的輸出否),計數(shù)器i被減少并且返回到步驟25。一旦已經(jīng)處理完所有指數(shù)比特(框24的輸出是),寄存器R0包含模冪運算的結(jié)果(框29,R0=Me(mod n)),也就是說,值c=be(mod n)。
圖2中圖示的計算也被編寫如下:
R0=1(步驟21)
對于i=n-1到0(框22,框24的輸出否,框23):
R0=R02or R0*R0(框25)
如果di=1(框26的輸出是)
則R0=R0*M(框27)
否則(框26的輸出否)
則R1=R0*M(框28)
結(jié)束循環(huán)(框24的輸出是)
返回R0(框29)。
沒有被考慮在計算的結(jié)果中的步驟28使得能夠通過執(zhí)行相同數(shù)目的計算和相同類型的計算而無論指數(shù)比特的狀態(tài)如何,來保護計算免受電路的簡單功耗分析(SPA)攻擊。
然而,特定故障注入攻擊表現(xiàn)為針對圖2的計算是有效的。具體地,現(xiàn)在能夠?qū)⒐艏性谔囟ㄓ嬎悴襟E上。
例如,通過在乘法R0*M的步驟的時間注入故障,也就是說, 通過擾亂該步驟的結(jié)果(通過改變至少一個比特的值),如果指數(shù)比特處于1,則這將對結(jié)果具有影響。然而,如果指數(shù)比特為0,由于故障結(jié)果被存儲在對最終結(jié)果(寄存器R0的最終結(jié)果)沒有影響的寄存器R1中,所以后者不被修改。因此,根據(jù)最終結(jié)果是否受影響,攻擊者能夠推斷指數(shù)比特的狀態(tài)。
這種類型的攻擊被稱為“C安全錯誤攻擊”。
為了對這種類型的攻擊進行計數(shù),其已經(jīng)被提供以使用最終結(jié)果中的寄存器R0和R1的內(nèi)容。這樣的技術(shù)包括執(zhí)行以下計算:
R0=1
R1=M
對于i=n-1到0:
如果di=1
則R0=R0*R1
R1=R12
否則
則R1=R0*R1
R0=R02
結(jié)束循環(huán)
返回R0。
因此,在對操作R0*R1進行攻擊的情況下,最終結(jié)果總是被修改。
然而,該方法的弱點已經(jīng)被突出在被稱為“M安全錯誤攻擊”的攻擊中。這樣的攻擊包括將攻擊集中在乘法R0*R1的乘數(shù)(在以上的示例中,R1)上。
該攻擊使用其中乘法被執(zhí)行在電子電路中的方式。一般使用被稱為“Montgomery階梯”的技術(shù)。
圖3以方框的形式示出了寄存器R0和R1的示例和它們的相應內(nèi)容。
每個寄存器包括p個比特,分別為R0[p-1]、…、R0[2]、R0[1]、 R0[0]和R1[p-1]、…、R1[2]、R1[1]、R1[0]。
乘法操作R0*R1包括在第一寄存器中連續(xù)地將第一項R0(被乘數(shù))的(至少一個比特的)每個字單獨地乘以(乘數(shù))的第二項R1的(至少一個比特的)所有字并將針對第一項的每個字的結(jié)果累積在另一寄存器中。
圖4以方框圖的形式圖示了這樣的乘法的步驟。為簡單起見,在后文中假設(shè)一個比特字但是編寫的全部對字粒度進行調(diào)換。
首先將寄存器T1初始化為0(框31,T1=0)。之后,針對寄存器R1的每個比特,(框41,T2=0)將寄存器T2的比特初始化并且連續(xù)地將寄存器R1的當前比特R1[j]乘以寄存器R0的所有比特R0[k]。
例如,利用值n-1來初始化第一計數(shù)器j(框32,j=n-1)。針對j的每個值,將寄存器T2初始化為0(框41)。之后,利用值n-1來初始化第二計數(shù)器k(框42,k=n-1)。將當前比特R0[k]乘以比特R1[j]的值并將結(jié)果存儲在寄存器T2中(框43,T2=R1[j]*R0[k])。只要還沒有處理完寄存器R0的所有比特(框44的輸出否,k=0?),也就是說,只要計數(shù)器k還沒有達到值0,計數(shù)器k就被減少(框45,k=k-1)并且其返回到步驟43以利用新結(jié)果來重寫寄存器T2的內(nèi)容。一旦已經(jīng)處理完寄存器R0的所有比特(框44的輸出是),就將寄存器T2的內(nèi)容添加到寄存器T1的內(nèi)容(框33,T1=T1+T2)并且將結(jié)果累積在寄存器T1中。針對寄存器R1的所有比特重復步驟41到45。只要還沒有處理完寄存器R1的所有比特(框34的輸出否,j=0?),也就是說,只要計數(shù)器j還沒有達到值0,計數(shù)器j就被減少(框35,j=j(luò)-1)并且其返回到步驟41。一旦已經(jīng)處理完寄存器R1的所有比特(框34的輸出是),乘法就結(jié)束并且寄存器T1包含(框36,T1=R0*R1)結(jié)果R0*R1。
圖4中圖示的計算還可以被編寫如下:
T1=0(步驟31)
對于j=n-1到0(步驟32,34(輸出否),35):
T2=0(步驟41)
對于k=k-1到0(步驟42,44(輸出否),45):
T2=R1[j]*R0[k](步驟43)
結(jié)束循環(huán)(框44的輸出是)
T1=T1+T2(步驟33)
結(jié)束循環(huán)(框34的輸出是)
返回T1(步驟36)。
根據(jù)指數(shù)的比特(di)的狀態(tài),將作為乘法R0*R1的結(jié)果的T1的值返回到寄存器R0中(di=1),或者返回到寄存器R1(di=0)中。
M安全錯誤攻擊包括將攻擊指向在乘法步驟43上,也就是說,指向在操作43期間的比特R1[j]中的一個比特上。通過擾亂該比特,擾亂寄存器T2的值,并且因此擾亂寄存器T1的值。根據(jù)指數(shù)的比特(di)的狀態(tài),能夠在寄存器R0或寄存器R1中找到寄存器T1的內(nèi)容。如果指數(shù)比特為1,則錯誤之后被傳播到寄存器R0,其傳達最終結(jié)果。然而,如果指數(shù)比特為0,則將寄存器T1的內(nèi)容存儲在寄存器R1中的事實將在某些情況下“刪除”錯誤并且后者將對最終結(jié)果沒有影響。通過多次執(zhí)行對指數(shù)的相同比特的攻擊,或者每次攻擊都影響結(jié)果,并且能夠推斷指數(shù)比特為1,或者其僅僅具有針對攻擊的部分的影響,并且能夠推斷指數(shù)比特為0。
在一些攻擊中,為了使攻擊更有效,至少最后一次“子”乘法被攻擊,也就是說,在圖4的示例中,至少比特R1[0]的值被擾亂。
另外,由于M安全錯誤攻擊集中于指數(shù)比特,所以必須針對指數(shù)的每個比特執(zhí)行M安全錯誤攻擊。
用于克服這種類型的攻擊的解決方案是交換乘法的第一項,也就是說,根據(jù)指數(shù)比特的值來計算R0=R0*R1或R1=R1*R0。在這種情況下,無論指數(shù)比特的值如何,攻擊將擾亂最終結(jié)果并且因此不提供信息。這樣的解決方案被描述在Marc Joye和Sung-Ming Yen的文章“The Montgomery Powering Ladder”(CHES 2002,LNCS 2523,第291頁至第302頁,2003)中。
圖5以方框的形式示出了這樣的對策的實施模式。
在第一步驟(框51,R0=1;R1=M)處,例如分別利用值1和M來初始化寄存器R0和R1。
之后開始對指數(shù)e的比特的循環(huán)計算。例如,將計數(shù)器i初始化為n-1(框22,i=n-1),并且只要還沒有處理完所有比特(框24,i=0?),就在每次指數(shù)的比特di被處理時減1(框23,i=i-1)。
在每次迭代時,執(zhí)行對指數(shù)比特的值的測試(框26,di=1?)。
如果當前比特di為1(框26的輸出是),則將寄存器R0的內(nèi)容乘以寄存器R1的內(nèi)容(框52,R0=R0*R1)并將結(jié)果放置在寄存器R0中。之后(框52,R1=R12),對寄存器R1的內(nèi)容求平方并將結(jié)果放置在寄存器R1中。
相反,如果當前比特di為0(框26的輸出否),則將寄存器R1的內(nèi)容乘以寄存器R0的內(nèi)容(框54,R1=R1*R0)并將結(jié)果放置在寄存器R1中。之后(框25,R0=R02),對寄存器R0的內(nèi)容求平方并將結(jié)果放置在寄存器R0中。
在最后(框24的輸出是),寄存器R0包含模冪運算的最終結(jié)果(框29,R0=Me(mod n))。
由于根據(jù)指數(shù)比特的在步驟52和54處的乘數(shù)與被乘數(shù)之間的作用的反轉(zhuǎn),對子乘法的攻擊(圖4的步驟43)能夠總是影響最終結(jié)果。M安全錯誤攻擊因此變得無效。
然而,如果攻擊總是瞄準操作數(shù)R0而非乘數(shù),則由電子電路對計算的執(zhí)行再次變得易受攻擊。實際上,從能夠瞄準寄存器R0時的時間,易受攻擊性位于最后一次迭代的層級處,也就是說最后的步驟52或54。實際上,在該最后的步驟處,對寄存器R0的攻擊將在指數(shù)比特處于狀態(tài)1時對最終結(jié)果具有影響并且在相反情況下不具有影響。因此,通過執(zhí)行兩次計算,一次沒有擾亂并且一次具有擾亂,能夠確定指數(shù)的最后一個比特的狀態(tài)。
簡單的方式是在每次迭代時攻擊寄存器R0。然而,如果攻擊者能夠檢測迭代序列,則對最后一次迭代的攻擊是足夠的。
為了確定兩個寄存器2中的哪個起到寄存器R0的作用,在乘法的最后(步驟52或54)攻擊兩個寄存器是足夠的。這使得能夠標識使結(jié)果對攻擊敏感的寄存器。之后在對能夠發(fā)現(xiàn)秘密(密鑰的值)的計算的許多執(zhí)行期間將攻擊集中在該寄存器上是足夠的。
應當指出,該攻擊也在攻擊在對指數(shù)的倒數(shù)第二比特的迭代期間集中在寄存器R1的值上時起作用。
上述攻擊在密鑰(指數(shù)值)在每次執(zhí)行被計算時不被電路修改時有效。
為了根據(jù)上述方法來驗證電路是否對故障注入敏感,驗證結(jié)果在利用相同操作數(shù)對計算的多次執(zhí)行之間是否不同。如果結(jié)果是肯定的,則電路是敏感的。
發(fā)明人通過利用指數(shù)e的值針對多次迭代保持相同的事實來提供對這樣的攻擊的對策。這在實踐中是正確的并且這生成上述弱點。
圖6是圖示了基于實施所謂的“Montgomery階梯”方法的計算來保護模冪計算的方法的實施例的方框圖。
根據(jù)該方法,額外的寄存器2(被記為T)被用作總是伴隨計算的變量。
在第一步驟(框51,R0=1;R1=M)處,例如分別利用值1和M來初始化寄存器R0和R1。實際上,存儲寄存器中的將被乘的最后一個字是足夠的。寄存器T中包含的初始值是不重要的。
之后開始對指數(shù)e的比特的循環(huán)計算。例如,將計數(shù)器i初始化為n-1(框22,i=n-1),并且只要還沒有處理完所有比特(框24,i=0?),就在每次指數(shù)的比特di被處理時減1(框23,i=i-1)。
針對每次迭代,執(zhí)行對指數(shù)比特的值的測試(框26,di=1?)。
如果當前比特di為1(框26的輸出是),則將(從先前迭代得到的)寄存器R1的內(nèi)容轉(zhuǎn)移到寄存器T中(框61,T=R1)。這相當于將從先前操作得到的寄存器R1的內(nèi)容臨時存儲到寄存器T中。之后,將寄存器R0的內(nèi)容乘以寄存器R1的內(nèi)容(框52,R0=R0*R1)并且將結(jié)果放置在寄存器R0中。之后,將寄存器T的內(nèi)容恢復到寄存器R1 (框63,R1=T)。之后(框53,R1=R12),對寄存器R1的內(nèi)容求平方并將結(jié)果放置在寄存器R1中。
相反,如果當前比特di為0(框26的輸出否),則將(從先前迭代得到的)寄存器R0的內(nèi)容傳送到寄存器T中(框67,T=R0)。這相當于將從先前操作得到的寄存器R0的內(nèi)容臨時存儲到寄存器T中。之后,將寄存器R1的內(nèi)容乘以寄存器R0的內(nèi)容(框54,R1=R1*R0)并且將結(jié)果放置在寄存器R1中。之后,將寄存器T的內(nèi)容恢復到寄存器R0(框69,R0=T)。然后(框25,R0=R02),對寄存器R0的內(nèi)容求平方并將結(jié)果放置在寄存器R0中。
在最后(框29),寄存器R0包含模冪運算的最終結(jié)果,也就是說,R0=Me(mod n)。
因此,即使在步驟52或54內(nèi)執(zhí)行對寄存器R0(或R1)的攻擊,在步驟42的最后一次迭代處(圖4),在求平方操作之前使用臨時寄存器T和重新加載寄存器R0(或R1)的事實也使這樣的攻擊無效。
關(guān)于圖6描述的方法相當于執(zhí)行以下計算:
R0=1(框51)
R1=M(框51)
對于i=n-1到0(框22,框24的輸出否,框23):
如果di=1(框26的輸出是)
則T=R1(框61)
R0=R0*R1(框52)
R1=T(框63)
R1=R12(框53)
否則(框26的輸出否)
則T=R0(框67)
R1=R1*R0(框54)
R0=T(框69)
R0=R02(框25)
結(jié)束循環(huán)(框24的輸出是)
返回R0(框29)。
在實施例中,期望評估電子電路對諸如上文描述的攻擊的抵抗力。出于該目的,攻擊可以被執(zhí)行并檢測攻擊是否有效。
在實施例中,期望針對這樣的攻擊保護對模冪計算的執(zhí)行。驗證對攻擊的敏感性的方法的實施可以促進驗證關(guān)于圖6描述的對策的實施例是否要由電子電路實施。
已經(jīng)描述了各種實施例。本領(lǐng)域技術(shù)人員將進行各種更改和修改。具體地,寄存器名稱是任意的并且可以被交換。最后,基于上文給出的功能指示,已經(jīng)描述的實施例的實際實施處在本領(lǐng)域技術(shù)人員的能力內(nèi)。
這樣的更改、修改和改進旨在為本公開內(nèi)容的一部分,并且旨在處于本公開內(nèi)容的精神和范圍內(nèi)。因此,前面的描述僅僅是通過舉例的方式并且不旨在為限制性的。
一些實施例可以采取計算機程序產(chǎn)品的形式或者包括計算機程序產(chǎn)品。例如,根據(jù)一個實施例,提供了一種計算機可讀介質(zhì),其包括適于執(zhí)行以上描述的方法或功能中的一個或多個的計算機程序。介質(zhì)可以為物理存儲介質(zhì),例如只讀存儲器(ROM)芯片、或磁盤,例如數(shù)字多用盤(DVD-ROM)、緊湊盤(CD-ROM)、硬盤、存儲器、網(wǎng)絡(luò)、或要由適當?shù)尿?qū)動器或經(jīng)由適當?shù)倪B接讀取的便攜式介質(zhì)產(chǎn)品,包括如被編碼在存儲在一個或多個這樣的計算機可讀介質(zhì)上并且可由適當?shù)拈喿x器設(shè)備讀取的一個或多個條形碼或其他相關(guān)聯(lián)的代碼中的便攜式介質(zhì)產(chǎn)品。
另外,在一些實施例中,可以以其他方式來實施或提供方法和/或功能中的一些或全部,例如至少部分地被實施或被提供在固件和/或硬件中,固件和/或硬件包括但不限于一個或多個專用集成電路(ASIC)、數(shù)字信號處理器、分立電路、邏輯門、標準集成電路、控制器(例如,通過執(zhí)行適當?shù)闹噶?,并且包括微控制器?或嵌入式控制器)、現(xiàn)場可編程門陣列(FPGA)、復雜可編程邏輯器件(CPLD)等以及采用RFID技術(shù)的設(shè)備、以及它們的各種組合。
以上描述的各種實施例能夠被組合以提供進一步的實施例。在必要時,能夠修改實施例的各方面以采用各種專利、申請和公開的構(gòu)思來提供更進一步的實施例。
鑒于以上詳細描述的說明書能夠進行對實施例的這些和其他改變??傮w上,在所附權(quán)利要求書中,使用的術(shù)語不應當被解釋為將權(quán)利要求限于在說明書中公開的具體實施例,而是應當被解釋為包括所有可能的實施例,只要在這樣的權(quán)利要求有權(quán)要求的等效方案的全部范圍內(nèi)。因此,權(quán)利要求不受本公開內(nèi)容限制。