密碼應(yīng)用安全性評估要點之動態(tài)口令技術(shù)常見問題探討
在信息系統(tǒng)安全防護中,身份鑒別作為系統(tǒng)準入的必要手段,始終是一個繞不開又至關(guān)重要的話題。身份鑒別經(jīng)常被解釋為:根據(jù)“你知道什么”、“你擁有什么”、“你是誰”來證明“你”的身份。身份鑒別信息/介質(zhì)從傳統(tǒng)的物理鑰匙、暗號,到靜態(tài)口令、ID標簽卡,到CPU卡、UKey、動態(tài)令牌,再到指紋、人臉、虹膜等,推陳出新、各有所長。多因素身份鑒別則是通過綜合多種身份鑒別方式,以增強鑒別的強度。
從原理上看,無論是物理鑰匙、暗號、靜態(tài)口令、ID標簽卡,還是指紋、人臉、虹膜等生物特征,都只是一種靜態(tài)的身份鑒別信息/介質(zhì),因此在理論上都存在著可復(fù)制、易丟失、難以抵抗重放攻擊等風(fēng)險。密碼技術(shù)作為保障網(wǎng)絡(luò)與信息安全最有效、最可靠、最經(jīng)濟的關(guān)鍵核心技術(shù),具有內(nèi)蘊的加密和認證屬性,成為了實現(xiàn)身份鑒別最自然、最有力的手段。動態(tài)口令認證技術(shù)就是使用密碼技術(shù)實現(xiàn)身份鑒別的典型例子。
動態(tài)令牌是生成并顯示動態(tài)口令(OTP/One-Time Password)的載體,常見的銀行電子密碼器、Google的Authenticator身份認證器軟件,都屬于動態(tài)令牌的范疇。由于動態(tài)口令認證技術(shù)的實現(xiàn)原理不一,這在對信息系統(tǒng)進行合規(guī)性檢查時,給測評機構(gòu)和信息系統(tǒng)責(zé)任單位帶來了一定的困擾。本文總結(jié)了常見的動態(tài)口令認證技術(shù),對動態(tài)令牌和動態(tài)令牌認證系統(tǒng)的主要功能和安全要求進行了簡述,并對動態(tài)口令認證實現(xiàn)身份鑒別的測評實施和判定提出了一些建議。
一、相關(guān)概念與標準
OTP:One-Time Password
HOTP:HMAC-Based One-Time Password
TOTP:Time-Based One-Time Password
HMAC:The Keyed-Hash Message Authentication Code
RFC4226 HOTP: An HMAC-Based One-Time Password Algorithm
RFC6238 TOTP: Time-Based One-Time Password Algorithm
FIPS PUB 198 The Keyed-Hash Message Authentication Code(HMAC)
GM/T 0021-2012《動態(tài)口令密碼應(yīng)用技術(shù)規(guī)范》
GB/T 38556-2020《信息安全技術(shù) 動態(tài)口令密碼應(yīng)用技術(shù)規(guī)范》
GB/T 37092-2018《信息安全技術(shù) 密碼模塊安全要求》
GB/T 15852.2-2012《信息技術(shù) 安全技術(shù) 消息鑒別碼 第2部分采用專用雜湊函數(shù)的機制》
GB/T 15843.1-2017《信息技術(shù) 安全技術(shù) 實體鑒別 第1部分:總則》
GB/T 15843.4-2008《信息技術(shù) 安全技術(shù) 實體鑒別 第4部分:采用密碼校驗函數(shù)的機制》
二、動態(tài)口令運算方法
對于動態(tài)口令生成方式,我們主要關(guān)注以下要素:
- 動態(tài)因子
- 種子密鑰
- 動態(tài)口令生成算法
- 動態(tài)口令生成算法中使用的基礎(chǔ)密碼算法
為了方便起見,我們將4從3中獨立了出來,此時動態(tài)口令生成算法不指定具體的基礎(chǔ)密碼算法,而是同一類理論上可替換的密碼算法,如對稱密碼算法、雜湊密碼算法。
- HOTP生成:HOTP(K,C) = Truncate(HMAC-HASH(K,C)),其中HASH=SHA-1
- TOTP生成:TOTP(K,T) = Truncate(HMAC-HASH(K,T)),其中HASH=SHA-1/SHA-256/SHA-512
- GMOTP生成:GMOTP(K,T|C|Q)=Truncate(F(K,T|C|Q)),其中F=SM3/SM4
注1:K為種子密鑰,T為時間因子,C為事件因子,Q為挑戰(zhàn)因子,Truncate()為截位函數(shù)。
注2:T|C|Q的含義為T和C必選一個、Q可選,然后進行拼接。
注3:當(dāng)F為SM3算法時,F(xiàn)(X,Y)=SM3(X|Y);當(dāng)F為SM4算法時,F(xiàn)(X,Y)=SM4_ENCX(Y),采用類似于CBC的模式(IV為0串,異或改為算術(shù)加,高位溢出舍去)。
注4:其他細節(jié)本文檔暫不詳解,如時間因子的轉(zhuǎn)化、數(shù)據(jù)編碼/填充/截斷等,請以相關(guān)標準為準。
三、動態(tài)令牌實現(xiàn)身份鑒別
將動態(tài)因子對應(yīng)到時變參數(shù):
- 時間因子T→時間戳
- 事件因子C→序號
- 挑戰(zhàn)因子Q→隨機數(shù)
鑒別發(fā)起方和驗證方共同擁有種子密鑰(鑒別密鑰),并約定好動態(tài)因子的選取,兩方通過相同的動態(tài)口令算法(校驗函數(shù)),對相同的動態(tài)因子和種子密鑰(時變參數(shù)和鑒別密鑰)進行計算,分別生成相同的動態(tài)口令(校驗值),因此滿足GB/T 15843.4-2008《信息技術(shù)?安全技術(shù)?實體鑒別?第4部分:采用密碼校驗函數(shù)的機制》規(guī)定的鑒別機制。僅含時間因子或事件因子時,為一次傳遞單向鑒別;含挑戰(zhàn)因子時,為兩次傳遞單向鑒別。
四、動態(tài)令牌認證系統(tǒng)工作流程
動態(tài)口令認證系統(tǒng)為應(yīng)用系統(tǒng)提供動態(tài)口令鑒別服務(wù),由動態(tài)令牌、鑒別模塊、密鑰管理模塊組成。
動態(tài)令牌生成動態(tài)口令,鑒別模塊驗證動態(tài)口令的正確性,密鑰管理模塊負責(zé)動態(tài)口令的密鑰管理,應(yīng)用系統(tǒng)將動態(tài)口令按照指定的協(xié)議報文發(fā)送至鑒別模塊進行鑒別。
五、時間同步
動態(tài)令牌可以當(dāng)作是一個離線設(shè)備,通過內(nèi)部時鐘或維護的計數(shù)器或應(yīng)用服務(wù)產(chǎn)生的挑戰(zhàn)碼(手動輸入進令牌)來與認證系統(tǒng)保持相同的動態(tài)因子。當(dāng)通過內(nèi)部時鐘生成實時時間來作為時間因子時,在動態(tài)令牌的使用年限內(nèi),是有可能出現(xiàn)小幅偏移的情況的,此時需要對令牌進行同步。注意令牌同步并不是調(diào)整令牌本身,而是修改認證系統(tǒng)中對應(yīng)令牌的偏移量。
同步分大窗口(±10認證周期)、中窗口(±5認證周期)、小窗口同步(±2認證周期),用于判斷偏移量的大小。
六、常見問題分析
(1)HOTP與TOTP有什么區(qū)別?
HOTP的“H”意為“HMAC-Based”,即“基于HMAC”。從形式上看,TOTP也可以認為是一種廣義的HOTP。
當(dāng)然,現(xiàn)行標準已規(guī)定了HOTP和TOTP的動態(tài)因子和特定算法,因此在實踐中還是有必要區(qū)分:HOTP使用事件因子C(具體為計數(shù)器),通過HMAC-SHA-1算法進行計算;而TOTP使用時間因子T,通過HMAC-SHA-1 / HMAC-SHA256 / HMAC-SHA512算法進行計算。
(2)使用短信驗證碼進行認證是否屬于動態(tài)口令認證技術(shù)?
不屬于。短信驗證碼是應(yīng)用服務(wù)商為確認用戶身份是否真實而采用的有別于傳統(tǒng)靜態(tài)口令驗證的認證手段,在接收到客戶端請求后,通過第三方服務(wù)向用戶手機發(fā)送一條即時的包含一串定長字符的短信,用戶將該串字符輸入應(yīng)用的鑒別界面,以確認是機主本人在進行登錄等敏感操作。
注意到此處僅利用到真實用戶持有一種不同于靜態(tài)口令的鑒別介質(zhì)——一臺在注冊時與用戶綁定的可收發(fā)訊息的移動終端(準確來說是SIM卡),并沒有利用到用戶及用戶終端的計算能力,用戶及用戶終端未持有密鑰這一關(guān)鍵鑒別信息。此外,下發(fā)短信中的字符串本身就是敏感信息,而在合規(guī)的身份鑒別過程中(包括動態(tài)口令驗證),鑒別方不發(fā)送數(shù)據(jù),或者僅發(fā)送不含顯式敏感數(shù)據(jù)的中間信息。因此短信驗證碼認證不屬于動態(tài)口令認證技術(shù),也不是合規(guī)的身份鑒別方式。
(3)國密OTP是否就是將SHA系列哈希算法替換成SM3算法,根據(jù)采用的動態(tài)因子成為國密版的HOTP和TOTP?
國密OTP不僅是基礎(chǔ)密碼算法與HOTP/TOTP不一致,動態(tài)口令生成算法本身也不一樣。國密OTP可以采用SM3算法或SM4算法。當(dāng)采用SM3算法時,并不是采用HMAC算法對種子密鑰和動態(tài)因子進行運算,而是將種子密鑰和動態(tài)因子拼接后進行SM3雜湊;當(dāng)采用SM4算法時,用種子密鑰對動態(tài)因子進行加密處理,這種使用對稱密碼算法實現(xiàn)的方法比較別致。
動態(tài)因子 | 種子密鑰 | 基礎(chǔ)密碼算法 | 動態(tài)口令生成算法 | |
HOTP | C | ≥128bit | SHA-1 | 見第二節(jié) |
TOTP | T | HMAC輸出長度 | SHA-1/SHA256/SHA512 | |
國密OTP(SM3) | T|C|Q | ≥128bit | SM3 | |
國密OTP(SM4) | T|C|Q | ≥128bit | SM4 |
(4)動態(tài)令牌的密碼產(chǎn)品合規(guī)性如何進行認定?
在商用密碼產(chǎn)品認證體系中,動態(tài)令牌(SRK)和動態(tài)令牌認證系統(tǒng)(SRT)為兩類密碼產(chǎn)品,分別進行商密產(chǎn)品認證。在測評時,一般需要分別對動態(tài)令牌和動態(tài)令牌認證系統(tǒng)進行合規(guī)性考察。
動態(tài)令牌一般為硬件密碼模塊,目前已通過商密產(chǎn)品認證的動態(tài)令牌的密碼模塊安全等級只有一級。不排除后續(xù)有動態(tài)令牌產(chǎn)品通過更高等級的認證。
動態(tài)令牌認證系統(tǒng)為系統(tǒng)級密碼產(chǎn)品,無密碼模塊等級,在測評時難以理想化地定性其形態(tài),建議咨詢一下客戶和廠商是否含密碼模塊(服務(wù)器密碼機、軟件密碼模塊等)或密鑰管理系統(tǒng),有則進一步追溯密碼模塊的安全等級。
(5)廠商提供了動態(tài)令牌的商密產(chǎn)品認證證書,但客戶實際使用的是手機APP令牌,這種情況可以認定密碼產(chǎn)品合規(guī)嗎?
GM/T 0021-2012《動態(tài)口令密碼應(yīng)用技術(shù)規(guī)范》和GB/T 38556-2020《信息安全技術(shù) 動態(tài)口令密碼應(yīng)用技術(shù)規(guī)范》作為該類密碼產(chǎn)品的技術(shù)標準,主要規(guī)定了硬件形態(tài)的動態(tài)令牌要求。在原商用密碼產(chǎn)品型號證書中,賦予動態(tài)令牌產(chǎn)品型號的前綴為“SRK”,第三位“K”代表形態(tài)為板卡類。
此外,對于軟件形態(tài)的動態(tài)令牌,我們需要追究其種子密鑰的生成、分發(fā)、存儲、使用等生存周期管理,尤其是密鑰存儲方面,難以溯源到一個可靠的“安全根”,這也是軟件密碼模塊設(shè)計的一個痛點。
當(dāng)然,廠商為了客戶使用和管理方便,可能開發(fā)了相關(guān)的軟件產(chǎn)品。廠商以此軟件產(chǎn)品通過商用密碼產(chǎn)品認證,才能認為密碼產(chǎn)品合規(guī)。在現(xiàn)行的商用密碼產(chǎn)品認證體系中,認證證書編號上的數(shù)字第6~7位代表產(chǎn)品類型,14為動態(tài)令牌/動態(tài)令牌認證系統(tǒng),22為其他密碼模塊(包括軟件密碼模塊),例如查詢商密認證業(yè)務(wù)網(wǎng)得知,GM00441142021xxxx為某公司研發(fā)的動態(tài)令牌。若將來出現(xiàn)了動態(tài)令牌以軟件形態(tài)通過商密產(chǎn)品認證的,產(chǎn)品類型可能是“22”而不一定是“14”,這一點值得留意。
(6)動態(tài)令牌/動態(tài)令牌認證系統(tǒng)具有有效的商用密碼產(chǎn)品認證證書,相關(guān)測評項的“密鑰管理”維度是否可直接判為合規(guī)?
不能。還至少需要考慮以下內(nèi)容:
- 如用于應(yīng)用系統(tǒng)身份鑒別,需測試動態(tài)口令認證是否得到了有效應(yīng)用。
- 在將動態(tài)令牌認證系統(tǒng)本身作為設(shè)備層面的測評對象時,仍需測評對其進行管理時的身份鑒別機制和遠程管理通道等。
- 需測評在動態(tài)令牌/動態(tài)令牌認證系統(tǒng)中種子密鑰的生存周期管理,尤其是生成/分散、導(dǎo)入(分發(fā))、存儲、使用等流程。
- 需查看動態(tài)令牌認證系統(tǒng)的管理界面,如令牌序列號管理、密鑰管理、令牌狀態(tài)、連續(xù)錯誤次數(shù)、令牌偏移量、算法配置等(如有)。
- 需核查測評等級與密碼模塊安全等級是否匹配,如第三級信息系統(tǒng)應(yīng)采用符合GB/T 37092二級及以上的動態(tài)令牌產(chǎn)品,理論上動態(tài)令牌認證系統(tǒng)中含有的密碼模塊部件也應(yīng)符合GB/T 37092二級及以上要求。
(7)使用Google Authenticator或Microsoft Authenticator作為動態(tài)令牌用于服務(wù)器運維人員的身份鑒別,如何對服務(wù)器的“身份鑒別”測評項進行判定?
Google Authenticator和Microsoft Authenticator是應(yīng)用商店里常見的OTP,以下給出了一個測評示例(暫不考慮OTP認證服務(wù)端)。
量化評估 | 風(fēng)險判定 | |||
D | A | K | ||
Google Authenticator | √ 支持HOTP、TOTP。 | × 使用了非合規(guī)的密碼算法和動態(tài)口令生成算法。 | × 密鑰生成、分發(fā)、存儲等不合規(guī),密碼產(chǎn)品不合規(guī)。 | 1.如使用HOTP,需針對SHA-1算法判定高風(fēng)險;如使用基于SHA-1的TOTP,判為高風(fēng)險。 2.密鑰管理方面的風(fēng)險等級需根據(jù)實際情況判定。 |
Microsoft Authenticator | √ 支持TOTP。 | × 使用了非合規(guī)的密碼算法和動態(tài)口令生成算法。 | × 密鑰生成、分發(fā)、存儲等不合規(guī),密碼產(chǎn)品不合規(guī)。 | 1. 如使用基于SHA-1的TOTP,判為高風(fēng)險。 2.密鑰管理方面的風(fēng)險等級需根據(jù)實際情況判定。 |
市面上開源的OTP或OTP認證服務(wù)端種類較多,如Google Authenticator(與商店版不太一致,且已停止維護)、FreeOTP/FreeOTP+、LinOTP等,大都支持HOTP和TOTP,具體結(jié)論以實際測評情況為準。