工具要正確的被使用才有效果。
傳統只輸入密碼的方式有時被稱做 One-factor authentication,因為 Two-factor authentication 是指兩種以上的認證,通常是透過 USB 外接 Smart card 讀卡機用卡片另外做認證。
美國網路銀行將身份檢查的部分改用 Two-factor authentication 進行認證,希望可以對抗 Phishing (網路釣魚)。問題這樣還是會受到 Man-in-the-middle-attack 與 Trojan (木馬) 的攻擊。
以 Smart card 作為 Two-factor authentication 的架構來說,Man-in-the-middle-attack 攻擊是在使用者瀏覽釣魚頁面時去原來的網路銀行上抓 Two-factor authentication 所需要的 Message,傳給使用者後讓使用者認證。使用者認證完 (密碼以及 Smart card 對 Message 的數位簽名) 送回釣魚頁面,釣魚頁面再送回原來銀行網頁,完成認證的動作,接下來開始把錢轉帳到其他戶頭去。這也就是 Bruce Schneier 這篇 Fighting Fraudulent Transactions 提到美國銀行以及政府所使用的 Two-factor authentication 無法保護使用者。
但這並不是 Two-factor authentication 有問題,而是因為把 Two-factor authentication 用在錯的地方上。台灣的網路銀行在這點上面做的 Two-factor authentication 就是正確的方式。
以「轉帳」為例,你必須有一台 Smart card 讀卡機,由銀行產生 Message (在裡面會包括要轉出的戶頭,以及轉入的戶頭,金額,以及一個流水號),讓晶片卡去這個 Message,然後傳回網路銀行驗證。
重點在於 Two-factor authentication 必須用在每個交易動作上,而不是只用在一開始的認證:
The solution is not to better authenticate the person, but to authenticate the transaction. (Think credit cards. No one checks your signature. They really don't care if you're you. They maintain security by authenticating the transactions.)
(解決的方法並不是尋找更好的方法「驗證使用者」,而是「驗證交易本身」。想想信用卡怎麼做的,沒有人會檢查你的簽名,他們根本不在乎是你本人,因為他們是透過信用卡對每一項交易動作進行認證,以維護安全。)
另外一種觀點是, Smart Card 本身要有Computing能力, 並非只是一個External Storage.
SmartCard 本身就是要有 computing 的能力才稱為 SmartCard. 上面的問題並不是 authenticate 作的不完整,而是 confidential 有問題。銀行只做到 authenticate,卻沒有做到 confidential。也就是 session 的資訊並沒有保密。換句話話說,如果在一開始進行 authenticate 的同時,也進行 session key 的交換,而且接下來的交易也基於 session key 所建立的安全通道進行,那麼交易本身是安全的。問題來了,這個交易雖然安全了,但銀行沒做到 non-penitential ,讓使用者有後悔的機會,使的銀行可能收不到帳。國內的作法,每道交易內容都加以簽章,解決了 authenticate 和 non-penitential 的問題,而 SSL 可以解決第二道問題 confidential。交易系統至少要達到這三個要求,才算是一個安全的系統。
1. Smart card 不一定要有 computing 能力,參考 Wikipedia 的說明。
2. 這邊講的是 phishing,建立 session key 的方法一樣無法承受 man in the middle attack,一定要對每個 transaction 都用簽名才能抵抗。
交換 session key 的方能防止 man in the middle ,原因在於 session key 的交換,通常是基於 public key 的加密。透過 public key 的加密,可安全的交換 session key ,不必第三者所窺視,自然也不能 man in the middle 。
就算是對每個 transaction 都進行 signature ,如果沒有 session key 的交換,一樣可以 man in the middle 。如果你都以為網頁做 man in the middle ,何不將用相同手法,用於 transaction?
所謂的 session key 是指用於傳遞資料,用於資料加密的 key 。或許 gslin 誤會成其它的意思了。