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