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