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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

侧信道攻击实验四 AES CPA 攻击

發布時間:2023/12/31 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 侧信道攻击实验四 AES CPA 攻击 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

參考大佬文章,收益匪淺
因為這是課內實驗,所以我并沒有把所有代碼都上傳,參考的文章里代碼很全。

實驗目的

  • 掌握AES算法能量跡構造;
  • 掌握AES算法CPA攻擊基本原理。
  • 實驗人數

    每組1人

    系統環境

    Windows

    實驗原理

    CPA是利用密碼芯片的假設模型,預測其加解密時的功耗大小,然后和實際測量的功耗大小進行相關性分析推測密鑰。CPA攻擊通常采用漢明重量模型,所謂漢明權重就是一個碼字中1碼元的總數目,漢明權重越大,芯片運算時的功耗就越大。

    實驗內容

  • Readfile-student.py:AES 能耗波形文件讀入與存儲,“Save2Npy”函數輸出能量跡trace數據。

    • 分析程序讀入的pts、pcts、pns分別是什么數據,類型是什么,維數是多少
  • CPA-student.py:根據漢明重量模型恢復16個字節密鑰。

    • 補充相關系數的計算代碼,并取最大值記為maxcpa
    • 解釋每個生成圖像的含義(橫縱坐標、波形、尖峰等)
    • 打印輸出恢復的所有正確密鑰bestguess
  • 分析能量跡對密鑰恢復的影響:10、50、100、150、200、240條能量跡能夠恢復的正確密鑰的字節數和位置分別是什么,并分析其原因。

  • 實驗步驟

    pts、pcts、pns分別是什么數據、類型、維數

    pts

    圖6.1???? pts部分數據

    數據:明文

    類型:數組

    維數:二維(250,16)

    pcts

    圖6.2???? pcts部分數據

    數據:明文,密文

    類型:數組

    維數:三維(250,2,16)

    pns

    圖6.3???? pns部分數據

    數據:能量跡縱坐標

    類型:數組

    維數:二維(250,10000)

    完善相關系數的計算代碼

    hwlist = np.zeros(numtraces)語句之前的代碼是程序自帶的,最外層的for循環的目的是遍歷密鑰的字節位置,第二層的for循環是遍歷所有密鑰的可能性。本次實驗需要使用能量跡的明文和密鑰異或運算并執行后續代碼,所以還需要設置一層循環,使得對應設置數量的能量跡明文可以和密鑰進行運算,求得漢明重量,代碼如下。

    hwlist = np.zeros(numtraces) #初始化數組 for tnum in range(0, numtraces):hwlist[tnum] = HW[intermediate(pt[tnum][bnum], kguess)]

    注意一點pt二維數組(程序另有設置明文數組為pt)的取值,pts明文數組中250表示明文數量,而16是明文的size,所以明文數組長度為16。

    因為是漢明重量模型,按照以往實驗的思路,下一步是根據相關系數計算公式
    ri,j=∑d=1D[(hd,i?hi ̄)(td,j?tj ̄)]∑d=1D(hd,i?hi ̄)2∑d=1D(td,j?tj ̄)2{r_{i,j}} = \frac{{\sum\nolimits_{d = 1}^D {\left[ {\left( {{h_{d,i}} - \overline {{h_i}} } \right)\left( {{t_{d,j}} - \overline {{t_j}} } \right)} \right]} }}{{\sqrt {\sum\nolimits_{d = 1}^D {{{\left( {{h_{d,i}} - \overline {{h_i}} } \right)}^2}} \sum\nolimits_{d = 1}^D {{{\left( {{t_{d,j}} - \overline {{t_j}} } \right)}^2}} } }} ri,j?=d=1D?(hd,i??hi??)2d=1D?(td,j??tj??)2?d=1D?[(hd,i??hi??)(td,j??tj??)]?
    推導出邏輯代碼。

    這部分代碼我之前有寫過,不過那時公式邏輯代碼組成的函數輸入對象雖然也是數組(準確來說應該說是列表),但是體量沒有這次仿真實驗做的大,而且numpy函數生成的數組在類型上就和列表就不一樣,所以代碼需要重新編寫。為了代碼流程顯得模塊化,我將上述計算公式模塊化如下:
    ri,j=molesumdensum1×densum2{r_{i,j}} = \frac{molesum}{\sqrt{densum1 \times densum2}} ri,j?=densum1×densum2?molesum?

    • 第一步依舊是是初始化,只不過是數組的初始化;

      # 初始化數組——簡化計算流程 molesum = np.zeros(numpoint) densum1 = np.zeros(numpoint) densum2 = np.zeros(numpoint)
    • 第二步理論上來說可以直接運算了,不過先計算平均值可以減少代碼冗余。分別計算假設值和軌跡上所有點的漢明重量的平均值。

      #當前猜測密鑰參與運算的漢明總量數組均值 h_mean = np.mean(hwlist, dtype=np.float64) #采集線上的電壓均值,共10000份 t_mean = np.mean(traces, axis=0, dtype=np.float64)
    • 第三步開始正式計算,累加次數取決于使用的能量跡數量,計算結束后將相關系數的最大絕對值存入maxcpa列表中。

      for i in range(0, numtraces):h = (hwlist[i] - h_mean)t = traces[i] - t_meanmolesum = molesum + (h * t)densum1 = densum1 + h * hdensum2 = densum2 + t * tmaxcpa[kguess] = max(abs(molesum / np.sqrt(densum1 * densum2)))

      可能陌生的地方就是第三行的t值,其實t在這里是個數組,這一行的代碼運算也是數組之間的運算。

      圖6.5???? 一維數組t

      圖6.5???? 二維數組traces

      第三行代碼還可以替換為t = traces[i,:] - t_mean

    • 將256種密鑰遍歷測試后,將maxcpa列表中的最大值儲存,作為所猜測的當前密鑰字節數值。

      bestguess[bnum] = np.argmax(maxcpa)

    完整代碼如下(打印語句不放):

    for bnum in range(0, 16):#bnum定義所攻擊的字節位置maxcpa = [0]*256#記錄cpa最大值的向量for kguess in range(0, 256):#補充相關系數的計算代碼,并取最大值記為maxcpa#計算猜測密鑰參與運算形成的漢明重量hwlist = np.zeros(numtraces) #初始化數組for tnum in range(0, numtraces):hwlist[tnum] = HW[intermediate(pt[tnum][bnum], kguess)]# 根據相關系數計算公式推導出邏輯代碼# 初始化數組——簡化計算流程molesum = np.zeros(numpoint)densum1 = np.zeros(numpoint)densum2 = np.zeros(numpoint)#當前猜測密鑰參與運算的漢明總量數組均值h_mean = np.mean(hwlist, dtype=np.float64)#采集線上的電壓均值,共10000份t_mean = np.mean(traces, axis=0, dtype=np.float64)#正式計算for i in range(0, numtraces):h = (hwlist[i] - h_mean)t = traces[i] - t_meanmolesum = molesum + (h * t)densum1 = densum1 + h * hdensum2 = densum2 + t * tmaxcpa[kguess] = max(abs(molesum / np.sqrt(densum1 * densum2)))bestguess[bnum] = np.argmax(maxcpa)

    程序運行結果

    正確密鑰bestguess打印輸出如下(使用能量跡為250條):

    圖6.6???? 正確密鑰—250條能量跡

    生成圖像如下:

    圖6.7???? 仿真能量跡-250條能量跡數據

    分析圖像的含義

    以此圖為例:

    圖6.8???? 仿真能量跡-50條能量跡

    橫坐標:所有可能的密鑰

    縱坐標:相關系數絕對值

    波形:波形可以反映算法的處理周期和處理速度

    尖峰:在此實驗中,尖峰代表著猜測密鑰和正確結果的相關性,尖峰值越大,相關性越高

    分析能量跡對密鑰恢復的影響

    分別采用10、50、100、150、200、240條能量跡。

    圖6.9???? 六種情況仿真能量跡

    以250條能量跡的正確密鑰輸出為正確標準,對此六種情況下的正確密鑰輸出進行判定,結果如下。

    能量跡條數恢復正確密鑰字節數正確密鑰位置(0起始)
    100
    5011
    100121,2,3,5,6,7,8,9,12,13,14,15
    150131,2,3,5,6,7,8,9,10,12,13,14,15
    200150,1,2,3,4,5,6,7,8,9,10,12,13,14,15
    24016全部

    原因簡單來說就是,參考基礎不夠大,無法生成普適規律。參考基數越大,個例對整體判斷的影響越小;反之,越大。

    思考問題

    如果利用比特模型和漢明距離模型,應該如何進行攻擊?

    漢明距離模型

    計算數字電路在某個特定時段內,0→1轉換和1-→0轉換的總數。然后,利用轉換的總數來刻畫電路在該時段內的能量消耗。把對整個電路的仿真劃分為小的時間段,就可以生成一-種能量跡。這種能量跡中不包含具體的電壓值,而是包含每個時間段內電路發生轉換的次數。

    比特模型

    攻擊者通過側信道可以得到密碼算法中間狀態的某個比特,將該側信道泄露的消息與立方攻擊相結合從而恢復密鑰信息。

    總結

    收獲之一就是明白了在給定能量跡數據集的條件下,如何進行仿真實驗。

    前兩次側信道仿真實驗使用的n個明文其實代表的就是n條明文的意思,而不是一條明文里的n個數據,這點不弄懂是沒法繼續理解的。然后要明確的點是明文整體和密鑰進行異或,不會出現部分字節不異或的情況,所以這種思想帶入AES的CPA仿真實驗中的結果就是,參與運算的每個能量跡,輪到取第幾位時統一采集,逐個和猜測密鑰異或并計算漢明重量形成長度為明文數量的數組;相同的,能量跡的電壓值也是需要縱向劃分數組,用圖片理解這里縱向劃分的意義:

    pic_center 圖8.1???? 能量跡數據集結構圖

    這是能量跡數據的結構示意圖,每條明文都有屬于自己的n個采集的電壓值(黑色線段),之前明文被采集和密鑰異或其實也是縱向劃分,和這個結構是一樣的。比如取每條明文的第一個字節/電壓值,就是在縱軸方向上把每條明文的第一項數據切割出來,這樣就形成兩個具有線性關系的整體,漢明重量數組和電壓值數組,然后兩個整體去計算相關系數,順理成章地完成了仿真實驗流程。

    這么看起來其實也沒什么難的,原理看似很簡單,其實真的簡單,但是簡單卻不一定能理解,做前兩次仿真實驗時以為自己懂了,到了最后一次實驗數據“正規“后,往常不是很清晰的知識點就會拖累實驗進度,等再次搞懂后,發現其實并沒有一開始做時那么難。

    之前的仿真實驗都是基于白盒的仿真實驗,S盒的運算公式和盒內部數值都是公開的,所以相對容易。這次實驗比之前的實驗從更正規的方式去做了一遍仿真實驗,看到仿真能量跡畫出來的時候還是很激動的。

    注意點

    代碼邏輯上我覺得重點要理解的就是“兩層循環嵌套”,即最外層的密鑰16字節循環 + 遍歷密鑰循環,至于剩下的都是小循環而已,不對整體結構上產生影響。

    還有要理解能量跡數據的各個屬性,雖然在代碼中能量跡數據看起來很輕松的就被調用使用,但是難點是在將能量跡數據從文件中提取出來時知道其中是什么數據,怎么用,何時用。

    總結

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

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

    主站蜘蛛池模板: 五月激情婷婷在线 | 日韩精品在线一区二区 | 中文日韩在线 | 亚洲福利一区 | 91成人免费在线观看 | 91美女片黄在线观看 | 久久精品在线观看 | 国产av人人夜夜澡人人爽麻豆 | 成人黄色一级片 | 国产第4页 | 亚洲www视频 | 久久噜噜色综合一区二区 | 欧美在线一二 | 黄色电影在线视频 | 婷婷综合久久 | 国内精品视频一区二区三区 | 国产人人草 | 国产精品一区电影 | 国产黄色一区二区三区 | 少妇专区 | 欧美女人交配视频 | 啪啪免费网站 | 岛国一区二区三区 | 色婷婷婷婷色 | 丰满少妇一区二区三区 | 巨乳免费观看 | 桃色在线视频 | 午夜精品久久久久久久蜜桃 | 亚洲国产欧美精品 | 熟女人妻在线视频 | 精品久久伊人 | 欧美在线va | 一级特黄色大片 | 久久亚洲影院 | 国产人妻精品久久久久野外 | 人妻巨大乳一二三区 | 色网站免费在线观看 | 大又大粗又爽又黄少妇毛片 | 日日碰狠狠躁久久躁蜜桃 | 久久精品人人做人人爽 | 天天高潮夜夜爽 | 午夜少妇av | 在线免费日韩av | 91亚洲天堂 | 国产在线观看99 | 毛片网站免费在线观看 | 亚洲免费国产视频 | 最新91视频| 国产一线二线三线在线观看 | 天天久久综合网 | 日本一区二区视频在线观看 | 亚洲三级视频 | 枫可怜av| 厕拍极品 | 日韩视频在线观看免费 | 777色婷婷| 日韩毛片在线免费观看 | 精品国产色 | 日本熟妇毛茸茸丰满 | 91精品国产乱码久久久张津瑜 | 白白色2012年最新视频 | 农村寡妇一区二区三区 | 在线观看aa | 超碰在线观看97 | 99看片| 国产乱淫片视频 | 亚洲国产成人91porn | 波多野结av衣东京热无码专区 | 性久久久久久久久久久久 | 免费国偷自产拍精品视频 | 日韩精品字幕 | 久久性精品 | 成人av综合网 | 久久婷婷一区二区 | 亚洲欧美视频在线播放 | 调教丰满的已婚少妇在线观看 | 大尺度摸揉捏胸床戏视频 | 91精品国产手机 | 亚洲熟区 | 国产欧美精品一区二区三区 | 国产日产精品一区 | 在线观看av日韩 | 国产精品三级在线 | 亚洲精品www. | 精国产品一区二区三区a片 国产精品第一 | 91黑丝在线观看 | 91精品视频免费在线观看 | 色撸撸在线 | 中文字幕一区三区 | 欧美一区二区二区 | 国产伦精品一区二区三区免费 | 亚洲91网| 另类国产| 午夜爱爱毛片xxxx视频免费看 | 男人的天堂在线视频 | 亚洲free性xxxx护士白浆 | 男人操女人免费视频 | 色777| 中文字幕av一区二区三区人妻少妇 |