y,在手機端生成隱藏信息ctext ;服務(wù)器S最終把用戶注冊信息安全存儲在數(shù)據(jù)庫中,注冊信息包括:身份標識id,隱藏信息ctext,用戶手機號num,驗證字符串v和服務(wù)器存儲口令PSo
[0038]本發(fā)明對較安全的原始主密鑰k進行了兩次結(jié)合多因子的運算,用隨機數(shù)X對原始主密鑰k進行了一次混淆運算生成用戶注冊口令PU,又用隨機數(shù)y對用戶注冊口令PU進行混淆運算生成服務(wù)器存儲口令ps,相當(dāng)于對原始主密鑰k進行了兩次運算,增強了對用戶身份進行驗證的能力,有效避免了單一口令因子易被盜用并進行身份偽裝的危險。并最終以用戶身份標識id,隱藏信息ctext,用戶手機號num,驗證字符串v和服務(wù)器存儲口令ps在目標服務(wù)器S進行注冊。
[0039]本發(fā)明中注冊階段是一次性的,是用戶U必須要進行的初始設(shè)置。用戶U需要同時擁有PC端,手環(huán)和手機這三者才能成功跟目標網(wǎng)站服務(wù)器S進行交互注冊,這符合用戶U在進行僅有的一次注冊時注重安全完整而非快速的特性。成功完成注冊階段后,當(dāng)用戶U想要使用目標網(wǎng)站的服務(wù)時,即可進入登錄過程,此時,用戶U可以只借助手機和手環(huán)來與服務(wù)器進行交互而不需要PC端,這符合用戶U在之后的多次登錄過程中更注重簡便快捷的需求特性。預(yù)登陸階段與登錄階段是連續(xù)進行的,它們共同構(gòu)成一套完整的登錄過程,而且本發(fā)明保證了登錄過程的安全性。
[0040](3)預(yù)登錄階段:
[0041 ] 參照圖3,本步驟的具體實現(xiàn)如下:
[0042]3a)用戶U將自己的身份標識id發(fā)送給服務(wù)器S。
[0043]3b)服務(wù)器S收到用戶身份標識id后,查找數(shù)據(jù)庫中與用戶身份標識id相對應(yīng)的隱藏信息ctext和驗證字符串V,然后生成一個隨機數(shù)challenge,并將隨機數(shù)challenge與隱藏信息ctext和驗證字符串V —起發(fā)送給用戶U。
[0044]3c)用戶U利用服務(wù)器S發(fā)來的驗證字符串V,并在手機端上輸入注冊階段使用的短口令pwd,通過HKDF計算導(dǎo)出注冊階段生成的原始主密鑰k,即HKDF.Extract (v,pwd) 一 (k) ο
[0045]由HKDF函數(shù)的特性可知,如果非法用戶輸入的用于解密驗證字符串V的短口令pwd不正確,HKDF.Extract O函數(shù)將循環(huán)地運算下去,不能及時、正確地生成原始主密鑰k。這就保證了即使攻擊者拿到驗證字符串V,也無法從中準確得出原始主密鑰k,更無法進一步生成用于登錄網(wǎng)站的服務(wù)器存儲口令ps。
[0046]3d)用戶U通過搖手環(huán)行為生成注冊時的隨機數(shù)X,并將隨機數(shù)X通過藍牙發(fā)送到手機纟而上。
[0047]3e)用戶U在手機端利用原始主密鑰k和隨機數(shù)X,生成用戶注冊口令pu。
[0048]3f)用戶U利用手機端串碼頂EI和短口令pwd的hash值,解密隱藏信息ctext,得到注冊階段該網(wǎng)站服務(wù)器生成的隨機數(shù)y;再在手機端利用用戶注冊口令PU和隨機數(shù)y,生成服務(wù)器存儲口令PS。
[0049](4)登錄階段:
[0050]參照圖4,本步驟的具體實現(xiàn)如下:
[0051]4a)用戶U結(jié)合預(yù)登錄階段計算出的服務(wù)器存儲口令ps和收到的隨機數(shù)challenge,計算消息認證碼R = MAC (ps, challenge),并將消息認證碼R發(fā)送給服務(wù)器S。
[0052]4b)服務(wù)器S收到消息認證碼R后,查找數(shù)據(jù)庫中與用戶身份標識id相對應(yīng)的服務(wù)器存儲口令ps,再結(jié)合challenge,計算消息認證碼R’ = MAC (ps, challenge);最后,比較用戶U發(fā)送的消息認證碼R與服務(wù)器S計算出的消息認證碼R’,若相等,則允許用戶U登錄;否則,拒絕登錄請求。
[0053]本發(fā)明使用了除口令外的兩個多因子,即手機和手環(huán),它們均是現(xiàn)實生活中人們熟悉并普遍使用的兩個隨身攜帶的移動智能設(shè)備,與傳統(tǒng)多因子物理設(shè)備如智能卡,電子口令牌等相比具有更加普及的優(yōu)點。在使用手環(huán)多因子時候,為了增強該因子的安全性,利用手環(huán)中重力感應(yīng)裝置記錄用戶行為習(xí)慣特征來生成運算因素即隨機數(shù)X。即使手環(huán)落入攻擊者手中,攻擊者因為不知道該用戶的行為習(xí)慣,而無法復(fù)制用戶搖晃手環(huán)的行為特征,因此也無法獲得手環(huán)信息。
[0054]實施例2
[0055]防止撞庫攻擊的多因子身份認證方法同實施例1,參照圖2,用戶注冊階段的具體實現(xiàn)如下:
[0056]2a)用戶U針對當(dāng)前希望注冊的目標服務(wù)器S選擇一個隨機數(shù)r,一個迭代次數(shù)t和自己方便記憶的短口令pwd,利用HKDF在PC端計算生成一個可公開的驗證字符串V和一個確定的原始主密鑰k,即HKDF.Prepare (r,t,pwd) — (v,k)。
[0057]在生成原始主密鑰k時,用戶U可以根據(jù)安全性級別,利用HKDF函數(shù)的特性,選擇生成原始主密鑰k的復(fù)雜程度,即選擇迭代次數(shù)t:對于普通用戶來說,可選擇迭代次數(shù)較少的密鑰生成運算;對于需要更高安全級別的企業(yè)或個人,可選擇迭代次數(shù)較多的密鑰生成運算。而且,用戶U可以根據(jù)現(xiàn)有成型的HKDF函數(shù),在其進行pr印are運算時手動中止用戶接口來完成對迭代次數(shù)t的選擇。
[0058]這里的短口令pwd至始至終只存在于用戶腦海中,不在安全性較差的網(wǎng)絡(luò)環(huán)境中進行傳輸,所以用戶在選擇短口令Pwd時候,即使使用如手機號碼,出生日期等安全性較低的弱口令也不影響整體的安全性,又由于HKDF運算生成的原始主密鑰k是隨機字符串,且至少為128比特,安全性得以保證。
[0059]2b)用戶U通過自己的行為習(xí)慣搖手環(huán),生成一個隨機數(shù)X,隨機數(shù)X通過藍牙發(fā)送到手機端,用戶U在手機端用眼睛識別隨機數(shù)X,利用可輸入設(shè)備如鍵盤將隨機數(shù)X輸入到PC端,并在PC端結(jié)合原始主密鑰k和隨機數(shù)X,生成用戶注冊口令pu ;換句話說,就是利用隨機數(shù)X對原始主密鑰k進行初次加工,得到安全性加強的用戶注冊口令PU。
[0060]2c)用戶U通過PC端向服務(wù)器S發(fā)送自己的身份標識id,手機號碼num,驗證字符串V和用戶注冊口令PU。
[0061]2d)服務(wù)器S收到用戶U發(fā)來的注冊信息后,服務(wù)器S為該用戶生成一個唯一的隨機數(shù)1,并把I通過安全短信信道發(fā)送給用戶U注冊過號碼的手機端。
[0062]2e)服務(wù)器S利用用戶注冊口令pu和隨機數(shù)y,生成服務(wù)器存儲口令ps,并將ps與用戶身份標識id存儲在數(shù)據(jù)庫中,然后,忘掉y ;其中,服務(wù)器S通過用戶注冊口令pu和隨機數(shù)y,計算得到服務(wù)器存儲口令ps,由于用戶注冊口令pu是經(jīng)過隨機數(shù)X對原始主密鑰k進行初次加工得到的,所以這里也可以理解為是隨機數(shù)y對原始主密鑰k進行二次加工,得到安全性更強的服務(wù)器存儲口令Ps。
[0063]2f)用戶U在手機端收到服務(wù)器S發(fā)來的隨機數(shù)y后,利用手機端串碼頂EI和短口令pwd的hash值,對隨機數(shù)y進行加密,生成加密后的隱藏信息ctext,并將隱藏信息ctext通過安全網(wǎng)絡(luò)通信信道發(fā)送給服務(wù)器S,發(fā)送成功后用戶U可以忘掉隱藏信息ctext。這樣做既給用戶U減輕記憶負擔(dān),又將隨機數(shù)y以隱藏信息的形式安全保護起來。
[0064]2g)服務(wù)器S收到用戶U發(fā)送的隱藏信息ctext后,將隱藏信息ctext與對應(yīng)用戶賬號的身份標識id,用戶手機號num,驗證字符串V和服務(wù)器存儲口令ps存儲在一起作為用戶注冊信息。這些與用戶賬號安全密切相關(guān)的信息均存儲在服務(wù)器數(shù)據(jù)庫中,從而減輕用戶存儲壓力。
[0065]本發(fā)明中用到的中止密鑰導(dǎo)出函數(shù)(Halting Key Derivat1n Funct1ns)是一種生成密鑰的函數(shù),此函數(shù)分為兩個部分:密鑰生成函數(shù)HKDF.prepare O和密鑰提取函數(shù)HKDF.extract O。HKDF.prepare O函數(shù)以用戶的秘密值(如口令、私鑰等)、迭代次數(shù)和隨機字符串作為輸入,輸出密鑰和關(guān)于該密鑰的密文(本發(fā)明中即輸出原始主密鑰和驗證字符串)。HKDF.extract O函數(shù)以關(guān)于密鑰的密文和用戶的秘密值為輸入,輸出密鑰。在密鑰提取階段,若用戶未能給HKDF.extract O函數(shù)輸入正確的秘密值,則該函數(shù)將不能按照正確的次數(shù)及時地中止迭代運算,并正確生成密鑰,而且函數(shù)還將繼續(xù)循環(huán)地迭代運算下去。即使在驗證字符串V落入攻擊者手中的情況下,攻擊者由于不知道用戶的短口令pwd,就無法得到本發(fā)明注冊階段生成的原始主密鑰k,即無法進一步得到關(guān)于用戶身份驗證的任何有效信息。
[0066]實施例3
[0067]防止撞庫攻擊的多因子身份認證方法同實施例1-2,注冊階段步驟2b)中生成的隨機數(shù)X是通過用戶搖晃多因子之一的手環(huán)得到的,用戶搖晃手環(huán)是具有行為特征的,對于不同用戶,因為行為習(xí)慣不同,所以在預(yù)登錄階段,攻擊者即使得到用戶手環(huán),因為無法準確模仿用戶U在初次生成隨機數(shù)X時搖晃手環(huán)的行為特征,也就無法準確生成匹配注冊階段的隨機數(shù)X,所以對隨機數(shù)X具有一定的保護作用。隨機數(shù)X是利用藍牙近距離傳輸?shù)接脩艚壎ǖ氖謾C上,攻擊者很難同時得到用戶的手機和手環(huán),也