如何讓用戶可以正常登錄,同時(shí)不怕數(shù)據(jù)庫(kù)被盜?

4 評(píng)論 9575 瀏覽 41 收藏 6 分鐘

每個(gè)網(wǎng)站都會(huì)設(shè)計(jì)自己的帳號(hào)系統(tǒng),用戶不管是通過(guò)QQ還是微信登錄過(guò)來(lái)的,大多數(shù)網(wǎng)站都是想把他們轉(zhuǎn)入到自己的帳號(hào)系統(tǒng),因?yàn)檫@樣估值的時(shí)候,這個(gè)用戶才是你的用戶,才好把故事講好。那這些用戶名和密碼該如何存儲(chǔ)才安全呢?或者說(shuō)即使被「脫褲」了,如何才能不被黑產(chǎn)利用呢?

最近兩年曝光的事件,發(fā)現(xiàn)有幾個(gè)公司的密碼庫(kù)居然是明文存儲(chǔ)的,也就是“果果,123456”這樣的存儲(chǔ)方式,小學(xué)生都看得懂,直接可以登錄了,還談何安全。

具體是那幾個(gè)公司就不說(shuō)了,以免有為他們做廣告,幫助他們東山再起的嫌疑(東山再起運(yùn)用了夸張的修辭手法,你懂的,我是吹了個(gè)牛逼)。

所以,問(wèn)題抽象為——如何讓用戶可以正常登錄,同時(shí)不怕數(shù)據(jù)庫(kù)被盜呢?先看看如下圖最原始的數(shù)據(jù)庫(kù)設(shè)計(jì)。

1

最原始的數(shù)據(jù)庫(kù)設(shè)計(jì)肯定是這樣的,想都不用想,被攻破,所有用戶密碼就泄漏了,小明和小紅所有的隱私也都泄漏了。

程序員不服輸,那我不讓Password字段是密碼不就可以了,于是變?yōu)榱诉@樣,密碼是做了MD5(MD5傳送門(mén):名詞解釋:時(shí)間戳、MD5、GUID)之后的密文,這樣用戶登錄的時(shí)候輸入123,后臺(tái)對(duì)比Md5(123)是不是202cb****這段數(shù)據(jù),就能證明輸入正確與否了。

2

理論上MD5是單向的,也就是一個(gè)字符串會(huì)生成一個(gè)唯一的MD5碼(有開(kāi)發(fā)同學(xué)就別較真了,我知道理論上不唯一會(huì)沖突,但概率非常小,產(chǎn)品經(jīng)理請(qǐng)繼續(xù)認(rèn)為基本唯一),這種情況下,數(shù)據(jù)庫(kù)泄漏了,有風(fēng)險(xiǎn)嗎?

答案是有風(fēng)險(xiǎn),因?yàn)檫€有一幫程序員更聰明,發(fā)明了叫彩虹表的東西,彩虹表是把字符串和這些MD5值對(duì)應(yīng)起來(lái)做了一個(gè)大數(shù)據(jù)庫(kù),也就是知道了202cb****這段數(shù)字之后,會(huì)反向查找出字符串,也就拿到了明文的密碼。這個(gè)彩虹表一般都是上百個(gè)G的數(shù)據(jù),所以用MD5或者SHA這些算法來(lái)保護(hù)密碼也有漏洞。

程序員又不服,繼續(xù)探索新的方法,客官注意了,我們馬上進(jìn)入到高潮部分,講述如何用「加鹽」來(lái)解決這個(gè)問(wèn)題。

3

如上圖所示,我們加了一個(gè)新的字段叫Salt,翻譯過(guò)來(lái)就是鹽,這個(gè)字段是用戶注冊(cè)的時(shí)候隨機(jī)產(chǎn)生的一個(gè)字符串,所以這回我們生成數(shù)據(jù)庫(kù)中的密碼就是這樣生成的:Md5(“123” + “jakldsfjn234jkl234jkl;123″)=6bbf7f8dd1f7dd3d7c03182620ba312f,當(dāng)用戶輸入123的密碼時(shí),后臺(tái)也用這個(gè)算法來(lái)驗(yàn)證是不是可以正常登錄。

假設(shè)數(shù)據(jù)庫(kù)又被竊取了,這個(gè)時(shí)候拿到的密碼庫(kù)的Password字段是兩個(gè)字符串拼接的Md5值,這個(gè)時(shí)候由當(dāng)前的密碼會(huì)得到“123” + “jakldsfjn234jkl234jkl;123”的字符串拼接的值,但是要區(qū)分出哪些部分是密碼成本是非常高的,而且這個(gè)salt可以?shī)A雜在123這個(gè)字符串的任何位置,甚至可以將鹽分開(kāi)比如1前面放三個(gè)字符,2后面兩個(gè)字符,剩下的接到3的結(jié)尾。

數(shù)學(xué)推理,果果也沒(méi)有求證和推演過(guò),總之時(shí)間成本會(huì)令這種破解收益非常非常小,從而保護(hù)了密碼庫(kù)的安全。

#專欄作家#

給產(chǎn)品經(jīng)理講技術(shù),微信公眾號(hào)(pm_teacher),人人都是產(chǎn)品經(jīng)理專欄作家。資深程序猿,專注客戶端開(kāi)發(fā)若干年,對(duì)前端、后臺(tái)技術(shù)略懂,熱衷于對(duì)新的科技領(lǐng)域的探索。

本文原創(chuàng)發(fā)布于人人都是產(chǎn)品經(jīng)理。未經(jīng)許可,禁止轉(zhuǎn)載。

更多精彩內(nèi)容,請(qǐng)關(guān)注人人都是產(chǎn)品經(jīng)理微信公眾號(hào)或下載App
評(píng)論
評(píng)論請(qǐng)登錄
  1. 還可以sha1(md5)混合加密。

    來(lái)自廣東 回復(fù)
  2. 果果你跑到這里來(lái)啦

    來(lái)自北京 回復(fù)
  3. 產(chǎn)品經(jīng)理技術(shù)科普文

    來(lái)自廣東 回復(fù)
  4. 受小弟一拜

    來(lái)自浙江 回復(fù)