日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

侧信道实验实验二 S盒DPA侧信道攻击

發(fā)布時間:2023/12/31 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 侧信道实验实验二 S盒DPA侧信道攻击 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

---------------------------------------202/12/19 更新---------------------------------------
在輸入時除了密鑰的遍歷范圍因為DES的S盒的“6進4出“機制導致范圍限定在0-63以外,明文在作為S盒輸入的時候也是被限制在每組長度為64。我將明文數(shù)組長度從1000更新為64后的猜測正確率也是100%。
-------------------------------------------起始內容-------------------------------------------

實驗目的

  • 掌握S盒側信道攻擊的基本原理;
  • 掌握漢明重量攻擊模型;
  • 掌握DPA攻擊基本原理和方法。
  • 實驗人數(shù)

    每組1人

    系統(tǒng)環(huán)境

    Windows

    實驗原理

  • 測量階段,選取隨機數(shù)量明文和設定好的正確密鑰進行異或,得到的6bit結果作為S盒的輸入,S盒的輸出需統(tǒng)計二進制中1的個數(shù),作為漢明重量,所有輸出得到一個漢明重量數(shù)組。
  • 攻擊階段,需要遍歷密鑰的所有可能,每次遍歷都需經歷測量階段,最后得到所有猜測密鑰的漢明重量數(shù)組,且每個都需要計算數(shù)組元素中間值,作為劃分正確密鑰得到的漢明重量數(shù)組的依據(jù),正確密鑰得到的漢明重量數(shù)組劃分成兩個集合,分別計算xH ̄=1∣H∣∑i∈Hxi\overline{x_H}=\frac{1}{\lvert H \rvert}\sum_{i\in H}^{}{x_i}xH??=H1?iH?xi?xL ̄=1∣L∣∑i∈Lxi\overline{x_L}=\frac{1}{\lvert L \rvert}\sum_{i\in L}^{}{x_i}xL??=L1?iL?xi?,其中∣∣||表示集合元素大小,得到差值求均值差DpaValue=xH ̄?xL ̄DpaValue=\overline{x_H}-\overline{x_L}DpaValue=xH???xL??,最后選擇所有差值最大的所對應的猜測密鑰為正確密鑰。
  • 實驗內容

  • 完成Sboxdpa仿真-student.py程序中的空缺部分

    • 補充n、plaintext、keyTrue

    • 補充HWfun函數(shù),返回輸入的漢明重量

    • 補充主函數(shù),得到輸出相應的漢明重量向量

  • 完成Sboxdpa-student.py文件中的空缺部分,即

    • 補充plaintext、power_std

    • 補充DPAfun函數(shù),計算漢明差值

    • 補充主函數(shù),求正確猜測密鑰

  • 實驗測試2組數(shù)據(jù)

  • 實驗步驟

    完善Sboxdpa仿真-student.py程序

    補充變量

    補充n、plaintext、keyTrue三個變量

    n = 9 #數(shù)組長度 plainlist = [41, 35, 62, 4, 33, 44, 22, 46, 18] #明文數(shù)組 keyTrue = 43 #加密所用密鑰

    完善HWfun函數(shù)

    本質上是計算十進制數(shù)轉換成二進制后含1的數(shù)量,則可以采用快速法計算。這種方法運算次數(shù)與輸入n的大小無關,只與n中1的個數(shù)有關。如果n的二進制表示中有k個1,那么這個方法只需要循環(huán)k次即可。其原理是不斷清除n的二進制表示中最右邊的1,同時累加計數(shù)器,直至n為0。

    補充代碼如下:

    def HWfun(num):# 統(tǒng)計輸入num的漢明重量并返回ans = 0if num == 0:return 0while num > 0:num &= (num - 1)ans += 1return ans

    為什么n &= (n – 1)能清除最右邊的1呢?因為從二進制的角度講,n相當于在n - 1的最低位加上1。舉個例子,8(1000)= 7(0111)+ 1(0001),所以8 & 7 = (1000)&(0111)= 0(0000),清除了8最右邊的1(其實就是最高位的1,因為8的二進制中只有一個1)。再比如7(0111)= 6(0110)+ 1(0001),所以7 & 6 = (0111)&(0110)= 6(0110),清除了7的二進制表示中最右邊的1(也就是最低位的1)。

    完善主函數(shù)

    使用表格美化庫完善輸出。

    補充代碼如下:

    if __name__ == "__main__":# 補充:S盒輸出對應漢明重量列表table = pt.PrettyTable()hw_std = []HWout = sboxout(n, plainlist, keyTrue)for i in range(n):hw_std.append(HWfun(HWout[i]))table.add_column('序號',[i for i in range(1,n+1)])table.add_column('明文-十進制',[index for index in plainlist])table.add_column('S盒輸出-十進制', [index for index in HWout])table.add_column('S盒輸出-漢明重量', [index for index in hw_std])print(table)

    程序運行結果

    [外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳

    圖6.1???? 程序Sboxdpa仿真-student.py的表格輸出

    完善Sboxdpa-student.py程序

    補充變量

    我在此程序中采用的plaintlist數(shù)組(明文數(shù)組)是由plainlist = list(np.random.randint(64, size=1000))函數(shù)生成的1000長度的數(shù)組,模擬教材上的運行基數(shù)。同理,power_std數(shù)組(正確密鑰處理得到的漢明重量數(shù)組)同樣長度1000,數(shù)組內的元素展示位置在8.4數(shù)據(jù)統(tǒng)計中,“明文數(shù)組長度為1000”那里。

    完善DPAfun函數(shù)

    Meanfun函數(shù)我有所改動:

    def Meanfun(num):total = 0length = len(num)if length == 0:return 0for i in range(length):total = total + num[i]return total / length

    函數(shù)思想是取使用猜測密鑰處理的漢明重量數(shù)組的中間值作為劃分使用正確密鑰處理的漢明重量數(shù)組的依據(jù),隨后,函數(shù)返回劃分后集合的差值。

    補充代碼如下:

    def DPAfun(n, pstd, ptest):# 以2為界,計算不同漢明重量的集合差值L_list = []H_list = []med = median(ptest)for i in range(n):if ptest[i] <= med:L_list.append(pstd[i])else:H_list.append(pstd[i])return Meanfun(H_list) - Meanfun(L_list)

    完善主函數(shù)

    運行邏輯&思路為遍歷所有密鑰——64個,將明文和每個密鑰異或后的結果作為S盒的輸入,得到S盒的輸出(模擬DES處理流程),并求得64個漢明重量數(shù)組,將64個漢明重量數(shù)組帶入DPAfun函數(shù)進行運算,取DPAfun函數(shù)返回值中的最大值對應的密鑰,即為正確密鑰。

    因為DES的S盒運算是“6進4出”的,明文和密鑰的異或是在進入S盒前,要滿足6位輸入的需求,所以密鑰遍歷是2的六次方次。

    補充代碼如下:

    if __name__ == "__main__":# 猜測密鑰keyList = [i for i in range(64)]DPAlist = []n = len(plainlist)for i in range(64):hw_std = []HWout = sboxout(n, plainlist, i) #S盒輸出for i in range(n):hw_std.append(HWfun(HWout[i])) #漢明重量DPAlist.append(DPAfun(n, power_std, hw_std)) #正確密鑰得到的漢明重量數(shù)組被劃分成兩個集合后的集合均值差final_dict = dict(zip(keyList,DPAlist))print("正確密鑰為:",max(final_dict, key=final_dict.get)) #取最大集合均值差對應的密鑰

    運行結果我放在了總結里,方便進行對比。具體位置在8.4數(shù)據(jù)統(tǒng)計中,其中明文數(shù)組長度為1000測試結果的截圖。

    思考問題

    對分組密碼算法進行DPA攻擊時的基本原理

    DPA攻擊是一種對密碼芯片的泄漏功耗 進行統(tǒng)計分析而恢復密鑰的攻擊方法。DPA攻擊的方法是對大量的曲線樣點進行功耗統(tǒng)計測試 ,即根據(jù) 大量功耗樣本來分析密鑰的值 ,它具有比簡單功耗攻擊更高的強度 。

    攻擊分組密碼算法我認為是攻擊算法所用的S盒,因為S盒是離散處理數(shù)據(jù),像行位移和列變換這種都是線性變換,離散處理的結果不容易觀察出規(guī)律性。DPA攻擊,需要先獲取N次密碼運算后得到的明文(非密碼運算結果),密文,產生的功耗;然后定義一個與密鑰密切相關的分割函數(shù)J(密文,k)和能量消耗依賴很強的d,猜測子密鑰k值,并基于采樣時間點,得到兩個功耗曲線子集合(d=0和d=1);對功耗曲線進行計算,計算平均功耗值從而得到差分功耗曲線;觀察差分功耗曲線,若某個位置出現(xiàn)明細那的尖峰,則表示k猜測正確;猜測正確后根據(jù)密碼算法的子密鑰生成算法逆推密鑰。(不同分組密碼的子密鑰生成算法和密鑰位數(shù)不同,逆推時窮舉搜索次數(shù)不同)

    總結

    猜測正確密鑰思路詳解

    因為DES的S盒運算是“6進4出”的,所以輸出的數(shù)值化為二進制后所含1的個數(shù)范圍為0-4。所以猜測密鑰處理得到的64個漢明數(shù)組的中間值無外乎就0,1,2,3,4五種。但是只有正確密鑰處理得到的漢明數(shù)組進行DPAfun函數(shù)處理后得到的差值最大

    為什么集合均值的差值最大就是正確密鑰?

    猜測密鑰漢明重量數(shù)組的中間值為2時的分析

    2本身作為0-5的中間值,在漢明重量數(shù)組內元素基數(shù)達到一定程度時數(shù)組中間值近乎都是2,我的采用1000長度的明文數(shù)組得到的64個漢明重量數(shù)組的中間值全是2。集合劃分是猜測密鑰漢明重量數(shù)組內元素值小于等于2,正確密鑰漢明重量數(shù)組內的元素就要被劃分到L集合,剩下的劃分到H集合,而影響兩個集合的差值的根本原因是部分元素在兩個集合中的遷移。

    舉例進行解析比較方便理解:(ptest數(shù)組的中間值為2)

    ptsd = [1,2,3,4,4,3,1,2,3,4,3,4,1,2,1,2,……] #正確密鑰得到的漢明重量數(shù)組 ptest = [1,2,3,4,3,4,2,1,1,1,2,2,3,3,4,4,……] #猜測密鑰得到的漢明重量數(shù)組

    將數(shù)組劃分成五段,方便觀看。

    0 1 2 3 4 | 4 3 0 0 1 2 | 3 4 3 4 3 4 | 0 1 2 0 1 2 | ………… 0 1 2 3 4 | 3 4 1 2 2 1 | 0 0 1 1 2 2 | 3 3 3 4 4 4 | …………

    中間值為2的劃分規(guī)則上面說過了我就不贅述了。我將中間值為2的所有ptsd兩集合劃分情況進行了遍歷舉例。

    第一段,ptest數(shù)組和ptsd數(shù)組每一位的對應值都相同,所以不影響劃分后集合的均值差;

    第二段,ptest數(shù)組和ptsd數(shù)組雖然每一位的對應值都不同,但是ptsd數(shù)組劃分后0,1,2都劃分到L集合,3,4都劃分到H集合,對集合的均值差不影響;

    第三段,ptest數(shù)組和ptsd數(shù)組每一位的對應值都不同,原本應該劃分到H集合的4個ptsd數(shù)組元素因為對應位置的ptest的值小于等于中間值2,結果被劃分到了L集合,這就導致L集合的平均值必然增大,H集合的平均值可能減小,集合均值差減小;

    第四段,ptest數(shù)組和ptsd數(shù)組每一位的對應值都不同,原本應該劃分到L集合的4個ptsd數(shù)組元素因為對應位置的ptest的值大于中間值2,結果被劃分到了H集合,這就導致H集合的平均值必然減小,L集合的平均值可能增大,集合均值差減小;

    然后問題又來了,為什么第三、第四段的集合元素劃分會導致兩個集合的“必然”變化和可能變換呢?

    集合均值的“必然”和“可能”變化分析

    首先,我們要明確在漢明重量數(shù)組的中間值為2的情況下,L集合因為集合內元素的最低值為0、最高值為2,其均值范圍為0-2;同理,H集合的均值范圍為3-4。

    第三段情況如下:

    當3,4這種大于原L集合最大均值的數(shù)歸到L集合中時,會導致L集合的均值必然增大;

    失去部分3,4元素的H集合的均值可能變大,變小或不變。

    • 因為3是H集合的最低均值,所以當失去元素3時集合均值會增大或者不變(原H集合全是3)。
    • 因為4是H集合的最高均值,所以當失去元素4時集合均值會減小或者不變(原H集合全是4)。

    第四段情況如下:

    當0,1,2這種小于原H集合最小均值的數(shù)歸到H集合中時,會導致H集合的均值必然減小;

    失去部分0,1,2元素的L集合的均值可能變大,變小或不變。

    • 因為0是L集合的最低均值,所以當失去元素0時集合均值會增大或者不變(原L集合全是0)。
    • 因為1是L集合的中間均值,所以當失去元素1時
      • 集合均值減小——原L集合均值大于1;
      • 集合均值不變——原L集合均值等于1;
      • 集合均值增大——原L集合均值小于1;
    • 因為2是L集合的最高均值,所以當失去元素2時集合均值會減小或者不變(原L集合全是2)。

    綜上來看,第三段的情況下必然會導致L集合的必然增大,H集合三種變化可能性都有,集合均值差總體來看是減小的;第四段的情況下必然會導致H集合的必然減小,H集合三種變化可能性都有,集合均值差總體來看是減小的。

    注意:

    看上面的解釋的時候可能會疑惑,比如第三段情況,L集合均值增大,H集合也有可能增大,那為什么不會出現(xiàn)均值增大的情況呢?

    這種情況在數(shù)組元素基數(shù)足夠大的時候是不用擔心的。當數(shù)組長度無限大時,數(shù)組內0,1,2,3,4這5個元素出現(xiàn)概率是等概的。就像我們投硬幣,擲骰子一樣,基數(shù)足夠大就可以實現(xiàn)。那咱們以這個基礎上再去看,拿情況稍微復雜一些的第四段情況舉例:在基數(shù)足夠大的情況下集合內元素全是唯一值的情況幾乎是不可能的,所以不考慮均值不變的情況,那L集合均值增大減小的概率是對半開的,但是H集合是必然增大的,則綜合來看,集合的均值差必然減小。

    小結:

    所以只有當ptest數(shù)組內的元素和ptsd數(shù)組內的元素一一相等時,兩集合的均值差才能最大,即猜測密鑰猜測到正確密鑰時,兩集合的均值差才能最大。

    第一段或第二段情況可能在ptest數(shù)組中存在部分,但是終究會出現(xiàn)第三段或第四段的情況,導致集合差值減小。

    猜測密鑰漢明重量數(shù)組的中間值不為2時的分析

    猜測密鑰漢明重量數(shù)組的中間值為0,1,3,4的情況在漢明重量數(shù)組元素基數(shù)足夠大時幾乎不可能出現(xiàn),不過在這里也把出現(xiàn)這種情況分析一下。

    其實原因也很簡單,本質上和上面中間值為2時一樣。當中間值為0或1時,就表明數(shù)組中最少一半的值為0或1,但對應位置的正確密鑰漢明重量數(shù)組的元素大概率不可能全是0或1,那大于中間值的猜測密鑰漢明重量數(shù)組對應位置的正確密鑰漢明重量數(shù)組元素全都被劃分到H集合,包括小于3的元素,這就會導致H集合均值的必然減小,L集合均值三種變化皆有可能。這種情況的結論在8.2中已經得出,即集合均值差必然減小。

    同理,當中間值為3或4時,就表明數(shù)組中最少一半的值為3或4,最終會導致L集合均值的必然增大,L集合均值三種變化皆有可能,集合均值差必然減小。

    數(shù)據(jù)統(tǒng)計

    理論說明比較枯燥,也沒有數(shù)據(jù)感受直觀,下面我將展示一些我統(tǒng)計到的數(shù)據(jù):

    測試代碼如下,只需要改動主函數(shù)即可:

    if __name__ == "__main__":table = pt.PrettyTable()guess = []keyList = [i for i in range(64)]n = len(plainlist)for i in range(64):power_std = []HWout_true = sboxout(n, plainlist, i)for j in range(n):power_std.append(HWfun(HWout_true[j]))DPAlist = []for k in range(64):hw_std = []HWout = sboxout(n, plainlist, k)for m in range(n):hw_std.append(HWfun(HWout[m]))DPAlist.append(DPAfun(n, power_std, hw_std))final_dict = dict(zip(keyList, DPAlist))guess.append(max(final_dict, key=final_dict.get))table.add_column('使用密鑰:', [index for index in keyList])table.add_column('猜測密鑰:', [index for index in guess])print('正確率:{:.2%}'.format(len(set(keyList) & set(guess))/64))print(table)

    明文數(shù)組長度為9的情況下,64次猜測密鑰的結果及正確率:

    #示例數(shù)組: [41, 35, 62, 4, 33, 44, 22, 46, 18]

    [外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳

    圖8.1???? 長度9的明文數(shù)組測試結果 明文數(shù)組長度為1000 的情況下,64次猜測密鑰的結果及正確率: #示例代碼 [42, 17, 10, 7, 22, 26, 42, 31, 8, 24, 40, 4, 49, 53, 23, 17, 16, 10, 55, 4, 7, 43, 29, 26, 16, 21, 45, 21, 37, 48, 2, 49, 23, 37, 58, 14, 25, 60, 33, 19, 17, 22, 29, 47, 0, 38, 43, 17, 47, 9, 57, 39, 62, 60, 25, 28, 54, 53, 12, 29, 8, 60, 29, 4, 28, 6, 14, 12, 49, 19, 23, 20, 44, 43, 37, 37, 54, 23, 2, 20, 49, 38, 32, 27, 41, 9, 52, 34, 24, 60, 18, 4, 30, 17, 51, 17, 13, 41, 25, 49, 12, 1, 56, 4, 61, 4, 38, 57, 30, 60, 5, 23, 23, 31, 30, 56, 22, 9, 41, 61, 33, 20, 24, 43, 30, 63, 60, 33, 46, 0, 41, 3, 10, 49, 39, 7, 14, 8, 42, 6, 58, 3, 10, 3, 28, 33, 31, 49, 24, 60, 0, 54, 46, 40, 27, 63, 23, 30, 50, 26, 23, 40, 2, 54, 29, 37, 17, 52, 31, 11, 47, 55, 7, 59, 40, 18, 38, 44, 12, 36, 58, 27, 30, 43, 49, 25, 17, 47, 56, 24, 28, 19, 25, 28, 25, 35, 52, 2, 62, 48, 61, 61, 63, 34, 15, 55, 26, 40, 0, 52, 61, 5, 0, 38, 32, 31, 39, 44, 56, 36, 4, 29, 41, 19, 60, 16, 28, 28, 38, 49, 46, 26, 42, 35, 5, 10, 22, 51, 63, 11, 11, 7, 0, 40, 42, 17, 59, 14, 19, 0, 35, 39, 48, 58, 52, 37, 28, 58, 44, 58, 39, 36, 36, 27, 41, 41, 48, 26, 47, 21, 11, 24, 21, 42, 27, 33, 10, 18, 32, 52, 8, 23, 23, 32, 20, 63, 3, 49, 51, 59, 19, 19, 4, 13, 62, 29, 60, 32, 32, 62, 13, 37, 3, 35, 13, 60, 9, 14, 39, 8, 5, 40, 32, 61, 17, 39, 62, 3, 61, 51, 56, 15, 58, 30, 30, 63, 51, 35, 24, 6, 18, 35, 38, 32, 45, 30, 5, 38, 19, 31, 38, 60, 30, 2, 56, 40, 25, 46, 42, 19, 57, 41, 10, 2, 11, 29, 16, 60, 42, 16, 32, 60, 22, 38, 28, 38, 61, 61, 49, 55, 48, 3, 5, 4, 32, 32, 57, 14, 22, 16, 49, 13, 5, 37, 1, 5, 12, 16, 33, 33, 5, 12, 31, 18, 0, 18, 26, 36, 39, 63, 38, 0, 34, 45, 9, 19, 27, 35, 45, 53, 11, 11, 42, 10, 25, 33, 55, 44, 7, 18, 41, 37, 10, 3, 3, 33, 25, 5, 32, 12, 28, 25, 62, 44, 45, 63, 36, 58, 30, 30, 48, 47, 54, 11, 52, 60, 10, 15, 9, 23, 28, 27, 32, 23, 55, 7, 0, 21, 59, 28, 63, 25, 20, 12, 46, 14, 54, 12, 23, 31, 62, 57, 34, 5, 50, 7, 33, 6, 16, 21, 37, 62, 20, 57, 3, 36, 5, 19, 2, 40, 45, 17, 8, 44, 51, 50, 31, 42, 54, 24, 32, 19, 55, 57, 11, 38, 4, 33, 60, 52, 2, 7, 21, 35, 33, 55, 18, 0, 45, 54, 12, 10, 12, 0, 18, 61, 29, 43, 13, 48, 43, 28, 36, 59, 21, 22, 22, 17, 53, 0, 15, 26, 13, 25, 44, 44, 61, 49, 17, 0, 26, 10, 40, 47, 59, 38, 44, 31, 22, 49, 24, 34, 24, 7, 37, 35, 4, 42, 42, 16, 20, 3, 29, 1, 38, 53, 0, 1, 10, 33, 26, 24, 62, 56, 25, 46, 10, 22, 11, 57, 25, 41, 30, 37, 23, 39, 29, 12, 59, 6, 29, 27, 25, 39, 29, 26, 25, 9, 11, 8, 29, 48, 42, 58, 8, 25, 29, 41, 35, 47, 9, 41, 57, 30, 24, 18, 28, 12, 15, 27, 61, 37, 8, 54, 7, 38, 33, 44, 57, 9, 15, 54, 45, 50, 36, 31, 6, 3, 3, 32, 59, 15, 10, 21, 48, 22, 35, 24, 59, 38, 20, 52, 8, 45, 59, 39, 14, 37, 35, 8, 7, 9, 17, 15, 46, 7, 3, 59, 35, 31, 35, 9, 12, 50, 44, 28, 2, 18, 58, 53, 55, 1, 41, 37, 58, 28, 48, 58, 62, 37, 30, 18, 36, 4, 55, 55, 7, 32, 60, 55, 7, 38, 56, 42, 48, 0, 7, 15, 21, 4, 32, 60, 8, 10, 52, 51, 11, 4, 32, 26, 51, 13, 23, 38, 11, 23, 40, 61, 37, 19, 34, 41, 52, 37, 39, 39, 60, 24, 9, 17, 24, 20, 55, 21, 38, 52, 63, 47, 3, 7, 30, 16, 54, 19, 47, 24, 54, 63, 25, 38, 9, 21, 61, 55, 36, 40, 17, 37, 42, 37, 3, 58, 36, 17, 36, 29, 34, 52, 32, 54, 43, 53, 33, 49, 55, 8, 56, 38, 21, 43, 48, 24, 62, 54, 6, 48, 1, 19, 58, 46, 42, 11, 39, 2, 57, 29, 18, 7, 61, 44, 58, 35, 17, 21, 57, 49, 45, 29, 19, 11, 56, 8, 3, 60, 23, 50, 24, 25, 12, 47, 50, 18, 2, 27, 7, 29, 39, 53, 13, 21, 15, 9, 43, 3, 34, 23, 35, 35, 1, 2, 53, 12, 58, 46, 40, 12, 11, 51, 11, 29, 47, 6, 0, 63, 26, 34, 42, 32, 38, 1, 15, 15, 48, 19, 26, 48, 55, 27, 28, 39, 17, 19, 16, 34, 24, 19, 22, 28, 27, 54, 35, 7, 24, 34, 39, 1, 24, 14, 24, 24, 51, 41, 2, 50, 37, 50, 61, 33, 42, 34, 62, 54, 16, 6, 18, 21, 0, 52, 23, 52, 0, 46, 1, 51, 1, 42, 0, 48, 52, 14, 1, 47, 46, 58, 8, 15, 14, 27, 8, 60, 15, 21, 9, 36, 27, 38, 3, 24, 48, 40, 48, 15, 5, 41, 37, 43, 30, 38, 54, 49, 26, 41, 48, 10, 38, 47, 62, 54, 53, 30, 62, 49, 5, 18, 2, 37, 28, 9, 53, 24, 37, 56, 41, 35, 9, 6, 46, 23, 42, 49]

    圖8.2???? 長度1000的明文數(shù)組測試結果

    為追求嚴謹,我把長度1000的明文數(shù)組也放上了,雖然很占地方,長度9和長度1000這兩個數(shù)組也是我在此次實驗中一直使用的明文數(shù)組。

    由代碼運行結果可知,長度1000的明文數(shù)組驗證結果是100%的,長度1000的明文數(shù)組驗證結果是48.44%。明文數(shù)組長度越小,其得到的漢明重量數(shù)組的中間值和數(shù)組內元素分布越不“規(guī)范”,猜測密鑰結果并不穩(wěn)定。

    我接著測試了10組長度為9的隨機明文數(shù)組,10組長度為1000的隨機明文數(shù)組,得到的結果如下:

    明文數(shù)組長度9:

    [35.94%, 59.38%, 43.75%, 65.62%, 50.00%, 51.56%, 70.31%, 43.75%, 35.94%, 56.25%] 平均正確率:51.25%

    明文數(shù)組長度1000:

    [100.00%, 100.00%, 100.00%, 100.00%, 100.00%, 100.00%, 100.00%, 100.00%, 100.00%, 100.00%] 平均正確率:100.00%

    小結:

    事實勝于雄辯。


    校內實驗,未完整展示所有代碼。若文中有描述錯誤的地方,歡迎斧正。

    總結

    以上是生活随笔為你收集整理的侧信道实验实验二 S盒DPA侧信道攻击的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。