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