?

面向典型處理器架構的代碼級側信道仿真特性研究*

2024-01-11 11:00李東方劉詩宇
密碼學報 2023年6期
關鍵詞:寄存器代碼指令

楊 光, 李東方, 沈 煒, 王 紀, 劉詩宇

北京計算機技術及應用研究所, 北京100854

1 引言

側信道分析[1]是一類基于密碼實現漏洞而發起的攻擊方法,以最為經典的能量側信道分析為例,其基本原理是CPU 處理寄存器、總線中數據比特翻轉的能量變化可能泄漏數據, 所以電路功耗與寫入寄存器數據的漢明重量近似呈線性相關[2].如圖1 所示, 通過分析來自目標設備的功耗軌跡或電磁輻射信號以及相應的明文和密文數據集合, 側信道分析從硬件系統中提取加密密鑰從而破解目標設備.與其它方法相比,側信道分析具有攻擊力度大、隱蔽性強、通用性高等優點, 對密碼實現的實際物理安全性構成了極大威脅,引起了學術界、工業界和測評界的廣泛關注.

圖1 側信道分析示意圖Figure 1 Overall workflow of side channel analysis

在實際的工程實踐中, 對密碼產品的側信道評估往往需要使用昂貴的專用采集和分析軟件, 對人員專業素質和經驗有較高要求.受制于接口調試、物理泄漏側信道篩選等眾多軟硬件協同問題和實際工程經驗限制, 對待分析設備的抗側信道能力評估將經歷算法設計-代碼實現-編譯調試-物理側信道信息采集-側信道分析與評估等若干步驟, 此外, 關于側信道分析的加密算法評估通常在產品設計驗證周期的末尾執行,如果存在安全缺陷, 將對產品實際推出時間產生相當大的影響.

傳統的側信道安全性評估方法主要通過在實際芯片或設備上采集和測量泄漏信息來評估側信道風險,這種評估方案存在以下特點:

(1) 需要大量硬件采集設備, 購置成本高

對密碼產品的側信道安全性評估需要硬件采集設備支持, 如高精度示波器、電磁/電流探頭、信號濾波器等, 這些硬件采集設備價格較為昂貴, 且配置項復雜.以國外某側信道設備提供商產品為例, 其基礎側信道評估設備售價數百萬人民幣, 若進一步考慮測試人員的進階培訓費用, 整體購置成本將更高.

(2) 物理采集數據, 噪聲影響分析結果

由于使用物理條件限制, 通過硬件采集設備測量的物理量不可避免地含有噪聲干擾, 這將增加后續統計分析的樣本觀測量和計算量, 并且對算法的精確性和魯棒性也提出了更高的要求.因此, 由于物理量統計特性和未知的噪聲特點, 對實際采集得到的電磁泄漏或功耗軌跡需要使用多種復雜的分析手段, 對攻擊算法選擇和人員經驗提出了更高的要求.

(3) 耗費人力物力, 評估周期較長

在工程實踐中對待測設備的側信道安全性評估常受軟硬件協同問題和人員專業經驗限制, 需要根據目標待測設備對采集硬件和分析軟件多次適配調試, 消耗人力物力, 評估周期通常延續數周.從整體上看, 整個測評流程靠近設計測試周期的末端, 一旦檢測出存在側信道安全隱患, 將對整個密碼產品設計開發及測試進度產生很大影響.

(4) 泄漏源頭不可知, 依賴人員經驗

傳統的側信道安全性評估依靠實際測量的側信道物理量進行分析與評估, 對泄漏源頭的定位局限在實際探測的物理量層面, 需要根據待測算法、待測設備實現特征和以往經驗, 推測導致泄漏的實現細節, 無法準確將泄漏源頭定位至具體的軟件源代碼.

為了解決傳統側信道分析依賴硬件采集設備、檢測流程靠后等問題, 學術界提出代碼級側信道仿真分析技術, 其基本原理是通過監測記錄密碼軟件代碼在處理器運行期間的內存地址、寄存器值等信息, 模擬代碼執行過程中可能發生的泄漏.2016 年, Bos 等人[3]提出差分計算攻擊(differential computation analysis, DCA) 用于破解Chow 等人提出的白盒密碼方案[4], 利用動態二進制工具框產生軟件執行能量跡(如關于被訪問內存地址的信息), 該方法能夠自動化從白盒實現中提取密鑰信息, 無需了解白盒設計的特定知識, 速度更快, 本質上可以看做軟件版本的差分能量攻擊(differential power analysis, DPA)[1].Allibert 等人[5]同樣使用動態二進制插樁工具DBI 進行一階和二階差分計算攻擊.2018 年, Bouvet 等人[6]使用動態調試工具對運行在X86 處理器上密碼軟件的寄存器信息進行檢測, 并能夠成功在仿真能量跡上檢測出泄漏點, 并定位泄漏位置至匯編代碼甚至源代碼.Facon 等[7]通過代碼調試器采集記錄在代碼執行過程中發生的所有位修改(寄存器、內存內容、標志、程序計數器) 作為能量跡的仿真模擬, 能夠直接訪問變量的值.Weiser 等人[8]提出基于地址的能量跡分析框架, 用于檢測程序二進制文件中的基于地址的側信道泄漏.通過了解相關工作可以發現, 使用代碼級側信道仿真分析技術, 仿真生成的能量跡沒有物理采集噪聲的影響, 無需根據目標設備假設泄漏模型, 能夠將側信道安全性評估在檢測流程中提前, 并允許在軟件開發過程中同時加入側信道安全性評估, 該類攻擊方法框架見圖2.

圖2 代碼級側信道仿真分析技術示意圖Figure 2 Overall workflow of code level side channel simulation

綜合對比傳統側信道分析和代碼級側信道仿真分析技術, 可總結代碼級側信道仿真分析技術具有如下優點, 詳情見表1.

表1 傳統側信道評估和代碼級側信道仿真分析的對比Table 1 Comparison between side channel analysis and code level side channel simulation

(1) 節省測試成本.相較于傳統的側信道評估方法(依賴檢測硬件和評估軟件), 本技術無需購置昂貴采集硬件設備, 只需在普通計算機上即可進行快速仿真和測試.

(2) 分析結果更精確.相較于物理硬件采集, 使用軟件仿真可以消除噪聲(物理采集不可避免帶來噪聲), 從而提高準確性并減少采集數據量.

(3) 加快開發進度.傳統側信道評估方法檢測流程靠后, 本技術無需頻繁軟硬件調試, 能夠加快測試進度, 做到開發與檢測同時迭代進行.

(4) 泄漏代碼位置可定位.相較于傳統側信道評估方法, 本技術可直接由能量跡泄漏點反向定位至存在泄漏風險的源代碼所在行, 做到泄漏代碼的精確定位.

(5) 可跨平臺.只需根據目標處理器架構交叉編譯源代碼, 即可仿真目標處理器架構上的泄漏特性.

然而, 已有的代碼級側信道仿真分析研究成果多局限于單一處理器架構上, 在多種處理器架構上的研究成果不足, 尚未見到對主流多種處理架構的代碼級側信道仿真有效性評估結果.因此, 本文在已有研究基礎上, 在X86、ARM、MIPS、PowerPC、SPARC 等5 種主流處理器架構方面進行拓展, 利用代碼交叉編譯及處理器虛擬化技術, 探究對比在不同處理器架構下代碼級側信道仿真的特性.

2 基于仿真的C 代碼級側信道泄漏能量跡采集

在實際的側信道評估中, 需要通過專門的采集設備測量被測設備的電磁或功耗曲線等物理量從而識別分析潛在的信息泄漏, 該過程耗時且具有挑戰性.首先, 需要采集設備(示波器、探頭、信號放大器等), 且要求技術人員具備相應的理論知識和實操經驗.其次, 要評估的代碼需要嵌入到最終產品或評估板上, 評估流程靠后, 對開發完成度要求較高.

本文采用一種基于仿真模擬的C 代碼級側信道泄漏能量跡采集技術, 技術框架見圖3.具體方法可以細分為以下幾個步驟:

圖3 代碼級側信道泄漏能量跡采集流程圖Figure 3 Detailed workflow of code level side channel simulation

步驟一: 給定目標算法的C 代碼實現, 確定程序輸入輸出接口.多次變換程序輸入, 動態執行程序文件, 以記錄在不同輸入條件下的寄存器值變化情況.

步驟二: 對目標代碼進行交叉編譯.可根據目標實現架構使用GCC (GNU 編譯器套件) 家族編譯器對目標實現進行編譯, 并附上調試信息.編譯完成后, 將生成二進制可執行程序.

步驟三: 根據處理器目標架構的不同, 搭建QEMU (quick EMUlator) 處理器仿真環境, 在宿主處理器上仿真目標處理器, 使交叉編譯后的程序文件能夠運行在宿主處理器上.

步驟四: 使用調試器匯編級調試并記錄所有寄存器和程序計數器(PC) 數據.為了記錄由給定二進制文件操作的所有數據, 使用GDB (GNU 項目調試器) 作為匯編級調試器.為了識別所有潛在的泄漏, 記錄過程應盡可能詳盡.針對每次加密操作, 每次匯編指令改變, 程序計數器(PC) 將會記錄下一條指令的地址, 此時仿真能量跡所有的內部數據(如PC、寄存器等) 并記錄, 生成日志文件以供后續分析使用.例如,在X86 架構64 位處理器執行的情況下, 系統授權可訪問的內部數據如表2 所示.

表2 X86_64 架構可被合法訪問的數據列表Table 2 Registers of X86_64 architecture that can be accessed legally

步驟五: 變換不同輸入, 重復步驟三、步驟四.針對N次加密, 可重復步驟三、步驟四N次, 生成包含N項日志文件的數據庫, 每項日志包含程序執行中所有信息, 包含原始代碼及對應行、匯編代碼及對應行、寄存器狀態數據及指令地址(程序計數器), 作為后續解析生成仿真數據及逆向代碼定位的依據.

步驟六: 解析調試信息并生成仿真數據.對步驟三、四生成的調試文件進行解析, 利用語義分析對匯編級代碼進行驗證.針對的值泄漏模型, 分析匯編程序中每條指令的目標寄存器內容的表達式, 進行正則匹配提取出寄存器存儲的數值信息, 并提取當前指令地址作為后續預處理和逆向代碼定位的依據.對每次加密, 能夠根據其對應的調試日志文件生成一條仿真能量跡, 該仿真能量跡包含同一時刻(根據指令地址)所有寄存器的64 位比特信息.如對步驟五生成的N項日志文件進行解析, 則可生成N次加密對應的N條能量跡仿真數據, 生成數據集, 用于后續側信道分析與評估.

如圖4 所示, 以X86 累加器寄存器rax (在算術操作中用于存儲結果和函數返回值) 為例, 為仿真能量跡AES-128 C 程序執行過程中rax 寄存器在AES 加密第一輪中的狀態值變化情況.

圖4 X86 平臺下AES-128 Stagegate #1 C 代碼實現仿真能量跡rax 寄存器生成的一條仿真能量跡Figure 4 A simulated trace acquired from AES-128 Stagegate #1 under X86 architecture

從圖中可以清晰地看到在AES 計算第一輪時的四個函數, 如字節替代、行移位、列混淆、輪密鑰加等操作, 以及一個密鑰編排計算函數, 執行下一輪子密鑰的計算.從圖中可以發現, 使用該仿真方法生成能量跡具有實際的可操作性, 能夠避免因物理采集的限制和實際操作人員的經驗導致的實際側信道信息測量困難耗時等不利因素, 更有利于探究代碼本身的抗側信道攻擊能力.

3 仿真能量跡的對齊預處理

為了減少數據在時間上的偏移和冗余數據對后續分析速度的影響, 有必要進一步對仿真數據集進行對齊預處理.

由于程序執行過程中條件分支的影響, 不同輸出可能導致程序執行出現不同的路徑, 進而在匯編代碼級別上執行不同數量的匯編指令, 從而導致程序在時間維度的執行出現不對齊不同步的現象, 并進一步可能出現影響安全性的時間隱通道, 進而攻擊者通過計時攻擊可能恢復出敏感數據.因此, 有必要對仿真數據進行對齊預處理, 一是為了后續在垂直振幅方向上進行泄漏檢測和側信道分析嘗試恢復密鑰, 二是可能檢測出隱藏的時間隱通道進而對代碼進行常數時間執行的修改.

傳統的能量跡對齊根據分析能量跡泄漏值在時域和頻域的分布來實現, 由于在本文中, 所提的基于仿真的C 代碼級側信道泄漏能量跡采集技術能夠在集采寄存器數據的同時使用PC 記錄當前指令的地址,所以無需使用傳統對齊方法.使用程序計數器(PC) 以重新同步對齊數據泄漏的仿真能量跡.其基本原理是, PC 存放下一條指令所在單元的地址, 程序運行時完成第一條指令的執行, 而后根據PC 取出第二條指令的地址, 如此循環, 執行每一條指令.當執行一條指令時, 首先需要根據PC 中存放的指令地址, 將指令由內存取到指令寄存器中, 此過程稱為“取指令”.與此同時, PC 中的地址或自動加1 或由轉移指針給出下一條指令的地址.當變換程序輸入, 再次執行程序運行到某處指令時, 相同的PC 意味著相同的匯編指令, 也即相同的操作.所以可以根據PC 作為程序執行流的標簽, 對PC 進行同步, 即代表對程序執行流的同步.反應在仿真數據上, 即對仿真數據在垂直時間方向上的對齊, 消除由于分支執行導致的在相同的時刻兩次執行運算數值的不一致.

舉例說明, 在程序中引起能量跡數據不對齊的代碼可能出現在以if (condition){···}else{···}為結構的條件分支中, 如在AES-128 代碼實現列混淆操作時, 可能會出現如圖5 條件判斷代碼.

圖5 Stagegate #1 AES-128 實現中條件分支代碼示例Figure 5 Sample code of condition branch in source code of Stagegate #1 AES-128

該部分代碼為MixColumn 函數調用的子函數xtime, 該部分條件判斷代碼if (x& 0x80) 在匯編代碼層級將編譯產生匯編指令jns, 表示條件跳轉指令, 程序將根據MSB(x)=0 判斷是否跳轉, 從而后續匯編指令運行條數不一致, 導致該部分寄存器數據產生時間上的不同步, 整體能量跡出現不對齊現象.另一方面, 該條件分支也可能因為非恒定時間執行產生時間隱通道泄漏.

當應用基于仿真的C 代碼級側信道泄漏能量跡采集技術重復采集多條仿真數據時, 可能會由于程序中條件分支的影響出現不同仿真數據峰值不對齊, 特別是隨著樣本點不對齊的疊加, 在能量跡后段不對齊現象將累加而更加明顯.如圖6 所示, 采集十條能量跡數據在圖中灰色線條顯示, 并計算其均值和方差, 如圖6 中藍色線條和黃色線條顯示.可以發現, 在字節替代部分, 能量跡在時間上完美對齊, 均值和方差曲線的峰值與能量跡曲線峰值重合; 而在后段列混淆部分, 能量跡峰值不重合, 均值和方差均值不重合, 說明此處存在能量跡不對齊現象, 需要對齊處理進行校正.只有當所有數據集的PC 序列都相同時, 能量跡才能正確地同步對齊.

圖6 十條仿真能量跡及均值方差Figure 6 Ten sample traces, average trace and variance trace

由于程序計數器PC 地址唯一確定仿真功耗的時間信息, 所以根據PC 地址確定對齊信息不難實現.為了減少時間不同步對仿真能量跡不對齊的影響, 可以根據數據集中PC 出現的頻數判斷是否出現條件分支, 進而對多余分支進行剪裁去除.

根據以上對齊算法思路, 可以完全消除由于時間因素引起的數據不對齊, 從而便于后續的密鑰恢復分析.這里, 同樣以X86 平臺下AES-128 C 代碼實現為例, 見圖7, 經過對齊預處理后, 可以發現, 在列混淆部分數據尖峰不再分散, 能量跡均值和方差在能量跡后半段不再出現縱向衰減和橫向擴散.

圖7 十條仿真能量跡及均值方差(經過對齊)Figure 7 Ten sample traces, average trace and variance trace (trace synchronized)

4 基于信息相關性的代碼級側信道仿真分析

相關能量分析(CPA) 是計算曲線集合與預測值的皮爾遜相關系數.相關系數的值為?1 到1, 與1越接近說明相關性越大, 密鑰猜測的正確性也越高.如果選擇的泄漏模型與實際設備能耗相吻合, 相關性系數就為1.

圖8 展示了對上節對齊預處理前后X86 平臺下AES-128 C 代碼實現rax 寄存器的100 條仿真能量跡進行相關分析得到的相關系數曲線.

圖8 100 條仿真能量跡的CPA 攻擊結果Figure 8 Result of CPA against 100 traces

未對齊前, 因為列混淆xtime 中if 語句的存在帶來的時間差異, 列混淆處的泄漏被水平分散, 正確密鑰的相關性峰值僅為0.5 左右, 與錯誤密鑰的灰色曲線相關性峰值差別不大; 采用對齊預處理后, 正確密鑰的相關性峰值為1.0, 與錯誤密鑰的灰色曲線相關性峰值差別巨大.由此可見, 可以用相關性判斷仿真能量跡的對齊效果.

5 泄漏點源代碼反向溯源

通過前期的仿真能量跡采集, 能夠在記錄存儲寄存器信息時同步記錄當前指令的地址、對應的匯編代碼以及源代碼, 從而能夠實現仿真數據-指令-代碼的精確映射.對于生成的仿真能量跡數據集, 通過側信道分析和評估技術, 能夠檢測側信道泄漏量的大小并嘗試攻擊恢復密鑰, 在數據端定位泄漏所在樣本點, 從而反向映射找到泄漏所在指令, 進而映射至源代碼存在泄漏風險所在代碼片段.

例如, mov 和movzbl 指令在列混淆MixColumn 操作中被經常使用, 其將數據由一個寄存器拷貝至另一個寄存器, 在此過程中就有可能發生側信道信息泄漏.通過在仿真能量跡中檢測并定位發生泄漏的PC, 就能夠反推至源代碼片段, 從而給出該代碼片段存在側信道泄漏風險的提示.

通過不斷改進迭代, 重復仿真-預處理-分析-漏洞定位流程, 直到確認在代碼開發流程中對代碼進行了相應的抗側信道攻擊防護, 能夠提高側信道評估的速度, 降低其實施難度, 整體流程如圖9 所示.

圖9 代碼側信道漏洞逆向定位及改進流程Figure 9 Work flow of vulnerable code location in code level side channel simulation

6 實驗與分析

本文所選取的AES 實現為CHES 2016 CTF 白盒密碼競賽中的AES-128 樣例實現Stagegate#1[9],本機處理器為Intel(R)Core(TM)i5-7300HQ CPU@2.50 GHz,內存為16 GB,操作系統為64 位Ubuntu 18.04, gcc 編譯器版本為7.5.0, QEMU 仿真器版本為2.11.1, gdb-multiarch 調試器版本為8.1.1, 使用Python v3.9.1 處理和分析數據.實驗目的是探究該實現在不同架構下的代碼級側信道仿真是否有差異性.

詳細實驗設置如表3 所示, 實驗原理具體可參見第2、3、4 節.實驗分為5 組, 分別對X86、ARM、MIPS、PowerPC、SPARC 等5 種主流處理器架構下的代碼級側信道軟件仿真進行實驗驗證, 選取處理器位數為32 位或64 位.由于QEMU 仿真器利用動態代碼翻譯機制來執行不同于主機架構的代碼, 所以能夠在宿主X86 處理器上運行交叉編譯的目標處理器架構代碼.為了排除gcc 編譯器優化(循環優化、分支優化、寄存器分配等) 的影響, 這里統一使用默認gcc 優化選項O0, 即不進行優化.

表3 多種處理器架構下的代碼級側信道軟件仿真設置Table 3 Experiment setups of code level side channel analysis under multiple architectures

每項實驗均采集100 條數據作為仿真能量跡, 均采集自AES 算法第一輪起始位置, 詳細實驗數據見表4.由表中可以發現, 在不同的處理器架構上, 所需要采集的采樣點個數(即指令數) 和所需采集的寄存器個數存在差別, 但是對整個仿真的總時間沒有顯著影響.在所有實驗中, 均可在單進程下在30 分鐘以內完成整個仿真數據的采集, 由于實驗一無需跨平臺仿真處理器, 故在7 分鐘以內即可完成仿真數據的采集.值得一提的是, 由于該仿真方法不依賴于物理算法實現, 理論上可以通過多進程方式對采集速度進行線性提速.在本機Intel(R) Core(TM) i5-7300HQ CPU @ 2.50 GHz 處理器下, 最多可以同時運行3 個進程從而實現3 倍的仿真提速.

表4 多種處理器架構下的代碼級側信道軟件仿真實驗結果Table 4 Results of code-level side channel software simulation for multiple processor architectures

經過上述五項實驗, 可得到五組數據用于后續的側信道分析.首先, 使用正則匹配等方法從日志數據中提取寄存器數據, 并存儲為適合后續分析的能量跡數據格式.然后, 按照第4 節介紹的對齊方法, 按照PC 程序計數器所存儲的地址, 對每條數據中出現條件分支的指令進行剪裁, 從而實現仿真數據能夠完全按照相應匯編指令進行對齊.

本文使用經典的相關性分析(CPA)對仿真數據進行攻擊,由于仿真數據不含噪聲,故無需套用漢明重量等功耗模型, 可直接計算假設密鑰的S 盒輸出與仿真功耗的相關性.對每個處理器架構下的仿真數據,可分別對每個寄存器下的仿真能量跡進行CPA 攻擊.通過對X86、ARM、MIPS、PowerPC、SPARC等五種處理器架構的23、19、40、39、41 個寄存器仿真數據進行攻擊, 發現只有2–3 個通用寄存器存在信息泄漏情況, 如X86 架構的rax (累加器)/rcx (計數器)/rdx (數據器)、ARM 架構的r1/r2/r3 (通用寄存器, 用于子程序間傳遞參數)、MIPS 架構的v0/v1 (函數調用返回值存放寄存器)、PowerPC 架構的r8/r9/r10 (通用寄存器, 函數或系統調用開始的參數)、SPARC 架構的g1/g2/g3 (全局寄存器) 等, 可以發現, 存在泄漏的寄存器一般進行函數返回調用等功能, 將會泄漏代碼運行中的敏感中間值, 具體統計結果可見表5, 其中下劃線代表該寄存器泄漏全部密鑰字節.

表5 Stagegate #1 AES-128 實現在不同架構處理器下的寄存器泄漏情況Table 5 Registers with leakages of different registers with Stagegate #1 AES-128 C implementation

下面更進一步地對泄漏點代碼進行溯源.附錄中詳細展示了對5 種架構處理器泄漏寄存器仿真功耗的CPA 攻擊結果, 可以發現, 正確密鑰所對應的相關性曲線能夠達到1 的相關性, 說明仿真功耗不存在噪聲干擾, 直接泄漏敏感信息原值.因為在仿真寄存器功耗的同時記錄下了程序計數器PC 的值, 故能量跡曲線的每個點都能夠找到對應的PC 指令, 進而精確反向溯源至泄漏點對應的匯編代碼和C 源代碼.

通過對存在泄漏的X86 (rax/rcx/rdx)、ARM (r1/r2/r3)、MIPS (v0/v1)、PowerPC (r8/r9/r10)、SPARC (g1/g2/g3) 寄存器仿真能量跡進行CPA 攻擊, 確定仿真能量跡上存在泄漏的特征點以及對應的匯編代碼和C 源代碼, 詳細結果可參見附錄.通過實驗分析得出, 同樣的AES 加密算法C 代碼實驗, 在不同的處理器架構下, 是存在泄漏的相似性和差異性的.為了便于后續分析, 根據附錄圖10–14 中泄漏情況, 將各架構處理器下的寄存器泄漏特性劃分為三型, 分別為:

(1) I 型寄存器泄漏包括X86_rcx、ARM_r1、MIPS_v1、PowerPC_r8、SPARC_g3, 主要以sub-Bytes 函數mov/movslq 等匯編指令的寄存器拷貝泄漏為主;

(2) II 型寄存器泄漏包括X86_rax、ARM_r2、MIPS_v1、PowerPC_r10、SPARC_g2, 主要以mixColumns 函數mov/movzbl 等匯編指令的寄存器拷貝泄漏為主;

(3) III 型寄存器泄漏包括X86_rdx、ARM_r3、MIPS_v0、PowerPC_r9、SPARC_g1, 主要以mixColumns 函數mov/xor 匯編指令的寄存器拷貝和異或操作泄漏為主.

在本實驗中, 通過對附錄圖中CPA 攻擊的泄漏點位置和源代碼溯源, 可以總結出該密碼實現在不同架構處理器下的寄存器泄漏特性, 如表6 所示.在相似性方面, 實驗中的5 種處理器架構均因Stagegate#1 AES-128 軟件實現沒有添加掩碼和隱藏等防護措施, 在subBytes 和mixColumns 等位置能夠通過假設密鑰、猜測S 盒輸出值、相關性攻擊而恢復出原始密鑰, 在泄漏點分布上呈現類似特征.在差異性方面,首先復雜指令集和精簡指令集的處理器泄漏差異性較大, 如在II 型寄存器泄漏和III 型寄存器泄漏上, 通過實驗發現在該類寄存器上X86 架構的rax 和rcx 寄存器泄漏情況與其他架構明顯不同; 然后, 精簡指令集的處理器泄漏差異性存在但不高, 如SPARC 架構的g3 寄存器上第16 密鑰字節xtime 函數不存在泄漏, MIPS 架構的v1 寄存器subBytes、shiftRows、mixColumns、xtime 函數均存在泄漏, 融合了I 型寄存器泄漏和II 型寄存器泄漏的特征等.

表6 Stagegate #1 AES-128 實現在不同架構處理器下的寄存器泄漏特性Table 6 Register leakage features of different registers with Stagegate #1 AES-128 C implementation

7 總結與展望

本文對多種主流處理器架構下的代碼級側信道仿真特性進行了研究, 通過交叉編譯和處理器虛擬化技術對AES-128 開源實現進行了跨平臺寄存器仿真功耗采集和側信道分析, 驗證該技術通用性和探究主流處理器架構下仿真功耗泄漏的相似點和差異性.通過一些對比實驗, 可以發現: (1) 代碼級側信道仿真能夠反應源代碼實現層面的安全性; (2) 代碼級側信道仿真能夠驗證多種架構處理器的密碼實現代碼安全性;(3) 多種架構處理器的寄存器泄漏情況大致相同, 但也因指令集和架構特性呈現差異化特征.

通過代碼級側信道仿真, 能夠實現跨處理器平臺的源代碼層面側信道分析, 發現可能存在泄漏的寄存器, 檢測源代碼的實現安全性.下一步, 考慮在已有基礎上, 對出現泄漏的源代碼進行安全防護, 實現檢測和防護的閉環.此外, 針對公鑰密碼的代碼級側信道仿真也值得進一步研究.

猜你喜歡
寄存器代碼指令
聽我指令:大催眠術
Lite寄存器模型的設計與實現
ARINC661顯控指令快速驗證方法
LED照明產品歐盟ErP指令要求解讀
創世代碼
創世代碼
創世代碼
創世代碼
分簇結構向量寄存器分配策略研究*
坐標系旋轉指令數控編程應用
91香蕉高清国产线观看免费-97夜夜澡人人爽人人喊a-99久久久无码国产精品9-国产亚洲日韩欧美综合