天天看點

國産密碼算法軟體引擎的安全挑戰

随着我國商用密碼技術的應用推廣,國産密碼算法軟體引擎(或者稱為密碼算法軟體子產品、密碼算法軟體實作、軟體密碼産品等)已經成為必不可少的密碼産品形态。相比于硬體形式的密碼産品,密碼算法軟體引擎具有更好的适用性和靈活性、更低的成本;然而,密碼算法軟體引擎也面臨着更大的技術挑戰。

本文分析了國産密碼算法軟體引擎面臨的主要安全挑戰:随機數發生器和密鑰安全。相比美國 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)實施有特色的國産密碼算法軟體引擎檢測要求。在軟體密碼引擎的運作環境安全得到有效保證之前,适當提高檢測要求、适當降低對運作環境的安全假設,更有助于密碼技術發揮安全效果。站在密碼軟體引擎的角度,運作環境應該是介于“完全可信”和“完全不可信” 之間的中間狀态:如果假設運作環境的軟硬體完全不可信,則幾乎不可能實作滿足要求的密碼軟體引擎;如果不考慮現實情況、假設運作環境完全可信,密碼軟體引擎自身缺乏必要的安全保護,也會導緻密碼軟體引擎被攻擊(例如, 密鑰洩露等)。

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

作者簡介 >>>

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

國産密碼算法軟體引擎的安全挑戰
國産密碼算法軟體引擎的安全挑戰

繼續閱讀