• 晶片資安第一站

《晶片安全設計最佳範例》2大做法,保護ACE抵抗旁通道攻擊

指引著作/臺灣資安卓越深耕-半導體及資通訊供應鏈資安關鍵技術發展計畫

積體電路(Integrated Circuit, IC)對安全特性的要求越來越高,包括採用進階加密標準(Advanced Encryption Standard, AES)、RSA (Rivest Shamir Adleman)、橢圓曲線加密(Elliptic Curve Cryptography, ECC)等加密技術,然而,如果晶片受到物理攻擊,這些加密演算法的硬體實作可能會失去安全性。

旁通道攻擊(Side-Channel Attack, SCA)與錯誤注入攻擊都可能被用來破解各種加密演算法以取得敏感資訊,本篇內容將討論如何針對不同的加密演算法,提供不同的防範機制,並摘要如下,適合硬體設計工程師、晶片開發人員做為參考。

AES防範機制

有兩種方法可以用來保護 AES 抵抗旁通道攻擊,第一種是隱藏(Hiding),第二種是遮罩(Masking)。

  • 雙重隱藏(Dual-Hiding)

隱藏對策的目的是隱藏由於其中的電路所引起的旁溝道洩漏,在垂直方向上不僅通過控制旁溝道洩漏的幅度,而且在水平方向上通過調整旁溝道洩漏的位置(in time)。從非同步邏輯(async-logic)實作,通過非同步執行加密硬體,可以同時具有垂直和水平隱藏,所以稱為雙重隱藏。

圖1:SCA隱藏對策的分類和相關實作;考慮了雙重隱藏非同步邏輯

資料來源:Dual-hiding side-channel-attack resistant FPGA-based asynchronous-logic AES: design, countermeasures and evaluation

若從雙重隱藏非同步邏輯AES加速器概念出發,相關做法可以從三個面向切入:

1.相對時序的結構

從概念上講,它是全域同步和局部非同步(globally synchronous and locally asynchronous),其主要輸入(primary inputs)和輸出由全域時脈Clk同步,但內部訊號是非同步操作的。

為了實作GSLA,我們的非同步邏輯AES加速器包括兩個主要模組:同步邏輯介面和非同步邏輯AES核心。同步邏輯介面本質上是一個簡單的狀態機,用於控制正反器傳輸、多工器和鎖存器資料;此外,還有一個隨機產生器(random seed generator)來生成一個32位元選擇訊號Sel,用於控制用於實作水平隱藏的延遲變數。

非同步邏輯AES核心是一個雙軌非同步邏輯設計。首先接受DataIn and KeyIn,並通過單軌雙軌轉換器(single-rail to dual-rail converters, S2Ds)將它們轉換為雙軌訊號。生成的雙軌訊號到達時間由可變延遲隨機控制。

非同步邏輯AES加速器的設計遵循以下時序假設,當DataIn and KeyIn就緒時,KDrdy在正緣觸發,我們的非同步邏輯AES加速器將開始非同步計算10回合AES運算,在第11個時脈週期,DataOut將存儲在正反器中。

我們使用相對計時方法[27]來決定何時停止非同步邏輯運算,這是通過檢測Rcon狀態機來實作的,用於控制10回合AES運算。Rcon狀態機將生成十六進位序列01、02、04、08、10、20、40、80、1B和36。每個十六進位數遵雙軌編碼,交替地具有有效資料(valid data) and NULL data。透過路徑推算,一旦非同步邏輯運算停止,生成的輸出將被暫時存鎖住(latched)。密文輸出將存儲再正反器的第11個clock,產生DataOut。

2. FPGA設計流程

非同步邏輯AES加速器的FPGA設計流程可以分為三個階段:單元準備階段(cell preparation phase)、設計階段和FPGA實作階段。

a.單元準備階段是構建用於非同步邏輯運算的FPGA-synthesizable和CMuller library cells。

b.在設計階段,主要包括管線結構、標準合成、S2D轉換和CD設定四個步驟。

c.FPGA實作階段,需要正確配置FPGA設定,以便Xilinx Vivado工具能夠對非同步邏輯電路執行成功的合成。

3.雙重隱藏SCA對策

我們的非同步邏輯AES加速器具有雙重隱藏SCA對策,這些對策共同來自許多技術。從垂直隱藏的角度來看,它具有雜訊注入和資料傳播(data-propagation)控制的特點,共同調節功率/電磁波峰值。從水平隱藏,它的特點是非同步邏輯雙軌運算和隨機資料驅動的延遲,它們共同引入延遲抖動(delay jitters)。

  • 遮罩(Masking)

我們做了兩個階段的防護,第一個階段是偽金鑰(fake key)的部分,第二部分是遮罩的部分。

偽金鑰

  1. 設定一組偽遮罩,並計算對應的MBox值(將在後面說明)
  2. 把真正的金鑰跟每一回合的RoundKey用偽遮罩做XOR運算
  3. 每一回合的運算都是使用偽金鑰
  4. ShiftRow的結果另外加入一個MBox做運算
  5. 將MBox的輸出執行MixColumn
  6. 在每一回合的AddRoundKey之前把MBox和SBox兩邊的輸出做XOR

遮罩作法

  1. 使用一組8位元的隨機數產生器m2將MBox的輸出做XOR運算
  2. 在每回合的AddRoundKey中將m2再做XOR運算一次

我們進行了3000次紀錄來分析,可以看到在沒有防護對策下,金鑰是完全可以被猜測出來的,而使用偽金鑰和遮罩對策的結果明顯看得出效益:在3000 紀錄的情況下無法被猜中,也降低了他的相關性。

想了解更詳細的指引內容,請與我們聯絡索取

 

Share:
This site is registered on wpml.org as a development site.