本發(fā)明涉及一種用于保護sm4密碼芯片的泄露防護方法及其實現(xiàn)系統(tǒng),使用該方法可以對典型sm4密碼芯片進行安全性防護,使其能夠有效抵御側(cè)信道密碼分析帶來的安全威脅。所提出方法的優(yōu)點在于保護sm4密碼芯片的安全性同時不顯著增加sm4密碼芯片的實現(xiàn)開銷。事實上,可以通過降低掩碼信息熵實現(xiàn)掩碼開銷的有效控制。該發(fā)明屬于信息安全
技術(shù)領(lǐng)域:
。
背景技術(shù):
:掩碼作為一種典型的密碼芯片泄露防護方法,通過使用隨機數(shù)隨機化密碼芯片執(zhí)行過程中所處理的敏感中間值消除敏感中間值與密碼芯片能量泄露信息間的統(tǒng)計依賴性,進而使得能量分析攻擊失效。掩碼的設(shè)計通常依賴于密碼芯片所使用的密碼算法,需要通過結(jié)合密碼算法的算法特性,設(shè)計出有效、可靠的掩碼防護方法。sm4加密算法為中國國產(chǎn)密碼算法,目前國際密碼工程領(lǐng)域缺乏針對sm4密碼芯片的掩碼防護方法研究?;诖耍瑢m4密碼芯片設(shè)計掩碼防護方法對于保護國產(chǎn)密碼芯片具有重要的實際意義。然而,普通掩碼方法的實現(xiàn)代價較高,嚴(yán)重影響到sm4密碼芯片的運行效率。相比較之下,低熵掩碼方法通過降低掩碼熵能夠有效降低sm4密碼芯片的實現(xiàn)代價,具有較高的實現(xiàn)效率?;诖耍景l(fā)明考慮為sm4密碼芯片設(shè)計一種低熵掩碼泄露防護方法,從而實現(xiàn)sm4密碼芯片安全性的有效與可靠保證。技術(shù)實現(xiàn)要素:作為典型的國產(chǎn)密碼算法,國際密碼工程領(lǐng)域缺乏針對sm4密碼算法所設(shè)計的特定掩碼防護方法,同時,普通掩碼防護方法存在實現(xiàn)代價較高,進而導(dǎo)致sm4密碼芯片的運行效率較低的技術(shù)缺陷?;诖耍景l(fā)明提出一種用于保護sm4密碼芯片的低熵掩碼泄露防護方法及其實現(xiàn)系統(tǒng)。本發(fā)明所提出泄露防護方法僅需使用16字節(jié)掩碼對sm4密碼芯片運行過程中所處理的敏感中間值進行掩碼保護。所述一種用于保護sm4密碼芯片的低熵掩碼泄露防護方法,其步驟為:1)選取一長為16字節(jié)的掩碼,將該掩碼分為四組,每組掩碼為四個字節(jié),即32比特;將每一組掩碼mi劃分為一四元數(shù)組(mi0、mi1、mi2、mi3),其中,每個元素的掩碼值為8比特,mi0為第i組掩碼mi的第一個元素;2)對s盒進行預(yù)計算得到16個新型s盒,記作snew,存儲該16個snew;其中預(yù)計算方法為:將各組掩碼中的元素作為s盒的輸入,其中,s盒的輸入掩碼為mi中元素mij,則s盒輸出掩碼為mi+1中元素m(i+1)j,i與j的取值均為0到3,當(dāng)i+1的值為4時,令i+1為0;3)輪函數(shù)利用步驟1)的四組掩碼對待保護數(shù)據(jù)進行掩碼更新;其中,每一輪加密時首先確定四組掩碼的使用順序;然后按照確定的順序選取掩碼并根據(jù)當(dāng)前所用掩碼對應(yīng)的snew對待保護數(shù)據(jù)進行掩碼更新;4)當(dāng)完成最后一輪掩碼更新后,去除最后一輪掩碼更新所得數(shù)據(jù)中最后一輪掩碼更新所用的掩碼,得到加密后的密文值。進一步的,所述掩碼劃分后的四組掩碼m0,m1,m2,m3滿足關(guān)系式進一步的,對原s盒預(yù)計算得到的新s盒snew與原s盒之間滿足關(guān)系式其中,v為待保護數(shù)據(jù)的中間值。進一步的,步驟3)中,所述輪函數(shù)為sm4算法采用輪函數(shù);按照確定的順序選取掩碼并根據(jù)當(dāng)前所用掩碼對應(yīng)的snew對待保護數(shù)據(jù)進行掩碼更新,每一輪更新后,上一輪后三組中間值為當(dāng)前輪前三組中間值,而當(dāng)前輪第四組中間值依據(jù)輪密鑰信息以及上一輪后三組中間值計算得到。進一步的,令待保護數(shù)據(jù)的初始值為x=(x0,x1,x2,x3),其中x0,x1,x2,x3均為包含4字節(jié)元素的數(shù)組,當(dāng)前對x進行掩碼處理所使用掩碼為m0為掩碼m順序確定后的掩碼;在輪函數(shù)加密中,依次依據(jù)m0中各元素對應(yīng)的4個掩碼字節(jié)值從16個新s盒snew中選取出4個s盒進行查表操作,并對得到的輸出掩碼進行t線性變換;其中,第一輪加密后第1-32比特中間值對應(yīng)掩碼為第33-64比特中間值所對應(yīng)掩碼為第65-96比特中間值所對應(yīng)掩碼為第97-128比特中間值所對應(yīng)掩碼為第一輪加密后第1-32比特中間值為第33-64比特中間值為第65-96比特中間值為第97-128比特中間值為其中,為對掩碼進行t線性變換后的更新值,rk1為sm4密碼算法第一輪所使用輪密鑰,其長度為32比特。進一步的,所述掩碼為布爾掩碼。進一步的,使用置換函數(shù)確定四組掩碼的使用順序。進一步的,每一輪確定的四組掩碼的序列所對應(yīng)掩碼與上一輪經(jīng)過輪函數(shù)加密后中間值所對應(yīng)掩碼任何位置均不重復(fù)。所述一種用于實現(xiàn)保護sm4密碼芯片的低熵掩碼泄漏防護的系統(tǒng),所述系統(tǒng)包含:掩碼模塊,所述掩碼模塊將選取的總長度為16字節(jié)的四組掩碼m0,m1,m2,m3輸出至輪函數(shù)模塊;所述每一組掩碼mi劃分為一四元數(shù)組<mi0、mi1、mi2、mi3>,所述mi0為第i組掩碼mi的第一個元素,其中,0≤i≤3,i為自然數(shù);新型s盒模塊,所述新型s盒模塊的輸入為各組掩碼中的元素,新型s盒的輸入掩碼為mi中的mij時,新型s盒的輸出掩碼為mi+1中的元素m(i+1)j,所述新型s盒模塊的新型s盒數(shù)量為16個,其中,0≤i≤3,0≤j≤3,i以及j均為自然數(shù),當(dāng)i+1的值為4時,令i+1為0;輪函數(shù)模塊,所述輪函數(shù)模塊在每一輪加密時,先確定四組掩碼的使用順序,按照確定的順序選取掩碼,并根據(jù)選取掩碼確定所使用的新型s盒,使用新型s盒對待保護數(shù)據(jù)進行掩碼更新;密文輸出模塊,所述密文輸出模塊用于去除最后一輪掩碼更新所得數(shù)據(jù)中最后一輪掩碼更新所用的掩碼,得到最終密文;進一步的,所述掩碼模塊的四組掩碼m0,m1,m2,m3滿足關(guān)系式進一步的,所述新型s盒模塊中新型s盒snew與原s盒之間滿足關(guān)系式其中,v為待保護數(shù)據(jù)的中間值;進一步的,所述輪函數(shù)模塊對sm4算法采用輪函數(shù),按照確定的順序選取掩碼并根據(jù)當(dāng)前所用掩碼對應(yīng)的snew對待保護數(shù)據(jù)進行掩碼更新,每一輪更新后,上一輪后三組中間值為當(dāng)前輪前三組中間值,而當(dāng)前輪第四組中間值依據(jù)輪密鑰信息以及上一輪后三組中間值計算得到;進一步的,所述輪函數(shù)模塊中,令待保護數(shù)據(jù)的初始值為x=(x0,x1,x2,x3),其中x0,x1,x2,x3均為包含4字節(jié)元素的數(shù)組,當(dāng)前對x進行掩碼處理所使用掩碼為m0為掩碼m順序確定后的掩碼;在輪函數(shù)加密中,依次依據(jù)m0中各元素對應(yīng)的4個掩碼字節(jié)值從16個新s盒snew中選取出4個s盒進行查表操作,并對得到的輸出掩碼進行t線性變換;其中,第一輪加密后第1-32比特中間值對應(yīng)掩碼為第33-64比特中間值所對應(yīng)掩碼為第65-96比特中間值所對應(yīng)掩碼為第97-128比特中間值所對應(yīng)掩碼為第一輪加密后第1-32比特中間值為第33-64比特中間值為第65-96比特中間值為第97-128比特中間值為其中,為對掩碼進行t線性變換后的更新值,rk1為sm4密碼算法第一輪所使用輪密鑰,其長度為32比特;進一步的,所述掩碼模塊使用的掩碼為布爾掩碼;進一步的,所述輪函數(shù)模塊使用置換函數(shù)確定四組掩碼的使用順序;進一步的,所述輪函數(shù)模塊確定每一輪掩碼的使用順序與上一輪經(jīng)過輪函數(shù)加密后中間值所對應(yīng)掩碼任何位置均不重復(fù)。與現(xiàn)有技術(shù)相比,本發(fā)明的積極效果為:本發(fā)明由于使用掩碼數(shù)量較低,從而使得所提出方法具有較低的實現(xiàn)代價。此外,sm4密碼芯片運行過程中所有中間值均受到低熵掩碼方法保護而與原始中間值統(tǒng)計上相互獨立,從而保證了sm4密碼芯片所處理的敏感中間值與sm4密碼芯片的能量泄露信息統(tǒng)計上相互獨立,進而有效消除了能量分析攻擊對sm4密碼芯片帶來的物理安全威脅、保證sm4密碼芯片在實際應(yīng)用場景中的物理安全性。附圖說明通過參考下面的附圖,可以更為完整地理解本發(fā)明的示例性實施方式:圖1為本發(fā)明具體實施方式的一種用于保護sm4密碼芯片的低熵掩碼泄漏防護方法的流程圖;圖2為本發(fā)明基于低熵掩碼泄露防護方法的sm4密碼芯片實現(xiàn)整體流程圖;圖3為基于低熵掩碼泄漏防護方法的sm4密碼芯片實現(xiàn)輪變換流程圖;圖4為本發(fā)明具體實施方式的一種用于實現(xiàn)保護sm4密碼芯片的低熵掩碼泄漏防護的系統(tǒng)的結(jié)構(gòu)圖。具體實施方式下面結(jié)合附圖對本發(fā)明的技術(shù)內(nèi)容進行進一步詳細(xì)描述。本發(fā)明的方法流程如圖1所示,首先選取一長為16字節(jié)的掩碼,將該掩碼分為四組,每組掩碼為四個字節(jié),即32比特;然后對s盒進行預(yù)計算得到16個新型s盒,記作snew,存儲該16個snew;其中預(yù)計算方法為:將各組掩碼中的元素作為s盒的輸入,其中,s盒的輸入掩碼為mi中元素mij,則s盒輸出掩碼為mi+1中元素m(i+1)j,i與j的取值均為0到3,當(dāng)i+1的值為4時,令i+1為0;然后輪函數(shù)利用步驟1)的四組掩碼對待保護數(shù)據(jù)進行掩碼更新;其中,每一輪加密時首先確定四組掩碼的使用順序;然后按照確定的順序選取掩碼并根據(jù)當(dāng)前所用掩碼對應(yīng)的snew對待保護數(shù)據(jù)進行掩碼更新;當(dāng)完成最后一輪掩碼更新后,去除最后一輪掩碼更新所得數(shù)據(jù)中最后一輪掩碼更新所用的掩碼,得到加密后的密文值。具體而言,如圖2所示,本發(fā)明面向sm4密碼芯片的低熵掩碼泄露防護方法總共使用16字節(jié)掩碼,每四個掩碼字節(jié)分為一組,總共有4組掩碼值。可以將四組掩碼表示為m0,m1,m2,m3,每一組掩碼為32比特。m0可以表示為一個四元數(shù)組(m00,m01,m02,m03)。類似的,可以將m1表示為(m10,m11,m12,m13),m2可以表示為(m20,m21,m22,m23),m3可以表示為(m30,m31,m32,m33)。每組四元數(shù)組中包括四個元素,每個元素的掩碼值為8比特。具體地,四組掩碼為:m0=(0x95,0xd4,0x56,0xd2),m1=(0xc3,0xa5,0xe1,0x65),m2=(0x4d,0x2d,0x8d,0xc5),m3=(0x1b,0x5c,0x3a,0x72)。依據(jù)平衡編碼思路,掩碼選取策略為盡可能使得掩碼字節(jié)中比特值為1與比特值為0的個數(shù)相同。事實上,所有掩碼字節(jié)中比特值為1與比特值為0的數(shù)量均為4。同時,盡可能使每個字節(jié)掩碼值之間漢明距離隨機,從而防止由于不同字節(jié)掩碼值之間漢明距離分布不均勻?qū)е麓嬖跐h明距離模型下的信息泄露?;诖怂悸?,選取出上述16字節(jié)掩碼值。此外,m0,m1,m2,m3滿足關(guān)系式該約束條件能夠有效降低掩碼追蹤難度。低熵掩碼方法對s盒運算采用預(yù)計算存儲的方式。事實上,s盒的輸入與輸出掩碼滿足特定約束關(guān)系。具體地,s盒的輸入掩碼與輸出掩碼為相鄰掩碼數(shù)組mi、mi+1中相同位置的元素。例如,如果s盒的輸入掩碼為m0中元素m00,那么s盒輸出掩碼為m1中元素m10;如果s盒輸入掩碼為m1中元素m11,那么s盒輸出掩碼為m2中元素m21;以此類推??偣残枰A(yù)計算并存儲16個新型s盒。假設(shè)將新型s盒記作snew,將原始s盒記作s,將需要保護的敏感中間值記作v,那么有其中,i與j的值為0到3,當(dāng)i+1的值為4時,令i+1為0。預(yù)計算并且存儲16個新型s盒后,可以在加密過程中對s盒操作采用查表方式進行。16個新型s盒具體元素值見表1至表16。表1s1(輸入掩碼為0x95,輸出掩碼為0xc3)1867288211852314658251159372432131201812262616663140143244416417516120415293310511720642792462171552351946016712677305502431715248311214254624710280220253832471381951311379045200109128959628233981993669225121234124131722452491971918020121991491101701645713914617323999932121881366832101605167145116196251896687861842025315610778191111034012179162250215232051012522183914423275100182162302361721712961332024212224816524019082912221683473158132702242291509216171141274134812385916361155113237178227412710484223203561062412091931542081923815719725512511114776151142210183169054187207118153182135174941858910835115177114444981482282721422143522219813017611912365表2s2(輸入掩碼為0xc3,輸出掩碼為0x4d)2261892361111210391208196551012542222061492232074114620224011496156671521292211841661557180192121150185136161811828699441241901253562715523520217210365925201141191120116781471006517641043931881732452162419410624321340159231681072921523322730214142913827253117247170255177938420916745701451397323923415383311641301369137942255217250148126248133204140134853419998143801111923010920043742381182291152163250246141102818719821261549716517154132157162224108822191791357547517560761581232032217877888918319758181718722090232335324414442252218119186237211694813112825138791601741950184610212219337642492672562282055116811366171061231681516312127124149321059521124292表3s3(輸入掩碼為0x4d,輸出掩碼為0x1b)表4s4(輸入掩碼為0x1b,輸出掩碼為0x95)2431232491642411918390223169357215913371225228151931717014037513580239581626015411215710679190101024113178163251214222041002532193814523374101192172312371621612871322118620611915218313417595184881093411417611545489149229262152204253231991311771181226423617922651261058522220257107240208192155209193391561962541241101467715014321118216815520743782472070542341956116612776314512530615349211315255634610381221252821877389210842304759250158362422121211802272716762141142245406517416020514283210411681481111711655613814717223898922131891376933111615066144117197241886786871852035224613919413013691442011081299497292329919837682241202351251217324424809618181200218表5s5(輸入掩碼為0xd4,輸出掩碼為0xa5)表6s6(輸入掩碼為0xa5,輸出掩碼為0x2d)2401411961321429342207106135881032723810119235662301262371231017124225461022017920622014146105173163621401491702321009021118714367391316752681501151953018669808119120550189799521282224416125215234244210127178229291615613913624346711681662038263811011420145722411864482361975916012174252533124015955411992495740978721925084234181228312011183216204631092462141981572151993315419424812210414875144137213176174749188200113158177128169891909410736116182117435415147227282092184451171931331831121247015510873184129647111801652532081620298251221321512397699212232252352222213411301924512525516224718585922171753778153131652312261459123172138577129862336016458156118表7s7(輸入掩碼為0x2d,輸出掩碼為0x5c)表8s8(輸入掩碼為0x5c,輸出掩碼為0xd4)1993570255287862226203531741196823125917221414557101217247553811189213244901796581218922383951242150442502201131882351917554133134253327316616819762040961240156103163173481301551642301068422118112977413169587415212520516180759495177195602541312021381288336193100137861052122410720645762321122271174165252240810426189192210251115241172249183918221516143641511417923323615985251621321167143882315017052146120149987118221103351861712432223019610824521146153225661092720923922924208136151402917819812714419114216787176801014212218412337561157237182232123461312071391851261147222818723413118979321419449992482162001472172014714820424611610215469158135219190160963表9s9(輸入掩碼為0x56,輸出掩碼為0xe1)2411401971331439243206107134891022623910019334672311272361221117024325571032117820722115147104172162631411481712331019121018614266381216653691511141943118768818019020451188789421383225406025315335245211126179228281605713813724247701691672029273911111520044732401965492371965816112075243523025115854511882485641968621825185235180229212111082217205621082472151991562141983215519524912310514974145136212177175648189201112159176129168881919510637117183116425514146226292082194550161921321821131257115410972185139746101811642522091720399250220331502387798202222242342322313501311824412425416324618484932161743679152130642302271449022173139476128872326116559157119表10s10(輸入掩碼為0xe1,輸出掩碼為0x8d)表11s11(輸入掩碼為0x8d,輸出掩碼為0x3a)2217915062131260240483310494210243931923665248277357229204501691126716116020168491301292503978161175194119471031231807086221912333252245145432532191181872364641746177159122202231797689881821965971559616417055133156163225109832181781347442752391192281143162251247151112918619921324913220514113584351989914281110182311082012351528230165131126813695224531735114912725211624617125417692852081664471144138722382124115823069106282142322263121514381392614610164177510538218917224421725195107242636154234212162113758242001401901211177918119312015118413716080183879845125191124342064014720324111597157661531282201851671456227188237101131029020919754100255223207148222表12s12(輸入掩碼為0x3a,輸出掩碼為0x56)表13s13(輸入掩碼為0xd2,輸出掩碼為0x65)2361598525162132116714388231501705214612025111524117224918391822151614364151141792332114615322566109272092392292420813615140291499871182211033518617124322230196108245561157237182232123461312071391851261147217819812714419114216787176801014212218412337201471482042461161021546915813521919016096322818723413118979321419449992482162001472171722141455710121724755381118921324490199357025528786222620353174119682312591917554133134253327316616819762040961241796581218922383951242150442502201131882354131695874152125205161807594951771956001561031631734813015516423010684221181129774576232112227117416525224081042618919221025413120213812883361931001378610521224107206表14s14(輸入掩碼為0x65,輸出掩碼為0xc5)2471381951311379045200109128959628233981993669225121234124131722452491971918020121991491101701645713914617323999932121881366832101605167145116196251896687861842025318672882118523146582511593724321312018122626166631401432444164175161204152933105117206427924621715523519460167126773055024317152483112142546247102802202538323717822741271048422320356106241209193154208192381571972551251111477615114221018316905418720711815318213517494185891083511517711444498148228272142214352221981301761191236515610778191111034012179162250215232051012522183914423275100182162302361721712961332024212224816524019082912221683473158132702242291509216171141274134812385916361155113表15s15(輸入掩碼為0xc5,輸出掩碼為0x72)2361792265126105852222025710724020819215520919339156196254124110146771501432111821681551862061191521831341759518488109341141761154548914922926215220425323199131177118122641571067919010102411317816325121422204100253219381452337410119217231237162161287132212431232491642411918390223169357215913371225228151931717014037513580239581626015411224613919413013691442011081299497292329919837682241202351251217324424809618181200218814811117116556138147172238989221318913769331116150661441171972418867868718520352187738921084230475925015836242212121180227271676214114224540651741602051428321041162074378247207054234195611661277631451253061534921131525563461038122125282表16s16(輸入掩碼為0x72,輸出掩碼為0xd2)4477233113226116516425324191052718819321125513020313912982371921011368710420225106207402168597515312420417181749594176194611157102162172491311541652311078522018012876181745513213525233721671691967214197125178648021993239385024315145251221112189234162315144561112062465439110882122459119834712542979632272025217511869221358200461492052471171031556815913421819116186222918623512119969221519548982492172011462165701562361922221335603020613818412711573179199126145190143166861778110043123185122362104715222467108262082382282520913714141281489970183311132418717024222331197109244237158842416313310661428923051171531471212501142401732481829083214160426515014078232在該低熵掩碼方法中需要使用置換函數(shù)p(),該函數(shù)沒有輸入,輸出為0,1,2,3的隨機置換序列。該置換函數(shù)決定了四組掩碼m0,m1,m2,m3的使用順序。加密之前,首先調(diào)用置換函數(shù)生成一個隨機置換序列,然后按照隨機置換序列決定四組掩碼的使用順序。例如,假設(shè)隨機置換序列為1,3,2,0,那么明文第1-32比特應(yīng)該由第m1組掩碼值進行保護,明文第33-64比特應(yīng)該由第m3組掩碼值進行保護,明文第65-96比特應(yīng)該由第m2組掩碼值進行保護,明文第97-128比特應(yīng)該由第m0組掩碼值進行保護。這里需要說明的是,第一輪加密過程中需要對明文進行掩碼保護,后續(xù)輪加密過程中對前一輪加密后數(shù)據(jù)(即中間值)進行掩碼保護。該低熵掩碼方案使用掩碼為布爾掩碼,即,掩碼與中間值通過異或進行隨機化處理。布爾掩碼的優(yōu)點在于,實現(xiàn)簡單,能夠有效降低掩碼方案的整體實現(xiàn)代價。令明文為x=(x0,x1,x2,x3),需要說明的是,x0,x1,x2,x3均為包含4字節(jié)元素的數(shù)組,因此明文x總共包括16字節(jié)。對明文進行掩碼處理所使用掩碼為需要說明的是,m0為使用隨機置換函數(shù)p()對掩碼m置換后掩碼。對明文隨機化處理后,需要進行輪函數(shù)加密,輪函數(shù)加密詳見圖2。在輪函數(shù)加密中,需要依據(jù)個掩碼字節(jié)值從16個新生成s盒中選取出4個s盒進行查表操作。具體要求為,所選取的4個s盒的輸入掩碼為中4個掩碼字節(jié)值。考慮到4組掩碼值的異或值為零,4個s盒輸入掩碼實際上為四個s盒輸出掩碼為將經(jīng)過第一輪s盒運算之后輸出掩碼記作這里為m0中與相鄰的掩碼。需要經(jīng)過t線性變換。需要說明的是,t線性變換是sm4密碼算法每一輪的輪函數(shù)變換中均涉及到的操作。sm4密碼算法總共執(zhí)行32輪,對于第i,i∈[1,32]輪s盒輸出掩碼(記作),也需要經(jīng)過t線性變換。可將第一輪t線性變換后掩碼記作隨后,由圖3可見,需要與明文第1-32比特所對應(yīng)掩碼進行異或,從而得到第一輪加密后第97-128比特中間值所對應(yīng)掩碼此外,第一輪加密后第1-32比特中間值對應(yīng)掩碼為第一輪加密后第33-64比特中間值所對應(yīng)掩碼為第一輪加密后第65-96比特中間值所對應(yīng)掩碼為第一輪加密后第1-32比特中間值為第一輪加密后第33-64比特中間值為第一輪加密后第65-96比特中間值為最后,第一輪加密后第97-128比特中間值為其中,snew為上述從16個新生成s盒所選取4個s盒構(gòu)成的s盒向量,rk1為sm4密碼算法第一輪所使用輪密鑰,其長度為32比特。由于x1,x2,x3(包括x0)均為32比特值,長度為32比特,需要將32比特異或值按序分成四個字節(jié),每個字節(jié)通過snew中對應(yīng)的s盒,查表得到相應(yīng)的輸出值,進而組成得到經(jīng)過snew計算后的32比特中間值。隨后,將經(jīng)過snew計算后的32比特中間值按序分成四個字節(jié),每個字節(jié)經(jīng)過t變換得到相應(yīng)的輸出字節(jié)。最后,將經(jīng)過t變換得到的四個輸出字節(jié)按序組成32比特值后與x0異或得到x4,即每一次經(jīng)過輪函數(shù)加密后,都需要對掩碼進行調(diào)整。掩碼調(diào)整時,首先須調(diào)用置換函數(shù)生成隨機置換序列。為了確保不會產(chǎn)生掩碼消除的情形,需要確保生成的隨機置換序列所對應(yīng)掩碼與上一輪經(jīng)過輪函數(shù)加密后中間值所對應(yīng)掩碼任何位置均不重復(fù)。為此,需要判斷生成的隨機序列所對應(yīng)掩碼與經(jīng)過輪函數(shù)加密后中間值所對應(yīng)掩碼是否有重復(fù)。如果有,需要重新執(zhí)行置換函數(shù),并重新進行條件判斷,直至生成滿足條件的隨機序列。需要說明的是,所設(shè)計低熵掩碼防御對策并不要求32輪加密過程中隨機生成掩碼順序均不同,只要相鄰兩輪加密過程中隨機生成掩碼順序不同,即可避免由于掩碼消除而導(dǎo)致的原始中間值暴露的問題。產(chǎn)生滿足條件的隨機置換序列后,可按照隨機置換序列選取掩碼對經(jīng)過輪函數(shù)加密后的中間值進行掩碼更新。令第一輪輪變換后第1-32比特中間值對應(yīng)更新掩碼為第33-64比特中間值對應(yīng)掩碼為第65-96比特中間值對應(yīng)掩碼為第97-128比特中間值對應(yīng)掩碼為那么異或掩碼后,第一輪變換后中間值第1-32比特值更新為第33-64比特值更新為第65-96比特值更新為第97-128比特值更新為可以看到,經(jīng)過第一輪變換后,明文中x1,x2,x3為第一輪變換后前三組中間值,而x4為依據(jù)x1,x2,x3以及rk1所生成新的中間值。事實上,原始sm4加密算法的特點在于經(jīng)過每一輪加密后,上一輪后三組中間值為當(dāng)前輪前三組中間值,而當(dāng)前輪第四組中間值依據(jù)輪密鑰信息以及上一輪后三組中間值計算得到。經(jīng)過第一輪變換后,需要通過掩碼異或進一步實施掩碼更新,從而得到掩碼更新后的中間值。具體來講,進一步更新后,第一輪中間值第1-32比特值為第33-64比特值為第65-96比特值為第97-128比特值為可以看到,經(jīng)過掩碼追蹤后,依然保持了四組掩碼異或值為零的約束條件,從而為下一輪加密與掩碼追蹤提供了相同的條件,便利了整個掩碼方案的順序執(zhí)行。其次,對每一輪加密過程都應(yīng)用類似的輪函數(shù)加密過程與掩碼追蹤過程。當(dāng)完成32輪加密過程后,應(yīng)該得到第32輪中間值第1-32比特值為第33-64比特值為第65-96比特值為第97-128比特值為然后,需要去除第32輪掩碼,得到加密后的密文值,這需要將與進行異或,將與進行異或,將與進行異或,將與進行異或,從而得到加密密文(y0,y1,y2,y3)。至此,基于低熵掩碼方法的sm4加密過程結(jié)束。在該低熵掩碼方案中,所有中間值均受到掩碼保護,從而能夠有效消除敏感中間值與sm4密碼芯片能量泄漏之間的統(tǒng)計關(guān)系,進而消除了能量分析攻擊對sm4密碼芯片物理安全性帶來的威脅。算法1描述了受低熵掩碼保護sm4加密方案的總體執(zhí)行流程。輸入:x=(x0,x1,x2,x3),掩碼m=(m0,m1,m2,m3),置換函數(shù)p()。輸出:密文y=(y0,y1,y2,y3)。算法描述:a.明文隨機化處理:b.輪變換與掩碼追蹤:forflag=1:32c.生成密文:y=(x35,x34,x33,x32)d.算法結(jié)束。圖4為本發(fā)明具體實施方式的一種一種用于實現(xiàn)保護sm4密碼芯片的低熵掩碼泄漏防護的系統(tǒng)的結(jié)構(gòu)圖,所述系統(tǒng)包括:掩碼模塊401,所述掩碼模塊將選取的總長度為16字節(jié)的四組掩碼m0,m1,m2,m3輸出至輪函數(shù)模塊;所述每一組掩碼mi劃分為一四元數(shù)組<mi0、mi1、mi2、mi3>,所述mi0為第i組掩碼mi的第一個元素,其中,0≤i≤3,i為自然數(shù);新型s盒模塊402,所述新型s盒模塊的輸入為各組掩碼中的元素,新型s盒的輸入掩碼為mi中的mij時,新型s盒的輸出掩碼為mi+1中的元素m(i+1)j,所述新型s盒模塊的新型s盒數(shù)量為16個,其中,0≤i≤3,0≤j≤3,i以及j均為自然數(shù),當(dāng)i+1的值為4時,令i+1為0;輪函數(shù)模塊403,所述輪函數(shù)模塊在每一輪加密時,先確定四組掩碼的使用順序,按照確定的順序選取掩碼,并根據(jù)選取掩碼確定所使用的新型s盒,使用新型s盒對待保護數(shù)據(jù)進行掩碼更新;密文輸出模塊404,所述密文輸出模塊用于去除最后一輪掩碼更新所得數(shù)據(jù)中最后一輪掩碼更新所用的掩碼,得到最終密文;進一步的,所述掩碼模塊的四組掩碼m0,m1,m2,m3滿足關(guān)系式進一步的,所述新型s盒模塊中新型s盒snew與原s盒之間滿足關(guān)系式其中,v為待保護數(shù)據(jù)的中間值;進一步的,所述輪函數(shù)模塊對sm4算法采用輪函數(shù),按照確定的順序選取掩碼并根據(jù)當(dāng)前所用掩碼對應(yīng)的snew對待保護數(shù)據(jù)進行掩碼更新,每一輪更新后,上一輪后三組中間值為當(dāng)前輪前三組中間值,而當(dāng)前輪第四組中間值依據(jù)輪密鑰信息以及上一輪后三組中間值計算得到;進一步的,所述輪函數(shù)模塊中,令待保護數(shù)據(jù)的初始值為x=(x0,x1,x2,x3),其中x0,x1,x2,x3均為包含4字節(jié)元素的數(shù)組,當(dāng)前對x進行掩碼處理所使用掩碼為m0為掩碼m順序確定后的掩碼;在輪函數(shù)加密中,依次依據(jù)m0中各元素對應(yīng)的4個掩碼字節(jié)值從16個新s盒snew中選取出4個s盒進行查表操作,并對得到的輸出掩碼進行t線性變換;其中,第一輪加密后第1-32比特中間值對應(yīng)掩碼為第33-64比特中間值所對應(yīng)掩碼為第65-96比特中間值所對應(yīng)掩碼為第97-128比特中間值所對應(yīng)掩碼為第一輪加密后第1-32比特中間值為第33-64比特中間值為第65-96比特中間值為第97-128比特中間值為其中,為對掩碼進行t線性變換后的更新值,rk1為sm4密碼算法第一輪所使用輪密鑰,其長度為32比特;進一步的,所述掩碼模塊使用的掩碼為布爾掩碼;進一步的,所述輪函數(shù)模塊使用置換函數(shù)確定四組掩碼的使用順序;進一步的,所述輪函數(shù)模塊確定每一輪掩碼的使用順序與上一輪經(jīng)過輪函數(shù)加密后中間值所對應(yīng)掩碼任何位置均不重復(fù)。本專利設(shè)計的優(yōu)點在于,僅使用16個字節(jié)掩碼從而有效降低了掩碼熵。然而在普通掩碼方案中會使用256個字節(jié)掩碼值。事實上,該掩碼防護方案中,掩碼的信息熵從8比特降低為4比特。掩碼信息熵降低后,針對s盒的預(yù)計算與存儲代價大大降低。事實上,通過使用16個字節(jié)掩碼值,僅僅需要預(yù)計算并且存儲16個新的s盒。然而,在普通掩碼方法中,需要預(yù)計算并且存儲256個新的s盒。因此,低熵掩碼方法的實現(xiàn)代價大約是普通掩碼方法的1/8,從而大大降低了受保護sm4密碼芯片的實現(xiàn)代價。此外,從掩碼追蹤的角度講,所設(shè)計低熵掩碼方法通過選取滿足特定關(guān)系的掩碼,能夠?qū)崿F(xiàn)掩碼追蹤過程的相對簡單進行。首先,將s盒設(shè)計為輸入掩碼與輸出掩碼滿足特定約束關(guān)系,從而可以通過預(yù)計算存儲16個新的s盒。新的s盒輸入、輸出掩碼之間的特定關(guān)系使得掩碼追蹤更加容易;其次,在sm4密碼芯片執(zhí)行每一輪中借助隨機置換函數(shù)隨機設(shè)定四個32比特掩碼值的使用順序,從而既能夠保證四個32比特掩碼異或值為零的特性,同時使得每個32比特中間值所對應(yīng)的掩碼是隨機選取的。最后,從安全的角度講,所設(shè)計掩碼方法能夠?qū)崿F(xiàn)sm4密碼芯片執(zhí)行過程中所有中間值均被掩碼隨機化,從而能夠有效消除原始中間值與sm4密碼芯片能量泄漏之間的統(tǒng)計依賴關(guān)系,使得能量分析攻擊失效。此外,從高階側(cè)信道攻擊的角度分析來看,所設(shè)計低熵掩碼方案具有不同中間值所對應(yīng)掩碼值均不確定的特性。事實上,每一輪運行過程中32比特中間值均會受到隨機選取32比特掩碼值進行保護。因此,上述低熵掩碼設(shè)計方法能夠有效避免高階側(cè)信道攻擊對sm4密碼芯片帶來的安全威脅。當(dāng)前第1頁12