剛好聊到就簡單講一下密碼的儲存方式
順便定期宣導,請不要在不同網站使用同個密碼🙏
網站為了要確認輸入的密碼是否正確都需要把密碼存在資料庫裡,但不同網站的儲存方式可能會不太一樣:
- 直接儲存(明文儲存):最危險的一種。只要網站資料庫外洩,所有人的密碼都會一次公開。(Meta也曾經有過這種嚴重缺陷)
- 簡單單向加密(雜湊):利用不可逆,但每次計算都有同樣結果的演算法儲存轉換過的結果,比對時只要比對結果就可以知道輸入的密碼是否相同。密碼本身不會出現在資料庫內,嚴格說起來比直接儲存安全一點點,但因為雜湊演算法種類不多,攻擊者只要預先算好常見的密碼長度就可以用來比對不同網站的計算結果(關鍵字:彩虹表)。在資料庫外洩時的危險性跟明文儲存並不會差太多。
- 固定加鹽雜湊:在計算雜湊前加上一串很長、只屬於這個網站的額外密碼(鹽)。由於複雜度提高,可以用來避免彩虹表攻擊。但是使用GPU大規模計算專屬於這個網站的彩虹表已經是很成熟的技術,如果攻擊者手中有已知的計算前密碼(例如自己的密碼)會更快。
- 動態加鹽雜湊:針對每個人的密碼儲存不同的鹽。嚴格來說並不會減少單個密碼被破解出來的速度,但相對固定加鹽的好處是算不出全站共用的彩虹表,無法平行破解所有密碼,對攻擊者來說花時間破解的效益會更低。
- 抗GPU型雜湊:在GPU可以有效破解雜湊後開始熱門的雜湊演算法(例如Argon2、scrypt、Balloon)。本質跟一般雜湊演算法相同,但特別使用GPU無法加速的方式計算。同樣可以破解出原始密碼,但破解時間會顯著增加(以8個小寫字母密碼為例,SHA-256通常可以用單個GPU在一秒內破解,但Argon2id最快需要60年左右)。可以額外加鹽讓破解更困難,或是防止平行破解。


