论文笔记:公钥密码算法的硬件实现及侧信道攻击研究(RSA部分)
論文筆記:公鑰密碼算法的硬件實現及側信道攻擊研究
作者:王暉(天津大學,2017屆碩士學位論文)
RSA 算法計算流程
1. 密鑰對生成(軟件實現) ? 選取兩個大素數 p 和 q; ? 計算𝑛 = 𝑝 × 𝑞,以及 n 的歐拉函數𝜙(𝑛) = (𝑝 ? 1) ? (𝑞 ? 1); ? 隨機選取一個整數𝑒 (1 < 𝑒 < 𝜙(𝑛)),滿足𝑔𝑐𝑑(𝑒, 𝜙(𝑛)) = 1; ? 計算私鑰 d,滿足𝑑 × 𝑒 ≡ 1 𝑚𝑜𝑑 𝜙(𝑛); ? 其中 n, e 可以公開為公鑰;p, q 可以拋棄但不能泄露, d 需要保密 為私鑰。 2. 加密過程 ? 加密方擁有公鑰信息 n, e,首先需要將明文信息數字化,即轉換成 二進制數據,保證每次加密明文信息 m 的長度小于log2𝑛; ? 加密方對明文 m 進行加密,即進行模冪運算𝑐 = 𝑚^e 𝑚𝑜𝑑 𝑛; ? 加密方將加密好的密文 c 通過可信通信渠道發送給解密方。 3. 解密過程 ? 解密方擁有私鑰信息 d; ? 解密方接收密文信息 c; ? 解密方對密文 c 進行解密操作,即𝑚 = 𝑐^d 𝑚𝑜𝑑 𝑛。顯然,加解密過程的基本運算單元都是:message = 𝑚𝑒𝑠𝑠𝑎𝑔𝑒^k𝑒𝑦 𝑚𝑜𝑑 𝑛。最后通過設計狀態機調用模冪模塊,分別能夠實現 RSA 的加解密過程。RSA整個模塊在 Xilinx ISE 開發環境中基于 Xilinx Virtex-5 FPGA 進行了實現。
RSA 算法的硬件設計
采用 Verilog 硬件描述語言,基于 Xilinx Virtex-5 系列 FPGA (xc5vlx50)實現了 1024 位 RSA 的加解密過程。本設計分別采用 FIOS 模乘算法實現底層模乘運算,Boscher 的盲化 BNP 模冪算法實現模冪運算,最終基于模冪模塊實現 1024 位的 RSA 加解密處理器。
模乘單元中的 dat_sram8 用來存放模數 N;dat_sram6 用來存放算法密鑰;消息輸入可以通過data_i 引腳線寫入模乘單元中的 dat_sram4 中。 其它 RAM 分別用來存放模乘的操作數、中間值和運算結果。選擇信號 select 用來選擇具體存放操作數、中間值以及運算結果的 RAM。這樣一來,只需要控制 select 信號就能在模冪運算過程中避免了數據的連續搬運,從而節省了模冪運算時間。
模冪單元采用的算法為 Boscher 在 2009 年提出的一種能夠抵御 DFA, DPA 和DFA 攻擊的模冪算法——盲化 BNP 模冪算法。
模冪單元的核心運算單元為模乘運算單元,通過狀態機 FSM 調度模乘單元來實現模冪運算。模冪單元的架構設計如圖 4-2 所示。
clk 為時鐘信號,cen 為外部片選信號,rst_b 為復位信號,wen為外部控制讀寫信號, data_i 為數據讀入信號,data_o 為數據讀出信號。
addr 信號為外部控制和地址信號:
? addr [12]: 控制開始信號 —— 執行外部對內部 RAM 的讀寫與內部模乘或模冪執行。
? addr [11]: 模乘、模冪的選擇信號 —— 1 為模乘;0 為模冪。
? addr [10]: RAM 選擇信號 —— 0 為選擇 dat sram9;1 為選擇其它 RAM。
? addr [9:4]: 模乘單元的 select 信號 —— HRMM 內部 RAM 的選擇信號,同時負責指定操作數與運算結果的存放位置。
側信道攻擊:選擇消息 CPA 攻擊方法
文章選擇消息為三種即 n - 1,1 和 n + 11,并且用它們來攻擊盲化 BNP 模冪算法(從右至左),并將使用基于PPMCC2 的 CPA 方法進行功耗的分析。算法描述如前文表 4-2 所示。
通過選擇消息(𝑎 ? 𝑛 ± 1)^b,從表 4-2 中算法可知,密鑰當前位只與算法第 6 步模乘操作有關。
? 若𝑑i= 0,第 6 步執行:𝑅[1] = 𝑅[1] ? 𝑅[2]𝑚𝑜𝑑 𝑁;
? 若𝑑i= 1,第 6 步執行:𝑅[0] = 𝑅[0] ? 𝑅[2]𝑚𝑜𝑑 𝑁;
因此,密鑰值可通過判斷什么操作數被執行來獲取,𝑅[0]和𝑅[1]互相獨立,它們的值之間不會互相干擾。如果𝑅[2]在循環迭代中被置為 1,寄存器𝑅[0]和𝑅[1]會在下次循環迭代中保持當前值不變:
? 若𝑑𝑖= 0,算法第 6 步在循環 i 到 m - 1 執行:𝑅[1] = 𝑅[1] ? 1𝑚𝑜𝑑 𝑁;
? 若𝑑i= 1,算法第 6 步在循環 i 到 m - 1 執行:𝑅[0] = 𝑅[0] ? 1𝑚𝑜𝑑 𝑁;
此時,當明文選擇消息 M = 1 時寄存器 R[0]的值一直等于隨機數 r。有兩種方式能將R[2]設為 1。
- 第一種:直接在算法輸入部分初始化寄存器 R[2]為 1;
- 第二種:使𝑅[2]*𝑅[2] 𝑚𝑜𝑑 𝑁 = 1。因為(𝑛 ± 1)^2 𝑚𝑜𝑑 𝑁 = 1 ,若算法輸入為 n ± 1,則R[2]會在第一次循環后等于 1。
算法執行在 M 分別等于 1, n ± 1 的情況下,如表 4-4 所示(算法 4-2 中第 6 步在不同選擇消息下的具體操作)。假定𝑑 = 77 = (1001101)2,在實際的功耗分析中,不同功耗段就對應于相應的操作(相同操作的操作數一樣,在功耗上就會出現功耗碰撞)。
注意在一些模冪算法中會進行歸約操作從而使得 M 一直在 0 到n 之間,即選擇消息 n+1 歸約之后情況與1 時等價。
本文的攻擊只是針對算法中的模乘操作,所以需要對采集到的實際功耗曲線進行截取和重新的對齊操作。最后得到的新的功耗曲線只包括模乘部分的功耗波形,這個功耗波形本文作為向量𝑃𝑇[𝑡][𝑚 × 𝑝]處理,其中 t 代表有 t 條功耗曲線,每條功耗曲線中有 m 個模乘,并且每個模乘中包括有 p 個點。本文提出的 CPA 功耗分析方法如表 4-5 ,具體細節步驟如下:
? 第一步:把向量𝑃𝑇平均化處理得到功耗曲線𝑃𝑇??(降噪)。
? 第二步:將𝑃𝑇??中的第一個模乘的功耗作為比對標本;計算不同模乘對應功耗與比對標本間的 PPMCC,得到新的向量 PC[m]。
? 第三步:根據 PC[m],選適當閾值將其分成兩類。數值更大(相關度更高)說明與比對標本有相同的密鑰位值。
注意在攻擊結束后會有兩種可能的密鑰值,此時需要進行試錯步驟得到最終正確的密鑰值。
實驗結果
文章在實驗中選定的 12 位最低有效位真實值為(101101111101)2。圖 4-6 展示了盲化 BNP 模冪算法中循環的第 5-7 步,在選擇消息為 1 輸入時的功耗曲線,圖中很難通過簡單的 SPA 直接觀察出密鑰值。于是將功耗波形數據輸入到以算法 4-5 構建的功耗分析平臺進行分析。
文章提出的選擇消息 CPA 功耗攻擊方法只需在示波器采樣頻率為1MHz下采集 50 條原始的功耗波形就能恢復出密鑰。從圖4-7中可判斷模乘操作功耗與比對標本間的差異。最后通過簡單的試錯得到正確的密鑰(101101111101)2,排除 (010010000010)2。
在相同的實驗條件下,選擇消息𝑀 = 𝑛 ? 1作為輸入執行算法電路,并通過功耗分析得到的皮爾森相關系數向量如圖 4-7 中右圖所示。
文章的攻擊方法與四種典型的最新類似攻擊方法的效率比較(包括Witteman 等人提出的方法,Akalp 等人提出的方案,Kim 等人提出的方案和 Wan 等人提出的方案)。
本文為博主原創文章,轉載請注明出處:https://blog.csdn.net/jeanlu/article/details/104594497
在考慮實際硬件環境下,可作為輸入選擇消息的有 n-1,1 和 n + 1。 ??
皮 爾 森 相關 系 數 (Pearson product-moment correlation
coefficient PPMCC)是一種判斷兩個向量 X 和 Y 之間線性相關度的方法,相關度數值從-1 到 1,1 代表完全正相關,0 代表不相關,-1 代表完全負相關。CPA的原理主要基于 PPMCC。 ??
總結
以上是生活随笔為你收集整理的论文笔记:公钥密码算法的硬件实现及侧信道攻击研究(RSA部分)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 管理信息系统案例分析_BIM案例分析—地
- 下一篇: 大疆文档(2)-指南