由Mifare 1卡破解帶來的危險以及應對方法
在Mifare1卡片安全問題暴露后,一些公司公開宣稱已經有了解決的辦法,其中的法寶就是所謂“一卡一密”,也就是每一張卡片的每一個扇區的密鑰都不相同,使用CPU卡裝載系統根密鑰,根據Mifare1卡的唯一序列號計算子密鑰,防止一張卡片被破解而影響整個系統。其實這種解決方案在Mifare1卡破解之前就已經出現。那么,一卡一密真的能解決Mifare1的安全問題么,我們還是要從Mifare1卡的認證機制著手進行分析。
我們已經知道,Mifare1卡的認證實質上是卡與基站芯片之間的認證。常用的RC500等基站芯片已經為業界廣為熟知,它的接口和通訊協議都是公開的。在基站與Mifare1卡認證前,需要通過LoadKey命令將Mifare1卡的密碼裝載到基站芯片中。這一過程是一個明文寫入的過程,是由終端設備(如讀卡器)主控單片機傳送給RC500的,并且單片機對RC500的命令傳輸是非加密的。如下圖所示:
這樣就可以通過截獲單片機與RC500之間的通訊來獲取M1卡的密鑰。而要做到這一點,一個使用過RC500的對單片機技術稍微了解的技術人員都能夠輕而易舉的實現。
那么,在讀卡器中安裝SAM卡,通過SAM卡計算卡片密鑰實現一卡一密是否就安全了呢。想法非常美好,然而結果卻非人所愿,這樣的做法不但沒有增加安全,反而更加加大了安全漏洞。如下圖所示:
如圖所示,M1卡通過SAM卡實現一卡一密本質上是將SAM卡內的主密鑰通過對M1卡的卡號分散后得到M1卡的子密鑰,但是這個子密鑰仍然要通過終端單片機明文傳送給RC500芯片完成對M1卡的認證。更為嚴重的是SAM卡送出的是Mifare1卡的明文密碼,黑客只要獲得一張SAM卡,就能夠通過它獲得所有卡片的密碼,連破解手段都不用。
此外,在M1卡消費密碼被泄露的情況下,即使采用了聯機充值的方法,也無法保障運營商的利益,因為在此情況下,盜竊者使用偽造的M1卡,完全可以不用系統的充值密碼,而直接采用M1卡的缺省密碼對卡片進行“充值”,然后用真實的消費密碼在終端上消費。在此情況下,即使采用了黑名單機制也難以避免運營商和授卡商戶遭受損失,因為黑名單機制是一種事后防范機制,防止的是再次發生同一偽卡的交易,而在M1卡小額消費日益普及的今天,盜竊者只需將偽卡使用一次,就足以獲得比一張偽卡成本高得多的收益。
這樣,我們可以假設一下幾種情況:
外部人員作案:
作案人盜取一個正式使用的終端設備,通過線路截獲方式獲取單片機發送給RC500的密鑰,從而破解M1卡的密鑰。
作案人盜取終端內的PSAM卡,通過向PSAM卡發送密鑰分散指令的方式得到每一張M1卡的子密鑰。
內部人員作案:
終端設備的開發人員利用工作之便盜取終端內的M1卡密鑰明文或經過單片機發送給RC500的M1卡密鑰明文。
發卡機構工作人員利用工作之便截取PC機通過M1卡讀卡器發送給M1卡的密鑰明文。或直接操作PSAM卡盜取密鑰明文。
系統開發人員利用工作之便盜取PSAM卡密鑰明文。
評論