面試官:為什么忘記密碼要重置,而不是告訴我原密碼?
最近有個同學在面試中遇到了一個很有意思的問題,我相信大多數(shù)的同學可能都沒有遇到過。
面試官提問說:“為什么很多網(wǎng)站忘記密碼需要重置,而不是直接告訴用戶原密碼?”
很有意思的問題對不對。很多網(wǎng)站中都有“忘記密碼”的功能,但是為什么當我們點擊忘記密碼,經(jīng)過一堆驗證之后,網(wǎng)站會讓我們重置密碼,而不是直接告訴我們原密碼呢?
所以,今天咱們就來說一說這個問題。
防止信息泄露
2022年11月1日,Termly 更新了《98個最大的數(shù)據(jù)泄露、黑客和曝光事件》(98 Biggest Data Breaches, Hacks, and Exposures)。其中包括很多知名網(wǎng)站,比如:Twitter
所以,你保存在網(wǎng)站中的數(shù)據(jù)可能并沒有那么安全。那么這樣的數(shù)據(jù)泄露后會對用戶產(chǎn)生什么影響呢?
對大多數(shù)人來說最相關的經(jīng)歷(網(wǎng)上看到的)應該是詐騙電話,他們甚至可以很清楚的告訴你你的所有個人信息。那么這些信息是怎么來的呢?
有些同學可能說是因為“網(wǎng)站販賣了我的個人信息”,其實不是的。相信我 大多數(shù)的網(wǎng)站不會做這樣的事情。
出現(xiàn)這樣事情的原因,大部分都是由于數(shù)據(jù)泄露,導致你所有的個人信息都被別人知道了。
那么,同理。既然他們可以獲取到你的私人信息,那么你的賬戶和密碼信息是不是也有可能被盜?。?/span>
而對于大多數(shù)的同學來說,為了防止密碼太多忘記,所以很多時候 大家都會使用統(tǒng)一的密碼! 也就是說你的多個賬號可能都是同一個密碼。所以,一旦密碼泄露,那么可能會影響到你的多個賬號,甚至是銀行卡賬號。
因此,對于網(wǎng)站(特別是一些大網(wǎng)站)來說,保護用戶數(shù)據(jù)安全就是至關重要的一件事情。那么他們一般會怎么做呢?
通常的處理方式就是 加密。并且這種加密可能會在多個不同的階段進行多次。比如常見的:SHA256、加鹽、md5、RSA 等等。
這樣看起來好像是很安全的,但是還有一個問題,開發(fā)人員知道如何解密他們?;蛘哂行┩瑢W會認為 數(shù)據(jù)庫中依然存在著正確的密碼 呀?一旦出現(xiàn)信息泄露,不是依然會有密碼泄露的問題嗎?
是的,所以為了解決這個問題,網(wǎng)站本身也不知道你的密碼是什么。
網(wǎng)站也不知道你的密碼是什么
對于網(wǎng)站(或者其他應用)來說,它們是 不應該 存儲你的原密碼的。而是通過一些系列的操作來保存你加密之后的代碼。并且這個加密是在前端傳輸?shù)椒斩藭r就已經(jīng)進行了,并且是 不可逆 的加密操作,例如:MD5 + 加鹽。
我們舉一個簡單的例子:
比如有個用戶的密碼是 123456,通過 md5 加密之后是:E10ADC3949BA59ABBE56E057F20F883E
md5 理論上是不可逆的,所以從理論上來說這個加密后的代碼是不可解析的。但是 md5 有個比較嚴重的問題就是:同樣的字符串加密之后會得到同樣的結果。
這也就意味著:E10ADC3949BA59ABBE56E057F20F883E 代表的永遠都會是 123456
所以,如果有一個很大的 md5 密碼庫,那么理論上就可以解析出所有的 md5 加密后的字符串。就像下圖一樣:
圖片
因此,在原有的 md5 加密之上,很多網(wǎng)站又增加了 加鹽 的操作。所謂加鹽指的就是:在原密碼的基礎上增加一些字符串,然后進行 md5 加密。
比如:
- 原密碼為 123456
- 在這個密碼基礎上增加固定字符“LGD_Sunday!”
- 得到的結果就是:“LGD_Sunday!123456”
- 然后用該字符進行 md5 加密,結果是:E1FC8CB7B54BED0FDC8711530236BA4D
- 此時嘗試解密,會發(fā)現(xiàn) 解密失敗
圖片
這樣大家是否就可以理解,為什么很多網(wǎng)站在讓我們輸入密碼的時候 ,要求包含 大小寫+符號+ 字母 + 數(shù)字 了吧。本質(zhì)上就是為了防止被輕松解密。
而服務端拿到的就是 “E1FC8CB7B54BED0FDC8711530236BA4D” 這樣的一個加密后的結果。然后服務端再次對密碼進行加密操作,從而得到的是一個 被多次加密 的數(shù)據(jù),保存到服務端。
所以說:網(wǎng)站無法告知你密碼,因為它也不知道原密碼是什么。
目前很多網(wǎng)站或應用為了保證用戶安全,都已經(jīng)采取 掃碼登錄、驗證碼登錄 等方式進行登錄驗證,這種無密碼的方式,會更大程度的保證你的賬號安全。































