周 健,秦 放
(成都三零嘉微電子有限公司,四川 成都 610041)
密碼模塊作為基礎密碼設備,在金融、電力、大數據等行業中為各類安全應用提供身份認證、算法加速、敏感安全參數管理和保護等服務。目前市面上的商用密碼模塊按照國家密碼管理局提出的相關標準[1]進行研發,大多滿足安全一級或安全二級的規范要求,僅提供基本的安全功能。
由于標準對高安全等級密碼模塊規定了更多的新功能和新機制,技術要求較高,因此國內在該研究領域仍處于起步階段,且安全技術設計的相關論述較少。然而隨著對數據安全有極高要求的行業的發展,業內對高安全等級的密碼模塊的需求與日俱增,面臨巨大的市場空缺。因此,研究如何通過各種設計和技術路徑來滿足高安全等級的要求就顯得迫在眉睫。
本文首先簡要介紹高安全等級密碼模塊的設計架構,其次分別從高安全等級特有的物理安全[2]、實體鑒別、環境失效性檢測(Environmental Failure Testing,EFT)、非入侵式攻擊緩解技術[3]這4 個方面詳細說明高安全等級密碼模塊的設計和工作原理。
本文的研究不僅可以填補高安全等級密碼模塊安全技術設計方面的空白,也可以指導研發具有實用價值的商用密碼模塊,滿足相關行業的技術需求和市場需求。
高安全等級密碼模塊,以高速串行擴展總線(Peripheral Component Interconnect Express,PCI-E)接口密碼模塊為例,由主控單元、PCI-E總線接口單元、密碼運算單元、存儲單元、環境失效性檢測(Enviromental Failure Test,EFT)單元、功能單元組成,如圖1 所示。

圖1 高安全等級密碼模塊硬件架構
高等級密碼模塊中:
(1)主控單元由帶嵌入式操作系統的中央處理器(Central Processing Unit,CPU)實現,實現對密鑰的管理和對應用層下發命令的解析和響應;
(2)PCI-E 總線接口單元由大規模現場可編程邏輯門陣列(Field Programmable Gate Array,FPGA)實現,是數據進出密碼模塊的主要傳輸通道;
(3)密碼運算單元基于效率和性能的考慮,由兩顆專用密碼算法芯片組成,分別實現SM1 算法和SM2 算法,另由邏輯器件實現哈希算法SM3 和對稱分組密碼算法SM4;
(4)存儲單元由雙倍速率內存(Double Data Rate synchronous Dynamic Random-access Memory,DDR SDRAM)和閃存(FLASH)組成,分別存儲密碼模塊運算過程中的數據和板載芯片的可執行程序;
EFT 單元負責實現EFT 功能,由電壓和溫度兩部分組成,分別實現對電壓和溫度的感知和響應;
功能單元中,由開蓋銷毀裝置、按鍵銷毀按鈕實現緊急狀況下的關鍵安全參數置零功能,狀態LED 燈指示密碼模塊的實時狀態,USBKey 接口供身份鑒別的UKey 使用,另有多片物理噪聲源用于產生質量合格[4]的隨機數。
密碼模塊處于主機應用層之下,受應用層各種安全應用程序的調用。其軟件架構由安全服務接口、設備驅動程序、嵌入式軟件3 部分組成,如圖2所示。

圖2 高安全等級密碼模塊軟件架構
該軟件架構中:安全服務接口[5]提供密碼模塊的功能接口,由應用程序直接調用;設備驅動程序為密碼模塊的宿主設備提供驅動能力;嵌入式軟件,運行于密碼模塊的主控單元,響應和執行應用層的調用指令。
密鑰是密碼模塊的核心資源,完善的密鑰管理體系是密碼模塊的核心功能。在高安全等級密碼模塊中,密鑰管理采用了技術合理、安全性高的3 層密鑰結構體制,如圖3 所示。

圖3 高安全等級密碼模塊密鑰體系
在分層密鑰保護體系中:保護密鑰位于最上層,主要用于加密保護其下層的用戶密鑰對和密鑰加密密鑰;用戶密鑰對和密鑰加密密鑰位于中間層,用戶密鑰對除用于非對稱密碼運算外,還作為保護密鑰保護其下層的對稱會話密鑰;密鑰加密密鑰主要用作保護密鑰,保護其下層的對稱會話密鑰,且會話密鑰處于層次化密鑰結構中的最底層,是僅在一次會話中使用的對稱密鑰。
不論何種密鑰,除公鑰外的所有密鑰都不能以明文形式存在于密碼卡外部。通過上述層層保護的原則,滿足了密鑰管理中的“分層結構,逐層保護”的安全原則。
高安全等級密碼模塊在研制時采用的物理安全設計要點如下文所述。
(1)選用經過國密局認證的對稱和橢圓曲線算法(Elliptic Curve Cryptography,ECC)專算芯片。該類芯片的抗攻擊能力高,能夠確保芯片內部包括密鑰數據、算法代碼等敏感信息的安全。
(2)高安全等級密碼模塊將所有重要的元器件均放置在電路板的正面,并采用硬質金屬材料的外殼對電路板正反兩面進行全包裹,防止外部的窺探,并防止外部通過探針進行測量。金屬外殼可采用鋁合金6063,如圖4 所示,在國家標準GB/T 3190-2020《變形鋁及鋁合金化學成分》中規定其成分范圍,是AL-Mg-Si 系中等強度的可熱處理強化合金,Mg 和Si 是主要合金元素,其硬度為95 HB,在抵御外部的撬、鉆、擊打等常規拆破行為中表現較好。

圖4 硬質金屬外殼
同時,該外殼內部的四周設計有一圈金屬絲網,如圖5 所示。在外殼壓合時,可以緊緊貼合電路板,消除外殼與電路板之間的微小縫隙,在一定程度上有防止電磁干擾和抵御非入侵攻擊中電磁分析攻擊的作用。

圖5 外殼內層金屬絲網
(3)高安全等級密碼模塊在進行印制電路板(Printed Circuit Board,PCB)排版時,將重要的總線信號和專用算法芯片的數據信號設計在了印制版的里層,可有效防止外部將PCB 表面涂層刮開直接使用探針探測電信號的行為。
(4)如圖6 所示,高安全等級密碼模塊固定外殼的螺母采用私有的非標設計,只有使用廠家特制的工具才能開啟,且在螺絲上方使用金屬薄片進行遮蓋,并在金屬薄片表面粘貼有拆卸存跡的全息封條,可以清楚地指示密碼模塊外殼是否曾被拆卸開啟過。

圖6 高安全等級密碼模塊的私有非標螺母
(5)高安全等級密碼模塊設計有拆卸響應電路,主要由機械檢測電路和觸發通知電路兩部組成。機械檢測電路采用多單元并聯模式工作。為保證檢測拆卸動作的可靠性和準確性,防止撬起某個部位逃避檢測的行為,在密碼模塊的3 個角上設置了機械檢測電路,任意一點的檢測電路檢測到拆卸行為后均可以觸發通知電路工作。這3 個點位分別檢測不同位置的金屬外殼上蓋與模塊印制版之間的垂直間距,可以快速地判斷上蓋的拆卸情況,并通過觸發通知電路向CPU 發出報警信號,使其知曉應該對未受保護的關鍵安全參數進行置零。拆卸響應電路的設計原理如圖7 所示。

圖7 拆卸響應電路設計原理
高安全等級密碼模塊在使用UKey 進行身份認證時,首先需要對UKey 進行實體鑒別,以確認插入的Ukey 是與該密碼模塊一一對應的實體,防止外部使用相同型號的UKey 進行混淆和攻擊。在本密碼模塊的安全技術設計方案中,采用數字簽名技術規范要求中的兩次傳遞單向鑒別機制[6]。具體鑒別過程如圖8 所示。

圖8 基于數字簽名技術的兩次傳遞單相鑒別流程
(1)創建操作員時模塊調用身份認證UKey的智能密碼鑰匙密碼應用接口規范(smart token cryptography application interface specification,SKF)[7]接口產生非對稱密鑰對,私鑰保存于UKey中,公鑰導出到模塊內保存。
(2)需要進行實體鑒別時,將操作員身份認證UKey 定為聲稱方A,密碼模塊定為驗證方B。
(3)B 使用隨機數生成器產生32 字節隨機數Rb,并調用A 的接口將Rb送入A 以備后續簽名使用,密鑰指定為第一步操作生成的私鑰。
(4)A 收到Rb后,產生32 字 節的隨機數Ra,將Ra與Rb進行拼接,并進行一次hash 運算,將hash 運算的結果進行簽名,密鑰為第一步操作生成的私鑰。簽名完畢后,A 連同Rb|Ra|sign(Rb|Ra)一同送出給B。
(5)B 獲取A 送出的簽名數據后,對隨機數Rb|Ra進行hash 運算,將得到的hash 值使用第一步操作中獲得的公鑰對簽名數據進行驗簽操作,若驗簽通過,再比較數據中包含的隨機數Rb是否等于之前產生的Rb。
(6)若上一步操作中的兩個操作均通過,則表明實體鑒別成功。
高安全等級密碼模塊具有EFT 功能,包括檢測溫度和檢測電壓兩部分。具體檢測4 種異常環境狀況:低溫、高溫、大負電壓、大正電壓。下面分別介紹溫度和電壓異常狀況下,EFT 的設計原理和生效機制。
密碼模塊在關鍵器件如可編程邏輯器件、專用算法芯片等附近布置多片溫度傳感器,對密碼模塊內部的環境溫度進行多點監測。設置好密碼模塊的工作溫度區間,當環境溫度不在該范圍內,則認為環境失效,密碼模塊主動斷電。具體的工作原理是模塊上電后,處理器周期性地主動讀取各片溫度傳感器的溫度寄存器,以獲取它們附近環境的實際溫度。若任意一片溫度傳感器的溫度不在工作范圍內,則處理器做一次記錄。當連續多次記錄到該現象時,表明環境溫度持續處于正常工作范圍之外,工作環境確實失效,此時處理器告知開關電路切斷密碼模塊的電源,以達到置零模塊內未受保護的關鍵安全參數的目的。一旦開關電路切斷密碼模塊的電源,電源指示燈也會熄滅。溫度失效性檢測技術的設計原理如圖9 所示。

圖9 溫度失效性檢測原理
PCI-E 接口的輸入電源分兩路:一路通過一個模數轉換器(Analog-Digital conversion,A/D)接入CPU;一路則接入開關電路,并通過開關電路對密碼模塊進行供電。設置好密碼模塊電壓的正常工作范圍后,CPU 周期性地對輸入的電壓進行檢測,若連續多次檢測到電壓處于正常范圍之外,則表明工作環境確實失效。此時,CPU 記錄好環境失效的日志后告知開關電路斷開電源供應,使得后端的電路掉電,以置零密碼模塊內未受保護的關鍵安全參數。可通過觀察模塊的側面板上電源指示燈來確認模塊的上、下電情況:當模塊正常工作時,電源燈長亮;一旦電源管理模塊切斷密碼模塊的電源,電源指示燈會熄滅。電壓失效性檢測技術的設計原理如圖10所示。

圖10 電壓失效性檢測原理
在算法層面,由于對稱密碼算法SM4[8]沒有基于密鑰的分支運算,因此對稱算法對計時攻擊天然免疫,故無須針對上述算法做專門的計時攻擊防護設計。
針對SM2 公鑰密碼算法[9],點乘計算采用安全點乘算法,能有效防御計時攻擊和簡單能量攻擊。安全點乘算法如下所示:

該方法一次掃描1 位密鑰位,每次進行1 次點加運算和1 次倍點運算,可以實現任意相同長度的密鑰位運算都沒有時間區別[10]。
針對SM4 算法,采用掩碼技術,通過隨機化密碼模塊所處理的中間值,使密碼模塊的能量消耗不依賴于此中間值,消除密碼設備能量消耗的數據相關性。采用如下文所述的思路進行操作。
引入隨機掩碼,實現全寄存器掩碼以及掩碼S盒。例如一共生成16 個各不相同的掩碼S 盒,第一輪使用編號為1~4 的掩碼S 盒,第二輪使用編號為5~8 的掩碼S 盒,第三輪使用編號為9~12 的掩碼S 盒,第四輪使用編號為13~16 的掩碼S 盒,第五輪又重復使用編號為1~4 的掩碼S 盒,以此類推。這樣使SM4 算法在加解密的每一個運算步驟均有掩碼參與,達到每一個運算步驟結果均與原算法無關的目的。
假設單個S 盒的輸入為A∈,輸出為B∈,則有B=sbox(A)。假設掩碼為M∈,則查表變換輸入為A′=A⊕M∈,輸出B′=sbox(A′)∈。為了得到真實的輸出B,則需要生成一個對應的S盒sbox_m,使得sbox(A⊕M)⊕sbox_m(A⊕M)=sbox(A)。因此有sbox_m(A⊕M)=sbox(A⊕M) ⊕sbox(A),生 成算法:

標準SM2 數字簽名算法流程如圖11 所示,在簽名過程中,設待簽名的消息為M;它的數字簽名為(r,s);簽名者A 的公私鑰分別為PA、dA,HA是長度為v比特的密碼雜湊算法;G為橢圓曲線的一個基點,其階為素數。

圖11 標準SM2 簽名算法流程
目前,已有文獻提出了對SM2 簽名算法的差分攻擊方法和錯誤攻擊方法。差分攻擊方法的攻擊點一般選在與用戶私鑰dA直接相關的地方,如模乘r·dA處,已知簽名值r,若了解芯片的模乘實現細節便可進行差分能量攻擊,逐比特攻破dA。而錯誤攻擊的主要威脅來自弱曲線和基于格的錯誤攻擊,它們的攻擊點均在隨機數k處,并通過獲得k值或k值的局部信息來獲取密鑰。
針對SM2 算法特性,為抵御相關攻擊,采用安全點乘、大數模乘公式變換和掩碼技術。抗攻擊的優化方案如下文所述。
步驟1:原簽名流程的第三步為生成一組256 bits隨機數k,應保證每次加密過程中使用的隨機數都不相同,更新過程嚴格隨機化,避免隨機數間特殊更新情況出現。在此步驟后增加一個備份操作,使k=k′。
步驟2:原簽名流程的第四步為(x1,y1)=[k]G,在此步驟后增加一個比較操作,若現在的隨機數k=k′,則繼續算法,若k!=k′,則退出算法。
步驟3:將原簽名流程的第6 步進行變換[11]:

步驟4:另外,為了防止攻擊者在k備份之前便修改k值,或者在算法運行過程中跳過某一步直接進行下一步運算,可引入一個計數器,每一步驟后讓計數器自加1,并判斷該計數器值是否為當前步驟數,若是則繼續運算,若不是則退出運算。
在本方案中,使用安全點乘法對條件分支語句進行了無差別處理,攻擊者不能通過直接觀察能量消耗曲線來獲取密鑰相關信息,從而達到抗簡單能量分析(Simple Power Analysis,SPA)攻擊[12]的目的。在算法流程中增加一個k值備份操作,大大增加了對密鑰k的攻擊難度,從而達到抵抗針對弱曲線和基于格的錯誤攻擊的目的。在含有私鑰dA的大數模乘和點乘處執行步驟3 所示的公式變換,變換后的計算步驟里不再含有易受攻擊的r·dA,從而有效抵抗差分能量分析(Differential Power Analysis,DPA)的攻擊[13]。
對于對稱密碼算法SM4,高安全等級密碼模塊電磁分析防護方案的主要目的是增加噪聲,降低信噪比,同時采取掩碼技術,增加電磁分析所需的電磁跡數目,使攻擊者在有限的計算資源下難以開展攻擊。此外,其設計方案與抗能量分析攻擊緩解技術相同。
對于SM2 算法,高安全等級密碼模塊對點乘運算每一步所執行的操作相同,即對條件分支語句進行了無差別處理,攻擊者不能通過直接觀察電磁消耗曲線來獲取密鑰相關信息,從而達到抗SPA 攻擊的目的。在含有私鑰dA的大數模乘和點乘處增加一個加法掩碼,使各條電磁消耗曲線上此時刻的電磁消耗曲線隨機化,掩蓋了私鑰dA和電磁消耗曲線之間的相關性,使統計分析方法失效,從而有效抵抗DPA 攻擊。
此外,為了盡可能地減少工作時向外部泄露的電磁輻射量,密碼模塊設計了電磁屏蔽性較好的全封閉金屬外殼,同時在金屬外殼的內邊緣設計有金屬絲網,進一步加強電磁輻射的屏蔽性。且該金屬外殼的結構設計上無任何縫隙,使得外部探針無法進入密碼模塊的專算芯片或者邏輯器件附近直接進行電磁輻射探測。
本文介紹了高安全等級密碼模塊所必須滿足的安全要求,并闡述了針對這些要求所做的安全技術設計。這些有針對性的設計使得高安全等級密碼模塊自身的安全性得到了保證,并使得高安全等級模塊能夠滿足各類用戶的安全需求。相較于安全二級的模塊,高安全等級模塊可以更好地確保用戶在日常使用過程中的數據安全性和通信安全性,一旦出現安全威脅,能夠保護系統核心數據的安全,抵御對整個系統的入侵和破壞,因此可以提供更為安全的密碼服務。