本發(fā)明涉及網(wǎng)站密碼保護(hù)領(lǐng)域,具體涉及一種保護(hù)用戶網(wǎng)站密碼的方法。
背景技術(shù):
近年來,因?yàn)榫W(wǎng)站被拖庫導(dǎo)致的大規(guī)模用戶賬戶泄露事件愈演愈烈。例如最近的Dropbox6000萬賬戶泄露和Yahoo的5億賬戶泄露,網(wǎng)站用戶對此無能為力,只能寄希望于網(wǎng)站做好安全防范避免泄露。但是,沒有100%安全的網(wǎng)站,任何網(wǎng)站都有泄露賬號的風(fēng)險(xiǎn)。一旦賬號泄露,因?yàn)榇蠖鄶?shù)用戶習(xí)慣在不同網(wǎng)站使用相同的賬號/密碼,導(dǎo)致用戶在所有網(wǎng)站的賬號都面臨被撞庫(指用戶在A網(wǎng)站的賬號泄露后,被黑客賬號信息去B網(wǎng)站嘗試登錄。如果用戶在A,B兩個(gè)網(wǎng)站的賬號一致,則黑客能成功登錄B網(wǎng)站,稱為撞庫成功)風(fēng)險(xiǎn),已經(jīng)有不少給用戶帶來實(shí)際經(jīng)濟(jì)損失的案例。
一些專門的密碼管理軟件被用來解決密碼泄露問題,例如1Password軟件。它們的共同做法是軟件內(nèi)部維護(hù)一個(gè)密碼數(shù)據(jù)庫,典型的用戶使用場景是:1、用戶為每個(gè)網(wǎng)站的賬戶,通過軟件生成一個(gè)隨機(jī)密碼;2、設(shè)置/修改網(wǎng)站賬號的密碼為軟件生成的隨機(jī)密碼;3、登錄網(wǎng)站時(shí),查詢軟件找到在該網(wǎng)站的密碼,然后拷貝和粘貼到登錄頁面的密碼輸入框。密碼管理軟件有很多明顯的缺點(diǎn):1、密碼是隨機(jī)生成的,用戶很難記住,特別是在有大量網(wǎng)站賬號的情況下,一旦軟件不可用(如不在手邊或數(shù)據(jù)損壞),用戶將無法登錄網(wǎng)站;2、使用不方便,用戶在登錄時(shí),需要打開密碼管理軟件查詢密碼。
總之,如何保護(hù)用戶的密碼安全,做到即使某個(gè)網(wǎng)站的賬號泄露,也不影響用戶在該網(wǎng)站和其它網(wǎng)站的賬號安全,是個(gè)急需解決的重要問題。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明所要解決的技術(shù)問題是提供一種保護(hù)用戶網(wǎng)站密碼的方法,保護(hù)用戶的密碼安全,有效防范撞庫風(fēng)險(xiǎn),也不影響用戶體驗(yàn),方便用戶操作。
為解決上述技術(shù)問題,本發(fā)明采用的技術(shù)方案是:
一種保護(hù)用戶網(wǎng)站密碼的方法,包括以下步驟:
步驟1:在用戶輸入密碼的頁面,網(wǎng)站通過HTML語言的<SCRIPT>標(biāo)簽引入Javascript腳本文件,所述腳本文件提供一個(gè)函數(shù)供頁面調(diào)用;
步驟2:在頁面里包含密碼輸入框的<Form>元素內(nèi),通過<INPUT type=“hidden”>標(biāo)簽指定本Form內(nèi)用戶名輸入框、密碼輸入框的名稱和網(wǎng)站自定義ID,網(wǎng)站自定義ID用于和其他網(wǎng)站區(qū)分開;
步驟3:用戶輸入密碼,點(diǎn)擊“提交”后,在把表單數(shù)據(jù)提交到網(wǎng)站服務(wù)器前,頁面調(diào)用步驟1所述函數(shù);
步驟4:步驟1所述函數(shù)獲取Form內(nèi)用戶輸入的用戶名、密碼和網(wǎng)站指定的網(wǎng)站ID;
步驟5:步驟1所述函數(shù)通過單向算法把用戶名、密碼和網(wǎng)站ID轉(zhuǎn)換成一個(gè)復(fù)雜密碼,并用這個(gè)密碼替換密碼輸入框里用戶輸入的密碼;
步驟6:包括用戶名和替換后密碼的表單數(shù)據(jù)被提交到網(wǎng)站服務(wù)器,若是賬號注冊操作,網(wǎng)站存儲賬號信息到數(shù)據(jù)庫,若是用戶登錄操作,網(wǎng)站比對提交過來的密碼和數(shù)據(jù)庫里存儲的密碼,判斷是否一致。
進(jìn)一步的,所述單向算法為HMAC。
進(jìn)一步的,還包括增加單向算法的計(jì)算量。
與現(xiàn)有技術(shù)相比,本發(fā)明的有益效果是:在完全不影響用戶體驗(yàn)的情況下,實(shí)現(xiàn)了高強(qiáng)度的密碼保護(hù)方案,有效防范了用戶賬號泄露和撞庫風(fēng)險(xiǎn),保護(hù)了用戶賬號和資產(chǎn)安全。
具體實(shí)施方式
本發(fā)明在具體實(shí)施步驟為:
1、在需要用戶輸入密碼的頁面,網(wǎng)站都通過HTML語言的<SCRIPT>標(biāo)簽引入一個(gè)Javascript腳本文件,該腳本文件提供一個(gè)函數(shù)供頁面調(diào)用,所述函數(shù)命名為encrypt_passwor。
2、在頁面里包含密碼輸入框的<Form>元素內(nèi),通過<INPUT type=”hidden”>標(biāo)簽指定本Form內(nèi)用戶名輸入框、密碼輸入框的名稱和網(wǎng)站自定義的一個(gè)ID;其中網(wǎng)站自定義ID用于和其它網(wǎng)站區(qū)分開,可以是本網(wǎng)站的域名,例如“www.example.com”。
3、用戶輸入密碼,點(diǎn)擊“提交”按鈕后,頁面在把表單數(shù)據(jù)提交到網(wǎng)站服務(wù)器前,調(diào)用encrypt_password函數(shù)。
4、encrypt_password函數(shù)獲取Form內(nèi)用戶輸入的用戶名、密碼和網(wǎng)站指定的網(wǎng)站ID。
5、encrypt_password函數(shù)通過單向算法(例如HMAC,HMAC是密鑰相關(guān)的哈希運(yùn)算消息認(rèn)證碼,即Hash-based Message Authentication Code)把用戶名、密碼、網(wǎng)站ID轉(zhuǎn)換成一個(gè)復(fù)雜密碼,并用這個(gè)密碼替換密碼輸入框里用戶輸入的密碼。
6、數(shù)據(jù)(包括用戶名和替換后密碼的表單數(shù)據(jù))被提交到網(wǎng)站服務(wù)器。如果是賬號注冊操作,網(wǎng)站存儲賬號信息到數(shù)據(jù)庫;如果是用戶登錄操作,網(wǎng)站比對提交過來的密碼和數(shù)據(jù)庫里存儲的密碼,判斷是否一致。
在Javascript代碼里的encrypt_password函數(shù)中,可以增加單向算法的計(jì)算量,例如反復(fù)進(jìn)行幾萬次單向變換,增加攻擊者撞庫的難度。以HMAC算法為例:
1)new_password=HMAC(username+old_password,ID)
2)old_password=new_password
3)如果循環(huán)次數(shù)<10000,goto 1,循環(huán)次數(shù)由網(wǎng)站隨機(jī)定義。