2012-07-17 120 views
6

我很可能正在開發一個項目,其中現有的Desfire卡(用於訪問付費服務)將替換爲支持NFC的移動設備。任何人都可以向我指出任何資源,以幫助我理解a)將Desfire卡的數據複製到移動設備上的過程,從而取代卡,並且b)讓應用程序提供NFC數據以呈現給讀者就好像是一張卡片。所有相關密鑰和訪問都將由髮卡機構提供(如果項目繼續進行),但我希望提前瞭解該過程。Android NFC API如何支持Mifare Desfire?

我還需要了解Android NFC API如何支持Desfire,因爲據我所見,只能正確支持Classic。 http://developer.android.com/reference/android/nfc/tech/package-summary.html

回答

15

MIFARE DESFire符合ISO 14443-4標準。在Android中支持ISO 14443-4(因此MIFARE DESFire)由IsoDep類完成。您可以使用該類的transceive()方法發送任何DESFire命令。

除此之外,DESFire可以配置爲符合NFC論壇類型4標籤。在這種情況下,Android會自動讀取標籤中的所有NDEF消息並以意向方式分發它。因此,您可以在掃描特定標籤時自動啓動您的應用。 (Android也可以格式化DESFire芯片以包含NDEF並向其寫入NDEF數據。)

用移動NFC設備替換DESFire卡是另一回事。當前可用的Android設備上的卡仿真是通過連接到NFC芯片的嵌入式安全元件完成的。一個Android應用程序不能模擬一張卡片(這裏也沒有API),並且安全元件不能模擬一個DESFire芯片。此外,沒有開放的API來從應用程序訪問安全元件。

Android NFC應用程序可以通過NFC與另一個設備(不是卡)進行通信的唯一方法是使用Android Beam。然而,這與卡和讀卡器之間使用的協議不同。

+0

非常感謝您的解釋。你是否需要諮詢(現在或將來)?如果是這樣,請給我發電子郵件ollie AT novoda.com – 2012-07-17 15:55:28

+0

DESFire無法鎖定在Android設備上。你可以讀/寫它們,但不能鎖定它們。 – Fuzzy 2013-03-08 11:26:32

+2

沒有像DESFire鎖定這樣的概念。但是,您可以使用DESFire應用程序的身份驗證密鑰和/或DESFire應用程序中的文件來配置訪問控制。 – 2013-03-08 19:58:03

1

鑑於你的情況,我會說Android SDK足以解決你的問題。 您的情況有兩個部分:

  1. 讀取現有卡片中的信息。
  2. 使用從卡片中讀取的信息製作應用程序。

1部分:

你唯一擔心的必須是在讀的DESFire卡。如果DESFire卡中的信息以NDEF格式存儲,則使事情變得更加簡單。

Ndef是可用於檢索NdefMessage類型,然後可以使用檢索到的信息保存到存儲設備的信息的SDK一類,無論是本地數據庫或遠程數據庫,或者只是在應用程序內存中。

以上是假設該卡不受保護。如果是,則必須使用transceive函數使用原始字節通信進行交互。這將解鎖其餘的信息以供閱讀。從這裏你可以閱讀NDEF記錄。

第2部分: 我的建議是跳過它的卡仿真方面。你會在某個時間點撞牆。

如果已經讀取現有解決方案中的卡的設備連接到Android設備,那麼Android Beam就是要走的路。這不過是Android應用程序與Android應用程序的溝通! Android已經完成了繁重的工作,所以你的大部分工作都將變得簡單。

卡上的信息可以存儲爲ndef消息並通過發送,或者您可以簡單地創建自定義對象併發送。

11

NFC傢伙答案是優秀的,但有點過時了,所以我決定增加更新。

從KitKat(4.4)開始,您現在可以在沒有安全元素的情況下模擬卡片。

它被稱爲基於主機的卡片仿真(Hce),並且你可以模擬一個ISO 14443 A型卡片。就像一個滅火卡。

有兩個小告誡:

  • 你的讀者一定問題,輪詢剛過 「卡」,一個ISO SELECT(援助),與您所選擇的固定應用ID(AID)。此AID必須在您的應用清單中註冊。 Android會攔截這個ISO SELECT,讀取這個援助,並且只有在你的清單中的那個匹配時纔打電話給你。 然後你可以交換任何東西,它甚至不必是ISO APDU(ISO 14443封裝是由android完成的)。因此,例如,如果你想,你甚至可以效仿的DESFire(0XA0 KEY_NUM,0xAF執行挑戰,0xAF執行響應,爲0x00 session_key可以)的質詢響應認證

  • 你不能依靠UID(但你不這樣做,對嗎?這是一個不好的做法,所以沒有人這樣做......對吧?:)),因爲它是隨機的,並且它不斷變化(當然不是在單個會話中,但是.. 。)

我們模仿我們的DESFire門禁卡,我們不得不這樣做唯一的變化是從我們最初的DESFire選擇應用程序(0x5A)切換到ISO SELECT(爲0x0 0 0xA4 0x04)。模擬身份驗證(挑戰 - 響應事件)可能會非常棘手,但我們已經以「相反方式」(使用NFC來讀取desfire卡)做到這一點,所以對我們來說很容易。

如果你依賴於卡的UID認證..這是一個很好的時間來改變它:)

+0

因爲2之間的差異,這很棘手。特別是需要發送ISO Select來激活Android HCE應用程序可能會與使用DESFire卡片相沖突。 – 2014-11-06 21:19:48

+0

誠然,這可能會很棘手。但DESFire卡(至少,我在這裏的EV1)支持一組有限的ISO命令。 ISO SELECT是其中之一:卡片處理正確。我只需要用ISO SELECT(0x00 0xA4)替代我的第一個DESFire select(0x5A AID)。該卡以相同的方式執行,並且我讓android HCE高興:) – 2014-11-07 10:22:19

+0

問題是:1)您可能無法觸及您的耦合器/閱讀器應用程序2)您必須在軟件中重新實現所有的desfire命令。這可能沒有意義(爲什麼使用0xCD作爲借記卡時,您必須在sw中實現它?) – 2014-11-07 10:24:19