每天登入各種服務時,「忘記密碼」可能是最高頻出現的四個字。點下去後,網站永遠只會讓你重設密碼,而不是把原密碼寄給你。為什麼它們這麼「吝嗇」?答案藏在資訊安全的三個關鍵詞:資料庫外洩、雜湊加密、加鹽雜湊。
資料庫失竊有多簡單?比你改網址還容易
想像一個日常場景:
你把網址列 order?id=1001 改成 order?id=1002,竟能看到陌生人的訂單。這不是電影橋段,而是經典漏洞 IDOR(不安全的直接參考)。由於工程師沒做好權限檢查,改個數字就讓所有人裸奔。
已公開的兩起真實案例
- 某健身房系統:任意下載所有會員個資
- 防疫實聯制平台:網址改數字即可取得他人姓名與電話
若再疊加 SQL Injection,更可在查詢語句內「注入」額外指令,整張資料庫揮手可得。當駭客拿到整庫數據,你最擔心的就是——裡面躺著你的明文密碼。
外洩後的骨牌效應:從購物網站到 Google 全線失守
隱私被看光只是第一步。
如果網站把「原始密碼」直接存進去,那麼駭客就能拿去橫向衝撞:用你的信箱+同一組密碼,直接撞進你的 Google、Facebook、Line Pay……
統計顯示,80 % 以上用戶在 5 個以上網站重複使用同一組密碼。也就是說,只要一家小店資料庫失守,你的數位生活全線崩潰。
因此,連網站自己都不該知道你的密碼——這不是偷懶,而是保護。
為什麼網站「不知道」你的密碼?雜湊 Hash 如何辦到
核心技術叫做 單向雜湊(Hash)。
想像把「密碼+研磨機」變成固定長度的「粉末」:
- 同一把鑰匙 → 永遠得到同一堆粉末
- 但只知道粉末 → 永遠 拼不回原鑰匙
| 輸入 | 雜湊後(SHA-256 示意) |
|---|---|
abc123 | 6ca13d52ca70c883… |
abc124 | cd7011e7a6b27d44… |
只要演算法夠強,即使拿著「粉末」,駭客也無法反推你真正的密碼。
註冊流程就這麼簡單:
- 你輸入
abc123。 - 網站計算雜湊並把「粉末」存庫。
- 登入時再拿你輸入的密碼算一次「粉末」,比對一致便放行;不一致就拒絕。
- 資料庫永遠不儲存
abc123,自然沒得寄給你。
加鹽(Salting):阻擋「彩虹表」最後一塊拼圖
單純雜湊仍有死角:駭客可以預先建好「密碼 ↔ 雜湊」對照表(彩虹表),見碼查表秒破。
解方是「加鹽」——替每個用戶撒一把獨一無二的「鹽」:
- 原始密碼:
abc123 - 隨機鹽:
8$kPzV01! - 真正雜湊對象:
abc1238$kPzV01!
即使彩虹表收錄了 abc123 的雜湊,也因為鹽的加入而失效。
每個用戶的鹽都不同,破解成本呈指數級上升。
常見疑問一次說清(FAQ)
- Q:為何有些論壇真的能把舊密碼寄給我?
A:那代表它沒有使用雜湊,而是明文或簡單加密儲存。遇到這種網站儘快跑,風險極高。 - Q:如果我所有網站都設定不同密碼,還需要擔心嗎?
A:依然需要!密碼複雜度不夠仍可能被暴力破解;加鹽雜湊是網站底線義務。 - Q:SHA-1 或 MD5 還能安全嗎?
A:已證實碰撞風險高,建議優先使用 SHA-256、bcrypt、Argon2 等演算法。 - Q:重設密碼是不是代表我舊密碼就「作廢」了?
A:是的,系統會用新密碼計算新雜湊,舊值立即失效。 - Q:瀏覽器內建密碼管理器安全嗎?
A:便利性高,但請務必啟用主密碼或生物辨識保險箱,防止本地端被偷。
一次學會自我保護三步驟
- 長密碼:優先 15 字詞以上,不換大小寫也足夠強。
- 不重複:以瀏覽器或密碼管理器為每個服務生成獨特密碼。
- 認綠鎖:輸入密碼前確認網址列有 HTTPS,降低攔截風險。
下次點下「忘記密碼」時,你可以放心:網站不是不幫你,而是它真的不知道你的密碼,這正是對你最大的保護。