安全的數(shù)字化身份互連(一)--密碼安全


安全的數(shù)字化身份系統(tǒng)––密碼與會話

聊數(shù)字化身份系統(tǒng)首先我們先看登錄赦邻,對于登錄大家并不陌生,訪問系統(tǒng)幾乎都需要登錄实檀。因為系統(tǒng)也不知道是誰在訪問惶洲,所以需要你告訴系統(tǒng)你是誰,還需要證明你真的是你,如何證明膳犹?給系統(tǒng)展示你的密碼恬吕,因為密碼只有你才擁有,你有這個密碼须床,你就能證明你真的是你铐料,這就是一個登錄。


看似簡單的幾個步驟豺旬,但里面涉及的安全問題卻有很多钠惩。

密碼安全:密碼存儲安全,密碼傳輸安全族阅,無密碼技術(shù)安全......

會話安全:會話標(biāo)識存儲安全篓跛,會話標(biāo)識傳輸安全.....

首先我們看關(guān)于密碼存儲安全的問題。系統(tǒng)服務(wù)器需要存儲用戶密碼坦刀,才能在用戶登錄時驗證密碼的正確性愧沟,但存儲就會有泄露的風(fēng)險,比如數(shù)據(jù)庫被偷鲤遥,服務(wù)器被入侵沐寺,內(nèi)部員工泄露數(shù)據(jù),被撞庫等風(fēng)險盖奈。因此我們需要認(rèn)真地考慮如何安全存儲用戶密碼混坞。

我認(rèn)為作為一名軟件開發(fā)工程師, 嚴(yán)禁明文存儲密碼是common sense卜朗。 那該如何解決不能明文存儲密碼的問題拔第?也許看官你會說,md5 场钉? 沒錯蚊俺,md5 可以。那么md5屬于什么逛万?它是一種單向散列算法泳猬,單向散列算法主要就是通過算法生成一個摘要批钠,來解決密碼不能明文化問題。 比如:

```

md5(123456) = e10adc3949ba59abbe56e057f20f883e

```

這樣雖然能解決密碼不明文化得封,但是它還是會存在安全問題埋心。因為現(xiàn)代計算機的計算能力實在太強了,一秒可以計算十億次 忙上,可以通過窮舉對比的方式破解密碼拷呆。這也就是所謂的彩虹表攻擊。

解決被彩虹表攻擊的問題對密碼也有一定的要求疫粥,比如要求密碼的復(fù)雜度茬斧,需要不同類型的字符進(jìn)行組合,在生成摘要時加點鹽來防止窮舉破解密碼梗逮。但這就安全了嗎项秉?還不夠。一次算法遠(yuǎn)遠(yuǎn)不夠滿足安全要求慷彤,如md5(md5(md5(password+salt)))娄蔼,現(xiàn)在往往采用自適應(yīng)的方式來存儲密碼,可以設(shè)置重復(fù)計算一萬次底哗,鹽使用隨機生成的16+位字符串岁诉。這種方式雖然性能不會很好,但對于密碼生成摘要存儲來說艘虎,性能不好往往是好事唉侄,畢竟用戶注冊或修改密碼只是一次操作咒吐,用戶是可以接受的野建,但對于黑客來說,這是致命的恬叹,黑客從原來的一秒產(chǎn)生幾百萬甚至上千萬的md5值候生,變成了一秒只能產(chǎn)生一個,黑客想要破解一個密碼绽昼,從現(xiàn)代的計算機算力來看唯鸭,需要上千年的時間。目前推薦的使用密碼存儲算法已不再推薦md5了硅确,推薦采用Bcrypt ? Scrypt ? pdkdf2算法目溉。

(很多可以通過MD5/SHA值進(jìn)行反向查詢,都是已經(jīng)存儲了大量的彩虹表)

解決了密碼存儲安全菱农,再來看密碼傳輸安全缭付。有人會說使用https就能解決網(wǎng)絡(luò)傳輸?shù)陌踩珕栴},但這還是不夠循未。瀏覽器到認(rèn)證服務(wù)器之間請求可能會經(jīng)過一層或多層gateway陷猫,如nginx,zuul,spring cloud gateway等绣檬。很多系統(tǒng)都是在gateway處安裝證書設(shè)置https協(xié)議足陨,瀏覽器到gateway處是加密傳輸?shù)模玤ateway到認(rèn)證服務(wù)器還是http協(xié)議娇未。攻擊人可以在這條鏈路上竊取明文密碼墨缘,那全鏈路https不就可以解決問題了?還不夠零抬,這些gateway內(nèi)部都可能會接觸到明文密碼飒房,都有密碼泄露的風(fēng)險,有些gateway不是我們負(fù)責(zé)的媚值,無法保證他人會不會開個后門拿出明文密碼狠毯,或者安全意識較低的程序員打印日志不小心把明文密碼打印出來。那如何解決這個問題褥芒?我們可以采用瀏覽器傳輸密碼之前就對密碼先加密的方法嚼松。

加密方式分為對稱加密與非對稱加密。

對稱加密:加密與解密用的是同一個密鑰锰扶。如DES献酗,AES

非對稱加密:加密與解密用的是不同的密鑰,一個叫公鑰坷牛,一個叫私鑰罕偎,公鑰加密的數(shù)據(jù)只能由對應(yīng)的私鑰才能解,如RSA京闰。

如果采用對稱加密方式颜及,需要瀏覽器在調(diào)登錄api之前,先獲取認(rèn)證服務(wù)器的密鑰蹂楣,拿到密鑰后對密碼進(jìn)行加密傳輸俏站,經(jīng)過的gateway都只能獲取密文,密碼到了認(rèn)證服務(wù)器痊土,認(rèn)證服務(wù)器再通過密鑰對密文進(jìn)行解密肄扎,獲取到密碼明文,就可以進(jìn)行密碼驗證赁酝。但有一個安全問題犯祠,瀏覽器獲取密鑰也會經(jīng)過gateway,如果gateway把密鑰也打印到了日志中酌呆,密文也打印到了日志中衡载,那攻擊人同樣可以通過日志獲取明文密碼。

既然對稱加密不可取肪笋,我們來看看非對稱加密月劈。瀏覽器登錄前經(jīng)過gateway獲取認(rèn)證服務(wù)器的公鑰度迂,使用公鑰進(jìn)行加密,最終密文到認(rèn)證服務(wù)器猜揪,再通過私鑰解密拿到明文密碼進(jìn)行密碼認(rèn)證惭墓。這種方式gateway只能拿到公鑰和密文,無法解密而姐,就算打印到日志中腊凶,攻擊人無法拿到明文密碼了。

但這樣就安全了嗎拴念?

如果攻擊人拿gateway中的密文直接去調(diào)認(rèn)證服務(wù)器中的登錄api钧萍,認(rèn)證服務(wù)器一樣可以通過私鑰進(jìn)行解密,并登錄成功政鼠。所以我們還需要加一些限制:保證密文有過期時間风瘦,并且是只能使用一次。

瀏覽器獲取認(rèn)證服務(wù)器公鑰時公般,攜帶用戶名到認(rèn)證服務(wù)器万搔,認(rèn)證服務(wù)器生成隨機數(shù)并與用戶名關(guān)聯(lián),隨機數(shù)只保存5分鐘官帘,隨機數(shù)與公鑰一起返回給瀏覽器瞬雹。瀏覽器使用隨機數(shù)加密碼通過公鑰一起加密調(diào)登錄api,認(rèn)證服務(wù)器通過私鑰解密刽虹,獲取到明文密碼與隨機數(shù)酗捌,驗證隨機數(shù)的有效性與合法性,都正常就進(jìn)行正常登錄涌哲,比較完隨機數(shù)后立刻刪除隨機數(shù)胖缤,如不正常拒絕登錄。攻擊人就算獲取到了密碼密文膛虫,公鑰草姻,隨機數(shù),也只能在5分鐘之內(nèi)趕在gateway正常請求登錄之前稍刀,發(fā)起登錄攻擊,但這個難度太大敞曹。

還有就是認(rèn)證服務(wù)器保證客戶端是gateway或可信的服務(wù)發(fā)起的請求账月,認(rèn)證服務(wù)器可以對客戶端做白名單限制,方式有很多種澳迫,在這就不一一贅述了局齿。

但現(xiàn)在就安全了嗎?還真不一定橄登。如果攻擊人攻破了gateway抓歼,在瀏覽器請求認(rèn)證服務(wù)器獲取公鑰時讥此,gateway返回攻擊人頒發(fā)的公鑰,待用戶輸入完賬號密碼后谣妻,瀏覽器雖然進(jìn)行了加密萄喳,數(shù)據(jù)到了gateway,攻擊人再通過自己的私鑰進(jìn)行解密拿到明文密碼蹋半,再通過明文密碼在登錄頁進(jìn)行正常的登錄他巨,同樣可以登錄成功。因此瀏覽器也需要做安全驗證减江,驗證公鑰的合法性染突。認(rèn)證服務(wù)器可以采用CA機構(gòu)頒發(fā)的公鑰,認(rèn)證服務(wù)器與瀏覽器都相信CA機構(gòu)(做安全總得相信點東西辈灼,如果什么都不信任就沒法做安全了份企,有永無止境的安全問題),通過CA機構(gòu)的方式驗證公鑰的合法性來避免中間人篡改公鑰的問題(講得不是很清楚巡莹,比如CA機構(gòu)是個啥薪棒,為什么CA機構(gòu)可信?這里面可聊的話題太多榕莺,有興趣可以查看《密碼學(xué)與網(wǎng)絡(luò)安全》等書籍或一起探討研究)俐芯。

那密碼安全了嗎?還是遠(yuǎn)遠(yuǎn)不夠钉鸯。比如黑客知道了你密碼的長度吧史,可以不斷地調(diào)登錄或修改密碼的接口來試錯,總會試出來正確的密碼唠雕,因此需要對任何會驗證密碼合法性的接口都需要加頻率限制贸营。如登錄連續(xù)錯了5次鎖5分鐘,再錯5次鎖半小時岩睁,防止黑客試出密碼钞脂。但這種方式也有問題。如競爭對手公司不斷地使用用戶的賬號和錯誤的密碼去登錄捕儒,導(dǎo)致用戶的賬號一直處于被鎖狀態(tài)冰啃,正常用戶也沒法使用,這就違背了安全中的可用性刘莹。那就需要加ip限制和驗證碼機制了阎毅。為了用戶的體驗性,可以做成第一次登錄用戶可以正常登錄点弯,錯誤之后扇调,就需要使用驗證碼的方式登錄,超過5次鎖定賬號抢肛,同一ip登錄錯誤次數(shù)過多狼钮,將ip加入黑名單中碳柱。

密碼有很多安全問題,復(fù)雜密碼對于用戶來說也挺麻煩的熬芜,那采用無密碼技術(shù)莲镣。沒有密碼是不是就安全了呢?雖然現(xiàn)在可以采用指紋登錄與刷臉登錄猛蔽,但新的安全問題也隨之而來剥悟。密碼是需要私密性的,但指紋可以從照片中獲取曼库,美國國防部某個官員因在拍照時露出了大拇指区岗,隨后就有了這個大拇指的清晰指紋圖(拍照的時候不要剪刀手或點贊了,最好指紋對準(zhǔn)自己吧毁枯,手動狗頭)慈缔。還有就是存在不確定性,刷臉登錄時种玛,如果燈光太暗或太亮藐鹤,臉部受傷了,化妝了赂韵,那登錄能保證成功嗎娱节?臉部相似的人,登錄時能保證區(qū)分開來嗎祭示?如果不能就違背了賬號唯一性肄满,日后審計也是個問題。還有一個問題就是不可修改质涛。當(dāng)密碼泄露了可以修改密碼稠歉,但你的指紋已經(jīng)作為登錄憑據(jù)了,換個手指頭就好了汇陆,當(dāng)十個手指頭都用過了怒炸,那是不是該用腳指頭了?當(dāng)然無密碼肯定是比有密碼使用上更方便快捷毡代,隨著技術(shù)的發(fā)展阅羹,這些問題也都會解決,只是也會有更多的安全問題月趟。

我們再來看會話安全(密碼安全還有各種各樣的問題灯蝴,篇幅有限,不再聊了)孝宗。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市耕肩,隨后出現(xiàn)的幾起案子因妇,更是在濱河造成了極大的恐慌问潭,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,589評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件婚被,死亡現(xiàn)場離奇詭異狡忙,居然都是意外死亡,警方通過查閱死者的電腦和手機址芯,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,615評論 3 396
  • 文/潘曉璐 我一進(jìn)店門灾茁,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人谷炸,你說我怎么就攤上這事北专。” “怎么了旬陡?”我有些...
    開封第一講書人閱讀 165,933評論 0 356
  • 文/不壞的土叔 我叫張陵拓颓,是天一觀的道長。 經(jīng)常有香客問我描孟,道長驶睦,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,976評論 1 295
  • 正文 為了忘掉前任匿醒,我火速辦了婚禮场航,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘廉羔。我一直安慰自己溉痢,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,999評論 6 393
  • 文/花漫 我一把揭開白布蜜另。 她就那樣靜靜地躺著适室,像睡著了一般。 火紅的嫁衣襯著肌膚如雪举瑰。 梳的紋絲不亂的頭發(fā)上捣辆,一...
    開封第一講書人閱讀 51,775評論 1 307
  • 那天,我揣著相機與錄音此迅,去河邊找鬼汽畴。 笑死,一個胖子當(dāng)著我的面吹牛耸序,可吹牛的內(nèi)容都是我干的忍些。 我是一名探鬼主播,決...
    沈念sama閱讀 40,474評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼坎怪,長吁一口氣:“原來是場噩夢啊……” “哼罢坝!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起搅窿,我...
    開封第一講書人閱讀 39,359評論 0 276
  • 序言:老撾萬榮一對情侶失蹤嘁酿,失蹤者是張志新(化名)和其女友劉穎隙券,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體闹司,經(jīng)...
    沈念sama閱讀 45,854評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡娱仔,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,007評論 3 338
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了游桩。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片牲迫。...
    茶點故事閱讀 40,146評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖借卧,靈堂內(nèi)的尸體忽然破棺而出盹憎,到底是詐尸還是另有隱情,我是刑警寧澤谓娃,帶...
    沈念sama閱讀 35,826評論 5 346
  • 正文 年R本政府宣布脚乡,位于F島的核電站,受9級特大地震影響滨达,放射性物質(zhì)發(fā)生泄漏奶稠。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,484評論 3 331
  • 文/蒙蒙 一捡遍、第九天 我趴在偏房一處隱蔽的房頂上張望锌订。 院中可真熱鬧,春花似錦画株、人聲如沸辆飘。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,029評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽蜈项。三九已至,卻和暖如春续挟,著一層夾襖步出監(jiān)牢的瞬間紧卒,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,153評論 1 272
  • 我被黑心中介騙來泰國打工诗祸, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留跑芳,地道東北人。 一個月前我還...
    沈念sama閱讀 48,420評論 3 373
  • 正文 我出身青樓直颅,卻偏偏與公主長得像博个,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子功偿,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,107評論 2 356

推薦閱讀更多精彩內(nèi)容