7

NFC リーダーから取得した APDU を SIM カードにルーティングしたいと考えています。HCEのドキュメントによると、対応するルーティングエントリを使用して OffHostApduService を作成するだけで可能だと思いました(私はそうしました)。

残念ながら、SIM は APDU を取得していないようです。SIM が SIM リーダーによってワークステーションに直接接続されている場合に機能する SELECT コマンドは、6a82 (ファイルが見つかりません) を返します。

LogCat で、2 つの興味深い情報を見つけました。

SIM にルーティングする必要がある選択コマンドを実行するたびに、次のエントリが表示されます。

01-14 10:44:18.501: D/BrcmNfcJni(1009): RoutingManager::stackCallback: event=0x17
01-14 10:44:18.501: D/BrcmNfcJni(1009): RoutingManager::stackCallback: NFA_CE_DATA_EVT; h=0x302; data len=12
01-14 10:44:18.501: D/HostEmulationManager(1009): notifyHostEmulationData

Android OS は、SIM へのルーティングがアクティブで、select などのコマンドが SIM に送信されていることを認識していないはずなので、ルーティングが正しく設定されていない手がかりであると思います。

リーダーの NFC フィールドから電話を取り外すたびに、次のエラーが表示されます。

01-14 10:46:48.791: E/BrcmNfcNfa(1009): UICC[0x0] is not activated

このエラーの原因を追跡しようとしたところexternal/libnfc-nci/src/nfa/ce/nfa_ce_act.chere、Broadcom NFC ドライバーに属すると思われるファイルが見つかりました。

ドライバーは SIM がアクティブ化されていないと考えているため、アプリケーションが APDU の正しいルーティングを設定できないのが間違いだと思います。コマンドを送信した瞬間に SIM のロックが解除されます (PIN 入力) が、カード リーダーで使用する前に SIM のロックを解除する必要がないため、これが何か関係があるとは思えません。

テストには Nexus 5 を使用します。APDU を CPU ではなく SIM にルーティングできる経験や実際の例を持っている人はいますか?

4

3 に答える 3

5

簡単なチェック (デバイスに挿入された UICC の SWP ピンの信号を分析) により、Nexus 5 がSIM を NFC セキュア エレメントとしてアクティブ化していないことが明らかになりました (起動時でも、スマートフォンをスマートカード リーダーに装着したときでもありません)。

しかし、デバイスのシステム パーティションで 2 つの興味深いファイルを見つけました。

  • /system/etc/libnfc-brcm-20791b05.conf
  • /system/etc/libnfc-brcm.conf.

これらの 2 つのファイルは、NFC コントローラの構成を提供しているようです (最初のファイルはチップ固有の構成で、2 つ目はチップファミリ固有の構成ですか?)。

ブートローダーのロックを解除した後、adb を介して clockworkmod リカバリ イメージを起動することでこれらのファイルを変更できたので、構成パラメーターをいくつか試してみました。

その結果、デバイスが UICC をアクティブにできるようになりました (UICC がアクティブになり、SWP を介して CE ゲートを登録しましたか?)、デバイスはフィールド ステータスの変更について UICC に通知することさえありました。ただし、構成を変更しなくても、カード エミュレーションをリーダーにスムーズに検出させたり (これは、デバイスで HCE のみが使用可能だった以前は機能していました)、UICC と通信したりできませんでした。

の興味深いパラメータは次の/system/etc/libnfc-brcm.confようです。

  • NFA_MAX_EE_SUPPORTED: これは現在 0 に設定されています。デフォルトのように見える 3 の値を試しました。
  • ACTIVE_SE: これは現在 0 (アクティブな SE なし) に設定されています。その行のコメントを外して、デバイスが最初に検出された SE を使用できるようにしました。
  • NFA_HCI_STATIC_PIPE_ID_??: 必要ないはずですが、GS4 では ?? の 0x71 に設定されています。= F3 と F4。
  • UICC_LISTEN_TECH_MASK: 当社の GS4 では 0x00 に設定されています。
  • REGISTER_VIRTUAL_SE: そのままにしておきました (== コメントアウト)。
  • SCREEN_OFF_POWER_STATE: これは試していませんが、GS4 では 3 (スクリーン オフ CE) に設定されています。

の興味深いパラメータは次の/system/etc/libnfc-brcm-20791b05.confようです。

  • NFA_DM_START_UP_CFG: UICC のコメント アウトされたパラメーターを試し、GS4 の構成を使用しようとしました。値は長さバイトで始まり、TLV 形式 (1 つのタグ バイト、1 つの長さバイト、パラメーター データ) で構造化されます。UICC アクティベーションに関連するタグC2は、2 番目のパラメーター バイトの上位 2 ビットが設定されている場合、NFC コントローラーの SWP インターフェイスを無効にします。
  • NFA_DM_PRE_DISCOVERY_CFG: コメントは、UICC をサポートするためにコメントを解除する必要があることを示唆しています。
于 2014-01-22T22:52:46.163 に答える
2

に以下を追加すると/etc/libnfc-brcm.conf

DEFAULT_ISODEP_ROUTE=0xF3 

UICC は APDU を受信します。

上記libnfc-brcm.confおよびのすべての変更も必要です。libnfc-brcm-20791b05.conf

Jelly Bean 4.3 までは、UICC を RF にルーティングするnfc_extras方法が一般的でした。CardEmulationRoute (<route>, <nfcEe>)しかし、KITKAT では、DEFAULT_ISODEP_ROUTE によるこの残忍な変更は、UICC カード エミュレーションを有効にするのに十分です。

于 2014-02-19T17:11:48.527 に答える