本發(fā)明涉及的是一種計(jì)算機(jī)安全領(lǐng)域的技術(shù),具體是一種用于SM2簽名的大數(shù)模冪求逆功耗檢測(cè)方法及其系統(tǒng)。
背景技術(shù):
在現(xiàn)實(shí)中,密碼系統(tǒng)通常是以硬件或以硬件為表現(xiàn)形式的軟件來實(shí)現(xiàn)的,譬如:智能卡、RFID、密碼協(xié)處理器、SoC密碼芯片、密碼機(jī)。在這些密碼系統(tǒng)的實(shí)現(xiàn)環(huán)境中,攻擊者可以觀察和測(cè)量密碼變換的能量消耗、電磁輻射等信息,利用這些額外的信息有可能實(shí)現(xiàn)比傳統(tǒng)的數(shù)學(xué)分析更有效的密碼破譯。這種環(huán)境下的攻擊通常被人們稱為”旁路攻擊”(Side Channel Attack)。旁路攻擊通常包括簡(jiǎn)單功耗分析(SPA)和差分功耗分析(DPA)。
其中,DPA攻擊是通過記錄密碼設(shè)備對(duì)大量不同數(shù)據(jù)進(jìn)行加密或解密操作時(shí)的功耗曲線,利用統(tǒng)計(jì)方法從功耗曲線中恢復(fù)出密碼設(shè)備中的密鑰,其分析效果也相對(duì)更加有效。DPA的思想能夠應(yīng)用于各種密碼算法的分析中,包括對(duì)稱密碼算法和公鑰密碼算法。通常來說公鑰密碼算法執(zhí)行時(shí)間更長(zhǎng),其泄露的功耗信息也越多,功耗信息利用方式也呈現(xiàn)多樣化。但目前針對(duì)公鑰ECC(橢圓曲線)方案的分析,大都針對(duì)于其核心運(yùn)算:標(biāo)量乘運(yùn)算。
由于標(biāo)量乘運(yùn)算是SM2(一種橢圓曲線公鑰密碼算法)乃至所有ECC方案安全性的基礎(chǔ),研究者們也提出了許多種針對(duì)標(biāo)量乘運(yùn)算的分析方法,包括:傳統(tǒng)的DPA分析、水平分析以及水平碰撞分析等。為了防護(hù)這些分析方法,標(biāo)量乘運(yùn)算的實(shí)現(xiàn)方案也越來越安全,使得分析者很難從標(biāo)量乘運(yùn)算上獲得有用信息。
基于橢圓曲線簽名方案的SM2包含三大部分:標(biāo)量乘運(yùn)算、生成簽名部分值r、生成整個(gè)簽名對(duì)(r,s)。在生成整個(gè)簽名對(duì)的過程中,存在針對(duì)密鑰的求逆操作,即:(d+1)-1mod n,其中:d為簽名的私鑰且為不少于160bytes的大數(shù),n為已知的SM2簽名方案的公共參數(shù)。求逆操作(d+1)-1mod n有兩種實(shí)現(xiàn)方式,一種為擴(kuò)展歐幾里德算法,但需消耗更多的硬件資源包括寄存器和電路面積;另一種通過模冪實(shí)現(xiàn),如圖1所示,即:(d+1)-1mod n=(d+1)n-2mod n。該方法能夠復(fù)用原電路中的模乘模塊,節(jié)省電路面積。
在傳統(tǒng)的DPA分析下,針對(duì)SM2簽名的分析一般分為兩種:一是針對(duì)標(biāo)量乘運(yùn)算進(jìn)行分析,恢復(fù)標(biāo)量,但由于SM2簽名方案的標(biāo)量為隨機(jī)數(shù),因此該分析僅在單條曲線下分析才有意義;二是針對(duì)生成整個(gè)簽名對(duì)中的運(yùn)算r×d進(jìn)行DPA分析。而這兩種分析又非常易于防護(hù):對(duì)于標(biāo)量乘的分析在單條曲線下實(shí)現(xiàn)針對(duì)SPA的防護(hù)及水平攻擊防護(hù);針對(duì)r×d分析,可通過修改生成整個(gè)簽名對(duì)中的求逆操作實(shí)現(xiàn),即:(d+1)-1*(k-r×d)mod n=(d+1)-1*(k-r×(d+1-1))mod n=((d+1)-1(k-r)-r)mod n,其中:k為用于標(biāo)量乘運(yùn)算的隨機(jī)數(shù);如此一來,r×d運(yùn)算就在求逆操作中消失了,也無法進(jìn)行分析;而(d+1)-1仍然存在。
經(jīng)過對(duì)現(xiàn)有技術(shù)的檢索發(fā)現(xiàn),中國(guó)專利文獻(xiàn)號(hào)CN104683102A,公布日2015.6.3,公開了一種SM2簽名計(jì)算方法和裝置,方法包括:獲取簽名r、未知的臨時(shí)密鑰k、私鑰d和模數(shù)n;計(jì)算第一值,所述第一值為私鑰d加1后的值;計(jì)算第二值,所述第二值為所述第一值的模逆;計(jì)算第三值,所述第三值為簽名r和所述未知的臨時(shí)密鑰k的和;計(jì)算第四值,所述第四值為第三值和所述第二值的乘積;獲取SM2的簽名結(jié)果S,所述簽名結(jié)果S為所述第四值減去r后對(duì)n取模的值。但該技術(shù)的分析對(duì)象在于第四值的產(chǎn)生過程,適用性較窄,在應(yīng)用防護(hù)措施時(shí),第四值有可能已經(jīng)變化。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明針對(duì)現(xiàn)有技術(shù)存在的上述不足,提出一種用于SM2簽名的大數(shù)模冪求逆功耗檢測(cè)方法及其系統(tǒng),針對(duì)SM2簽名的求逆運(yùn)算采集功耗曲線,并根據(jù)模平方運(yùn)算的中間值信息進(jìn)行分類建模,通過與模板進(jìn)行匹配實(shí)現(xiàn)模板攻擊,結(jié)合離線運(yùn)算,能夠恢復(fù)SM2簽名的私鑰。
本發(fā)明是通過以下技術(shù)方案實(shí)現(xiàn)的:
本發(fā)明涉及一種用于SM2簽名的大數(shù)模冪求逆功耗檢測(cè)方法,在攻擊者完全控制一臺(tái)與待測(cè)密碼系統(tǒng)完全相同或類似的設(shè)備的情況下,通過向該待測(cè)密碼系統(tǒng)隨機(jī)輸入密鑰循環(huán)執(zhí)行SM2簽名,得到求逆時(shí)的模冪算法的功耗曲線,并根據(jù)模平方運(yùn)算的中間值信息對(duì)功耗曲線進(jìn)行分類建模;采集待測(cè)SM2簽名求逆時(shí)的功耗曲線,并與建立的模板進(jìn)行匹配得到相應(yīng)的模平方運(yùn)算的中間值信息,完成模板攻擊;根據(jù)待測(cè)SM2簽名模平方運(yùn)算的中間值信息并結(jié)合大數(shù)模乘運(yùn)算進(jìn)行離線運(yùn)算,恢復(fù)完整的待測(cè)SM2簽名的密鑰信息。
所述的模平方運(yùn)算的中間值信息是指模冪算法的第一個(gè)模平方中所有的中間結(jié)果的單字節(jié)漢明重量。
所述的建模是指:對(duì)分類后的功耗曲線進(jìn)行建模,模板hi=(mi,Ci),其中:hi為漢明重量為i的模板,mi為功耗曲線的均值,Ci為功耗曲線的協(xié)方差矩陣。
所述的匹配的依據(jù)為:其中:p為功耗曲線與模板的匹配概率,t為被測(cè)功耗曲線。
所述的離線運(yùn)算是指:利用大數(shù)模乘運(yùn)算與模平方運(yùn)算中間值的漢明重量,恢復(fù)對(duì)應(yīng)密鑰的完整信息。
本發(fā)明涉及一種實(shí)現(xiàn)上述方法的分析系統(tǒng),包括:密鑰檢測(cè)模塊、信息分類模塊、模板處理模塊、匹配計(jì)算模塊和線下密鑰恢復(fù)模塊,其中:密鑰檢測(cè)模塊執(zhí)行SM2簽名并得到密鑰中間值的漢明重量信息后輸出至信息分類模塊;信息分類模塊根據(jù)中間值的漢明重量信息對(duì)功耗曲線進(jìn)行分類,并輸出分類信息至模板處理模塊;模板處理模塊根據(jù)分類信息進(jìn)行建模,并將模板信息輸入匹配計(jì)算模塊與待測(cè)SM2簽名過程中的求逆部分的功耗曲線進(jìn)行匹配,匹配計(jì)算模塊將匹配結(jié)果輸出至線下密鑰恢復(fù)模塊進(jìn)行離線運(yùn)算,獲得待測(cè)SM2簽名的密鑰信息。
技術(shù)效果
與現(xiàn)有技術(shù)相比,本發(fā)明通過模板攻擊與離線運(yùn)算,根據(jù)求逆的功耗曲線恢復(fù)密鑰;即使SM2簽名在標(biāo)量乘運(yùn)算和部分簽名生成階段都添加了防護(hù),針對(duì)求逆的分析仍然能夠恢復(fù)SM2簽名中的私鑰,為防護(hù)提供了新的方向。
附圖說明
圖1為現(xiàn)有模冪算法示意圖;
圖2為本發(fā)明的功耗檢測(cè)方法示意圖;
圖3為SM2簽名生成的功耗曲線;
圖4為SM2大數(shù)求逆的功耗曲線;
圖5為單字節(jié)恢復(fù)成功率;
圖6為大數(shù)恢復(fù)執(zhí)行時(shí)間;
圖7為分析系統(tǒng)示意圖。
具體實(shí)施方式
下面對(duì)本發(fā)明的實(shí)施例作詳細(xì)說明,本實(shí)施例在以本發(fā)明技術(shù)方案為前提下進(jìn)行實(shí)施,給出了詳細(xì)的實(shí)施方式和具體的操作過程,但本發(fā)明的保護(hù)范圍不限于下述的實(shí)施例。
實(shí)施例1
如圖2所示,本實(shí)施例包括以下步驟:
步驟1、隨機(jī)輸入密鑰,循環(huán)執(zhí)行SM2簽名并定位到大數(shù)求逆階段,采用模冪算法采集功耗曲線,計(jì)算模平方運(yùn)算的中間值信息。
所述的模平方運(yùn)算的中間值信息是指:模冪算法第一個(gè)模平方中所有中間結(jié)果的單字節(jié)漢明重量。
由于第一個(gè)模平方運(yùn)算總與密鑰具有直接關(guān)系,恢復(fù)該值就能直接恢復(fù)密鑰,因而選用第一個(gè)模平方運(yùn)算中的中間值。
所述的模冪算法包括但不限于:從左向右實(shí)現(xiàn)的模冪算法和從右向左實(shí)現(xiàn)的模冪算法。
所述的第一個(gè)模平方的實(shí)際運(yùn)算值為(d+1)×(d+1)mod n,其中:d為簽名的私鑰且為不小于160bytes的大數(shù),n為已知的SM2簽名方案的公共參數(shù)。
步驟2、根據(jù)步驟1得到的模平方運(yùn)算的中間值信息對(duì)功耗曲線進(jìn)行分類和建模。
所述的功耗曲線共分為九類。
如圖3所示,在大數(shù)求逆階段的8~10(*105)區(qū)域內(nèi),如圖4所示的該區(qū)域功耗細(xì)節(jié)信息,通過對(duì)該區(qū)域分析可以快速定位到所需的模平方位置。
所述的建模的模板hi=(mi,Ci),i∈[0,8],其中:hi為漢明重量為i的模板,mi為功耗曲線的均值,Ci為功耗曲線的協(xié)方差矩陣。
如上表所示,所述的漢明重量范圍為0~8,表示數(shù)據(jù)第一行有八個(gè)數(shù)據(jù),代表所建立模板選擇的八個(gè)功耗點(diǎn),第一行數(shù)據(jù)為均值;均值下方為8*8矩陣,即協(xié)方差矩陣。
步驟3、采集待測(cè)SM2簽名求逆時(shí)的功耗曲線和中間值的漢明重量,并與步驟2得到的模板進(jìn)行匹配,得到待測(cè)SM2簽名模平方運(yùn)算中間值的漢明重量。
所述的匹配的依據(jù)為:其中:p為功耗曲線與模板的匹配概率,t為被測(cè)功耗曲線。
步驟4、根據(jù)步驟3中待測(cè)SM2簽名的功耗曲線的中間值的漢明重量,結(jié)合大數(shù)模乘運(yùn)算進(jìn)行離線運(yùn)算,恢復(fù)待測(cè)SM2簽名求逆操作的底數(shù)值d+1,進(jìn)而恢復(fù)完整密鑰。
所述的離線運(yùn)算是指:利用大數(shù)模乘運(yùn)算與模平方運(yùn)算中間值的漢明重量,恢復(fù)對(duì)應(yīng)密鑰的完整信息。
如圖7所示,本實(shí)施例涉及一種實(shí)現(xiàn)上述方法的分析系統(tǒng),包括:密鑰檢測(cè)模塊、信息分類模塊、模板處理模塊、匹配計(jì)算模塊和線下密鑰恢復(fù)模塊,其中:密鑰檢測(cè)模塊執(zhí)行SM2簽名并得到密鑰中間值的漢明重量信息后輸出至信息分類模塊;信息分類模塊根據(jù)中間值的漢明重量信息對(duì)功耗曲線進(jìn)行分類,并輸出分類信息至模板處理模塊;模板處理模塊根據(jù)分類信息進(jìn)行建模,并將模板信息輸入匹配計(jì)算模塊與待測(cè)SM2簽名過程中的求逆部分的功耗曲線進(jìn)行匹配,匹配計(jì)算模塊將匹配結(jié)果輸出至線下密鑰恢復(fù)模塊進(jìn)行離線運(yùn)算,獲得待測(cè)SM2簽名的密鑰信息。
如圖5和圖6所示,本實(shí)施例實(shí)施了一次完整的SM2簽名密鑰恢復(fù),采用從左向右的模冪算法實(shí)現(xiàn)。通過圖5可知,對(duì)于單字節(jié)密鑰恢復(fù),只需知道該字節(jié)參與運(yùn)算的5個(gè)中間值即能夠以80%的概率成功恢復(fù),而20個(gè)以上的中間值的恢復(fù)成功率可達(dá)100%,適用于SM2簽名算法的密鑰長(zhǎng)度;并且恢復(fù)不同字節(jié)數(shù)密鑰所需的時(shí)間復(fù)雜度為線性,恢復(fù)128字節(jié)數(shù)據(jù)只需25ms;由此可知,本實(shí)施例即使在標(biāo)量乘運(yùn)算部分和簽名生成階段都添加了防護(hù),只需要求逆運(yùn)算以模冪實(shí)現(xiàn)便可完全恢復(fù)密鑰信息。
本實(shí)施例的SM2簽名算法的大數(shù)求逆是基于該算法中硬件模乘模塊并以模冪實(shí)現(xiàn);由于SM2簽名的橢圓曲線參數(shù)已知,因而能夠輕松定位到其模冪運(yùn)算及密鑰參與的模平方運(yùn)算。
本實(shí)施例采用一種基于求逆的旁路分析方法及系統(tǒng),適用于基于模冪實(shí)現(xiàn)求逆的場(chǎng)景,繞過防護(hù)較強(qiáng)部分,將重點(diǎn)轉(zhuǎn)向不易發(fā)現(xiàn)的安全短板,獲得密鑰信息,同時(shí)為防護(hù)提供新的方向。