本文章的內容僅限學術及研究用途,請勿進行任何違法行為,否則後果自負。
通常卡片在製造的時候,會被設定一組預設的卡片金鑰。如果門禁系統有修改卡片的部分金鑰,就稱為半加密卡;如果有修改全部的金鑰,就稱為全加密卡。前面均民示範的幾個 M1 卡的範例程式碼,都是假設卡片是在未加密的狀態,但如果想要讀取半加密卡或全加密卡的內容,就要先想辦法取得卡片金鑰。
M1 卡使用了一個名為 CRYPTO-1 的加密演算法,會把讀卡機與卡片之間的通訊資料進行加密。但在過去的幾年中,已經發現了多種針對 M1 卡的攻擊方法。這些攻擊利用了 CRYPTO-1 的設計缺陷,可以在短時間內恢復金鑰,並破解取得卡片中儲存的資料。
這個攻擊手法主要就是蒐集一些常見的卡片金鑰,然後逐一嘗試。以下是 M1 卡常見的字典檔:
這個攻擊手法是利用了兩個漏洞:NACK 洩漏的漏洞、以及卡片挑戰的隨機數隨機性不足的漏洞。這個攻擊手法可以憑空獲得金鑰,但因為速度較慢,所以通常在拿到任何一個金鑰之後,就會使用其他的攻擊手法(例如:Nested)。
這種攻擊手法是透過模擬卡片,並讓讀卡機使用金鑰進行認證至少 2 次。認證過程中模擬卡會傳送卡片挑戰,並記錄讀卡機所傳送的回應。由於卡片挑戰是已知的,所以可以計算 keystream 並還原金鑰。
名詞解釋:
- keystream:M1 卡在資料加解密時,並不是直接使用卡片的金鑰,而是透過卡片的金鑰計算出 keystream,然後再與資料進行 XOR 運算,並且每加密一個位元後就會經過特定公式計算下一個 keystream。
透過攔截讀卡機與卡片之間的通訊資料,然後透過分析資料並進行 MFKey64 攻擊來還原金鑰。
這種攻擊手法其實就是中間人攻擊 (MITM)與重放攻擊,主要是將兩個裝置連接起來,並讓一個裝置 A 模擬成卡片與真正的讀卡機溝通,然後讓另一個裝置 B 模擬成讀卡機與真正的卡片溝通。這樣除了可以攔截中間通訊的內容之外,還可以重播、篡改通訊資料。這個手法均民也沒有研究過,所以不會著墨太多。