4

ISO 14443 タイプ A 標準をサポートする NFC カードを読み書きする Android アプリを作成しようとしています。徹底的な調査の結果、私に残された唯一のオプションは、APDU コマンドを送信して IsoDep クラスとその送受信メソッドを使用することのようです。私が持っているカードは、ISO 14443 および ISO 7816 規格をサポートする SmartCafe デュアル インターフェイス カードです。

次に、14443 規格の APDU を探すように言いました。これに関する優れたリソースを備えたこのページを見つけました。ただし、問題は APDU の例がないことです。

APDU に関するいくつかの質問と回答 (例: this ) がスタックオーバーフローにありましたが、うまくいきませんでした。

ブルート フォースの試みにより、select コマンドで次の結果が明らかになりました:カードのファイル制御情報のように見える6F108408A000000003000000A5049F6501FF9000 。しかし、私はこの情報をどのように解釈するかについて苦労しています。

カードを操作する流れにも苦労しています。これまでのところ、私は理解しています:

  1. ファイルを選択する必要があり、
  2. 次に、ファイルから読み取るか、ファイルに書き込みます。

カードは新しいもので、ファイル制御情報以外のファイルや情報がない場合があります。では、どの PDU を使用して特定の場所にファイルを作成し、どの PDU を使用してそのファイルから読み取ることができるでしょうか?

4

1 に答える 1

9

使用しているカード (SmartCafe デュアル インターフェイス) は JavaCard です。

試行した SELECT コマンドは、次のようなものである必要があります。

00 A4 04 00 00

また

00 A4 04 00 08 A000000003000000 00

その SELECT コマンドに応答して表示されるのは、GlobalPlatform カード マネージャーの FCI です。

6F 10 (FCI テンプレート) 
  84 08 (アプリケーション DF 名)
    A000000003000000
  A5 04 (独自データ) 
    9F65 01 (コマンド メッセージのデータ フィールドの最大長) 
      FF (256) 
9000 (ステータス = エラーなし)

そのタイプのカードでは、デフォルトではファイルの概念は実際には存在しません (そのため、ファイルを選択して読み書きするだけでは、通常は機能しません)。代わりに、このカードには、APDU コマンドを使用して対話できる Java ベースのアプリケーションが含まれています。

したがって、アプリケーションと対話する典型的なフローは次のようになります。

  1. AID (アプリケーション識別子) に基づいてアプリケーションを選択します。ISO 7816-4 に関しては、AID は DF 名と見なすことができ、その特定の DF 名に対して SELECT コマンドを発行します。

  2. 任意の APDU を (ISO 7816-4 に従って、業界間または独自のコーディングで) 選択したアプリケーションに送信します。

  3. Java ベース (実際には JavaCard ベースで、JavaCard は Java 言語の拡張サブセットです) アプリケーションは、コマンドを受信し、それをデコードして処理し、応答を生成します。

  4. カードは、アプリケーションの応答をリーダーに送り返します。

現在、いくつかの可能性があります。

  1. カードは特定の目的のために事前にプログラムされており、カード マネージャーにアクセスするためのキーはありません。
    その場合、カード上のアプリケーションとのインターフェース方法を知る必要があります。理想的には、アプリケーションのドキュメントに、選択する必要がある AID と、送信できるコマンドが示されているとよいでしょう。

  2. カードは特定の目的のために事前にプログラムされていますが、カード マネージャーにアクセスするためのキーを持ってます。もちろん、事前にプログラムされたアプリケーションを使用するのではなく、独自のアプリケーションを使用したいと考えています (それ以外は同じです)。 1. の場合と同様に適用されます)。
    その場合、独自の JavaCard アプリケーションを作成 (または目的に合った既製のアプリケーションを使用) し、それをカードにインストールできます (たとえば、GPSShellなどのオープン ツールを使用)。その後、自分で定義したインターフェースを使用してカードにアクセスできます。

  3. カードは特定の目的のために事前にプログラムされておらず、カードマネージャーにアクセスするためのキーがあります.
    その場合、唯一のオプションは、2 のように独自のアプリケーションを作成することです。

于 2014-03-27T07:06:07.030 に答える