目前網路銀行不安全的問題, 尤其是釣魚詐騙網站, 在於銀行的系統設計, 銀行認證客戶身分, 客戶沒有認證銀行身分. 即使可以讓客戶很方便的用密碼認證銀行身份
一開始 web 只有 HTTP 協定, 明碼協定很容易被竊聽程式聽走, 所以 Netscape 就說好吧, 我們設計了 SSL 協定(現在叫TLS), 把 HTTP 包在裡面, SSL 提供一個加密的通道, 這樣裡面的東西都不用改. 所以客戶還是一樣用密碼認證, 銀行端一樣有客戶密碼的明碼 [1]
客戶怎麼認證銀行身分呢, SSL 的設計依賴公開金鑰基礎建設(PKI), 有個可信任第三方(CA)發一張憑證給銀行, 客戶的瀏覽器檢查憑證合不合法, 有沒有過期. 譬如說常見的 CA 商是 Verisign, 中國信託, 國泰世華, 台新都是用 Verisign 發出來的憑證.
看出來問題了嗎?
- 銀行的執照是政府發的, 我等升斗小民聽都沒聽過 Verisign, 誰知道能不能信任.
- Verisign 真的難以信任, 有人就曾經成功的假冒成 Microsoft 讓 Verisign 發出憑證.
- 最嚴重的是, 客戶根本不知道 PKI, CA, Certificate 是甚麼鬼, 看到瀏覽器的憑證警告, 自動跳過. 所以 客戶認證銀行 這個部份, 完全失效了
接下來就是釣魚詐騙網站上場了, 不論是 Phishing 還是 Pharming 攻擊, 都是連到看起來一個像是真的假銀行網站, 客戶的密碼被加密傳給詐騙集團, 詐騙集團在解密, 很愉快的看到明碼的密碼.
PKI/CA 是一個很大的產業, 制定 PKI 標準的組織, 一直在宣傳 PKI 才安全, 用密碼認證的系統不安全. 當憑證變的很容易, 很便宜, 只要一個 email address 就可以取得的時後, 他們就推出了加強版憑證(EV Certificate), 宣稱執行更嚴格的查驗手續, 收更貴的費用. 實驗證明, 首先大量使用 EV Certificate 的, 就是詐騙集團 😛
用密碼認證的系統真的那麼不可取嗎? 不要再相信沒有根據的說法了. SSL 3.0 在 1996 年發布, 而從 1992 開始, 一系列的 PAKE(Password authenticated key exchange) 協定也開始發展. PAKE 優點在於:
- server 端不需要持有密碼.
- client 端不需要把密碼傳給 server.
- 對需要移動性的使用者來講, 用密碼比用 public/private key 方便
- 密碼可以用來認證 server, 不像 SSH/SSL 有 Man-in-middle-attack (如果使用者忽略 server key change/certificate invalid 的警告). [2]
- 1998, PAKE 系列裡的 SRP 發步, Open Source, 免授權費 (Standford University 有專利).
- 2004年8月, Patch for OpenSSL/Apache TLS-SRP Support 提出
- 2007年11月, 把 SRP 應用在 TLS 的 RFC 5054 通過.
- 2008年11月, 支援 RFC 5054 的 OpenSSL Patch 提出
不知道為甚麼, 銀行業沒有施壓 Microsoft 支援 PAKE Protocol, 也許是銀行 IT 人員不懂, 也許是銀行不在乎客戶被詐騙 XD
另一方面. 根據2007年12月的討論, Mozilla 底層 NSS security library 的成員說, 如果 Firefox 沒有 SRP 的 UI, 他不太想加 SRP 進去, 這下變成蛋生雞雞生蛋的問題了 orz
所以說, 簡單易用的安全設計真是一條漫長的路啊…
[1] 技術上來說, 有些不是 plaintext, 不過也是 plaintext-equivalence, 或是 weak autehntication
[2] 關於 Man-in-middle-attack 的部份為甚麼這麼威, 要請讀者去看論文, 都是數學我實在是看不懂也不能解釋 XD