7

私は、既存のDesfireカード(有料サービスへのアクセスに使用される)をNFC対応のモバイルデバイスに置き換えるプロジェクトに取り組んでいる可能性があります。誰かが私に、a)Desfireカードのデータをモバイルデバイスに複製してカードの代わりに使用できるようにすること、およびb)アプリがNFCデータを配信してカードのようにリーダー。関連するすべてのキーとアクセスはカード発行者によって提供されます(プロジェクトが進行中の場合)が、事前にプロセスを理解したいと思っています。

また、Android NFC APIがDesfireをどの程度サポートしているかを理解する必要があります。これは、私が見る限り、Classicのみを適切にサポートしているためです。http://developer.android.com/reference/android/nfc/tech/package-summary.html

4

4 に答える 4

16

MIFAREDESFireはISO14443-4に準拠しています。AndroidでのISO14443-4(したがって、MIFARE DESFire)のサポートは、IsoDepクラスによって行われます。transceive()そのクラスのメソッドを使用して、任意のDESFireコマンドを送信できます。

さらに、DESFireはNFCフォーラムタイプ4タグに準拠するように構成できます。この場合、AndroidはタグからNDEFメッセージを自動的に読み取り、インテントでディスパッチします。そのため、特定のタグがスキャンされたときにアプリを自動的に起動させることができます。(Androidは、DESFireチップをフォーマットしてNDEFを含み、NDEFデータを書き込むこともできます。)

DESFireカードをモバイルNFCデバイスに交換することは別の問題です。現在利用可能なAndroidデバイスでのカードエミュレーションは、NFCチップに接続された組み込みのSecureElementによって実行されます。Androidアプリはカードをエミュレートできず(このためのAPIもありません)、SecureElementはDESFireチップをエミュレートできません。さらに、アプリからSecureElementにアクセスするためのオープンAPIはありません。

Android NFCアプリがNFCを介して別のデバイス(カードではない)と通信できる唯一の方法は、AndroidBeamを使用することです。ただし、これはカードとリーダーの間で使用されるプロトコルとは異なります。

于 2012-07-17T14:20:00.607 に答える
16

NFCの人の答えは素晴らしいですが、少し時代遅れなので、更新を追加することにしました。

KitKat(4.4)以降、安全な要素なしでカードをエミュレートできるようになりました。

これはホストベースのカードエミュレーション(Hce)と呼ばれ、ISO14443タイプAカードをエミュレートできます。デスファイアカードのように。

2つの小さな注意事項があります。

  • 読者は、「カード」をポーリングした直後に、選択した固定アプリケーションID(aid)を使用してISO SELECT(aid)を発行する必要があります。このAIDは、アプリマニフェストに登録する必要があります。Androidは、このISO SELECTをインターセプトし、支援を読み、マニフェストにあるものと一致する場合にのみ電話をかけます。その後、何でも交換できます。ISOAPDUである必要はありません(ISO 14443のカプセル化はAndroidによって行われます)。したがって、たとえば、必要に応じて、desfireのチャレンジレスポンス認証をエミュレートすることもできます(0xA0 key_num、0xAFチャレンジ、0xAFレスポンス、0x00 session_key)

  • UIDはランダムであり、絶えず変化するため(単一の内部ではなく)、UIDに依存することはできません(ただし、そうではありませんか?これはとにかく悪い習慣なので、誰も信頼しません...そうですか?:))。もちろん、セッションですが...)

デスファイアカードをエミュレートしており、最初のデスファイア選択アプリケーション(0x5A)からISO SELECT(0x00 0xA4 0x04)に切り替えるだけで済みました。

認証(チャレンジ/レスポンス)のエミュレートは難しい場合がありますが、すでに「逆」(NFCを使用してデスファイアカードを読み取る)で行っていたため、簡単でした。

また、認証にカードUIDを使用している場合は、カードUIDを変更することをお勧めします:)

于 2014-11-06T08:57:59.620 に答える
1

あなたの状況を考えると、AndroidSDKはあなたの問題を解決するのに十分すぎると思います。あなたのケースには2つの部分があります:

  1. 既存のカードから情報を読み取る。
  2. カードから読んだ情報でアプリを作る。

パート1:

あなたの唯一の心配はDESFireカードを読むことである必要があります。DESFireカードの情報がNDEF形式で保存されていると、作業がさらに簡単になります。

NdefはSDKのクラスであり、NdefMessageタイプで情報を取得するために使用できます。このクラスを使用して、取得した情報をローカルデータベース、リモートデータベース、またはアプリケーションメモリなどのストレージファシリティに保存できます。

上記は、カードが保護されていないことを前提としています。そうである場合は、transceive関数を使用して生のバイト通信を使用して対話する必要があります。これにより、残りの情報を読み取るためのロックが解除されます。ここから、NDEFレコードを読み取ることができます。

パート2:私の提案は、カードエミュレーションの側面をスキップすることです。ある時点で壁にぶつかるでしょう。

既存のソリューションでカードを読み取っているデバイスがAndroidデバイスに接続されている場合は、AndroidBeamが最適です。これはAndroidアプリからAndroidアプリへのコミュニケーションに他なりません!Androidはすでに手間のかかる作業を行っているため、ほとんどの作業は簡単になります。

カード上の情報は、ndefメッセージとして保存してビームを介して送信することも、カスタムオブジェクトを作成して送信することもできます。

于 2012-07-18T07:04:57.060 に答える
0

MifareカードからNFCデバイスに移行するために設定されたイニシアチブであるMifare4Mobileをご覧ください。

http://mifare4mobile.org/

于 2012-07-20T18:19:10.190 に答える