采用不同運算規(guī)則的乘法算法,所述N個乘法算法中也可以包含至少兩個采用相同運算規(guī)則的乘法算法。
[0052]本發(fā)明實施例中,當N = 2時,預設的2個乘法算法可以為(I1 = (A-r) *A mod η和d2 = (r-A)*A mod n,這2個乘法算法是2個采用不同運算規(guī)則的乘法算法,這2個乘法算法中包括了模乘和模減運算。
[0053]當N = 2時,預設的2個乘法算法可以為Cl1 = (A+r) *A mod η和d2 = (A+r) *2A modn,這2個乘法算法是2個采用不同運算規(guī)則的乘法算法,這2個乘法算法中包括了模乘和模加運算。
[0054]當N = 2時,預設的2個乘法算法可以為(I1 = (A-r) * (A+r) mod η和d2 =(r-A) * (A+r) mod n,這2個乘法算法是2個采用不同運算規(guī)則的乘法算法,這2個乘法算法中包括了模乘、模加和模減運算。
[0055]當N = 3,預設的 3 個乘法算法可以為 Cl1 = 2A*A mod n、d2 = _4A*A mod n、d3 =2A*A mod n,這3個乘法算法中有2個采用相同運算規(guī)則的乘法算法,這3個乘法算法中只包括了模乘運算。
[0056]密碼設備中還包括一個第一校驗模塊、一個第一異常處理模塊和一個第一輸出模塊,該第一校驗模塊采用預設的校驗條件對該N個模方中間計算結果進行驗證,如果驗證通過,則表示密碼設備沒有遭遇到DFA攻擊,該N個模方中間計算結果均正確,則可以根據第R個乘法算法和第R個模乘中間計算結果計算得到本次模方運算的結果,并通過所述第一輸出模塊輸出本次模方運算的結果;如果驗證沒有通過,則第一校驗模塊通知第一異常處理模塊進行異常處理,該異常處理模塊可產生中斷或者進行報警等。
[0057]其中,R小于等于N,R大于等于I。
[0058]校驗條件可以是判斷N個模方中間計算結果之和是否為0,也可以是不為O的校驗方式,在此不做限制。比如,當(I1= (A_r) *A mod n、d2 = (r_A) *A mod n時,可以將山+(12等于O作為校驗條件;當(I1 = 2A*A mod n、d2 = _4A*A mod n時,可以將山+(12等于-(I1作為校驗條件。
[0059]在步驟S102中,在進行模乘運算時,先采用預設的N個乘法算法,對模乘運算中的第一操作數和第二操作數進行處理,得到N個模乘中間計算結果,再根據預設的校驗條件驗證所述N個模乘中間計算結果是否滿足預設的校驗條件,如果滿足預設的校驗條件,則根據第R個乘法算法和第R個模乘中間計算結果計算得到本次模乘運算的結果。
[0060]在本發(fā)明實施例中,密碼設備中還包括N個第二乘法模塊,該N個第二乘法模塊與步驟SlOl中的N個第一乘法模塊中執(zhí)行的乘法算法完全相同。
[0061]如,本發(fā)明實施例中,當N = 2時,預設的2個乘法算法可以為(I1 = (A-r) *B modη 和 d2 = (r-A) mod n。當 N = 3,預設的 3 乘法算法可以為 Cl1 = 2A*B mod n、d2 = _4A*Bmod n、d3 = 2A^Bmod n。
[0062]密碼設備中還包括一個第二校驗模塊、一個第二異常處理模塊和一個第二輸出模塊,該第二校驗模塊采用預設的校驗條件對該N個模乘中間計算結果進行驗證,如果驗證通過,則表示密碼設備沒有遇到DFA攻擊,該N個模乘中間計算結果均正確,則可以根據第R個乘法算法和第R個模乘中間計算結果計算得到本次模乘運算的結果,并通過第二輸出模塊輸出本次模乘運算的結果;如果驗證沒有通過,則第二校驗模塊通知第二異常處理模塊進行異常處理。
[0063]其中,R小于等于N,R大于等于I。
[0064]校驗條件可以是判斷N個模乘中間計算結果之和是否為0,也可以是不為O的校驗方式,在此不做限制。比如,當(I1 = (A-r) *B mod n、d2 = (r-A) *B modn時,可以將(I^d2等于O作為校驗條件;當(I1 = 2A*B mod n、d2 = -4A*B mod n時,可以將山+(12等于-(I1作為校驗條件。
[0065]另外,需要說明的是,本實施例中,進行模冪的運算時,先執(zhí)行步驟S101,再根據判定條件I判斷是否執(zhí)行步驟S102,如果是,執(zhí)行完步驟S102后,可以根據判定條件2再判斷是否執(zhí)行步驟SlOl,直至判定條件I或2中的一個不成立為止,最后一次計算得到的模方運算的結果或者模乘運算的結果是模冪運算的結果,這是現(xiàn)有技術,判定條件I和判定條件2均在現(xiàn)有技術中有說明,本實施例中不加以詳細介紹。另外,在驗證密碼設備遭遇到DFA攻擊時,可以選擇由第一異常處理模塊和第二異常處理模塊中的其中一個進行異常處理,這樣可以節(jié)省成本。
[0066]在步驟S103中,將最后一次計算得到的模乘運算的結果或模方運算的結果作為模冪運算的結果。
[0067]下面以N = 2為例,來說明模方運算的結果和模乘運算的結果的計算過程,如圖2所示。
[0068]其中,模方運算單元包括2個第一乘法模塊、與該2個第一乘法模塊均保持連接的第一校驗模塊、與所述第一校驗模塊連接的第一輸出模塊和與所述第一校驗模塊連接的第一異常處理模塊,該2個第一乘法模塊分別為第一乘法模塊I和第一乘法模塊2。通過模方運算單元可以計算得到一次模方運算的結果,也可以檢測到密碼設備是否遭受到DFA攻擊。
[0069]模乘運算單元包括2個第二乘法模塊、與該2個第二乘法模塊均保持連接的第二校驗模塊、與所述第二校驗模塊連接的第二輸出模塊和與所述第二校驗模塊連接的第二異常處理模塊,該2個第二乘法模塊分別為第二乘法模塊I和第二乘法模塊2。通過模乘運算單元可以計算得到一次模乘運算的結果,也可以檢測到密碼設備是否遭受到DFA攻擊。
[0070]其中,第二乘法模塊I中執(zhí)行的乘法算法與第一乘法模塊I中執(zhí)行的乘法算法相同,第二乘法模塊2中執(zhí)行的乘法算法與第一乘法模塊2中執(zhí)行的乘法算法相同。
[0071]其中,模方A2mod η的計算步驟如下:
[0072]步驟11、將A輸入到第一乘法模塊I和2進行模減和模乘操作:
[0073]第一乘法模塊1:先計算模減(A-r) mod η,再計算模乘(A_r) *A mod η,得到(I1 ;
[0074]第一乘法模塊2:先計算模減(r-A) mod η,再計算模乘(r_A) *A mod n,得到d2。
[0075]步驟12、將兩個第一乘法模塊的運算結果Clpd2均輸入到第一校驗模塊進行校驗:
[0076]首先計算山、d2的和山+(12,即(A_r) *A mod n+ (r~A) *Α mod η。
[0077]接下來判斷上述結果是否為0,如果為0,則通過校驗,說明沒有遭受DFA攻擊;如果不為0,則校驗不通過,認為密碼設備遭受DFA攻擊。
[0078]步驟3、如果通過校驗,則進入第一輸出模塊,在第一輸出模塊中根據預設的第I個乘法算法進行一個模乘和一個模加操作,得到模方A2mod η:
[0079]模乘操作:計算A*r mod η
[0080]模加操作:計算(c^+A^^1mod n = (A-r) *A mod n+A*r mod n = A2mod n。
[0081]當然,也可以根據需要,根據預設的第2個乘法算法進行一個模乘和一個模減操作,得到模方A2H1d η,在此不做限制。
[0082]步驟4、如果未通過校驗,則進入第一異常處理模塊,第一異常處理模塊可產生中斷或進行報警等。
[0083]模乘A*Bmod η的計算步驟如下:
[0084]步驟1、將Α、B分別輸入到第二乘法模塊I和2進行模減和模乘操作:
[0085]第二乘法模塊1:先計算模減(A-r) mod η,再計算模乘(A_r) *B mod n,得到(I1 ;
[0086]第二乘法模塊2:先計算模減(r-A) mod η,再計算模乘(r_A) *B mod n,得到d2。
[0087]步驟2、將兩個第二乘法模塊的運算結果山、d2均輸入到第二校驗模塊進行校驗:
[0088]首先計算山、d2的和山+(12,即((A-r)*B+(r-A)*B)mod η ;
[0089]接下來判斷上述結果是否為0,如果為0,則通過校驗;如果不為0,則校驗不通過,認為密碼設備遭受DFA攻擊。
[0090]步驟3、如果通過校驗,則進入第二輸出模塊,在第二輸出模塊中根據預設的第I個乘法算法進行一個模乘和一個模加操作,得到模乘A*B mod η:
[0091]模乘操作:計算B*r mod η
[0092]模加操作:計算(c^+B^1modn = (A-r) *B mod n+B*r mod n = A*B mod n。
[0093]當然,也可以在第二輸出模塊中根據預設的第2個乘法算法進行一個模乘和一個模減操作得到:
[0094]模乘操作:計算B*r mod η
[0095]模加操作:計算 B*r mod n-山=B*r mod n_ (r-A) *B mod n = A*B mod n
[0096]當然,也可以根據需要,根據預設的第2個乘法算法進行一個模乘和一個模減操作,得到模方A*B mod η,具體采用何種方式不做限制,只要第二輸出模塊中采用的算法是預設的N個乘法算法中的一個即可,