下一代密碼模塊安全標準探討
atsec李迪 atsec 2019-03-21
本文爲atsec和作者技術共享類文章,旨在共同探討信息安全業界的相關話題。未經許可,任何單位及個人不得以任何方式或理由對本文的任何內容進行修改。轉載請註明:atsec信息安全和作者名稱
1 背景
作爲全球範圍認可程度最高的密碼模塊安全標準,從2001年頒佈算起,FIPS 140-2已經走過了17年的時光,通過FIPS 140-2認證的密碼產品已達3336款(截至2018年12月3日),參與廠商超過600家,其中國內廠商如華爲、握奇數據、三未信安、海康威視等也都有多款且不同類型的產品均通過了atsec的測評且獲得了FIPS 140-2證書。
然而就是在這17年間,IT業界的新技術、新標準層出不窮,如大數據、雲計算、物聯網、AI等,而密碼模塊的使用也已經不侷限於銀行、電信等傳統領域,而是廣泛的拓展到了智能設備、互聯網、移動應用等,並且和大衆的日常生活息息相關。這也就導致了密碼模塊產業內對出臺下一代標準的呼聲越來越高,並且對下一代密碼模塊安全標準的要求也有所提高,比如:
• 從美國體系下分離出來,變成國際認可標準用以切合各國實際要求
• 易於變更的流程,可以及時反映出業界的新技術和新思想
• 移除舊的不能貼合實際的標準要求
• 針對新類型產品,提供更易於實現以及用戶友好的機制
2 新標準的發展
由美國美國國家標準研究院(NIST)和加拿大通信安全局(CSE)聯合成立的密碼模塊認證計劃組織(CMVP)在2005年開始着手製定下一代密碼模塊安全標準,然而最終由於該標準草案收到大量的無法解決的公衆意見而始終未能定稿,並且在2006年ISO/IEC 19790草案出臺後正式被廢棄。在之後幾年中,ISO/IEC 19790經歷了數次改版,CMVP也在計劃將其作爲FIPS 140-2的下一代標準。一旦獲批,意味着美國和加拿大將直接使用ISO/IEC 19790作爲下一代密碼模塊安全標準,而NIST計劃分配FIPS 140-3 作爲該標準代號。下圖是ISO/IEC 19790標準制定進展:
圖 1: ISO/IEC 19790發展進程
可以看到,目前新一代密碼模塊檢測標準是2015年底修訂的版本“ISO/IEC 19790:2012/Cor 1:2015”,下文均以ISO/IEC 19790指代最新的標準版本。
3 新標準與FIPS 140-2的比較
作爲依託於美國聯邦背景的FIPS 140-2標準,在其標準主框架之外,其強制使用部分美國本土的標準,比如在附錄A中引用了FIPS 197 AES對稱密碼算法、FIPS 186-4數字簽名非對稱算法、FIPS 180-4散列算法等,並在標準配套的實施指南(Implementation Guide)中強制使用許多美國國家標準研究院(NIST)的特別出版物,比如NIST SP800-56A基於離散對數方式的會話密鑰建立體系等,如下圖所示:
圖 2:FIPS 140-2標準以及相關支撐文檔體系
這些強制引用的文檔導致FIPS 140-2標準在很多國家無法落地實施。而作爲國際標準ISO/IEC 19790,各國可以依託於自身體系進行密碼算法或是其他密碼相關功能的選擇,比如我國就可以要求在商用密碼領域使用SM2、SM3、SM4分別作爲非對稱密碼算法、散列算法以及對稱密碼算法,使用GM/T 0003.3作爲密鑰交換協議等,這樣就可以在充分利用成熟的國際標準作爲密碼模塊檢測框架的同時,保持我國自身密碼體系的獨特性與創新性。ISO/IEC 19790及其相關國際標準體系圖如下,其中ISO/IEC 24759可被視爲國際標準版本的FIPS 140-2 DTR:
圖 3:ISO/IEC 19790以及相關支撐文檔體系
在ISO/IEC 19790演進的過程中,分別成立了兩個獨立的討論組,一個關注在物理安全層面,一個關注在軟件安全層面。其中物理安全專題討論組重點關注在:
• 非侵入性測試要求,主要針對側信道攻擊(Side Channel Attack)
• 針對安全等級三級的環境失效保護(EFP)/環境失效檢測(EFT)要求
• 針對安全等級四級的環境失效保護(EFP)要求
• 針對安全等級四級的錯誤注入攻擊(Fault Induction Attack)的緩解
軟件安全專題討論組重點關注在:
• 針對軟件安全的特有章節
• 針對軟件模塊的邊界定義
• 移除了針對安全等級二級軟件模塊的通用評估準則(CC)要求
• 移除了針對安全等級三級和四級的運行環境要求
限於篇幅,本文不展開詳細解釋。對具體內容感興趣的讀者可參考ISO/IEC 19790標準的對應條目要求。
下面我們會對FIPS 140-2和ISO/IEC 19790標準進行比對:
FIPS 140-2 |
ISO/IEC 19790 |
1. 密碼模塊規格 |
1. 密碼模塊規格 |
2. 密碼模塊接口 |
2. 密碼模塊接口 |
3. 角色、服務和鑑別 |
3. 角色、服務和鑑別 |
4. 有限狀態模型 |
4. 軟件/固件安全 |
5. 物理安全 |
5. 運行環境 |
6. 運行環境 |
6. 物理安全 |
7. 密鑰管理 |
7. 非入侵式安全 |
8. 電磁兼容要求 |
8. 敏感安全參數管理 |
9. 自測試 |
9. 自測試 |
10. 設計保障 |
10. 生命週期保障 |
11. 對其他攻擊的緩解 |
11. 對其他攻擊的緩解 |
附錄C. 安全策略 |
附件A. 文檔要求 |
附件A. 許可的安全功能 |
附件B. 密碼模塊安全策略 |
附件B. 許可的操作系統保護輪廓 |
附件C. 許可的安全功能 |
附件C. 許可的隨機數生成器 |
附件D. 許可的敏感安全參數生成和建立 |
附件D. 許可的密鑰建立技術 |
附件E. 許可的鑑別機制 |
附件F. 許可的非入侵式攻擊緩解測試指標 |
表 1:FIPS 140-2與ISO/IEC 19790的比較
如上表所示,與現行的FIPS 140-2標準相比,ISO/IEC 19790基本上繼承了目前的框架體系,仍然具備4個安全等級,刪除了對電磁兼容的要求,將“密鑰管理”和“設計保障”擴展爲“敏感安全參數管理”和“生命週期保障”,並在“生命週期保障”中融入了“有限狀態模型”的要求,額外增加了“軟件/固件安全”和“非入侵式安全”。下文會按照章節列舉ISO/IEC 19790變更或新增的要求點。
3.1 密碼模塊規格
在現有的許可模式和非許可模式之間,ISO/IEC 19790中加入了降級模式。當一個密碼模塊從錯誤狀態退出後就會自動運行於降級模式,在該模式下只能對外提供狀態信息,且導致之前進入錯誤狀態的功能需要被隔離出來。在降級模式中第一次執行任何密碼算法之前,需要先針對該算法進行自測試,同時,如果密碼模塊使用到被隔離的功能或算法時,需要通過標記顯示出來。只有當模塊通過了所有的運行前自測試和條件自測試後纔可以脫離降級模式,如果運行前自測試失敗,則密碼模塊不能進入降級模式。
3.2 密碼模塊接口
在現有的四個邏輯接口(數據輸入、數據輸出、控制輸入、狀態輸出)之外,ISO/IEC 19790定義了第五個接口:控制輸出。所有用於控制密碼模塊運行的輸出命令、信號及控制數據(例如,對另一個模塊的控制命令)應通過“控制輸出”接口輸出。當密碼模塊處於錯誤狀態時,應禁止通過“控制輸出”接口的控制輸出,除非在安全策略文檔中規定了例外情況。
3.3 角色、服務和鑑別
ISO/IEC 19790定義了密碼模塊至少應該具有密碼主管角色,而用戶角色不是必須具備的。
同時,密碼模塊至少要提供如下的服務:
• 顯示密碼模塊的版本,輸出密碼模塊的名稱或模塊標識符以及版本信息,同時這些信息與模塊的確認記錄相關聯。
• 顯示當前狀態
• 執行自測試
• 執行許可的安全功能
• 執行置零
在FIPS 140-2的要求之外,ISO/IEC 19790額外定義了“自啓動密碼服務能力”,指的是無需外界操作員請求,模塊就能夠執行密碼操作和其他覈准的安全功能或敏感安全參數管理技術。該能力要求由密碼主管進行配置,需要兩個內部獨立操作來激活該能力,同時其激活狀態需要由狀態指示給出。
另外,身份鑑別強度的對應要求需要通過密碼模塊自身實現,而不能依賴於策略文檔或是外部的安全規則,比如密碼長度、複雜度等。同時,爲了提供更高強度的身份鑑別機制,針對安全等級四級的密碼模塊,ISO/IEC 19790要求必須提供多因素認證機制。
3.4 軟件/固件安全
本條目爲ISO/IEC 19790新增要求,只適用於軟件/固件模塊,或混合模塊。
針對安全等級二級的密碼模塊,必須使用許可的數字簽名算法或是帶密鑰的消息鑑別碼作爲完整性測試機制;針對安全等級三級或四級的密碼模塊,則只能使用許可的數字簽名算法作爲完整性測試機制。
3.5 運行環境
針對安全等級二級的軟件模塊,操作系統不再受到通用評估準則要求的限制,而是需要滿足ISO/IEC 19790中所列出的針對操作系統訪問控制、審計等功能的一系列限制。
3.6 物理安全
在FIPS 140-2的物理安全基礎之上,ISO/IEC 19790明確允許模塊使用符合標準要求的半透明的外殼。
針對安全等級三級的密碼模塊,則要求必須具備環境失效保護機制,或者至少通過環境失效測試;而針對安全等級四級的密碼模塊,標準明確規定必須實施環境失效保護機制。
3.7 非入侵式安全
本條目爲ISO/IEC 19790新增要求,適用於硬件模塊、固件模塊或固件混合模塊,運行在可修改操作環境的軟件模塊可以由廠家或實驗室決定是否測試本條目。
針對安全等級一級或二級的密碼模塊,需要通過體系文件闡明用於密碼模塊是如何免受附件F中的所有非入侵式技術攻擊的。
針對安全等級三級或四級的密碼模塊,實驗室需要針對模塊進行測試,以確保模塊實現了緩解附件F中列出的非入侵式攻擊的機制。
最新的ISO/IEC 19790標準中尚未對“附件F:許可的非入侵式攻擊緩解測試指標”進行具體的定義。
3.8 敏感安全參數管理
ISO/IEC 19790中定義的敏感安全參數(Sensitive Security Parameter)包含了關鍵安全參數(Critical Security Parameter)以及公開安全參數(Public Security Parameter)。
針對安全等級二級以上的密碼模塊,不能通過規定的程序執行(如磁盤格式化)對敏感安全參數進行置零,而是必須有模塊自身實現置零的機制,例如使用全0或全1或隨機數據覆蓋,但是不能使用另一個未受保護的敏感安全參數來覆蓋當前需要置零的敏感安全參數。
3.9 自測試
自測試在ISO/IEC 19790中分爲兩類:
• 運行前自測試,包括軟件/固件完整性測試、旁路測試、關鍵功能測試
• 條件自測試,包括密碼算法條件自測試、密鑰對一致性測試、軟件/固件加載測試、手動輸入測試、旁路測試、關鍵功能測試、週期測試
無論運行在許可模式還是非許可模式下,密碼模塊都需要執行自測試。
針對安全等級三級或四級的密碼模塊,授權管理員可以訪問模塊的錯誤日誌。該錯誤日誌至少應提供最近的錯誤事件,例如某一個自測試項目失敗。同時,密碼模塊需要在定義的時間週期內,無需外部的輸入或控制而自動重複執行運行前或條件自測試。
完整性測試需要覆蓋密碼模塊的所有軟件/固件部分。用於完整性測試所使用的密碼算法應先通過密碼算法條件自測試。針對不包含軟件或固件的純粹硬件模塊來說,應至少實現一個密碼算法條件自測試作爲運行前自測試。
ISO/IEC 19790與FIPS 140-2的不同之處還在於,密碼算法自測試從上電自測試變成了條件自測試,同時也不侷限於已知答案測試,而是可以使用對比測試或錯誤檢測測試來替代。
另外需要注意的是,FIPS 140-2中所定義的連續隨機數生成器測試(Continuous Random Number Generator Test)不再適用。
3.10 生命週期保障
ISO/IEC 19790對密碼模塊的廠商測試提出了要求,廠商需要獨立於實驗室之外對密碼模塊進行測試,但是標準本身並沒有提及哪些測試必須要由廠商來執行。
有限狀態模型在FIPS 140-2已有的要求之上擴展了更多的必要狀態,目前密碼模塊所需要具備的狀態至少包括:
• 電源開啓/關閉狀態
• 初始化狀態
• 密碼主管狀態
• 關鍵安全參數(CSP)輸入狀態
• 用戶狀態(若實現了用戶角色)
• 許可運行狀態
• 自測試狀態
• 錯誤狀態
另外,從其他角色轉換爲密碼主管角色在ISO/IEC 19790標準中被嚴格禁止。
針對生命週期終止的密碼模塊,應當有體系文件文檔闡明安全清理或是安全銷燬模塊的流程。
3.11 對其他攻擊的緩解
針對安全等級一級、二級或三級的密碼模塊,如果該模塊有專門的設計用來緩解標準中未定義的攻擊技術,則需要提供體系文件闡明如何緩解該攻擊的。
針對安全等級四級的密碼模塊,如果聲明瞭能夠緩解某些攻擊,則需要詳細說明緩解攻擊的方法,並且提供測試該緩解技術有效性的證據。
4 後記
目前我國在密碼模塊安全要求標準的制定上仍然處於跟隨狀態,現行的GM/T 0028-2014參考FIPS 140-2編寫,升級版本的GB/T 37092-2018參考ISO/IEC 19790編寫,已經進入發佈流程。目前“信息安全技術 密碼模塊安全檢測要求”正在編寫中,而針對圖3中列出的其他諸多關鍵支撐文檔仍然缺失。
由於標準的發佈和實施與國際密碼技術產業存在一定的滯後,國內實驗室對如何使用這些標準對密碼模塊進行檢測也仍有較大的疑問。作爲國際知名的密碼模塊檢測實驗室,atsec希望能攜手國內同行,共同提升國內密碼模塊檢測水平,爲商用密碼行業的發展貢獻自身的力量。