本文分析了國產密碼演算法軟體引擎面臨的主要安全挑戰:隨機數發生器和金鑰安全。

語言: CN / TW / HK

隨著我國商用密碼技術的應用推廣,國產密碼演算法軟體引擎(或者稱為密碼演算法軟體模組、密碼演算法軟體實現、軟體密碼產品等)已經成為必不可少的密碼產品形態。相比於硬體形式的密碼產品,密碼演算法軟體引擎具有更好的適用性和靈活性、更低的成本;然而,密碼演算法軟體引擎也面臨著更大的技術挑戰。

本文分析了國產密碼演算法軟體引擎面臨的主要安全挑戰:隨機數發生器和金鑰安全。相比美國 NIST 的隨機數發生器標準體系,我國的相關標準尚未完善,仍然需要不少工作。密碼軟體引擎執行在不完全可信的通用計算機軟硬體環境上,金鑰資料面臨著各種攻擊(包括系統軟體攻擊和物理攻擊等)。

在各種計算機系統上,各種漏洞和攻擊層出不窮,設計金鑰安全方案、保護金鑰資料,也是困難重重。由於隨機數發生器的標準體系尚未建立、金鑰資料的安全技術挑戰並未完全解決,有效開展國產密碼演算法軟體引擎的安全檢測,也存在著明顯的困難。在密碼演算法軟體引擎的檢測過程中,需要對軟硬體執行環境設定合理的假設,進而檢測密碼演算法軟體引擎是否在該假設前提下,產生不可預測的隨機數和有效地保護金鑰資料。

1、國產商用密碼技術的應用推廣

密碼技術是網路空間安全的重要基礎,在計算機和網路系統中發揮了不可替代的安全作用。推廣國產密碼技術、應用商用密碼演算法, 是建設我國網路空間安全基礎設施的必要措施之一。全面推廣國產密碼技術、深入應用商用密碼演算法,有如下三方面工作需要完成:

(1)密碼演算法標準化。目前我國已經制定並公開發布了完整的密碼演算法體系:分組密碼演算法 SM4、流密碼演算法 ZUC、雜湊演算法 SM3、公鑰密碼演算法 SM2(包括加解密、數字簽名和金鑰協商)和標識密碼演算法 SM9。而且,其中部分密碼演算法已經成為國際標準。

(2)制定配套的密碼應用標準。在數字證書、通訊協議、應用介面等方面,形成配套標準, 實現商用密碼應用標準體系。

(3)形成多元化的密碼產品生態。各種不同形式的硬體、韌體和軟體密碼產品,滿足應用系統的不同需求;尤其是軟體密碼產品,更具有技術靈活性、實施部署更容易,在成本上也更具優勢。

在商用密碼演算法和密碼應用標準方面,我國已經發展多年。然而,在密碼產品多元化方面, 一方面由於歷史原因,我國商用密碼長久以來只支援合規的硬體產品,近年來合格軟體密碼產品已經開放、但是軟體密碼產品發展仍然較弱;另一方面也由於軟體密碼產品面臨著更大的技術挑戰,尤其是金鑰安全,所以在軟體密碼產品(或者稱為軟體密碼引擎、密碼演算法軟體模組)方面,還有更多的技術難題需要克服。

2、國產密碼演算法軟體引擎的安全挑戰

從密碼學基本原理出發,密碼演算法公開, 密碼產品最重要的、最需要保護的資料就是金鑰以及各種敏感引數。按照 GM/T 0028《密碼模組安全技術要求》和 GM/T 0039《密碼模組安全檢測要求》,密碼模組尤其需要確保關鍵安全引數和敏感引數的安全,其中最重要的引數就是金鑰。密碼演算法的金鑰以及各種敏感引數(例如,IV 和 Nonce 等),通常都是由隨機數產生獲取;另一方面,確定性隨機數發生器也通常是帶有金鑰的密碼功能模組;二者相互聯絡、密不可分。

相比於硬體形式的常見密碼演算法實現(例如,密碼機、密碼卡、USB 令牌等),密碼軟體引擎面臨著更大的安全挑戰。首先,密碼演算法軟體引擎通常執行在常規的計算機系統或移動智慧終端上,這一類裝置不帶有專用的隨機數發生器晶片,密碼演算法軟體引擎必須自己實現隨機數發生器。其次,因為密碼軟體引擎與其他功能的軟體共享作業系統等軟硬體執行環境,由於各種應用功能的要求千變萬化,必然會導致作業系統功能複雜、執行環境介面繁多, 就可能會引入更多的計算機軟體漏洞和攻擊威脅。所以,密碼軟體引擎在實現靈活、成本低廉、易於實施的同時,又成為安全挑戰最大的密碼實現。

2.1隨機數發生器的挑戰

隨機數發生器是各種密碼計算引數的來源, 包括金鑰、初始化向量、隨機填充值等,應該具備足夠隨機性(即資訊熵)、從而確保攻擊者不可預測。在計算機系統中,如何利用外界環境的不確定因素(即熵源),構造不可預測的、高速的隨機數發生器,已有大量的相關研究, 美國 NIST 也在這一方面形成了較為完善的技術標準體系。下文逐一展開介紹。

Linux 核心也帶有了隨機數發生器軟體實現,並且在很多密碼軟體引擎中使用。然而必須要看到,即使是美國 NIST 制定多年的隨機數發生器系列標準,也仍然不時有安全問題披露;同時, 即使是被大量使用的、公開原始碼的隨機數發生器軟體實現,也時有安全漏洞出現 。

2.1.1美國 NIST 的隨機數發生器標準體系

隨機數發生器,大致可以分為 NRBG (Non- deterministic Random Bit Generator 非確定性隨機數發生器,或者稱為 True Random Bit Generator 真隨機數發生器) 和 DRBG (Deterministic Random Bit Generator 確定性隨機數發生器, 或者稱為Pseudorandom Bit Generator 偽隨機數發生器 )。目前,美國 NIST 制定的隨機數發生器相關的 FIPS 標準主要包括如下:

(1)SP 800-22 A Statistical Test Suite for Random and Pseudorandom Number Generators for Cryptographic Applications,隨機數發生器的統計檢測。

(2)SP 800-90A Recommendation for Random Number Generation Using Deterministic Random Bit Generators,根據外部輸入的熵源, 使用對稱密碼或 Hash 等演算法計算得到確定性隨機數。

(3)SP 800-90B Recommendation for the Entropy Sources Used for Random Bit Generation, 隨機數發生器的熵源分析。

(4)SP 800- 90C Recommendation for Random Bit Generator (RBG) Constructions, 隨 機數發生器的系統構造,NRBG、DRBG 和熵源以及線上檢測部件的組成。

(5)0SP 800-108 Recommendation for Key Derivation Using Pseudorandom Functions,利用偽隨機數函式實現金鑰派生。

以上各標準之間關係如圖 1 所示。

圖 1 美國 NIST 的密碼隨機數發生器標準體系

首先,SP 800-90A 描述了多種確定性隨機數發生器的演算法,其基本原理是:發生器維護金鑰和內部狀態,間斷地從外部獲得熵源輸入,計算輸出隨機數。SP 800-90B 是 DRBG 隨機數發生器的熵分析,用於評估和分析外部輸入的熵源。SP 800-90C 是隨機數發生器的系統構造,給出 NRBG、DRBG 和熵源以及線上檢測部件的多種組成方式,形成實際使用的隨機數發生器。其次,隨機數發生器(主要是 NRBG)輸出的隨機數序列,可使用 SP 800-22 標準給出的多項統計檢測方法來進行檢測,判斷其隨機性優劣。最後,SP 800-108 給出了使用偽隨機數函式來實現金鑰派生的多種方法。

2.1.2隨機數發生器標準及其使用的問題

下文結合現實的軟體隨機數發生器安全漏洞、分析討論隨機數發生器標準及其使用的問題。根據 Snowden 報告以及大量相關研究,在SP 800-90A 標準 2006 版所包括的 Dual EC 演算法中,美國 NSA 植入後門、可以預測使用該演算法的隨機數發生器輸出 [5-8];SP 800-90A 標準 2014版去掉了 Dual EC 演算法。SP 800-22 標準的隨機數統計檢測方法、SP 800-90C 標準的熵分析方法,根據中科院 DCS 中心的研究成果,也存在著缺陷,影響到統計檢測的準確性、熵分析結果的準確性 。

隨機數發生器標準也不能完全解決現實密碼演算法軟體引擎中的隨機數問題。例如,2012 年的國際研究結果表明,Internet 大量網路裝置的 RSA 金鑰對相同,或者使用了相同的素因子、導致 RSA 金鑰可分解 。上述問題一方面是因為大量網路裝置使用了廠商預置的、相同的預設金鑰,也有部分是因為隨機數發生器問題:雖然這些裝置使用了高強度的隨機數發生器,但是由於網路裝置的特殊性,使得不同裝置的隨機數發生器很容易在初態一致的情況下輸出隨機數並用於生成金鑰,所以就會有相同的 RSA 素因子。類似問題,也在智慧IC 上也有發現。

2.1.3我國商用密碼隨機數發生器標準

相比美國 NIST 制定的隨機數發生器標準體系,我國商用密碼的隨機數發生器相關標準仍有不足。國家密碼管理局已經發布GM/T 0062《密碼產品隨機數檢測要求》標準。該標準的作用大致相當於 NIST SP 800-22 標準。但是,我國尚未釋出隨機數發生器相關的其他標準。

總體而言,相比 NIST SP-800 在隨機數發生器方面的系列標準,我國尚未形成體系化的、類似定位的隨機數發生器系列標準。考慮到密碼技術的特殊性,我國沒有必要照章抄襲或者模仿 NIST SP-800 的隨機數發生器系列標準,但是制定類似定位、發揮相同作用的商用密碼系列標準是有必要的。尤其是,隨著密碼演算法軟體引擎的需求日益增長,我國亟需隨機數發生器標準,從而能夠更好地引導密碼演算法軟體引擎的隨機數發生器設計。

2.2金鑰安全的挑戰

密碼演算法軟體引擎執行在通用計算機平臺上,相比硬體形式實現,不但有側通道攻擊威脅, 計算機系統的各種攻擊也會直接威脅到金鑰資料的安全。

2.2.1金鑰面臨的各種攻擊和安全威脅

在密碼演算法執行過程中,攻擊者可以通過各種方法竊取其中的金鑰資料。首先,側通道攻擊是密碼學研究中長久以來的重要方向。在密碼計算過程中,當金鑰位元有不同取值時, 密碼計算的執行會有細微差異、進而影響到可被攻擊者觀測到的外部狀態(例如,功率、電磁輻射、計算時間、聲音、快取記憶體狀態等等)。不論是軟體形式或者硬體形式的密碼演算法實現, 都有側通道攻擊的威脅 。

其次,由於在計算機系統中,金鑰也同樣表現為記憶體空間中的資料變數,所以現有計算機系統中各種敏感資料所面臨的攻擊和安全問題,也同樣會威脅到金鑰。這一型別的安全威脅大致可以分為:物理攻擊、軟體攻擊和 CPU 硬體漏洞攻擊。物理攻擊是指攻擊者與被攻擊系統有物理接觸,然後利用物理接觸條件、非授權地讀取敏感資料。最典型的物理攻擊是冷啟動攻擊和 DMA 攻擊。冷啟動攻擊 利用記憶體晶片資料的延遲消失,在斷電之後、記憶體晶片的資料仍然維持一段時間,在低溫情況下能夠維持更長時間、甚至數小時。攻擊者可以直接取出計算機系統的記憶體晶片,放在攻擊者控制的惡意計算機上,讀取其中的敏感資料;或者在受害者計算機上插入惡意的引導介質,啟動之後立即讀取原有的記憶體資料。DMA 攻擊是指攻擊者插入惡意外設,發起 DMA 請求、繞過作業系統的訪問控制,直接訪問記憶體 。

其次,各種計算機系統的軟體記憶體漏洞, 也會導致攻擊者非授權地讀取金鑰。例如, 作業系統軟體漏洞,會導致惡意程序繞過作業系統的記憶體隔離機制、讀取其他程序甚至核心空間的記憶體資料。軟體系統的正常功能也有可能導致記憶體資料洩露,例如 Core dump 或者Crash report 就有可能使得記憶體中的敏感資料擴散。而且,近年來有多個 CPU 硬體漏洞被披露( 包括 Meltdown、Spectre、Foreshadow/L1TF 和ZombieLoad 等),這些漏洞都有可能使得攻擊者讀取到記憶體中的金鑰等敏感資料。

最後,密碼演算法軟體引擎在實現中也會引入安全漏洞、導致金鑰洩露。例如,著名的OpenSSL 心臟出血,就是因為軟體引擎在處理TLS 心跳請求訊息時存在缺陷,收到畸形請求訊息,會將記憶體空間中隨機地址的 64K 位元組傳送給攻擊者。

2.2.2現有金鑰安全技術進展

在通用的計算機平臺上,如何保護金鑰、提供安全有效的密碼計算,一直都是學術界和工業界共同關注的重要技術問題。首先,Windows作業系統的 CSP (Cryptographic Service Provider) 和 CNG (Cryptographic Next Generation) 都支援在核心空間中執行密碼運算,金鑰資料出現在核心記憶體空間;類似的,Linux 作業系統在 v2.5.45 之後,也有核心空間的密碼計算服務,稱為 Crypto API。由於金鑰資料出現在核心空間,普通的使用者態攻擊者必須提升許可權、獲得核心空間的讀許可權,才能夠讀取金鑰資料。

基於暫存器的金鑰安全技術,可以有效防範冷啟動攻擊。2010 年,TRESOR 利用 Intel 完CPU 的 AES-NI 指令,完成了暫存器實現的 AES 演算法,有效抵抗冷啟動攻擊。後續研究工作將其推廣到 RSA 演算法,在 Intel CPU 計算機上完成暫存器實現的 RSA 演算法,同樣能夠抵抗冷啟動攻擊。

2014 年,中科院 DCS 中心研究團隊第一次完成了基於 CPU 快取記憶體的密碼演算法軟體實現 [24-25],在 Intel CPU 上、利用快取記憶體的工作模式配置,將 RSA 私鑰計算限定在 CPU 快取記憶體內。相比基於暫存器的密碼演算法軟體實現,快取記憶體的儲存空間足夠大、能夠支援更多型別的密碼演算法,而且支援使用高階語言實現、不需要使用匯編實現。

2015 年,中科院DCS 中心研究團隊繼續提出了基於硬體事務記憶體的金鑰安全方案,使用 Intel TSX (Transactional Synchronization Extension) 硬體事務記憶體特性,完成了金鑰安全方案:私鑰只有在需要密碼計算的時候,才解密到硬體事務中、開始密碼計算;在此期間,任何來自其他惡意執行緒或程序的讀取訪問,都會導致事務回滾、金鑰資料被清零。而且,Intel TSX 特性利用快取記憶體來儲存事務中間過程的、未提交的資料,所以該方案也能夠保證 RSA 私鑰不會出現在記憶體晶片,有效抵抗冷啟動攻擊。

近年來,Intel 公司推出 SGX (Software Guard eXtension) 特性,用於在不可信的作業系統和虛擬機器監控器上建立執行環境,該環境只依賴於 CPU 的安全特性、提供程式碼的完整性和資料的機密性,並且能動態地執行遠端證明。利用Intel SGX 特性,也能夠實現密碼演算法軟體引擎, 提高金鑰資料的安全程度。基於 Intel SGX 特性的軟體系統,其安全性完全依賴於 Intel CPU, 甚至作業系統、虛擬機器監控器也不能得到使用者軟體系統程式碼或資料的任何資訊。從另一角度而言,閉源的 CPU 硬體設計和實現,也會同樣面臨多年前對於非開源作業系統的質疑和擔憂。而且,針對 SGX 執行環境的有效攻擊方法也不斷被提出。

2.2.3金鑰安全技術的應用實施

對於各種不同型別的側通道攻擊,可以通過安全增強的密碼演算法實現來防禦。學術界已經對側通道攻擊防禦有很長時間的研究,研究成果也開始逐步應用到一些開源密碼軟體,但是仍然值得繼續擴大應用範圍。尤其對於密碼演算法軟體實現,近年來出現了多種基於共享快取記憶體的側通道攻擊,這一類攻擊在原有傳統密碼硬體實現中並不存在,所以相同的防禦技術值得繼續深入研究。

各種密碼演算法軟體引擎的金鑰安全方案應用實施,都必須面對執行環境不可信的問題。

首先,作為軟體程式,必須在一定程度上依賴和信任作業系統和 CPU 等硬體。

其次,對作業系統和 CPU 等硬體的信任,必須深入分析,不能簡單地用“絕對信任”和“不信任”來總結;具體而言,程式碼完整性、操作原子性、暫存器特權級別、暫存器介面訪問唯一性等,不同金鑰安全方案對於執行環境有各不一樣的要求和假設,執行環境只需要滿足相應條件即可以、並不是完全的絕對信任和依賴。

最後,應該更辯證地考慮作業系統和CPU 等硬體之間的關係, 基礎軟硬體構成了密碼演算法軟體引擎的執行環境;與此同時,作業系統和各種基礎硬體之間, 也在執行過程中相互監控、相互制約,更有利於形成合理的生態。如果執行環境的安全條件信任建立在僅有的某一特定硬體或者某一特定軟體模組基礎上,而該信任基礎並不能被徹底地分析或證明,則採取分散式信任的技術思想更為妥當、應該將安全基礎建立在多個可相互監控和制約的部件之上。

3、國產密碼演算法軟體引擎的檢測現狀與難題

目前,國產密碼演算法軟體的合規檢測按照GM/T 0028《密碼模組安全技術要求》和 GM/T 0039《密碼模組安全檢測要求》來執行。作為指導性的行業標準,GM/T 0028 和 GM/T 0039 沒有對密碼產品的隨機數發生器和金鑰安全設計做出詳細的具體設計指導。與此同時,我國在隨機數發生器和金鑰安全的技術方案,也尚未形成行業標準或者國家標準;所以,在檢測過程中, 就只能從密碼學的技術原理出發、結合密碼軟體產品的實際情況,提出具體技術要求。

在總體技術思想上,GM/T 0028《密碼模組安全技術要求》和 GM/T 0039《密碼模組安全檢測要求》參考了美國 NIST FIPS 140 標準和 ISO/ IEC 19790 標準。但是,我國仍然有必要在隨機數發生器方案和金鑰安全方案上,提出和實施有特色的安全要求。作為密碼演算法軟體實現的最重要的資料安全部分,隨機數發生器和金鑰安全應該在執行環境所提供適度安全保證的前提下,加強自身的安全設計、而不是完全依賴於執行環境。

目前我國商用密碼演算法軟體模組的隨機數發生器和金鑰安全,仍然有較高的要求,需要外部的密碼硬體模組提供一定程度的支援和協作;例如,外部輸入的真隨機數作為熵源之一、利用門限密碼演算法與外部密碼硬體模組協作保護金鑰。相比而言,美國 FIPS 140 密碼模組測評要求對軟體密碼模組允許完全由軟體實現的隨機數發生器和金鑰安全方案,其安全性對執行環境有更大的依賴性。

國產商用密碼軟體引擎的檢測要求,與執行環境的安全假設息息相關。如果假定通用計算機軟硬體環境能夠全面地提供各種安全特性(例如,記憶體安全、使用者身份鑑別等),則執行在之上的密碼軟體就可以降低安全要求;如果執行環境不能完全提供必要的安全特性,則密碼演算法軟體模組就必須要加強自身安全性。

在密碼演算法軟體模組的檢測中,需要綜合考慮密碼安全技術和隨機數發生器技術的發展, 需要分析各種不同計算機軟硬體執行環境的安全狀況,確定相應的安全要求細節和具體的檢測方法步驟。

4、結語

總而言之,筆者認為,發展國產密碼演算法軟體引擎,還需要在如下 3 方面開展工作:

(1)制定隨機數系列標準,形成標準體系。通過技術標準,規範密碼演算法軟體引擎的隨機數發生器技術方案和安全實現。同時,在標準的實施中,尤其需要關注熵源的動態熵值和隨機數發生器的有效變化。

(2)大力發展金鑰安全技術。密碼安全技術與計算機系統執行環境密切相關,難以形成標準化的技術方案;應該針對各種不同的執行環境和相應安全威脅,研究金鑰安全技術方案。

(3)實施有特色的國產密碼演算法軟體引擎檢測要求。在軟體密碼引擎的執行環境安全得到有效保證之前,適當提高檢測要求、適當降低對執行環境的安全假設,更有助於密碼技術發揮安全效果。站在密碼軟體引擎的角度,執行環境應該是介於“完全可信”和“完全不可信” 之間的中間狀態:如果假設執行環境的軟硬體完全不可信,則幾乎不可能實現滿足要求的密碼軟體引擎;如果不考慮現實情況、假設執行環境完全可信,密碼軟體引擎自身缺乏必要的安全保護,也會導致密碼軟體引擎被攻擊(例如, 金鑰洩露等)。

另外,《中華人民共和國密碼法》的立法工作已經在穩步推進,我國的密碼科技工作也必定將會進入新的歷史階段。為了更便捷、更有效地在資訊系統中發揮密碼技術的安全作用, 國產密碼演算法軟體引擎的研發勢在必行。我國應該直面國產密碼演算法軟體引擎的安全挑戰, 團結更多力量,探索中國特色的商用密碼技術路線。

作者簡介

林璟鏘,研究員,資訊保安國家重點實驗室副主任。長期致力於網路空間安全研究,尤其是密碼技術在計算機網路系統的應用。