本發(fā)明涉及一種用于測試電路的方法,具體涉及被設(shè)計為處理機(jī)密數(shù)據(jù)的電路,特別涉及用于通過使用密鑰的加密算法來變換消息的電路。
本發(fā)明特別涉及實(shí)現(xiàn)密碼算法的設(shè)備,諸如安全設(shè)備(智能卡集成電路、安全元件、安全存儲卡)、移動設(shè)備(移動電話、智能手機(jī)、物聯(lián)網(wǎng))、家用和汽車設(shè)備、以及集成到計算機(jī)和其他電子和it設(shè)備(usb驅(qū)動器、電視解碼器、游戲控制臺等)的母板上的硬件加密組件等。本發(fā)明還涉及包括加密運(yùn)算的軟件,該軟件用于在安全或不安全的環(huán)境中執(zhí)行。
本發(fā)明具體涉及實(shí)現(xiàn)諸如des(數(shù)據(jù)加密標(biāo)準(zhǔn))或三重des、aes(高級加密標(biāo)準(zhǔn))、rsa(rivest、shamir和adleman)、dsa(數(shù)字簽名算法)或ecdsa(橢圓曲線數(shù)字簽名算法)等加密算法之類的密碼算法的電路。本發(fā)明還涉及實(shí)現(xiàn)諸如hmac(密鑰散列消息認(rèn)證碼)之類的散列函數(shù)的電路。
背景技術(shù):
實(shí)現(xiàn)密碼算法的微電路配備有中央處理單元(cpu)。一些微電路配備有專用于密碼計算的電路,例如加密協(xié)處理器。這些微電路包括根據(jù)所執(zhí)行的運(yùn)算以不同的方式切換的數(shù)千個邏輯門。這些開關(guān)在電流消耗上產(chǎn)生短暫變化,例如可以被測量的幾納秒。具體而言,cmos型集成電路包括在切換時(即,當(dāng)邏輯節(jié)點(diǎn)變?yōu)?或0時)才消耗電流的邏輯門。因此,電流消耗取決于中央單元處理的數(shù)據(jù)及其各種外圍設(shè)備(存儲器)上的數(shù)據(jù)、在數(shù)據(jù)或地址總線上流動的數(shù)據(jù)、密碼協(xié)處理器等。
此外,具體使用加密或模糊技術(shù)(諸如“白盒密碼術(shù)”技術(shù))產(chǎn)生的某些軟件程序可以以使得難以通過逆向工程確定的方式來集成機(jī)密數(shù)據(jù)。某些軟件程序還可以通過安全通信信道從外部接收機(jī)密數(shù)據(jù)。當(dāng)觀察到這些微電路的電流消耗、或它們的磁或電磁輻射、或可以在執(zhí)行加密算法的同時觀察到的其它任何信息時,這些微電路可能會受到所謂的側(cè)信道分析攻擊。此類攻擊旨在發(fā)現(xiàn)它們使用的機(jī)密數(shù)據(jù),特別是它們的加密密鑰。頻繁的側(cè)信道攻擊實(shí)施諸如spa(“單功耗分析”)、dpa(“差分功耗分析”)、cpa(“相關(guān)功耗分析”)或ema(“電磁分析”)之類的統(tǒng)計分析方法。spa分析(參考文獻(xiàn)[1])通常只需要獲取單個電流消耗蹤跡。其目的是通過觀察對應(yīng)于密碼計算的消耗蹤跡的一部分來獲得關(guān)于集成電路的活動的信息,因?yàn)楫?dāng)前蹤跡根據(jù)所執(zhí)行的運(yùn)算和所處理的數(shù)據(jù)而變化。
軟件在被電路執(zhí)行期間也可能經(jīng)歷這種側(cè)信道攻擊。
dpa(參考文獻(xiàn)[2])和cpa分析使得能夠通過獲取大量數(shù)據(jù)或測量蹤跡并通過對這些蹤跡進(jìn)行統(tǒng)計分析以查找搜索的信息來找到加密算法的密鑰。它們基于這樣的前提:即,當(dāng)寄存器中或總線上的位從0變?yōu)?時,cmos型集成電路的消耗發(fā)生變化,以及當(dāng)位保持等于0、保持等于1或從1變?yōu)?(mos晶體管的寄生電容的放電)時,其不發(fā)生變化?;蛘?,可以認(rèn)為當(dāng)位從0變?yōu)?或從1變?yōu)?時,cmos型集成電路的消耗發(fā)生變化,并且當(dāng)位保持等于0或保持等于1時,cmos型集成電路的消耗不變。該第二假設(shè)使得能夠使用常規(guī)的“漢明距離”或“漢明權(quán)重”函數(shù)來開發(fā)不需要已知集成電路的結(jié)構(gòu)可應(yīng)用的消耗模型。dpa分析涉及通過對大量消耗蹤跡的統(tǒng)計處理來放大該消耗差異,目的在于突出根據(jù)公式假設(shè)區(qū)分的兩個消耗蹤跡族之間的測量差異。
cpa分析(參考文獻(xiàn)[3])基于線性電流消耗模型,并且涉及計算首先所測量的形成捕獲的消耗蹤跡的消耗點(diǎn)與其次根據(jù)線性消耗模型和有關(guān)由微電路處理的待發(fā)現(xiàn)的變量以及有關(guān)加密密鑰的值的假設(shè)而計算的推定消耗值之間的相關(guān)系數(shù)。
電磁分析(ema)基于如下原理:即,微電路可以以近場或遠(yuǎn)場電磁輻射的形式泄漏信息。假設(shè)晶體管在其狀態(tài)改變時發(fā)射電磁信號,則可以通過諸如spa、dpa和cpa分析中的一種或其它分析,像電流消耗變化信號那樣處理這些信號。此分析的一個應(yīng)用實(shí)例由jean-jacquesquisquater(參考文獻(xiàn)[4])做出。
存在其它側(cè)信道攻擊,例如“模板攻擊”(參考文獻(xiàn)[5])和“交互信息分析”(mia)(參考文獻(xiàn)[6])。參考文獻(xiàn)[7]公開了一種組合了側(cè)信道技術(shù)和合理的強(qiáng)力嘗試的攻擊。所有上述攻擊都基于所有被分析的蹤跡的時間對準(zhǔn)。換言之,在給定時間(例如從命令的執(zhí)行被電路激活的時間)執(zhí)行的所有測量必須對應(yīng)于由算法處理的相同值。
為了保護(hù)此類電路及其執(zhí)行的密碼算法免受這些側(cè)信道攻擊,通常提供應(yīng)對措施。幾種普遍的應(yīng)對措施均旨在避免這種時間對準(zhǔn)。為此,這些應(yīng)對措施引入為計算電路定速的時鐘頻率的變化,或引入偽時鐘周期或偽運(yùn)算。另幾種應(yīng)對措施涉及使得要保護(hù)的算法適合獨(dú)立于由電路處理的數(shù)據(jù)的實(shí)際值來呈現(xiàn)這些數(shù)據(jù)。這幾種應(yīng)對措施中的某些應(yīng)對措施被稱為“掩蔽型應(yīng)對措施”-使用隨機(jī)掩碼(二進(jìn)制數(shù)),在執(zhí)行加密方法期間,這些隨機(jī)掩碼與另一要保護(hù)的數(shù)據(jù)(例如密鑰和/或消息)組合在一起。此類應(yīng)對措施是有效的,但是需要修改算法,因此,在由專用協(xié)處理器執(zhí)行的情況下,需要專用于實(shí)現(xiàn)此應(yīng)對措施的協(xié)處理器,或者在由微電路的中央處理單元或編程協(xié)處理器執(zhí)行的情況下,需要更復(fù)雜的程序。
通過多次執(zhí)行實(shí)現(xiàn)的應(yīng)對措施可以用不包括任何應(yīng)對措施手段的常規(guī)協(xié)處理器來實(shí)現(xiàn)。其中僅涉及通過偽密鑰或偽消息來多次執(zhí)行加密方法。為此,提供了例如控制加密程序或協(xié)處理器的應(yīng)對措施程序,該程序以隨機(jī)的順序,通過偽密鑰多次執(zhí)行加密方法,從而使得通過正確的密鑰(即,真實(shí)的密鑰)對加密方法的執(zhí)行被“隱藏”在一組偽執(zhí)行中。通過多次執(zhí)行實(shí)現(xiàn)這種應(yīng)對措施提供了以下優(yōu)點(diǎn):即,可以通過不包括任何特定的應(yīng)對措施手段的常規(guī)協(xié)處理器來實(shí)現(xiàn)此應(yīng)對措施。
有時可以借助特定的專業(yè)知識以及多次嘗試來恢復(fù)這種時間對準(zhǔn),特別是使用大量要被重新對準(zhǔn)的蹤跡或應(yīng)用一些信號處理。盡管如此,仍存在以下情況:即,不能恢復(fù)這種時間對準(zhǔn),這樣,即使在蹤跡中存在機(jī)密數(shù)據(jù)泄漏,側(cè)信道測試也會失敗。
為了檢查旨在上市的安全集成電路提供的安全級別,在電路上市之前安排資格和/或認(rèn)證測試,這些測試具體包括集成電路防側(cè)信道分析的魯棒性測試,目的是發(fā)現(xiàn)由集成電路處理的機(jī)密數(shù)據(jù)。還有一些測試可以評估軟件程序?qū)?cè)信道攻擊的抵抗力。
因此,期望提出一種用于測試電路或軟件程序?qū)?cè)信道分析的抵抗力的方法,其具體能夠檢測機(jī)密數(shù)據(jù)泄漏,而不需要對電流消耗蹤跡或表示電路活動的其它任何物理或邏輯量的任何先前時間對準(zhǔn)處理。還希望此方法能夠獨(dú)立于執(zhí)行軟件程序或應(yīng)用的電路來測試軟件程序或應(yīng)用的魯棒性。
還可能期望將此測試方法集成到旨在檢查電路或由給定電路執(zhí)行的軟件對側(cè)信道分析的抵抗力以及它們在信息泄漏方面的嚴(yán)密性的工業(yè)資格和/或認(rèn)證處理中。
還可能期望提出在包括這種測試方法的資格和/或認(rèn)證過程之后,使得集成電路或軟件程序能夠被認(rèn)為能夠在產(chǎn)品中使用的應(yīng)對措施手段。
技術(shù)實(shí)現(xiàn)要素:
某些實(shí)施例涉及一種測試方法,包括:獲取多個值集,每個值集包括物理量或邏輯信號的值,當(dāng)受測試電路執(zhí)行被應(yīng)用于待發(fā)現(xiàn)的相同數(shù)據(jù)的不同密碼運(yùn)算的運(yùn)算集中的運(yùn)算時,所述值集與所述電路的活動關(guān)聯(lián);對于每個值集,通過處理單元對由被應(yīng)用于該值集中的值的第一滿射函數(shù)變換的值的出現(xiàn)次數(shù)計數(shù),以形成該值集的出現(xiàn)次數(shù)集;對于所述運(yùn)算集中的每個運(yùn)算以及待發(fā)現(xiàn)的數(shù)據(jù)的一部分的每個可能值,通過所述處理單元計算部分運(yùn)算結(jié)果;通過所述處理單元計算累積出現(xiàn)次數(shù)集,每個累積出現(xiàn)次數(shù)集是通過將對應(yīng)于所述運(yùn)算集中的運(yùn)算的出現(xiàn)次數(shù)集相加而獲得的,當(dāng)被應(yīng)用于所述待發(fā)現(xiàn)的數(shù)據(jù)的所述部分的可能值的相同值或等價值時,所述運(yùn)算提供具有應(yīng)用第二滿射函數(shù)所獲得的相同變換值的部分運(yùn)算結(jié)果;以及通過所述處理單元分析所述累積出現(xiàn)次數(shù)集以確定所述待發(fā)現(xiàn)的數(shù)據(jù)的所述部分,從而知道如果所述待發(fā)現(xiàn)的數(shù)據(jù)已經(jīng)泄漏到所述值集中,則在與所述待發(fā)現(xiàn)的數(shù)據(jù)的所述部分的值對應(yīng)的所述累積出現(xiàn)次數(shù)集中找到所述待發(fā)現(xiàn)的數(shù)據(jù)。
根據(jù)一實(shí)施例,所述方法包括以下步驟:選擇每個值集中的值,出現(xiàn)次數(shù)的計數(shù)是針對選定值而執(zhí)行的。
根據(jù)一實(shí)施例,所述方法包括以下步驟:向所述電路發(fā)送多個不同的命令,每個命令觸發(fā)由所述電路執(zhí)行被應(yīng)用于所述待發(fā)現(xiàn)的數(shù)據(jù)的所述運(yùn)算集中的運(yùn)算之一;以及在由所述電路執(zhí)行所述運(yùn)算集中的一個運(yùn)算期間,由測量設(shè)備收集所述值集中的一個值集的值。
根據(jù)一實(shí)施例,所述值集包括:所述電路的電流消耗的測量,和/或由所述電路發(fā)射的電磁輻射的測量,和/或所述電路周圍存在的磁場的吸收的測量,和/或在所述電路中收集的邏輯信號或數(shù)字值。
根據(jù)一實(shí)施例,所述第一和第二滿射函數(shù)中的每一者是以下函數(shù)之一:恒等函數(shù);這樣的函數(shù):其提供結(jié)果值,該結(jié)果值然后被簡化為對應(yīng)于漢明權(quán)重的值;這樣的函數(shù):其提供該函數(shù)被應(yīng)用到的值的漢明權(quán)重;或這樣的函數(shù):其提供值與該函數(shù)被應(yīng)用到的先前值之間的漢明距離。
根據(jù)一實(shí)施例,所述方法包括以下步驟:如果分析步驟確定所述待發(fā)現(xiàn)的數(shù)據(jù)的所述部分,則拒絕所述電路或由所述電路執(zhí)行的程序。
根據(jù)一實(shí)施例,針對所述待發(fā)現(xiàn)的數(shù)據(jù)的先前確定的部分和所述待發(fā)現(xiàn)的數(shù)據(jù)的另一部分,執(zhí)行計算所述待發(fā)現(xiàn)的數(shù)據(jù)的一部分的每個可能值的運(yùn)算結(jié)果的步驟、計算所述累積出現(xiàn)次數(shù)集的步驟、以及分析所述累積出現(xiàn)次數(shù)集的步驟。
根據(jù)一實(shí)施例,每個值集中的所述選定值包括:該值集的連續(xù)值,和/或該值集的非連續(xù)值,和/或該值集的局部極值,和/或該值集的全部值。
根據(jù)一實(shí)施例,所述運(yùn)算集中的所述運(yùn)算包括將單個運(yùn)算應(yīng)用于所述待發(fā)現(xiàn)的數(shù)據(jù)以及應(yīng)用于輸入數(shù)據(jù)集中的輸入數(shù)據(jù),所述單個運(yùn)算包括以下運(yùn)算中的至少一者:對稱或不對稱加密或解密運(yùn)算;簽名運(yùn)算;與所述待發(fā)現(xiàn)的數(shù)據(jù)的模乘或非模乘;與所述待發(fā)現(xiàn)的數(shù)據(jù)的邏輯異或運(yùn)算;模冪運(yùn)算,所述待發(fā)現(xiàn)的數(shù)據(jù)被用作指數(shù);模簡化運(yùn)算,所述待發(fā)現(xiàn)的數(shù)據(jù)被用作模數(shù);采用使用輸入值在替換表中選擇的值的替換運(yùn)算;以及組合了與所述待發(fā)現(xiàn)的數(shù)據(jù)的邏輯異或運(yùn)算和替換運(yùn)算的運(yùn)算,所述替換運(yùn)算以使用所述邏輯運(yùn)算的結(jié)果在替換表中選擇的值替換所述邏輯運(yùn)算的結(jié)果。
根據(jù)一實(shí)施例,所述累積出現(xiàn)次數(shù)集的分析包括:對于每個累積出現(xiàn)次數(shù),通過將該累積出現(xiàn)次數(shù)除以在該累積出現(xiàn)次數(shù)中累積的對應(yīng)數(shù)量的出現(xiàn)次數(shù)來計算正規(guī)化累積出現(xiàn)次數(shù);對于所述待發(fā)現(xiàn)的數(shù)據(jù)的所述部分的每個可能值和變換后的部分結(jié)果的每個可能值,計算對應(yīng)于所述待發(fā)現(xiàn)的數(shù)據(jù)的所述部分的該可能值和所述變換后的部分結(jié)果的該可能值的每個正規(guī)化累積出現(xiàn)次數(shù)與被除以運(yùn)算次數(shù)的所述累積出現(xiàn)次數(shù)的平均值之間的差值平方和;對于所述待發(fā)現(xiàn)的數(shù)據(jù)的所述部分的每個可能值,計算與所述變換后的部分結(jié)果的所述可能值對應(yīng)的累積總差值和;以及相互比較所述累積總差值和,并且檢測所述待發(fā)現(xiàn)的數(shù)據(jù)的所述部分的可能值的所述累積總差值和之一是否大于另一累積總差值和。
根據(jù)一實(shí)施例,所述累積出現(xiàn)次數(shù)集的分析包括:對于所述待發(fā)現(xiàn)的數(shù)據(jù)的所述部分的每個可能值和變換后的部分結(jié)果的每個可能值,計算所述累積出現(xiàn)次數(shù)的累積總和;對于每個出現(xiàn)次數(shù),通過將所述累積出現(xiàn)次數(shù)除以對應(yīng)累積總和來計算正規(guī)化累積總和,并計算所述正規(guī)化累積總和與所述正規(guī)化累積總和的對數(shù)的乘積;對于所述待發(fā)現(xiàn)的數(shù)據(jù)的所述部分的每個可能值和變換后的部分結(jié)果的每個可能值,計算與所述待發(fā)現(xiàn)的數(shù)據(jù)的所述部分的該可能值和所述變換后的部分結(jié)果的該可能值對應(yīng)的所述乘積的和;對于所述待發(fā)現(xiàn)的數(shù)據(jù)的所述部分的每個可能值,計算與所述變換后的部分結(jié)果的所述可能值對應(yīng)的累積總乘積和,每個乘積和被乘以對應(yīng)數(shù)量的累積出現(xiàn)次數(shù);以及相互比較所述累積總乘積和,并且檢測所述待發(fā)現(xiàn)的數(shù)據(jù)的所述部分的可能值的所述累積總乘積和之一是否大于另一累積總乘積和。
某些實(shí)施例還可以涉及一種用于測試電路的系統(tǒng),所述系統(tǒng)包括:測量設(shè)備,其被配置為獲取多個值集,每個值集包括物理量或邏輯信號的值,當(dāng)受測試電路執(zhí)行被應(yīng)用于待發(fā)現(xiàn)的相同數(shù)據(jù)的不同密碼運(yùn)算的運(yùn)算集中的運(yùn)算時,所述值集與所述電路的活動關(guān)聯(lián);以及處理單元,其被配置為實(shí)現(xiàn)上面定義的方法。
根據(jù)一實(shí)施例,所述系統(tǒng)包括測量探頭,其耦合到所述測量設(shè)備以獲取與所述電路的活動相關(guān)聯(lián)的蹤跡。
根據(jù)一實(shí)施例,所述系統(tǒng)包括仿真器,其執(zhí)行要測試的應(yīng)用。
某些實(shí)施例也可以涉及一種計算機(jī)程序產(chǎn)品,其可加載到計算機(jī)的內(nèi)部存儲器中并包括代碼部分,當(dāng)由計算機(jī)執(zhí)行時,所述代碼部分配置所述計算機(jī)以執(zhí)行上面定義的方法的步驟。
附圖說明
下面將結(jié)合但不限于附圖來描述僅為了例示目的而提供的本發(fā)明的實(shí)施例的一些實(shí)例,其中:
圖1示意性地表示安全電路的常規(guī)架構(gòu);
圖2示意性地表示集成電路測試系統(tǒng)的一個實(shí)例;
圖3表示在由安全電路執(zhí)行加密運(yùn)算期間獲取的信號的蹤跡;
圖4表示根據(jù)一個實(shí)施例的用于測試電路的方法的步驟;
圖5以圖的形式表示了滿射函數(shù)的一個實(shí)例;
圖6示意性地表示根據(jù)一個實(shí)施例構(gòu)建的用于執(zhí)行統(tǒng)計處理的表;
圖7表示根據(jù)另一實(shí)施例的用于測試電路的方法的步驟;
圖8和9表示根據(jù)各種實(shí)施例的用于對通過測試方法獲得的值集進(jìn)行統(tǒng)計分析的方法的步驟;
圖10和11以曲線的形式表示由圖8和9的分析方法提供的結(jié)果表;
圖12和圖13表示根據(jù)各種實(shí)施例的包括應(yīng)對措施步驟的加密運(yùn)算的步驟;
圖14表示根據(jù)一個實(shí)施例的依照應(yīng)對措施方法變換的替換表;
圖15表示根據(jù)一個實(shí)施例的安全電路。
具體實(shí)施方式
作為一個實(shí)例,圖1表示安全集成電路ct,該集成電路例如布置在諸如塑料卡或任何其它介質(zhì)的便攜式介質(zhì)hd上,或者布置在諸如移動終端、智能電話、iot設(shè)備等終端中。所述集成電路包括微處理器prc、輸入/輸出電路ioc,通過數(shù)據(jù)和地址總線耦合到微處理器的存儲器m1、m2、m3以及可選地包括加密計算協(xié)處理器cp1或算術(shù)加速器,以及隨機(jī)數(shù)發(fā)生器rgn。存儲器m1是包含易失性應(yīng)用數(shù)據(jù)的ram型(“隨機(jī)存取存儲器”)存儲器。存儲器m2是包含非易失性數(shù)據(jù)和應(yīng)用程序的非易失性存儲器,例如eeprom或閃存。存儲器m3是包含微處理器的操作系統(tǒng)的只讀存儲器(或rom存儲器)。
通信接口電路ioc可以是例如根據(jù)iso/iec7816標(biāo)準(zhǔn)的接觸型電路,例如根據(jù)iso/iec14443a/b或iso/iec13693標(biāo)準(zhǔn)的具有感應(yīng)耦合的非接觸型電路,借助電耦合的非接觸型電路(uhf接口電路),或同時為接觸型和非接觸型電路。接口電路ioc還可以通過特定接口耦合到諸如nfc(近場通信)控制器的另一電路,或者諸如移動終端或連接對象的終端的主電路。
在某些實(shí)施例中,集成電路ct可以被配置為通過加密功能執(zhí)行對發(fā)送給它的消息進(jìn)行加密、解密或簽名的操作。該加密功能可以由電路ct的處理器prc執(zhí)行,或者部分地或完全地由處理器prc的協(xié)處理器cp1執(zhí)行。
圖2表示根據(jù)一個實(shí)施例的用于實(shí)現(xiàn)測試方法的集成電路測試系統(tǒng)的一個實(shí)例。例如假定測試系統(tǒng)被配置為測試圖1中的集成電路ct。
圖2的測試系統(tǒng)包括耦合到諸如數(shù)字示波器的測量設(shè)備md的測量探頭pb,以獲取與電路的活動相關(guān)的蹤跡,諸如電流消耗或電磁信號變化的蹤跡,以及包括諸如個人計算機(jī)pc的計算部件。計算機(jī)pc耦合到測量設(shè)備并且實(shí)現(xiàn)測試程序。該測試程序具體地包括通信接口、用于與集成電路通信并用于向集成電路發(fā)送消息的程序、信號處理程序,以及用于實(shí)現(xiàn)根據(jù)本發(fā)明的方法的計算步驟的程序。在集成電路是非接觸式電路的情況下,通信接口可以包括非接觸式讀卡器。
探頭pb可以是電流探頭(例如放置在集成電路的電源端子vcc上的電阻器)或者通過信號放大器amp耦合到測量設(shè)備的電磁探頭?;蛘撸娏魈筋^可以與電磁探頭組合。電磁輻射的研究實(shí)際表明,工作中由電路發(fā)射的電磁場提供關(guān)于集成電路中的位開關(guān)的信息,就像消耗的電流的測量一樣。電磁探頭的優(yōu)點(diǎn)是它可以放置其操作需要分析電路部分附近(例如靠近微處理器prc的核心或密碼計算協(xié)處理器cp1的核心)。
此外,在非接觸式集成電路的情況下,電流探頭可以用電感探頭代替,電感探頭測量集成電路對讀取器發(fā)射的磁場的吸收。這種電感探頭(例如天線線圈)本身能夠與放置在要研究的電路區(qū)域附近的電磁場探頭組合。
因此,在本申請中,為了簡化語言而使用的短語“電流消耗”指任何可測量的物理量,其隨時間的變化表示集成電路內(nèi)部或所研究的集成電路部分內(nèi)部的二進(jìn)制數(shù)據(jù)的切換,該物理量能夠在集成電路的端子處或在所研究的集成電路部分附近被測量。此外,以高得足以收集感興趣的數(shù)據(jù)周期內(nèi)的多個點(diǎn)的采樣頻率對物理量進(jìn)行采樣,實(shí)際上形成大量蹤跡,其中每個蹤跡包含10到數(shù)十萬個點(diǎn),但是也可以考慮在每個蹤跡中收集幾百萬個值或甚至更多值。
本申請還涉及一種用于測試軟件程序或應(yīng)用的方法。在這種情況下,軟件程序可以由測試系統(tǒng)直接執(zhí)行或由測試系統(tǒng)所執(zhí)行的仿真程序執(zhí)行。因此,所分析的蹤跡例如可以是當(dāng)訪問存儲器時被發(fā)送到存儲器的一系列值,或在電路的寄存器中處理的數(shù)據(jù),甚至是被發(fā)送到電路的通信接口的數(shù)據(jù),這些發(fā)送由受測試的軟件程序控制。
測試方法
所述測試方法的某些實(shí)施例基于對信號或數(shù)字值的隨時間變化的蹤跡的詳細(xì)觀察,這些蹤跡表示在受測試電路執(zhí)行被應(yīng)用于待發(fā)現(xiàn)的數(shù)據(jù)(下文稱為“機(jī)密數(shù)據(jù)”)的運(yùn)算時所述電路的操作。
圖3表示可以由測試系統(tǒng)獲取的一段時間上的值的蹤跡c0、c1、...cix。這些蹤跡中的每一者已經(jīng)通過使受測試的電路或軟件程序執(zhí)行運(yùn)算而獲得。對應(yīng)于蹤跡c0、c1、...cix的運(yùn)算通常都是不同的。這些運(yùn)算不同例如是因?yàn)樗鼈兩婕皩⑼缓瘮?shù)應(yīng)用于不同的已知輸入數(shù)據(jù),例如要加密、解密或簽名的消息或要檢查的簽名,或要計算的hmac(密鑰-散列消息認(rèn)證碼)。或者,已知數(shù)據(jù)可以是函數(shù)的輸出數(shù)據(jù)、或該函數(shù)的輸入和輸出數(shù)據(jù)的一部分,而非其輸入數(shù)據(jù)。
所述函數(shù)可以是應(yīng)用于相同機(jī)密數(shù)據(jù)sd和輸入數(shù)據(jù)m的任何函數(shù),諸如對稱或不對稱加密或解密運(yùn)算、或甚至簽名運(yùn)算、或者僅僅是與機(jī)密數(shù)據(jù)的模乘或非模乘(m×sd)、與機(jī)密數(shù)據(jù)的邏輯xor函數(shù)(異或)(mxorsd)、模冪函數(shù)(機(jī)密數(shù)據(jù)被用作指數(shù)(msdmodn,n是已知的))、模簡化函數(shù)(機(jī)密數(shù)據(jù)被用作模數(shù)(mmodsd))。所述函數(shù)的另一實(shí)例涉及使用替換表(sbox[mxorsd],sbox是替換表)來處理xor運(yùn)算的結(jié)果,如在des和aes加密算法的情況下。更一般地,該函數(shù)必須能夠基于機(jī)密數(shù)據(jù)的一部分和輸入數(shù)據(jù)來計算由運(yùn)算產(chǎn)生的值的一部分。
在圖3的實(shí)例中,蹤跡c0、c1、ci、cix分別對應(yīng)于輸入(或輸出)數(shù)據(jù)m[0]、m[1]、...m[i]、...m[ix]。每個蹤跡ci可以由從在同一受測試電路上測量的同一信號獲取的樣本形成,或者可以包括來自當(dāng)受測試電路操縱數(shù)據(jù)m[i]時捕獲的不同信號的樣本。
圖4表示步驟s1到s19,這些步驟處理在執(zhí)行被應(yīng)用于待發(fā)現(xiàn)的機(jī)密數(shù)據(jù)和被應(yīng)用于也已知的輸入數(shù)據(jù)m[0]...m[ix]的已知加密運(yùn)算oprk期間由測試系統(tǒng)收集的值。根據(jù)一個實(shí)施例,該測試的目的是例如判定機(jī)密數(shù)據(jù)的值是否泄漏到形成圖3的蹤跡的所收集的值中。處理單元pc首先執(zhí)行步驟s1到s8。
在步驟s1,測試系統(tǒng)的處理單元pc將輸入數(shù)據(jù)m[0]...m[ix]上的循環(huán)的索引i以及表ch設(shè)定為0。在步驟s2,處理單元pc通過要測試的電路mct或軟件程序激活運(yùn)算oprk的執(zhí)行,該運(yùn)算接收數(shù)據(jù)m[i],機(jī)密數(shù)據(jù)被提供給電路mct或軟件程序執(zhí)行的運(yùn)算。在步驟s3,處理單元pc收集構(gòu)成蹤跡ci的值。在步驟s4,選擇蹤跡ci的值的一部分eci,只有該部分在以下處理步驟(圖3)中被處理。在圖4的實(shí)例中,為了簡單起見,該部分由蹤跡ci的與索引k和kx對應(yīng)的值來界定。實(shí)際上,索引k和kx可以從一個蹤跡ci變化到下一個蹤跡ci。此外,與現(xiàn)有技術(shù)的側(cè)信道分析相比,每個蹤跡中以此方式選定的值不一定是連續(xù)的,并且每個部分eci中的值的數(shù)量在一個蹤跡ci與下一個蹤跡之間可能是不同的。因此,例如可以選擇從每個蹤跡中僅提取最大或最小局部值。還應(yīng)注意,所提取部分eci可以是整個蹤跡ci。在下面的處理中,假設(shè)以此方式提取的數(shù)據(jù)包含一條關(guān)于被搜索的機(jī)密數(shù)據(jù)的信息。
在步驟s5,處理單元pc將循環(huán)索引j以及表ht設(shè)定為0。在步驟s6,處理單元pc對選定蹤跡部分eci的索引j的值eci[j]應(yīng)用滿射函數(shù)f1,并且使表ht中的值遞增一(1),該值由等于函數(shù)f1提供的結(jié)果的索引來指定。在步驟s7,索引j遞增一(1)。在步驟s8,將索引j與其最大值進(jìn)行比較,以判定是否已經(jīng)處理了集eci中的全部值。一旦處理了集eci中的全部值,處理單元pc就執(zhí)行步驟s9到s14,否則再次執(zhí)行步驟s6到s8。以這種方式,加載到表ht的集eci中的值具有指定由函數(shù)f1返回的每個可能值的出現(xiàn)次數(shù)的直方圖形式,以使得與集eci中的值相關(guān)的時間特征不包括在表ht中:表ht的內(nèi)容使得不能確定集合中的值被收集的順序。圖5表示采取圖的形式的使用函數(shù)f1計算的值(在x軸上)的出現(xiàn)次數(shù)(在y軸上)的表ht的一個實(shí)例。在圖5的實(shí)例中,函數(shù)f1返回根據(jù)8位編碼值計算的漢明權(quán)重。
在步驟s9,處理單元pc將索引g設(shè)定為0。在步驟s10,處理單元pc對數(shù)據(jù)m[i]和待確定的機(jī)密數(shù)據(jù)sd的一部分(被設(shè)定為等于索引g)應(yīng)用運(yùn)算opr。運(yùn)算opr(m,g)假定提供在步驟s2執(zhí)行的運(yùn)算oprk(m)(=opr(m,sd))的結(jié)果的一部分。由運(yùn)算opr提供的結(jié)果被提供值vl的滿射函數(shù)f2處理。在步驟s11,處理單元pc將索引l設(shè)定為0。在步驟s12,處理單元pc在由索引g、vl和l指定的位置處將存儲在三維表ch中的值遞增表ht中對應(yīng)于數(shù)據(jù)m[i]的索引l處的值ht[1]。圖6表示表ch的一個實(shí)例,其中由索引g和vl指定的每個位置ch[g,vl]包含根據(jù)在步驟s11獲得的值vl組合若干表ht而獲得的表。在步驟s13,索引l遞增一(1)。在步驟s14,考慮到由函數(shù)f1提供的可能不同值的數(shù)量,將索引l與其最大值lx進(jìn)行比較。如果索引l小于或等于其最大值lx,則再次執(zhí)行步驟s12到s14,否則(當(dāng)索引l大于其最大值1x)時,執(zhí)行步驟s15和s16。
在步驟s15,處理單元pc使索引g遞增一(1)。在步驟s16,考慮到所考慮的機(jī)密數(shù)據(jù)部分的可能不同值的數(shù)量,處理單元pc將索引g與其最大值gx進(jìn)行比較。如果索引g小于或等于最大值gx,則執(zhí)行從步驟s10到步驟s16的新迭代,否則(當(dāng)索引g大于其最大值gx時),執(zhí)行步驟s17和s18。在步驟s17,處理單元pc使索引i遞增一(1)以處理另一蹤跡ci。在步驟s18,處理單元pc將索引i與其最大值ix(對應(yīng)于所生成的蹤跡ci的數(shù)量)進(jìn)行比較。如果索引i小于或等于最大值ix,則再次執(zhí)行步驟s2到s18,否則(當(dāng)索引i大于其最大值ix時),則執(zhí)行步驟s19。在步驟s19,包含在位置[g,vl]處的表ch中的累積總和的每個表包含以下值:
在上述總和中要考慮的數(shù)據(jù)m[i]使得f2(opr(m[i],g))=vl。
在步驟s19,處理單元pc對表ch執(zhí)行統(tǒng)計分析,旨在判定索引g的值是否對應(yīng)于要搜索的機(jī)密數(shù)據(jù)部分。為此,考慮從機(jī)密數(shù)據(jù)的泄漏獲得的信息已經(jīng)累積在表ch中的行g(shù)的位置中,而獨(dú)立于機(jī)密數(shù)據(jù)的信息被隨機(jī)地或均勻地分布在表ch中。因此,如果表ch的索引g的行包含比該表的其余部分更高的值,則表ch中的該行的索引g的值對應(yīng)于要搜索的機(jī)密數(shù)據(jù)sd的該部分的值。在這種情況下,能夠認(rèn)為機(jī)密數(shù)據(jù)sd已經(jīng)泄漏到所收集的形成蹤跡ci的數(shù)據(jù)中。
可以選擇函數(shù)f1和f2以使其對應(yīng)于要測試的電路或軟件程序的泄漏模式。因此,函數(shù)f1和f2可以彼此相同或不同,并且可以被選擇以最大化發(fā)現(xiàn)由電路操縱的機(jī)密數(shù)據(jù)的概率。例如,函數(shù)f1和f2可以是以下函數(shù)之一:
-恒等函數(shù),
-這樣的函數(shù)(例如,形式為f(x)=a·x+b):其結(jié)果值可以被簡化為對應(yīng)于漢明權(quán)重的值,例如當(dāng)x在8位上被編碼時介于值0與8之間,
-這樣的函數(shù):其計算在該函數(shù)的輸入處提供的值的漢明權(quán)重,例如二進(jìn)制編碼值的1處的位數(shù),或者
-這樣的函數(shù):其計算與另一值的漢明距離,例如這兩個值中的1處的位數(shù)之間的差。
應(yīng)當(dāng)注意,函數(shù)f1和f2的選擇可以影響要執(zhí)行以確定所考慮的機(jī)密數(shù)據(jù)部分的表ch的統(tǒng)計處理的復(fù)雜性,以及確定要搜索的機(jī)密數(shù)據(jù)部分的值的統(tǒng)計處理的成功性。
通過執(zhí)行步驟s1到s19搜索的機(jī)密數(shù)據(jù)部分例如可以在8或16位上定義。在8位的情況下,索引g被連續(xù)地分配給0和255(或1和256=28)之間的全部值。應(yīng)當(dāng)注意,測試g的值的順序?qū)τ跍y試的結(jié)果而言不重要。要搜索的機(jī)密數(shù)據(jù)部分也可以在諸如16、32或64位的較寬的字上定義。
機(jī)密數(shù)據(jù)sd的另一部分可以通過使用先前確定的機(jī)密數(shù)據(jù)部分的值并通過將機(jī)密數(shù)據(jù)的另一部分強(qiáng)制到索引g的不同可能值來執(zhí)行步驟s9到s19而確定。為此,能夠在步驟s4提取蹤跡ci的相同部分eci或這些蹤跡的其它部分。
應(yīng)當(dāng)注意,在執(zhí)行圖4中的其它步驟之前,可能已經(jīng)收集了形成蹤跡ci的值集(步驟s2和s3)。另外,在執(zhí)行步驟s9到s19之前,可能已經(jīng)針對每個蹤跡ci構(gòu)成表ht。
應(yīng)用于機(jī)密數(shù)據(jù)sd和輸入數(shù)據(jù)m[i]的運(yùn)算opr/oprk可以是以下運(yùn)算之一或它們的組合:
-對稱或不對稱加密或解密運(yùn)算,其中機(jī)密數(shù)據(jù)sd是加密或解密密鑰,
-使用機(jī)密數(shù)據(jù)sd的簽名運(yùn)算,
-與機(jī)密數(shù)據(jù)的模乘或非模乘(m[i]×sd),
-與機(jī)密數(shù)據(jù)的異或邏輯運(yùn)算(異或)(m[i]xorsd),
-模冪運(yùn)算,其中機(jī)密數(shù)據(jù)sd被用作指數(shù)(m[i]sdmodn,n是已知的),
-模簡化運(yùn)算,其中機(jī)密數(shù)據(jù)sd被用作模數(shù)(m[i]modsd),
-采用使用輸入數(shù)據(jù)在替換表中選擇的值的替換運(yùn)算(sbox[m[i]],sbox位于替換表中),以及
-組合了以下兩種運(yùn)算的運(yùn)算:即,應(yīng)用于機(jī)密數(shù)據(jù)的邏輯異或運(yùn)算,和采用使用異或運(yùn)算的結(jié)果在替換表中選擇的值替換邏輯運(yùn)算的結(jié)果的替換運(yùn)算(sbox[m[i]xorsd])。
更一般地,該運(yùn)算必須使得能夠僅基于機(jī)密數(shù)據(jù)的一部分和輸入數(shù)據(jù)來計算運(yùn)算的最終值的一部分。
為了突顯與有關(guān)機(jī)密數(shù)據(jù)的信息對應(yīng)的累積值,可以將所有表ht的內(nèi)容彼此相加,以獲得由函數(shù)f1返回的每個可能值的累積出現(xiàn)次數(shù)表。從表ch[g,vl]的位置中累積的所有表中減去該累積總和表的值。因此,可以根據(jù)圖7所示的順序來修改圖4中的步驟序列。圖7所示的步驟包括上述步驟s9到s19以及附加的步驟s20、s21和s22。在步驟s9之前執(zhí)行的步驟s20中,索引i、一維表mht和二維表cpt被設(shè)定為0。在步驟s9,二維表ht[0..ix,1]之前已經(jīng)填充了包含針對所有蹤跡ci在步驟s6生成的所有表。將步驟s21插入由索引l控制的循環(huán)(在步驟s12和s14之間),由此可以例如在步驟s12之后選擇由函數(shù)f1提供的值中的一個。在步驟s21,處理單元pc將每個值ht[i,l]累積在由索引l指定的位置處的累積總和表mht中。以這種方式,在處理結(jié)束時,表mht將包含針對每個蹤跡ci獲得的索引i的全部值ht[i,l]的和。在由索引i控制的循環(huán)的每次迭代時執(zhí)行一次步驟s22,從而例如可以在步驟s14之后選擇蹤跡ci中的一個。步驟s22使能對累積在表ch的每個位置ch[g,vl]中的表ht[i,l]的數(shù)量計數(shù)。該計數(shù)的結(jié)果被存儲在表cpt中。
圖8表示為了嘗試確定要搜索的機(jī)密數(shù)據(jù)sd的一部分的值而執(zhí)行的表ch的統(tǒng)計處理的一個實(shí)例的步驟s31到s43。連續(xù)執(zhí)行步驟s31到s37。在步驟s31,將索引vl設(shè)定為0,并且將表tt的所有位置設(shè)定為1。在步驟s32,將索引g和表it的所有位置設(shè)定為0。在步驟s33,將索引l被設(shè)定為0。在步驟s34,變量t接收由索引g、vl和l選擇的包含在表ch中的值ch[g,vl,l],該值被除以位于表cpt中的位置cpt[g,vl]處的計數(shù)值。在步驟s35,位于表it中的位置g處的值it[g]按照變量t的值與被除以蹤跡ci的總數(shù)ix的、由索引l指定的存儲在表mht中的值mht[1]之間的差的平方遞增。在步驟s36,索引l遞增一(1)。在步驟s37,將索引l與其最大值lx進(jìn)行比較。如果索引l已經(jīng)達(dá)到其最大值1x,則執(zhí)行步驟s38到s40,否則執(zhí)行從步驟s34開始的新迭代。
在步驟s38,用在步驟s35到s37計算的值it[g]乘以表tt中由索引g指定的值tt[g]來更新值tt[g],執(zhí)行1x次。在步驟s39,索引g遞增一(1)。在步驟s40,將索引g與其最大值gx進(jìn)行比較。如果索引g大于其最大值gx,則執(zhí)行步驟s41和s42,否則執(zhí)行從步驟s33開始的新迭代。在步驟s41,索引vl遞增一(1)。在步驟s42,將索引vl與其最大值vlx進(jìn)行比較。如果索引vl大于其最大值vlx,則執(zhí)行步驟s43,否則執(zhí)行從步驟s32開始的新迭代。在步驟s43,作為統(tǒng)計分析的結(jié)果返回表tt。
因此,在包括步驟s32到s42的處理循環(huán)的最后一次迭代時,表it和tt包含以下值:
其中
其中運(yùn)算符“==”表示當(dāng)相等為真時等于1的相等測試,并且當(dāng)相等為假時,相等測試為0,表it在步驟s32被設(shè)定為0,并且在步驟s35針對索引vl的每個新值加載表it。
因此,cpt[g,vl]表示條件(f2(opr(m[i],g))==vl)為真的次數(shù)。如果在執(zhí)行運(yùn)算oprk時機(jī)密數(shù)據(jù)sd被泄漏,則表tt的一個位置包含比該表中存儲的其它值高得多的值。結(jié)果是要搜索的機(jī)密數(shù)據(jù)sd的所述部分等于表tt中的最高值的索引g。
應(yīng)當(dāng)注意,在對應(yīng)于等式(3)的步驟s38,可以加上表it的值而不是相乘。乘法運(yùn)算的實(shí)現(xiàn)只是允許增大表tt的各值之間的差,因此更好地突顯對應(yīng)于要搜索的機(jī)密數(shù)據(jù)部分的最高值。還可以考慮將對數(shù)函數(shù)應(yīng)用于表it的值,并且對在表tt中所獲得的對數(shù)值執(zhí)行加法累積。當(dāng)表it的值相加時,它們能夠按照以下方式被加權(quán):
圖9表示為了嘗試確定要搜索的機(jī)密數(shù)據(jù)sd的一部分的值而執(zhí)行的表ch的統(tǒng)計處理的另一實(shí)例的步驟s51到s67。該處理基于香農(nóng)熵函數(shù)。連續(xù)執(zhí)行步驟s51到s56。在步驟s51,將索引g設(shè)定為0,并且將表tt的所有位置設(shè)定為0。在步驟s52,將索引vl設(shè)定為0。在步驟s53,將索引l和變量sxy設(shè)定為0。在步驟s54,使變量sxy按照由索引g、vl和l指定的表ch中選擇的值ch[g,vl,l]遞增。在步驟s55,索引l遞增一(1)。在步驟s56,將索引l與其最大值lx進(jìn)行比較。如果索引l已經(jīng)達(dá)到其最大值lx,則執(zhí)行步驟s57到s61,否則執(zhí)行從步驟s54到步驟s56的新迭代。在步驟s57,將索引l和變量pxy設(shè)定為0。在步驟s58,變量vxy接收索引g、vl和l在表ch中選擇的值ch[g,vl,l],該值被除以通過步驟s54到s56的迭代計算的變量syx。在步驟s59,變量pxy按照變量vxy與變量vxy的對數(shù)(例如,以2為底數(shù))的乘積遞增。在步驟s60,索引l遞增一(1)。在步驟s61,將索引l與其最大值lx進(jìn)行比較。如果索引l已經(jīng)達(dá)到其最大值lx,則執(zhí)行步驟s62到s64,否則執(zhí)行從步驟s58到步驟s61的新迭代。
在步驟s62,通過從由表tt中的索引g指定的值tt[g]中減去被除以蹤跡ci的數(shù)量ix的值cpt[g,vl]與變量pxy的乘積來更新值tt[g],值cpt[g,vl]由在步驟s22填充的表cpt中的索引g和vl指定。在步驟s63,索引vl遞增一(1)。在步驟s64,將索引vl與其最大值vlx進(jìn)行比較。如果索引vl大于其最大值vlx,則執(zhí)行步驟s65和s66,否則執(zhí)行從步驟s53開始的新迭代。在步驟s65,索引g遞增一(1)。在步驟s66,將索引g與其最大值gx進(jìn)行比較。如果索引g大于其最大值gx,則執(zhí)行步驟s67,否則執(zhí)行從步驟s52開始的新迭代。在步驟s67,作為統(tǒng)計分析的結(jié)果,返回表tt。
因此,在執(zhí)行最后一次迭代時,在步驟s66之后,表tt包含以下值:
其中針對索引g和vl的每個值計算
圖10和11以曲線cc1、cc2的形式表示作為索引g的函數(shù)的表tt的內(nèi)容的一個實(shí)例。曲線cc1已經(jīng)通過執(zhí)行圖8中的步驟獲得,曲線cc2已經(jīng)通過執(zhí)行圖9中的步驟獲得。在圖10和11的實(shí)例中,索引g具有一個字節(jié)的長度(從而從0變化到255),并且曲線cc1和cc2已經(jīng)通過數(shù)量達(dá)到500,000的大量蹤跡ci獲得。與表tt中包含的其它值相比,曲線cc1和cc2在值g=168處具有明顯的峰值。曲線cc1中的峰值比表tt的其它值約大三十倍。在曲線cc2中,峰值比表tt的其它值大三倍。取決于表ch的統(tǒng)計處理,可以認(rèn)為,當(dāng)通過增加所分析的蹤跡ci的數(shù)量而獲得的峰值保持為比最接近的值大0.9倍的值時,要搜索的機(jī)密數(shù)據(jù)部分泄漏。
與根據(jù)本發(fā)明的測試方法相關(guān)的常規(guī)應(yīng)對措施的有效性
為使諸如集成電路的電路能夠成功地通過已知的資格或認(rèn)證程序,這些電路的設(shè)計者提供了涉及引入時間變量的最常規(guī)的應(yīng)對措施。這種安排能夠通過使為電路定速的時鐘周期的持續(xù)時間隨機(jī)改變,或者通過在隨機(jī)選擇的時間引入虛擬處理周期或運(yùn)算來做出。表ht中的值的計算允許從所分析的值中移除時間方面,并且避免必須同步所分析的值的不同蹤跡。如果關(guān)于要搜索的機(jī)密數(shù)據(jù)的信息在所分析的數(shù)據(jù)中,則先前描述的測試方法使能確定所有或部分機(jī)密數(shù)據(jù)。
適當(dāng)?shù)膽?yīng)對措施
某些實(shí)施例涉及使得電路能夠在包括前述測試方法的資格或認(rèn)證測試期間被使用的應(yīng)對措施手段。
這里提出保護(hù)加密運(yùn)算免受由前述測試方法實(shí)施的分析。在此上下文中,運(yùn)算接收輸入數(shù)據(jù),并且根據(jù)輸入數(shù)據(jù)的值提供輸出數(shù)據(jù)。根據(jù)一個實(shí)施例的應(yīng)對措施包括對于一組輸入數(shù)據(jù)的所有數(shù)據(jù)執(zhí)行要保護(hù)的運(yùn)算,所述一組輸入數(shù)據(jù)僅包括一次易于被運(yùn)算處理的所有可能的數(shù)據(jù),因此包括要由運(yùn)算處理的數(shù)據(jù)。另一個應(yīng)對措施包括作為運(yùn)算的結(jié)果提供一組輸出數(shù)據(jù),所述輸出數(shù)據(jù)僅包括一次易于由運(yùn)算提供的所有可能的數(shù)據(jù)。該組輸出數(shù)據(jù)可以被簡化為數(shù)據(jù)的子集,其中應(yīng)用所選擇的滿射函數(shù)得到的變換后的數(shù)據(jù)僅包括一次所有易于被該函數(shù)獲得的數(shù)據(jù),其中包括預(yù)期來自運(yùn)算的輸出數(shù)據(jù),這些輸出數(shù)據(jù)對應(yīng)于輸入數(shù)據(jù)。所選擇的滿射函數(shù)可以對應(yīng)于要保護(hù)的電路或軟件程序的泄漏模式。
與現(xiàn)有技術(shù)的應(yīng)對措施不同(現(xiàn)有技術(shù)涉及在有關(guān)隨機(jī)數(shù)據(jù)的大量相同運(yùn)算中“隱藏”要保護(hù)的運(yùn)算,因此與要保護(hù)的操作的輸入數(shù)據(jù)不相關(guān)),本文的理念是針對不是隨機(jī)選擇的其它數(shù)據(jù)執(zhí)行運(yùn)算。實(shí)際上,這種其它數(shù)據(jù)與輸入數(shù)據(jù)相關(guān),只要由這種其它數(shù)據(jù)和要處理的數(shù)據(jù)形成的集合包括易于由運(yùn)算處理的所有數(shù)據(jù)。
圖12表示根據(jù)一個實(shí)施例的用于計算涉及機(jī)密數(shù)據(jù)sd的加密運(yùn)算的方法的步驟s71到s77。此方法被配置為成功地通過上述測試。連續(xù)執(zhí)行步驟s71到s76。在步驟s71,變量rn接收0與根據(jù)用于以二進(jìn)制碼對該變量進(jìn)行編碼的位數(shù)確定的最大值nx之間的隨機(jī)值。因此,如果變量rn在8位上編碼,則nx等于255。在步驟s72,將索引n設(shè)定為0。在步驟s73,通過以異或運(yùn)算將索引n與變量rn組合來計算變量irn。在步驟s74,通過將上面定義的加密運(yùn)算opr應(yīng)用于輸入數(shù)據(jù)m和機(jī)密數(shù)據(jù)sd來計算由結(jié)果表rs中的索引n指定的輸出數(shù)據(jù)rs[n]。根據(jù)一個實(shí)施例,機(jī)密數(shù)據(jù)sd在此例如通過與變量irn的異或運(yùn)算(異或)被組合:
rs[n]=opr(m,sd⊕irn)(6)
“⊕”表示異或運(yùn)算符。
備選地,變量irn可以與輸入數(shù)據(jù)m組合:
rs[n]=opr(m⊕irn,sd)(7)
或者與運(yùn)算的結(jié)果組合:
rs[n]=opr(m,sd)⊕irn(8)
在步驟s75,索引n遞增一(1)。在步驟s76,將索引n與最大值nx進(jìn)行比較,如果它小于或等于最大值nx,則執(zhí)行從步驟s73到s76的計算的新迭代。在相反的情況下,執(zhí)行步驟s77。在步驟s77,返回在索引n1處的表rs中包含的要搜索的輸出數(shù)據(jù),該索引n1具有其中變量irn為0的迭代的索引n的值,前提是在步驟s74與值irn的組合運(yùn)算是異或運(yùn)算。實(shí)際上,應(yīng)用于數(shù)據(jù)d和0的異或運(yùn)算的結(jié)果不變換數(shù)據(jù)d。應(yīng)當(dāng)注意,在步驟s77,在其它運(yùn)算之后,能夠提取表rs中要搜索的輸出數(shù)據(jù)。在這種情況下,存儲在表rs中的所有數(shù)據(jù)由此類其它運(yùn)算處理。因此,例如在aes算法的情況下,運(yùn)算opr例如是將輸入數(shù)據(jù)與在第一輪算法中使用的第一密鑰相組合的異或運(yùn)算。可以對存儲在表rs中的所有數(shù)據(jù)執(zhí)行aes算法的以下運(yùn)算,并且將這些運(yùn)算的連續(xù)結(jié)果存儲在表rs中。因此,移動行和混合列的運(yùn)算可以被應(yīng)用于表rs的每個元素。能夠在被認(rèn)為對攻擊不太敏感的處理中的隨后步驟從結(jié)果表rs提取要搜索的輸出數(shù)據(jù)。這些布置也適用于des或三重des算法。
此外,輸入數(shù)據(jù)m和機(jī)密數(shù)據(jù)sd由具有相同位數(shù)的二進(jìn)制字進(jìn)行編碼。賦予變量irn的每個值還必須具有與數(shù)據(jù)m和sd相同的位數(shù)。如果數(shù)據(jù)m和sd由8位字編碼,則變量irn也在8位上編碼。必須在步驟s73到s76之間執(zhí)行的迭代次數(shù)nx等于2x,x是數(shù)據(jù)m和sd的位數(shù)的大小。如果數(shù)據(jù)m和sd由16、32或64位的字編碼,則需要限制該迭代次數(shù)。為此,可以將變量irn在8位上編碼,并且可以通過將變量irn與其自身串接多次以形成機(jī)密數(shù)據(jù)sd或輸入數(shù)據(jù)m的大小的字,來執(zhí)行將機(jī)密數(shù)據(jù)sd或輸入數(shù)據(jù)與變量irn組合的運(yùn)算。因此,在數(shù)據(jù)m和sd在16位上編碼的情況下,8位上的變量irn與其自身串接以獲得16位上的數(shù)據(jù)。然后,在步驟s73執(zhí)行的運(yùn)算變?yōu)椋?/p>
rs[n]=opr(m,sd⊕irn//irn)(9)
“//”表示二進(jìn)制字的串接運(yùn)算符。在數(shù)據(jù)m和sd在32位上編碼的情況下,8位上的變量irn的每個值與其自身串接3次以獲得32位上的值。然后,在步驟s73執(zhí)行的運(yùn)算變?yōu)椋?/p>
rs[n]=opr(m,sd⊕irn//irn//irn//irn)(10)
更一般地,當(dāng)在每次迭代時將變量irn與運(yùn)算opr的輸出數(shù)據(jù)組合時,可以以這樣的方式選擇變量irn的值:通過應(yīng)用所選擇的滿射函數(shù)f3得到的它們的變換值僅包括一次易于被該函數(shù)獲得的所有可能值。函數(shù)f3可以是恒等函數(shù),如對于圖12中的步驟那樣,或者是圖像集較小的函數(shù),如在圖13中那樣。
因此,圖13表示根據(jù)另一實(shí)施例的用于計算涉及機(jī)密數(shù)據(jù)sd的加密運(yùn)算的方法的步驟s80到s92。此方法被配置為成功通過前述測試。連續(xù)執(zhí)行步驟s80到s84。步驟s80與步驟s71相同。在步驟s81,將索引n設(shè)定為1,將索引m設(shè)定為0。在步驟s82,表rs1的索引0處的值接收應(yīng)用于輸入數(shù)據(jù)m和機(jī)密數(shù)據(jù)sd的運(yùn)算opr的結(jié)果,該結(jié)果通過異或運(yùn)算與隨機(jī)數(shù)據(jù)rn組合。步驟s83與步驟s73相同。步驟s84與步驟s74相同,除了在該步驟中執(zhí)行的計算的結(jié)果由變量res存儲。另外,在步驟s83計算的數(shù)據(jù)irn通過異或運(yùn)算與運(yùn)算opr提供的結(jié)果相組合。在步驟s85,將通過應(yīng)用函數(shù)f3得到的變量res的變換值與表rs中存儲的其它數(shù)據(jù)的函數(shù)f3的變換值進(jìn)行比較,其它數(shù)據(jù)位于由低于或等于索引m的索引指定的位置處。如果變量res的變換值f3(res)與這些其它數(shù)據(jù)不同,則在步驟s86和步驟s87將索引m遞增一(1),并且將變量res存儲在表rs1中由索引m指定的位置處。否則存在索引n2,以使得變量res的變換值f3(res)等于表rs中位于索引n2處的值rs1[n2]的變換值f3(rs1[n2])。在這種情況下,在步驟s88將索引n與索引值n1進(jìn)行比較,其中運(yùn)算opr的未掩蔽結(jié)果存儲在表rs(n1⊕rn=0)中。如果索引n等于索引值n1,則結(jié)果res是運(yùn)算opr的真實(shí)結(jié)果,并且在步驟s89將其存儲在表rs1中的索引n2處。在步驟s87、s89和s88之后(當(dāng)索引n不對應(yīng)于索引n1時)執(zhí)行索引n遞增一(1)的步驟s90。在下一步驟s91,將索引n與最大值nx進(jìn)行比較,如果它小于或等于值nx,則執(zhí)行從步驟s83到s91的計算的新迭代,否則執(zhí)行步驟s92。步驟s92與步驟s77相同,除了它被應(yīng)用于表rs1以外。
可以選擇函數(shù)f3以便對應(yīng)于要保護(hù)的電路或軟件程序的泄漏模式。因此,函數(shù)f3例如可以是漢明函數(shù)。
當(dāng)要保護(hù)的運(yùn)算包括在與運(yùn)算的輸入數(shù)據(jù)、要保護(hù)的機(jī)密數(shù)據(jù)或可以從中確定機(jī)密數(shù)據(jù)的數(shù)據(jù)對應(yīng)的索引處讀取查找表的運(yùn)算時,能夠?qū)崿F(xiàn)另一應(yīng)對措施。根據(jù)一個實(shí)施例,讀取整個查找表,并且例如將其加載到一組結(jié)果數(shù)據(jù)中(例如表rs)。如上所述,存儲在表rs中的數(shù)據(jù)集可以在下一運(yùn)算的輸入處應(yīng)用,表中的每個數(shù)據(jù)通過該運(yùn)算被變換。由于表rs中的輸出數(shù)據(jù)的位置是已知的,因此電路能夠在任何時間提取輸出數(shù)據(jù)。
根據(jù)一個實(shí)施例,查找表被變換成新表,其中每個位置包含易于被包含在該查找表中的所有可能值。因此,圖14表示查找表t1,由此可以根據(jù)從0到p變化的輸入值來確定加密運(yùn)算的結(jié)果。根據(jù)一個實(shí)施例,表t1被替換為新表t2,新表具有附加維度,以使得索引i的所有可能值的t2[i,k0]=t1[i]位于0和p之間。此外,當(dāng)k從0變?yōu)閞時,所有值t2[i,k]包括易于被存儲在表t1中的值的所有可能值。因此,如果這些值在一個字節(jié)上被編碼,則索引k的最大值r等于255,當(dāng)索引i被固定并且索引k從0變化到r時,所有值t2[i,k]是不同的。因此,由索引i指定的所有表t2[i,j]包含相同的值,但是排序不同。例如,可以通過以下方式定義表中的數(shù)據(jù):
t2[i,k]=t1[i]⊕(k+k0)mod(r+1)(11)
對于所有值,k從0變化到r。
因此,要保護(hù)的運(yùn)算的執(zhí)行涉及在結(jié)果表(例如表rs)中加載由通過輸入數(shù)據(jù)(可能為機(jī)密數(shù)據(jù))定義的索引i所指定的表t2的所有值:
rs[0..r]=t2[i,0..r]
如上所述,然后可以執(zhí)行步驟s77或s90以獲得在結(jié)果表rs中要搜索的輸出數(shù)據(jù)。
使得t2[i,k0]=t1[i](即包含運(yùn)算的輸出數(shù)據(jù))的索引k0的值可以對于整個表t2是固定的,也可以在表的每行上變化。例如,列t2[0..p,k0]可以包含表t1。在另一實(shí)例中,表元素t2[0,k0]可以等于元素t1[0],元素t2[1,k0+1]可以等于元素t1[1]等等,直到元素t2[p,(k0+p)mod(r+1)]等于t1[p]。如果在該實(shí)例中,從表t2的一行到下一行的移位間距是1,則其能夠被設(shè)定為1與r-2之間的其它任何值。
代替包含0與r之間的全部值,由索引i選擇的每個表元素t2[i]可以僅包含包括預(yù)期輸出數(shù)據(jù)的值,以使得通過應(yīng)用所選的滿射函數(shù)f3而得到的它們的變換值全部不同,并且包括易于被該函數(shù)獲得的所有可能值。如果函數(shù)f3再現(xiàn)機(jī)密數(shù)據(jù)的泄漏模式,則這種布置允許減小表t2的大小,而不降低該方法的魯棒性。
應(yīng)當(dāng)理解,雖然表t1具有兩個維度,但是表t2具有三個維度,表t1的每個元素被包含表t1的元素的所有可能值的一維表所替換。
圖15表示根據(jù)一個實(shí)施例的布置在諸如塑料卡的便攜式介質(zhì)hd上,并且配備有應(yīng)對措施的集成電路ct1。該集成電路包括與上面結(jié)合圖1描述的集成電路ct相同的單元,并且與后者的不同之處在于:協(xié)處理器cp1被實(shí)現(xiàn)上述應(yīng)對措施中的一個和/或另一個的協(xié)處理器cp2所替代。因此,根據(jù)一個實(shí)施例,協(xié)處理器cp2被配置為提供結(jié)果值的表,而不是加密運(yùn)算的單個結(jié)果,其僅包括使得通過應(yīng)用所選的滿射函數(shù)而得到的它們各自的變換值全部為不同的值,并且包括易于被該滿射函數(shù)獲得的所有可能值,其中包括加密運(yùn)算的預(yù)期結(jié)果。處理器prc與協(xié)處理器cp2匹配,以便獲知加密運(yùn)算的結(jié)果在由協(xié)處理器cp2提供的結(jié)果值的表中的位置。
協(xié)處理器cp2還可以被配置為執(zhí)行加密運(yùn)算的一部分。在這種情況下,處理器prc被配置為產(chǎn)生結(jié)果值的表,其僅包括值,以使得通過應(yīng)用所選的滿射函數(shù)而得到的它們各自的變換值全部不同,并且包括易于被該滿射函數(shù)獲得的所有可能值,其中包括加密運(yùn)算的結(jié)果。
引用的參考文獻(xiàn)
[1]作者p.c.kocher,“timingattacksonimplementationofdiffie-hellman,rsa,dss,andothersystems”,nealkoblitz編輯,advancesincryptology-crypto'96,計算機(jī)科學(xué)講義第1109卷,第104-113頁,springer,1996年。
[2]作者p.c.kocher、j.jaffe和b.jun,“”differentialpoweranalysis”,m.j.wiener編輯,advancesincryptology-crypto'99,計算機(jī)科學(xué)講義第1666卷,第388-397頁,springer,1999年。
[3]作者e.brier、c.clavier和f.olivier,“correlationpoweranalysiswithaleakagemodel”m.joye和j-j.quisquater編輯,cryptographichardwareandembeddedsystems-ches2004,計算機(jī)科學(xué)講義第3156卷,第16-29頁,springer,2004年。
[4]作者j.-j.quisquater,“electromagneticanalysis(ema):measuresandcounter-measuresforsmartcards”,smartcardprogrammingandsecurity,springerberlin/heidelberg,第2140、2001卷,第200-210頁。
[5]作者s.chari、j.r.rao和p.rohatgi,“templateattacks”,kaliskijr.、b.s.、
[6]作者b.gierlichs、l.batina、p.tuyls和b.preneel,“mutualinformationanalysis”,ches2008,lncs的第5154卷,第426-442頁,springer,2008年。
[7]作者b.feix、h.thiebeauld,“defeatingiso9797-1macalgo3bycombiningside-channelandbruteforcetechniques”,cryptologyeprintarchive:報告2014/702。