原文地址::https://blog.csdn.net/wwwtovvv/article/details/9240783
相關文章
1、Mifare PLUS卡讀寫模組使用者手冊----http://www.docin.com/p-1252890695.html
2、Mifare Plus卡讀寫模組----http://tieba.baidu.com/p/3968383719?traceid=
3、Mifare PLUS CPU讀卡軟體 綠色免費版----http://dl.pconline.com.cn/download/547464.html
4、MIFARE Plus-X和MIFARE Plus-S的區別----https://blog.csdn.net/zoomdy/article/details/51750286
5、Mifare Plus 簡介----https://wenku.baidu.com/view/3b65203e0912a21614792904.html
預設nxp發行的plus卡為L0層級未初始化的卡片,此時active動作表現為支援ISO1443-4的CPU卡特性(ATQA: 02 00 ,SAK:20 UID: CD 65 E5 03),當執行寫相關AES KEY及資料區塊初始化並commit後則進入L1安全層級,其active動作表現為一張M1S70卡特性(ATQA: 02 00 ,SAK:18 UID: CD 65 E5 03),但實質其仍然可支援ISO1443-4,執行rats成功(也必須支援,否則無法執行switchL2及switch3操作),當在L1層級執行switchL2認證轉換為L2層級後,其active操作後傳回值為(ATQA: 02 00 SAK:11, UID: CD 65 E5 03),此時現有驅動中無此匹配SAK則表現為未知卡類型,在L2安全層級執行switch3認證後卡片升級至L3安全層級,重新執行active操作後傳回值為(ATQA: 02 00 ,SAK:20 , UID:CD 65 E5 03)。
將L1及L2層級的操作均運行於active態(ISO14443-3層);當卡片位於L1層級時,可完全執行M1相關介面,也可先加執行AES SL1認證後再執行M1認證,但此時執行AES SL1認證後不需要產生session key base並與M1密鑰計算推導新的M1密鑰作為真正的M1認證密鑰,直接使用M1原密鑰即可(此點與L2層級不同)。
在L0層級,執行後PICC的返回碼為與M1卡一致的ACK/NAK,為半位元組返回碼並不帶CRC,故此時當開啟CRC校正則出現CRC錯誤;
在L1層級的AES SL1認證過程,當執行正確則返回帶CRC返回碼及資訊,而當出錯時(AES密鑰錯誤,RNDB解密錯誤等)則返回與M1卡一致的NAK,為半位元組並不帶CRC錯誤,故此時開啟CRC校正則出現CRC錯誤。
在ISO14443-4層級執行switchL2指令,當執行成功後則PICC進入L2安全層級,此時再執行switchL2指令在第一次發送Cmd+BNo+LenCap+PCDCap2時即返回兩個狀態位元組0x02,0x09其中0x09可理解為無效塊號,但0x02無法理解。
在L2層級中,如手冊所說,必須先進行AES認證在進行M1認證,並且將AES產生的session key base的低6位元組與實際塊的M1密鑰異或而為真正M1塊認證密鑰。經過測試得AES Key類型必須與M1 Key類型保持一致(即均為A或者均為B類型),否則導致M1認證失敗。當扇區A的AES與M1密鑰類型和值與扇區B保持一致,則當對扇區A認證通過後對扇區B的訪問與對扇區A的訪問一致,無需再對扇區B認證。
在L2安全層級調試mifPLAuthInPro期間,調用s_AESCbcEnDecrypt時,由於其輸入iv在加解密完成後會改寫iv導致下次進行加解密時iv改變而導致加解密失敗。必須注意iv的值。
在L2安全層級,使用強制AES+M1密鑰認證中必須保持AES密鑰類型與M1密鑰類型一致(即AES TypeA Key+M1 TypeA key或者AES TypeB Key+M1 TypeB key,如AES TypeA Key+M1 TypeB key認證即使密鑰均正確都會認證失敗。)
完成L2層級的調試,可反覆進行FirstAuth,並且每次FirstAuth得到的TI值均不一樣,在執行完一次正確的FirstAuth認證並得到TI後才可進行正確的followAuth(followAuth的iv基於FirstAuth認證)。當執行一次正確FirstAuth後可反覆進行followAuth。由於FirstAuth and followAuth運行於ISO14443-4 mode,故當任何錯誤發生PICC還是保持在ISO14443-4 mode,無須重尋卡操作。
L2安全層級的MultiWriteBlock與MultiReadBlock命令僅支援同扇區內的多資料區塊讀寫操作。而L3安全層級的ReadBlock與WriteBlock命令支援跨扇區的連續資料區塊讀寫(僅限本扇區內。。。)
L3安全層級的followAuth操作的擷取ENC KEY及MAC KEY加密所使用的iv向量為0而非 TI+W_ctr+R_ctr。。。
在ISO14443-4 mode操作中,只要任何錯誤則必須進行FirstAuth操作。
對於M1卡值相關操作的理解:Restore命令的實質是將傳入的資料區塊對應值(必須為錢包格式)複製到M1卡內部的一個16位元組的Transfer Buffer內,而Transfer命令的實質是將M1卡內部的Transfer Buffer值複製入傳入的資料區塊內。Increment命令的實質是將輸入的錢包塊值加上傳入的增加值並複製到Transfer Buffer內,故必須將再調用Transfer命令將Transfer Buffer值複製入指定的資料區塊內。