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