為什么密碼要以MD5值存儲(chǔ)在數(shù)據(jù)庫(kù)

1,為什么數(shù)據(jù)庫(kù)中保存的是密碼的MD5值,而不是明文?
首先我們確認(rèn)的一點(diǎn)是:MD5肯定比明文要安全一些(當(dāng)然肯定不是最安全的)
如果數(shù)據(jù)庫(kù)存儲(chǔ)的是明文,如果數(shù)據(jù)庫(kù)被黑了,那么明文密碼泄露之后,普通用戶都可以很容易登錄.
但是如果存儲(chǔ)的是MD5值,就算泄露了,普通用戶也沒法登錄.因?yàn)轫?yè)面上登錄時(shí)要求輸入明文.
當(dāng)然程序員可以直接調(diào)用登錄接口,傳遞密碼MD5值也可以登錄.

另外一點(diǎn):明文包含更多的信息(相對(duì)于其MD5值),比如明文可能是銀行密碼,或者包含出生日期等,這些都是敏感信息.
使用MD5之后,這些敏感信息就會(huì)被抹掉.即信息量減少

如果使用明文存儲(chǔ),那么登錄時(shí),網(wǎng)絡(luò)傳輸?shù)氖敲艽a明文.

2,遇到的問題
若數(shù)據(jù)庫(kù)存儲(chǔ)的是密碼MD5值,那么密碼強(qiáng)度就不方便計(jì)算.
因?yàn)槊艽a強(qiáng)度是根據(jù)密碼明文來計(jì)算的,而不是密碼的MD5值,但是數(shù)據(jù)庫(kù)中存儲(chǔ)的是密碼的MD5值.
根據(jù)MD5值是沒法計(jì)算密碼強(qiáng)度的,因?yàn)镸D5值不可逆,即根據(jù)MD5值沒法得到明文.
所以此時(shí)密碼強(qiáng)度應(yīng)該在前端校驗(yàn)

3,原則:
(1)在網(wǎng)絡(luò)傳輸中,不能傳輸密碼明文;
(2)密碼明文不能落地,即密碼明文不能存儲(chǔ)在任何地方,包括數(shù)據(jù)庫(kù),瀏覽器cookie
(3)就算數(shù)據(jù)庫(kù)被黑,黑客也沒法計(jì)算出明文

其實(shí)我想到了一種方案:
數(shù)據(jù)庫(kù)中存儲(chǔ)的仍然不是密碼明文,但是也不是MD5值,而是加密(對(duì)稱加密,比如AES,DES等)的密文.
因?yàn)闈M足了:
(1)數(shù)據(jù)庫(kù)沒有存儲(chǔ)密碼明文;
(2)可以很方便地計(jì)算密碼強(qiáng)度
(3)忘記密碼很容易恢復(fù)
(4)網(wǎng)絡(luò)傳輸?shù)娜匀皇敲艽a的MD5值(后臺(tái)先解密得到密碼明文,然后計(jì)算明文的MD5值)

優(yōu)點(diǎn):后臺(tái)可以計(jì)算出密碼明文;
缺點(diǎn):黑客仍然有可能獲取明文
只要
(a)黑掉數(shù)據(jù)庫(kù);
(b)獲取到秘鑰

但是使用MD5存儲(chǔ),黑客永遠(yuǎn)都無法獲取密碼明文

4,如果使用DES加密,秘鑰保存在什么地方呢?
DES加密是對(duì)稱加密,密鑰的保持就是個(gè)大問題,保持在應(yīng)用程序中的密鑰非常容易被破解。而且des密鑰一旦泄漏,就等于統(tǒng)統(tǒng)泄漏了。所以在軟件中用des比較傻逼。md5 在密文夠復(fù)雜的情況下,用字典法破解很難,如果再限制驗(yàn)證數(shù),基本不可能被破解,當(dāng)然,如果密碼很簡(jiǎn)單如111 222 神馬的,就當(dāng)我沒說

如果用加密機(jī)的話,密鑰一次性上載,退一步用軟件,密鑰也會(huì)作嚴(yán)密保護(hù)。密鑰還分級(jí)別,定時(shí)更換。暴力破解MD5是比較容易的,但窮舉DES密鑰幾乎是不可能的任務(wù),2^56的可能。兩者破解方式不同,MD5是嘗試明文,DES是嘗試密鑰。編兩個(gè)程序就能看出兩者之間巨大的計(jì)算量差異。DES還可以使用Triple的方式,密鑰擴(kuò)展為128位?,F(xiàn)在DES已經(jīng)慢慢推出應(yīng)用領(lǐng)域了,AES是更好的選擇。

分散算法可以是任何算法,RSA,DES,MD5,甚至異或都可以。目前實(shí)際多用3DES,主要是因?yàn)橛布?shí)現(xiàn)比較成熟,在大交易量的時(shí)候能夠保證性能。比如銀行隨機(jī)產(chǎn)生一個(gè)大隨機(jī)數(shù),導(dǎo)入加密機(jī),作為根密鑰。然后配合銀行U盾的芯片編號(hào)或者POS機(jī)編號(hào)進(jìn)行一次分散運(yùn)算,產(chǎn)生一個(gè)密鑰,作為這個(gè)U盾或者POS的根密鑰。這種密鑰一般是灌在機(jī)器的SIM卡的只寫區(qū)的,是沒有可能讀出來的。然后再具體交易的時(shí)候,用這個(gè)密鑰配合交易時(shí)間,交易流水號(hào)等信息,再次進(jìn)行分散,產(chǎn)生工作密鑰,一般用工作密鑰來加密客戶密碼,金額,借貸方賬號(hào)等敏感信息。當(dāng)報(bào)文發(fā)送到服務(wù)器端后,服務(wù)器根據(jù)設(shè)備編號(hào),交易流水號(hào),重新分散出工作密鑰,然后解密報(bào)文信息。這樣的交互方式下,客戶端和服務(wù)器端是沒有DES密鑰交互的。銀行如果發(fā)現(xiàn)任何一個(gè)終端設(shè)備異常,只要將這個(gè)設(shè)備的根密鑰廢掉,對(duì)于整個(gè)系統(tǒng)沒有任何影響。而且不論加密機(jī)還是SIM卡中的密鑰,都是硬件保證不可讀的。所以目前最安全的網(wǎng)絡(luò)支付手段就是USBKEY做電子簽名,千萬別用什么快捷支付,只要開了這個(gè)口子,遲早被釣魚。

5,建議
在使用MD5保存密碼時(shí),最好加入混淆的字符串:
用戶名
即數(shù)據(jù)庫(kù)存儲(chǔ)的MD5值是(密碼明文的MD5+用戶名)的MD5值,
為什么不是(密碼明文+用戶名)的MD5值?因?yàn)榫W(wǎng)絡(luò)傳輸不能傳輸密碼明文(這是原則)
參考:http://lt.cjdby.net/thread-1302097-2-1.html
參考:http://hw1287789687.iteye.com/blog/2248374
SegmentFault 登錄密碼竟然是明文

2016-03-09_08-42-28.jpg
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 本文主要介紹移動(dòng)端的加解密算法的分類、其優(yōu)缺點(diǎn)特性及應(yīng)用,幫助讀者由淺入深地了解和選擇加解密算法。文中會(huì)包含算法的...
    蘋果粉閱讀 11,676評(píng)論 5 29
  • 這篇文章主要講述在Mobile BI(移動(dòng)商務(wù)智能)開發(fā)過程中,在網(wǎng)絡(luò)通信、數(shù)據(jù)存儲(chǔ)、登錄驗(yàn)證這幾個(gè)方面涉及的加密...
    雨_樹閱讀 3,039評(píng)論 0 6
  • 概述 之前一直對(duì)加密相關(guān)的算法知之甚少,只知道類似DES、RSA等加密算法能對(duì)數(shù)據(jù)傳輸進(jìn)行加密,且各種加密算法各有...
    Henryzhu閱讀 3,214評(píng)論 0 14
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,554評(píng)論 19 139
  • 2013/08/26 有時(shí)候自己會(huì)想,為什么要再回頭看看自己看過什么書?大概是因?yàn)槲覜]什么出息,也只有看書這點(diǎn)能耐...
    nutpoem閱讀 351評(píng)論 0 0

友情鏈接更多精彩內(nèi)容