中科院專家:密碼實現與應用的安全挑戰
- 中科院DCS中心 林璟鏘 荊繼武
密碼技術,相比其它安全技術,具有更加嚴謹的安全模型、更加嚴密的邏輯推導,能夠從基本公認的少量假設出發,推導得到各種可以證明安全的方案。密碼技術的應用,通常都會給資訊系統帶來顯著的安全性提升。
本文我們將探討密碼及其在現實應用中面臨的諸多挑戰。從現實情況來看,密碼技術與應用的安全效果並不盡如人意。
一、錯誤的密碼演算法和不當的金鑰長度
密碼裝置中可能會整合多種演算法,金鑰長度也可能是使用者可以選擇的,這就要求使用者有足夠的密碼學知識。特別是,許多舊的裝置在預設情況下的演算法和金鑰長度選擇已經不安全,有的甚至不具備新的演算法選項。例如,近年來的HASH演算法攻擊分析,就使得原有MD5演算法和SHA-1演算法從安全變為不安全;RSA演算法的安全金鑰長度,也隨著技術研究進展而不斷調整。
對於實際執行的系統,要再升級密碼演算法或者金鑰長度可能需要很大代價。2011年的Internet統計分析表明,大約25%的網站仍然在使用密碼演算法不安全的數字證書(MD5和RSA-1024演算法),2016年的統計表明,IETF新標準禁止使用的RC4序列密碼演算法仍然大量使用,約佔郵件類連線的10%。相關文獻對Diffie-Hellman金鑰交換協議的技術分析,推測NSA有能力解密大量SSL/TLS加密流量。
即使密碼演算法是絕對安全的,考慮到前向/後向安全、考慮到可能發生的安全事件,金鑰也需要定期更換。NIST SP 800-57給出了各種場景推薦使用的金鑰長度和更新週期。這些金鑰更新原則,在現實的計算機和網路系統中,並沒有得到完全實施。更為嚴重的是,大量的金鑰被重用。在網際網路郵件通訊中,僅大約15%的公鑰正確地對應一個主機,其他公鑰都對應兩個或更多主機。
二、密碼演算法的工作模式選擇錯誤
在密碼應用中,對稱演算法會使用CTR、CBC或GCM等工作模式來處理資料;RSA演算法也需要使用PKCS#1、OAEP和PSS的資料填充方法。對於特殊的應用場景,還會有專門的密碼演算法工作模式:在硬碟資料儲存加密應用中,通常使用XTS工作模式,NIST SP 800-38G定義了Format-Preserving Encryption工作模式、用於保持加解密前後的文字格式等。學者也針對Hash演算法提出了資料完整性校驗工作模式。
然而,這些理論研究成果並沒能全面應用到計算機和網路系統中,最近暴露的QQ瀏覽器的RSA演算法使用問題、著名的SSL/TLS DROWN攻擊都是利用了不安全的RSA演算法資料填充方法,相關文獻也討論了資料儲存加密中不同工作模式的相應安全問題。
三、隨機數不安全
如何獲得不可預測的隨機數一直是密碼應用中的重要問題。早在1996年,研究人員就發現,Netscape Browser的SSL協議實現使用了有問題的隨機數生成方法,攻擊者可以很容易地預測金鑰。在20年前,相關文獻就總結了若干實際執行系統中的隨機數問題、並給出了在計算機系統中產生安全隨機數的技術建議。
目前有多種方法來產生和評估隨機數或偽隨機數,其中也有些方法已經形成標準。然而,即使標準化的方法也有可能存在安全問題。如,NIST SP 800-90A標準中著名的Dual EC偽隨機數產生演算法,就被廣泛猜測有後門。2014年NIST的新版本標準去掉了Dual EC演算法;ANSI X9.17/X9.31偽隨機數產生標準,如果在實現中使用固定種子,也容易導致攻擊。我們的研究表明,現有隨機數檢測評估標準也存在缺陷,不能完全正確地評估隨機性。有文獻分析了Windows作業系統隨機數產生函式CryptGenRandom的實現,詳細討論了其中的安全問題。
2012年的研究表明,Internet上公開使用的數字證書和PGP/SSH金鑰中,有大量的重複金鑰或者重複使用的素因子;這就說明,實際系統產生隨機數難以達到完美的隨機性。通過網路從第三方獲得隨機數,涉及了複雜的操作和假設,在實際系統中並不完全可行。此外,雖然現在Intel和AMD的CPU內建了硬體隨機數指令RDRAND和RDSEED,但是仍未得到廣泛應用,其安全性還有爭議。
四、密碼安全協議的實現和使用不當
直接使用標準化的密碼安全協議,是最合適的選擇。目前最廣泛使用的SSL/TLS密碼協議在各種平臺上都有公開原始碼實現。SSL/TLS協議也可以執行在UDP之上、即DTLS協議。然而,在實際應用中,很多方面仍然存在問題。主要問題包括演算法配置、證書配置、與應用層協議的協作、證書/金鑰重複使用、操作流程複雜、代理劫持等等。比如,在針對郵件的被動偵聽中發現,有超過58%的連線仍然使用不安全的TLS1.0版本。這些問題都使得SSL/TLS協議並不能得到預定的安全目標。
單點登入和統一認證授權協議也是目前廣泛使用的,如OpenID、OAuth、SAML等。這些協議在實現和使用中也存在諸多問題。比如,不同程式片段對數字簽名資料的不同理解,鑑別憑證和授權憑證的錯誤混用,關鍵資料在瀏覽器訊息處理和傳遞過程中的洩露和篡改等都成為這些協議不正確實施的重要安全漏洞。錯誤的主要原因來自於協議實現和使用中的理解偏差和對實際計算機和網路系統在訊息處理和傳遞過程中的複雜性認識不足。例如,在XML數字簽名資料處理中,數字簽名驗證和資料解析的分離處理;對於瀏覽器傳遞和處理的訊息,有多種正常方法或者攻擊手段可以修改和讀取。單點登入和統一認證授權協議實現,從B/S模式轉到智慧移動終端APP模式,也會引入新的問題;例如,APP使用WebView訪問身份服務提供方時候的資料洩露,在不可信環境APP中的敏感資訊洩露等。
五、網路實體與金鑰繫結缺乏有效驗證
在密碼演算法和密碼協議的設計和分析中,通常直接假設網路實體正確持有金鑰(對稱金鑰或私鑰),或者採用數字證書證明網路實體與公鑰的繫結關係。研究發現,大量的SSL/TLS軟體實現並沒有正確地驗證網路實體與公鑰/數字證書的繫結關係,在數字證書驗證過程中沒有檢查根CA證書配置和實體身份標識,即使啟用了SSL/TLS協議,也仍然會有中間人攻擊風險。數字證書驗證過程的複雜性,尤其是各種數字證書的擴充套件理解不當,都會影響PKI證書鏈的驗證正確性。這些型別的軟體邏輯漏洞不同於常規的軟體漏洞,很難有通用的解決方案。
實現安全增強的PKI體系,也是當前的重要技術研究內容,提升安全的措施包括數字證書/公鑰Pinning,數字證書的多重認證,數字證書籤發操作的公開審計,不同網路路徑的數字證書對比,證書服務範圍限定規則,證書持有者的控制和確認等等。這些解決方案各有優缺點,都能夠在某些情況下更好提升PKI數字證書的可信度。
六、金鑰保護仍舊是薄弱環節
密碼計算過程中的各種側通道攻擊,一直以來都是密碼工程的重要研究方向。計算機系統程序中的金鑰也面臨各類系統攻擊和安全威脅,包括Cold-Boot攻擊、DMA攻擊、計算機系統功能導致的資料擴散和軟體漏洞導致的記憶體資訊洩露等。針對OpenSSL的心臟出血漏洞的攻擊就可以導致記憶體資訊洩露。
針對計算機系統中的記憶體資訊洩露和攻擊,學術界提出了多種金鑰安全方案,包括基於暫存器的金鑰安全方案;基於Cache的Copker金鑰安全方案;基於硬體事務記憶體機制的Mimosa金鑰安全方案;基於TrustZone機制的金鑰安全方案。有人也提出了基於GPU暫存器和Cache的PixelVault金鑰安全方案。但是後續研究發現,PixelVault方案的技術假設不成立、其安全目標並不能達到。
早在2014年,Intel公司推出SGX機制,實現了由CPU硬體建立的隔離計算環境,在SGX執行環境中的資料,只在Cache中出現,交換到記憶體晶片時會自動由CPU加密,可以抵抗惡意作業系統以及惡意程序讀取敏感資料,篡改可執行程式碼。2016年,AMD公司也推出了SME/SEV機制,由CPU實現記憶體資料的自動加密。但是,近年來的最新研究成果表明,SGX執行環境仍然面臨著多種側通道攻擊獲取金鑰等敏感資料,控制程式執行流程等安全威脅;SME/SEV機制也存在安全問題。
2018年,針對CPU硬體的Meltdown漏洞和Spectre漏洞的發現,引起了網路空間安全各界的極大關注。該漏洞影響了不同廠商、不同型號的大量CPU,使得攻擊者非授權地讀取資料,包括金鑰等敏感資料。利用該漏洞的攻擊可以突破SGX機制的保護。
七、密碼模組的訪問控制措施不足
密碼演算法安全強度通常是128位元甚至更高,但是訪問密碼模組,即密碼計算裝置或者密碼計算軟體的許可權控制卻經常只是依賴於簡單的使用者口令。傳統密碼裝置的使用中一般會增加額外的控制措施,如多次輸入錯誤口令則鎖定裝置或者銷燬關鍵資料,USB Token在不執行數字簽名計算時不接上計算機,密碼計算裝置帶有獨立的展示介面和操作介面等。然而,近年來多次發生的CA簽發虛假數字證書的安全事件表明,攻擊者並不需要獲取金鑰,也可以進行惡意的密碼計算。
由於智慧移動終端的介面條件限制,外接硬體密碼裝置,如Sim卡,通常是始終保持連線。有文獻早在2001年和2002就討論利用RSA門限密碼演算法,結合線上的半可信系統,實現實時的、零延遲的金鑰撤銷。類似方案也可以用來支援SM2國產密碼演算法,實現智慧移動終端的密碼計算訪問控制。En-ACCI方案利用虛擬機器自省技術,檢驗密碼計算呼叫程序的完整性,實施訪問控制策略,適用於虛擬化環境的密碼計算軟硬體裝置。CASTLE方案提出的完全物理隔離,利用二維碼圖片交換資料的方式,也是很有意思的探索。
廣泛應用的口令身份鑑別機制,已經有伺服器端不需儲存口令明文的多種協議,也有一些已經成為國際標準,但是目前尚未有成為事實標準的協議設計和廣泛認可和使用的開源軟體實現。
八、結束語
在計算機和網路系統中讓密碼技術充分地發揮安全作用,並不像看起來那麼容易和直接,需要綜合密碼學、系統安全和網路安全的知識體系。從理論層面,要保證演算法和協議的不斷進步;在產品層面,要確保密碼實現正確,確保密碼模組自身安全;在應用層面要確保選用合適安全等級的密碼模組,正確配置密碼引數並正確使用。每個層面都需要與時俱進,不斷跟上時代發展。我們要認識到,錯誤地應用密碼技術,就有可能會造成“安全的假象”,進而忽視或放棄了其他方面的安全措施。
(本文刊登於《中國資訊保安》2018年第8期)
宣告:本文來自安全內參,版權歸作者所有。文章內容僅代表作者獨立觀點,不代表安全內參立場,轉載目的在於傳遞更多資訊。如需轉載,請聯絡原作者獲取授權。