楊茂云 王丹婷 張篤振
摘要:安全口令要求口令長度長、字符類型多、排列無規(guī)律,因而不容易記憶。雖然把加密的口令保存在介質(zhì)上可以避免遺忘口令,但是一旦存儲介質(zhì)丟失,用戶就不能找回口令。提出了一個口令保護(hù)方法,首先基于HMAC把用戶賬號和用戶秘密轉(zhuǎn)換成N字節(jié)的隨機(jī)串,然后動態(tài)確定口令字節(jié)串在隨機(jī)串中的起始位置,從而得到L(L 關(guān)鍵詞:口令保護(hù);HMAC;Base94+ 中圖分類號:TP393? ? ? ? 文獻(xiàn)標(biāo)識碼:A 文章編號:1009-3044(2021)13-0061-02 身份認(rèn)證技術(shù)可以防止敵手非法侵入信息系統(tǒng),身份認(rèn)證技術(shù)主要有基于生物信息的身份認(rèn)證技術(shù),比如指紋、虹膜;基于隱私秘密的身份認(rèn)證技術(shù),比如口令認(rèn)證,公鑰密碼認(rèn)證??诹钫J(rèn)證由于其原理簡單且實(shí)現(xiàn)成本低,得到了廣泛應(yīng)用,幾乎所有的信息系統(tǒng)都采用口令認(rèn)證技術(shù)??诹钫J(rèn)證易遭受口令試探攻擊,口令試探攻擊主要有蠻力攻擊和字典攻擊兩種形式: (1)蠻力攻擊。蠻力攻擊是攻擊者通過窮舉口令空間來試探出正確口令的一種攻擊方式。通過限制登錄次數(shù)、增加口令空間來對抗蠻力攻擊,例如增加口令的長度和口令字符類型的數(shù)量。 (2)字典攻擊。長度長、字符類型多的口令不容易記憶,用戶為了避免遺忘口令,往往用身邊熟悉的、容易記憶的信息,比如簡單數(shù)字串、生日、電話號碼、姓名的字母組合來做口令,這些口令的安全性不高,是弱口令。攻擊者事先收集大量的弱口令做成口令字典文件,當(dāng)入侵系統(tǒng)時,攻擊者在口令字典文件中搜索試探正確口令,這種攻擊方式就是字典攻擊。字典攻擊的成功率和效率較高,只要采用無規(guī)律的口令就可以對抗字典攻擊。 上述兩種攻擊方式可以看出:用戶只有選擇字符類型多、長度長、無規(guī)律的口令,這樣的口令安全性高,是強(qiáng)口令。強(qiáng)口令不容易記憶,用戶為了避免遺忘強(qiáng)口令,往往會把口令存儲在某種介質(zhì)中,比如紙本、電子存儲介質(zhì)等。這些介質(zhì)一旦丟失,就會造成口令泄露。目前,常用加密的方式存儲口令,比如硬件有口令安全卡、軟件有口令安全錢包等??诹畎踩?、口令安全錢包一旦丟失,雖然不會泄露口令,但是用戶也不能找回口令??傊诩用艽鎯Φ姆绞揭膊荒鼙Wo(hù)口令安全。 本文基于密碼技術(shù)設(shè)計一種不需要存儲介質(zhì)的口令保護(hù)方法。用戶注冊系統(tǒng)賬戶時,基于賬號和密鑰生成滿足安全需求的口令完成注冊,登錄系統(tǒng)時用賬號和密鑰再次生成口令登錄系統(tǒng),不需要記憶和存儲口令從而保護(hù)了口令安全。該方法可以用軟件和硬件實(shí)現(xiàn),比如軟件實(shí)現(xiàn)可以基于該方法設(shè)計App、小程序,硬件實(shí)現(xiàn)可以基于該方法設(shè)計IC卡等等。 1相關(guān)技術(shù) 1.1Base94+編碼 把字節(jié)串轉(zhuǎn)換成字符需要進(jìn)行編碼,常用的編碼有ASCII編碼、UNICODE編碼、Base64編碼等??诹钜每娠@示的打印字符,鍵盤上共有94個可顯示的打印字符,設(shè)計Base94+編碼表如表1所示。 1.2 HMAC 基于Hash的消息認(rèn)證碼HMAC(Hash-based Message Authentication Code)是一種基于Hash函數(shù)和密鑰進(jìn)行消息認(rèn)證的方法,在IPSec和SSL中得到廣泛應(yīng)用,是事實(shí)上的Internet標(biāo)準(zhǔn)[1]。 HMAC=Hash(Secret,Message),Hash函數(shù)可以選擇SHA-1、SM3[4]等,也可以采用對稱密碼技術(shù),比如AES128、SM4[4]等。由于Hash函數(shù)的單向性[1],即使惡意的第三者截獲HMAC也不可能知道Secret,這意味著只有掌握Secret的用戶才能計算HMAC。另外Hash函數(shù)的輸出是隨機(jī)的,HNAC可以看作是一個偽隨機(jī)數(shù)發(fā)[2]。 2口令生成方法 提出的口令生成方法如圖1所示,用戶注冊賬戶時通過賬號和秘密生成口令,當(dāng)用戶登錄系統(tǒng)時,通過同樣的計算就又得到同樣的口令,口令不需要保密存儲。 2.1生成隨機(jī)字節(jié)串 用戶進(jìn)行系統(tǒng)注冊時,選擇一個賬號account和一個密鑰secret,計算得到N字節(jié)(N必須大于口令長度L)的隨機(jī)字節(jié)串randomByteStr,如式(1)所示。 randomByteStr=Hash(secret,account)? ? ? ? ?(1) 2.2動態(tài)確定口令字節(jié)串起始位置 首先獲取randomByteStr的第0字節(jié),取最低4比特做口令字節(jié)串的起始位置s,后續(xù)字節(jié)的位置分別為(s+1)modN,(s+2)modN…(s+L-1)modN。例如:如圖2所示,randomByteStr的長度N=10字節(jié),randomByteStr的第0字節(jié)是a7,因而口令字節(jié)串的起始位置是7。若口令長度L=6字符,那么口令字節(jié)串是0xc1、0x40、0x91、0xa7、0x10、0xf3。 2.3口令生成算法 3安全性分析 (1)攻擊者即使知道賬號信息account,因?yàn)椴恢烂孛躶ecret,因此不能獲得randomByteStr,也就不能得到與賬號對應(yīng)的口令。另外攻擊者即使知道randomByteStr,由于Hash函數(shù)的單向性[3],攻擊者也不能獲得用戶的secret。敵手獲得口令的最好方法是蠻力攻擊,只要secret足夠復(fù)雜,蠻力攻擊就是不可行的。 (2)Hash函數(shù)是一個偽隨機(jī)數(shù)發(fā)生器,通過Hash函數(shù)得到的randomByteStr可以是隨機(jī)的,動態(tài)確定口令字節(jié)串的起始位置也進(jìn)一步增加了隨機(jī)性,這樣得到的口令是隨機(jī)的。 (3)Base94+的編排方式保障了特殊字符出現(xiàn)32次,大寫字母出現(xiàn)32次,小寫字母出現(xiàn)32次,數(shù)字出現(xiàn)32次。當(dāng)口令長度是L字符,則生成至少含有三類字符的口令的概率是: (4L-4-6(2L-2))/4L??诹铋L度越長,生成至少含有三類字符口令的概率越大,例如口令長度L=8,則生成至少含有三類字符的口令的概率約為97.67%。 4結(jié)語 應(yīng)用系統(tǒng)基本都采用口令進(jìn)行身份認(rèn)證,大多數(shù)應(yīng)用系統(tǒng)一般都要求口令中包含特殊字符、英文字母、數(shù)字并且長度要大于8。這樣的口令不好記憶,用戶忘記口令,需要進(jìn)行密碼找回操作,這既麻煩又不能保護(hù)口令安全。提出的口令生成方法能快速生成包含特殊符號、字母、數(shù)字的口令,用IC卡或者App、小程序?qū)崿F(xiàn)該方法,口令可以即用即得,不用存儲和記憶,可以很好地保護(hù)口令安全。 參考文獻(xiàn): [1] H. Krawczyk,M. Bellare,R. Canetti. HMAC: Keyed-Hashing for Message Authentication[EB/OL].https://tools.ietf.org/html/rfc2104 [2] D. M'Raihi,M. Bellare,and F. Hoornaert,HOTP: An HMAC-Based One-Time Password Algorithm[EB/OL].https://tools.ietf.org/html/rfc4226. [3] 楊茂云,信息與網(wǎng)絡(luò)安全[M].北京:電子工業(yè)出版社,2007. [4] 國家密碼管理局.國家密碼管理局關(guān)于發(fā)布《祖沖之序列密碼算法》等6項(xiàng)密碼行業(yè)標(biāo)準(zhǔn)公告[EB/OL].http://www.sca.gov.cn/sca/xwdt/2012-03/21/content_1002392.shtml. 【通聯(lián)編輯:代影】