0引言
隨著我國商用密碼技術的應用推廣,國產密碼算法軟件引擎(或者稱為密碼算法軟件模塊、密碼算法軟件實現、軟件密碼產品等)已經成為必不可少的密碼產品形態(tài)。
相比于硬件形式的密碼產品,密碼算法軟件引擎具有更好的適用性和靈活性、更低的成本;然而,密碼算法軟件引擎也面臨著更大的技術挑戰(zhàn)。本文分析了國產密碼算法軟件引擎面臨的主要安全挑戰(zhàn):隨機數發(fā)生器和密鑰安全。
相比美國NIST的隨機數發(fā)生器標準體系,我國的相關標準尚未完善,仍然需要不少工作。密碼軟件引擎運行在不完全可信的通用計算機軟硬件環(huán)境上,密鑰數據面臨著各種攻擊(包括系統軟件攻擊和物理攻擊等)。在各種計算機系統上,各種漏洞和攻擊層出不窮,設計密鑰安全方案、保護密鑰數據,也是困難重重。
由于隨機數發(fā)生器的標準體系尚未建立、密鑰數據的安全技術挑戰(zhàn)并未完全解決,有效開展國產密碼算法軟件引擎的安全檢測,也存在著明顯的困難。
在密碼算法軟件引擎的檢測過程中,需要對軟硬件運行環(huán)境設定合理的假設,進而檢測密碼算法軟件引擎是否在該假設前提下,產生不可預測的隨機數和有效地保護密鑰數據。
1國產商用密碼技術的應用推廣
密碼技術是網絡空間安全的重要基礎,在計算機和網絡系統中發(fā)揮了不可替代的安全作用。推廣國產密碼技術、應用商用密碼算法,是建設我國網絡空間安全基礎設施的必要措施之一。
全面推廣國產密碼技術、深入應用商用密碼算法,有如下三方面工作需要完成:
(1)密碼算法標準化。
目前我國已經制定并公開發(fā)布了完整的密碼算法體系:分組密碼算法SM4、流密碼算法ZUC、雜湊算法SM3、公鑰密碼算法SM2(包括加解密、數字簽名和密鑰協商)和標識密碼算法SM9。而且,其中部分密碼算法已經成為國際標準。
(2)制定配套的密碼應用標準。
在數字證書、通信協議、應用接口等方面,形成配套標準,實現商用密碼應用標準體系。
(3)形成多元化的密碼產品生態(tài)。
各種不同形式的硬件、固件和軟件密碼產品,滿足應用系統的不同需求;尤其是軟件密碼產品,更具有技術靈活性、實施部署更容易,在成本上也更具優(yōu)勢。
在商用密碼算法和密碼應用標準方面,我國已經發(fā)展多年。然而,在密碼產品多元化方面,一方面由于歷史原因,我國商用密碼長久以來只支持合規(guī)的硬件產品,近年來合格軟件密碼產品已經開放、但是軟件密碼產品發(fā)展仍然較弱;另一方面也由于軟件密碼產品面臨著更大的技術挑戰(zhàn),尤其是密鑰安全,所以在軟件密碼產品(或者稱為軟件密碼引擎、密碼算法軟件模塊)方面,還有更多的技術難題需要克服。
2國產密碼算法軟件引擎的安全挑戰(zhàn)
從密碼學基本原理出發(fā),密碼算法公開,密碼產品最重要的、最需要保護的數據就是密鑰以及各種敏感參數。
按照GM/T 0028《密碼模塊安全技術要求》和GM/T 0039《密碼模塊安全檢測要求》,密碼模塊尤其需要確保關鍵安全參數和敏感參數的安全,其中最重要的參數就是密鑰。
密碼算法的密鑰以及各種敏感參數(例如,IV和Nonce等),通常都是由隨機數產生獲??;另一方面,確定性隨機數發(fā)生器也通常是帶有密鑰的密碼功能模塊;二者相互聯系、密不可分。
相比于硬件形式的常見密碼算法實現(例如,密碼機、密碼卡、USB令牌等),密碼軟件引擎面臨著更大的安全挑戰(zhàn)。
首先,密碼算法軟件引擎通常運行在常規(guī)的計算機系統或移動智能終端上,這一類設備不帶有專用的隨機數發(fā)生器芯片,密碼算法軟件引擎必須自己實現隨機數發(fā)生器。
其次,因為密碼軟件引擎與其他功能的軟件共享操作系統等軟硬件運行環(huán)境,由于各種應用功能的要求千變萬化,必然會導致操作系統功能復雜、運行環(huán)境接口繁多,就可能會引入更多的計算機軟件漏洞和攻擊威脅。
所以,密碼軟件引擎在實現靈活、成本低廉、易于實施的同時,又成為安全挑戰(zhàn)最大的密碼實現。
2.1隨機數發(fā)生器的挑戰(zhàn)
隨機數發(fā)生器是各種密碼計算參數的來源,包括密鑰、初始化向量、隨機填充值等,應該具備足夠隨機性(即信息熵)、從而確保攻擊者不可預測。
在計算機系統中,如何利用外界環(huán)境的不確定因素(即熵源),構造不可預測的、高速的隨機數發(fā)生器,已有大量的相關研究,美國NIST也在這一方面形成了較為完善的技術標準體系。下文逐一展開介紹。
Linux內核也帶有了隨機數發(fā)生器軟件實現,并且在很多密碼軟件引擎中使用。然而必須要看到,即使是美國NIST制定多年的隨機數發(fā)生器系列標準,也仍然不時有安全問題披露;同時,即使是被大量使用的、公開源代碼的隨機數發(fā)生器軟件實現,也時有安全漏洞出現。
2.1.1美國NIST的隨機數發(fā)生器標準體系
隨機數發(fā)生器,大致可以分為NRBG(Non-deterministic Random Bit Generator非確定性隨機數發(fā)生器,或者稱為True Random Bit Generator真隨機數發(fā)生器)和DRBG(Deterministic Random Bit Generator確定性隨機數發(fā)生器,或者稱為Pseudorandom Bit Generator偽隨機數發(fā)生器)。
目前,美國NIST制定的隨機數發(fā)生器相關的FIPS標準主要包括如下:
(1)SP 800-22 A Statistical Test Suite for Random and Pseudorandom Number Generators for Cryptographic Applications,隨機數發(fā)生器的統計檢測。
(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,隨機數發(fā)生器的熵源分析。
(4)SP 800-90C Recommendation for Random Bit Generator(RBG)Constructions,隨機數發(fā)生器的系統構造,NRBG、DRBG和熵源以及在線檢測部件的組成。
(5)0SP 800-108 Recommendation for KeyDerivation Using Pseudorandom Functions,利用偽隨機數函數實現密鑰派生。
以上各標準之間關系如圖1所示。
圖1美國NIST的密碼隨機數發(fā)生器標準體系
首先,SP 800-90A描述了多種確定性隨機數發(fā)生器的算法,其基本原理是:發(fā)生器維護密鑰和內部狀態(tài),間斷地從外部獲得熵源輸入,計算輸出隨機數。
SP 800-90B是DRBG隨機數發(fā)生器的熵分析,用于評估和分析外部輸入的熵源。
SP 800-90C是隨機數發(fā)生器的系統構造,給出NRBG、DRBG和熵源以及在線檢測部件的多種組成方式,形成實際使用的隨機數發(fā)生器。
其次,隨機數發(fā)生器(主要是NRBG)輸出的隨機數序列,可使用SP 800-22標準給出的多項統計檢測方法來進行檢測,判斷其隨機性優(yōu)劣。
最后,SP 800-108給出了使用偽隨機數函數來實現密鑰派生的多種方法。
2.1.2隨機數發(fā)生器標準及其使用的問題
下文結合現實的軟件隨機數發(fā)生器安全漏洞、分析討論隨機數發(fā)生器標準及其使用的問題。
根據Snowden報告以及大量相關研究,在SP 800-90A標準2006版所包括的Dual EC算法中,美國NSA植入后門、可以預測使用該算法的隨機數發(fā)生器輸出;SP 800-90A標準2014版去掉了Dual EC算法。SP 800-22標準的隨機數統計檢測方法、SP 800-90C標準的熵分析方法,根據中科院DCS中心的研究成果,也存在著缺陷,影響到統計檢測的準確性、熵分析結果的準確性。
隨機數發(fā)生器標準也不能完全解決現實密碼算法軟件引擎中的隨機數問題。例如,2012年的國際研究結果表明,Internet大量網絡設備的RSA密鑰對相同,或者使用了相同的素因子、導致RSA密鑰可分解。
上述問題一方面是因為大量網絡設備使用了廠商預置的、相同的默認密鑰,也有部分是因為隨機數發(fā)生器問題:雖然這些設備使用了高強度的隨機數發(fā)生器,但是由于網絡設備的特殊性,使得不同設備的隨機數發(fā)生器很容易在初態(tài)一致的情況下輸出隨機數并用于生成密鑰,所以就會有相同的RSA素因子。類似問題,也在智能IC上也有發(fā)現。
2.1.3我國商用密碼隨機數發(fā)生器標準
相比美國NIST制定的隨機數發(fā)生器標準體系,我國商用密碼的隨機數發(fā)生器相關標準仍有不足。
國家密碼管理局已經發(fā)布GM/T 0062《密碼產品隨機數檢測要求》標準。該標準的作用大致相當于NIST SP 800-22標準。但是,我國尚未發(fā)布隨機數發(fā)生器相關的其他標準。
總體而言,相比NIST SP-800在隨機數發(fā)生器方面的系列標準,我國尚未形成體系化的、類似定位的隨機數發(fā)生器系列標準。
考慮到密碼技術的特殊性,我國沒有必要照章抄襲或者模仿NIST SP-800的隨機數發(fā)生器系列標準,但是制定類似定位、發(fā)揮相同作用的商用密碼系列標準是有必要的。
尤其是,隨著密碼算法軟件引擎的需求日益增長,我國亟需隨機數發(fā)生器標準,從而能夠更好地引導密碼算法軟件引擎的隨機數發(fā)生器設計。
2.2密鑰安全的挑戰(zhàn)
密碼算法軟件引擎運行在通用計算機平臺上,相比硬件形式實現,不但有側信道攻擊威脅,計算機系統的各種攻擊也會直接威脅到密鑰數據的安全。
2.2.1密鑰面臨的各種攻擊和安全威脅
在密碼算法執(zhí)行過程中,攻擊者可以通過各種方法竊取其中的密鑰數據。
首先,側信道攻擊是密碼學研究中長久以來的重要方向。
在密碼計算過程中,當密鑰比特有不同取值時,密碼計算的執(zhí)行會有細微差異、進而影響到可被攻擊者觀測到的外部狀態(tài)(例如,功率、電磁輻射、計算時間、聲音、高速緩存狀態(tài)等等)。不論是軟件形式或者硬件形式的密碼算法實現,都有側信道攻擊的威脅。
其次,由于在計算機系統中,密鑰也同樣表現為內存空間中的數據變量,所以現有計算機系統中各種敏感數據所面臨的攻擊和安全問題,也同樣會威脅到密鑰。
這一類型的安全威脅大致可以分為:物理攻擊、軟件攻擊和CPU硬件漏洞攻擊。物理攻擊是指攻擊者與被攻擊系統有物理接觸,然后利用物理接觸條件、非授權地讀取敏感數據。最典型的物理攻擊是冷啟動攻擊和DMA攻擊。
冷啟動攻擊利用內存芯片數據的延遲消失,在斷電之后、內存芯片的數據仍然維持一段時間,在低溫情況下能夠維持更長時間、甚至數小時。
攻擊者可以直接取出計算機系統的內存芯片,放在攻擊者控制的惡意計算機上,讀取其中的敏感數據;或者在受害者計算機上插入惡意的引導介質,啟動之后立即讀取原有的內存數據。DMA攻擊是指攻擊者插入惡意外設,發(fā)起DMA請求、繞過操作系統的訪問控制,直接訪問內存。
其次,各種計算機系統的軟件內存漏洞,也會導致攻擊者非授權地讀取密鑰。例如,操作系統軟件漏洞,會導致惡意進程繞過操作系統的內存隔離機制、讀取其他進程甚至內核空間的內存數據。
軟件系統的正常功能也有可能導致內存數據泄露,例如Core dump或者Crash report就有可能使得內存中的敏感數據擴散。而且,近年來有多個CPU硬件漏洞被披露(包括Meltdown、Spectre、Foreshadow/L1TF和ZombieLoad等),這些漏洞都有可能使得攻擊者讀取到內存中的密鑰等敏感數據。
最后,密碼算法軟件引擎在實現中也會引入安全漏洞、導致密鑰泄露。例如,著名的OpenSSL心臟出血,就是因為軟件引擎在處理TLS心跳請求消息時存在缺陷,收到畸形請求消息,會將內存空間中隨機地址的64K字節(jié)發(fā)送給攻擊者。
2.2.2現有密鑰安全技術進展
在通用的計算機平臺上,如何保護密鑰、提供安全有效的密碼計算,一直都是學術界和工業(yè)界共同關注的重要技術問題。
首先,Windows操作系統的CSP(Cryptographic Service Provider)和CNG(Cryptographic Next Generation)都支持在內核空間中執(zhí)行密碼運算,密鑰數據出現在內核內存空間;類似的,Linux操作系統在v2.5.45之后,也有內核空間的密碼計算服務,稱為Crypto API。
由于密鑰數據出現在內核空間,普通的用戶態(tài)攻擊者必須提升權限、獲得內核空間的讀權限,才能夠讀取密鑰數據。
基于寄存器的密鑰安全技術,可以有效防范冷啟動攻擊。2010年,TRESOR利用Intel完CPU的AES-NI指令,完成了寄存器實現的AES算法,有效抵抗冷啟動攻擊。
后續(xù)研究工作將其推廣到RSA算法,在Intel CPU計算機上完成寄存器實現的RSA算法,同樣能夠抵抗冷啟動攻擊。
2014年,中科院DCS中心研究團隊第一次完成了基于CPU高速緩存的密碼算法軟件實現,在Intel CPU上、利用高速緩存的工作模式配置,將RSA私鑰計算限定在CPU高速緩存內。
相比基于寄存器的密碼算法軟件實現,高速緩存的存儲空間足夠大、能夠支持更多類型的密碼算法,而且支持使用高級語言實現、不需要使用匯編實現。
2015年,中科院DCS中心研究團隊繼續(xù)提出了基于硬件事務內存的密鑰安全方案,使用Intel TSX(Transactional Synchronization Extension)硬件事務內存特性,完成了密鑰安全方案:私鑰只有在需要密碼計算的時候,才解密到硬件事務中、開始密碼計算;在此期間,任何來自其他惡意線程或進程的讀取訪問,都會導致事務回滾、密鑰數據被清零。
而且,Intel TSX特性利用高速緩存來存儲事務中間過程的、未提交的數據,所以該方案也能夠保證RSA私鑰不會出現在內存芯片,有效抵抗冷啟動攻擊。
近年來,Intel公司推出SGX(Software Guard eXtension)特性,用于在不可信的操作系統和虛擬機監(jiān)控器上創(chuàng)建執(zhí)行環(huán)境,該環(huán)境只依賴于CPU的安全特性、提供代碼的完整性和數據的機密性,并且能動態(tài)地執(zhí)行遠程證明。利用Intel SGX特性,也能夠實現密碼算法軟件引擎,提高密鑰數據的安全程度。
基于Intel SGX特性的軟件系統,其安全性完全依賴于Intel CPU,甚至操作系統、虛擬機監(jiān)控器也不能得到用戶軟件系統代碼或數據的任何信息。
從另一角度而言,閉源的CPU硬件設計和實現,也會同樣面臨多年前對于非開源操作系統的質疑和擔憂。而且,針對SGX執(zhí)行環(huán)境的有效攻擊方法也不斷被提出。
2.2.3密鑰安全技術的應用實施
對于各種不同類型的側信道攻擊,可以通過安全增強的密碼算法實現來防御。學術界已經對側信道攻擊防御有很長時間的研究,研究成果也開始逐步應用到一些開源密碼軟件,但是仍然值得繼續(xù)擴大應用范圍。
尤其對于密碼算法軟件實現,近年來出現了多種基于共享高速緩存的側信道攻擊,這一類攻擊在原有傳統密碼硬件實現中并不存在,所以相同的防御技術值得繼續(xù)深入研究。
各種密碼算法軟件引擎的密鑰安全方案應用實施,都必須面對運行環(huán)境不可信的問題。
首先,作為軟件程序,必須在一定程度上依賴和信任操作系統和CPU等硬件。
其次,對操作系統和CPU等硬件的信任,必須深入分析,不能簡單地用“絕對信任”和“不信任”來總結;具體而言,代碼完整性、操作原子性、寄存器特權級別、寄存器接口訪問唯一性等,不同密鑰安全方案對于運行環(huán)境有各不一樣的要求和假設,運行環(huán)境只需要滿足相應條件即可以、并不是完全的絕對信任和依賴。
最后,應該更辯證地考慮操作系統和CPU等硬件之間的關系,基礎軟硬件構成了密碼算法軟件引擎的運行環(huán)境;與此同時,操作系統和各種基礎硬件之間,也在運行過程中相互監(jiān)控、相互制約,更有利于形成合理的生態(tài)。
如果運行環(huán)境的安全條件信任建立在僅有的某一特定硬件或者某一特定軟件模塊基礎上,而該信任基礎并不能被徹底地分析或證明,則采取分布式信任的技術思想更為妥當、應該將安全基礎建立在多個可相互監(jiān)控和制約的部件之上。
3軟件引擎的監(jiān)測現狀和難題
目前,國產密碼算法軟件的合規(guī)檢測按照GM/T 0028《密碼模塊安全技術要求》和GM/T 0039《密碼模塊安全檢測要求》來執(zhí)行。作為指導性的行業(yè)標準,GM/T 0028和GM/T 0039沒有對密碼產品的隨機數發(fā)生器和密鑰安全設計做出詳細的具體設計指導。
與此同時,我國在隨機數發(fā)生器和密鑰安全的技術方案,也尚未形成行業(yè)標準或者國家標準;所以,在檢測過程中,就只能從密碼學的技術原理出發(fā)、結合密碼軟件產品的實際情況,提出具體技術要求。
在總體技術思想上,GM/T 0028《密碼模塊安全技術要求》和GM/T 0039《密碼模塊安全檢測要求》參考了美國NIST FIPS 140標準和ISO/IEC 19790標準。
但是,我國仍然有必要在隨機數發(fā)生器方案和密鑰安全方案上,提出和實施有特色的安全要求。
作為密碼算法軟件實現的最重要的數據安全部分,隨機數發(fā)生器和密鑰安全應該在運行環(huán)境所提供適度安全保證的前提下,加強自身的安全設計、而不是完全依賴于運行環(huán)境。
目前我國商用密碼算法軟件模塊的隨機數發(fā)生器和密鑰安全,仍然有較高的要求,需要外部的密碼硬件模塊提供一定程度的支持和協作;例如,外部輸入的真隨機數作為熵源之一、利用門限密碼算法與外部密碼硬件模塊協作保護密鑰。
相比而言,美國FIPS 140密碼模塊測評要求對軟件密碼模塊允許完全由軟件實現的隨機數發(fā)生器和密鑰安全方案,其安全性對運行環(huán)境有更大的依賴性。
國產商用密碼軟件引擎的檢測要求,與運行環(huán)境的安全假設息息相關。如果假定通用計算機軟硬件環(huán)境能夠全面地提供各種安全特性(例如,內存安全、用戶身份鑒別等),則運行在之上的密碼軟件就可以降低安全要求;如果運行環(huán)境不能完全提供必要的安全特性,則密碼算法軟件模塊就必須要加強自身安全性。
在密碼算法軟件模塊的檢測中,需要綜合考慮密碼安全技術和隨機數發(fā)生器技術的發(fā)展,需要分析各種不同計算機軟硬件運行環(huán)境的安全狀況,確定相應的安全要求細節(jié)和具體的檢測方法步驟。
4結語
總而言之,筆者認為,發(fā)展國產密碼算法軟件引擎,還需要在如下3方面開展工作:
(1)制定隨機數系列標準,形成標準體系。通過技術標準,規(guī)范密碼算法軟件引擎的隨機數發(fā)生器技術方案和安全實現。同時,在標準的實施中,尤其需要關注熵源的動態(tài)熵值和隨機數發(fā)生器的有效變化。
(2)大力發(fā)展密鑰安全技術。密碼安全技術與計算機系統運行環(huán)境密切相關,難以形成標準化的技術方案;應該針對各種不同的運行環(huán)境和相應安全威脅,研究密鑰安全技術方案。
(3)實施有特色的國產密碼算法軟件引擎檢測要求。在軟件密碼引擎的運行環(huán)境安全得到有效保證之前,適當提高檢測要求、適當降低對運行環(huán)境的安全假設,更有助于密碼技術發(fā)揮安全效果。站在密碼軟件引擎的角度,運行環(huán)境應該是介于“完全可信”和“完全不可信”之間的中間狀態(tài):如果假設運行環(huán)境的軟硬件完全不可信,則幾乎不可能實現滿足要求的密碼軟件引擎;如果不考慮現實情況、假設運行環(huán)境完全可信,密碼軟件引擎自身缺乏必要的安全保護,也會導致密碼軟件引擎被攻擊(例如,密鑰泄露等)。
另外,《中華人民共和國密碼法》的立法工作已經在穩(wěn)步推進,我國的密碼科技工作也必定將會進入新的歷史階段。為了更便捷、更有效地在信息系統中發(fā)揮密碼技術的安全作用,國產密碼算法軟件引擎的研發(fā)勢在必行。我國應該直面國產密碼算法軟件引擎的安全挑戰(zhàn),團結更多力量,探索中國特色的商用密碼技術路線。