web-dev-qa-db-ja.com

Android 4.4でMifareカードをエミュレートします

Mifareおよびその他のプログラミングの研究を行っています(AndroidではなくC/C++)。 proxmarkがあり、proxmark用に複数のエミュレーションコードを作成したので、カードの通信方法を知っています。

私は現在理解していません、Android完全なカードエミュレーションを有効にします。約3日間、これを調査しました。 Android APIとホストベースのカードエミュレーションはこのトリックを実行できるようですが、4.4 KitKatの新しいものであると理解しているようです。誰でもそれを経験したことがありますか?

物事を単純にするために、現在、Mifare Ultralightの基本的な最も単純なエミュレーションを調査しています。このカードはセキュリティの悪夢であり、暗号化はなく、約10の機能しかありません。ですから、私はこのカードを使って研究を始めることに興味があります。なぜなら、このカードは最も簡単に再現できるからです。

だから、Androidでのカードエミュレーションの知識は誰にもありません。ストックOSを使用していない可能性があります。知っておく価値のあるものは非常にありがたいです。

ありがとう。

32
user2570174

Android 4.4でホストベースのカードエミュレーション(HCE)を使用すると、ISO/IEC 14443-4プロトコルのみをエミュレートできます。より具体的には、ISO/IEC 7816-4に準拠したアプリケーション構造のみをエミュレートできます。 (したがって、AIDを使用してカードエミュレーションアプリケーションを選択する必要があります。)さらに、APIは、タイプAまたはタイプBプロトコルを使用してカードエミュレーションを実行するかどうかを指定する手段を提供しません。

したがって、さまざまなMIFAREプロトコルのエミュレーションに関して:

  • MIFARE Ultralight(および派生)プロトコルは、ISO/IEC 14443-3の上で動作します。 Android HCE。を使用して、このような低層プロトコルを使用してカードをエミュレートすることはできません。
  • MIFARE Classicプロトコルは、ISO/IEC 14443-3(いくつかの異なるフレーミング)の上で部分的に動作します。したがって、Android HCE。を使用してMIFARE Classicをエミュレートすることもできません。
  • MIFARE DESFireプロトコルは、ISO/IEC 14443-4の上で動作します。 DESFireプロトコルには3つのバリアントがあります。

    1. ネイティブプロトコル:このプロトコルはISO/IEC 7816-4に準拠したAPDUを使用しないため、Android HCEを使用してエミュレートすることはできません。
    2. wrapped native protocol:このプロトコルはISO/IEC 7816-4に準拠したAPDUを使用しますが、リーダーは通常、カードとの通信を開始するときにDESFire AIDを使用したSELECTコマンドを発行しませんラップされたネイティブコマンドモード。 (注:新しいリーダーの実装では、Android HCEと互換性のあるSELECTコマンドを発行する可能性が高くなります。これは、DESFireプロトコルエミュレーションを備えたNXPの新しいスマートカード製品にも必要です。)
    3. ISOプロトコル:このプロトコルはISO/IEC 7816-4に基づいており、AIDによるアプリケーション選択を使用します。したがって、Android HCE。を使用してこのプロトコルをエミュレートすることが可能かもしれません。

    一部の読者は、特定のUIDカスケードレベル、特定のATQA値、特定のSAK値、または特定のATSなど、特定のパラメーター値を下位プロトコルレイヤーで必要とする場合があります。 Android HCEにはこれらの値を設定する手段がありません。 Android でのホストカードエミュレーションの機能の編集を参照してください。特定のルート化されたデバイスと 固定カードID を使用したホストベースのカードエミュレーションに対する私の答えは、カスタムROMでこれらの値をプログラムで変更する戦略です。

バージョン9.1からバージョン10.2までのCyanogenModで利用可能なHCE機能に関する注記:これは、ISOに準拠したアプリケーション構造を必要とせずに、ISO/IEC 14443-4ベースのプロトコルをエミュレートします。/IEC 7816-4。タイプAまたはタイプBプロトコルをエミュレートするかどうかを選択することもできます。そのため、3つのDESFireプロトコルのいずれかをエミュレートすることは可能です(テストしていませんが)。ただし、CyanogenModのHCE機能を使用しても、MIFARE UltralightまたはClassicプロトコルをエミュレートすることはできません。さらに、UID、ATQA、SAK、ATSなどの低レベルのプロトコルパラメーターに影響を与えることもできません。

51
Michael Roland

1年前にこのトピックの調査に数週間費やし、現在の実装に基づく私の結論は次のとおりでした。MIFAREクラシックのエミュレーションは可能ですが、この要素はNXPのNFCチップに埋め込まれています。 (PN65チップは、たとえばSamsung I9300に組み込まれています)。

Android_external_libnfc-nxpライブラリの非表示関数を使用して、Mifare Classicカードを完全にエミュレートできました。私はカードを読むことしかできなかったが、それが役立つためには、ほとんどの場合NXPのアプレットが存在するSecure Elementにアクセスする必要がありますが、このアプレットはエミュレートされたカードを管理するためのフロントエンドです。

この検索を続ける良い方法は、Googleのウォレットアプリケーションをリバースエンジニアリングすることです。

17
Simplect

MIFARE UltralightチップMF0ICU1(各16ページx 4バイト)は確かに悪夢ですが、最初のUIDバイト(UID0)を0x08であるため、タグにはランダムなUIDがあります(NXP標準に準拠)。 MIFARE Ultralightをエミュレートするには、UID0 = 0x04が必要です。

スタンドアロンMIFARE Ultralightエミュレーター が存在し、UID0の任意の値を許可し、リセット可能なOTP、ロック、およびブロックロックビットを備えています。詳細については、マニュアルを参照してください。

4
nCipher

短い答えは[〜#〜] yes [〜#〜]です。ただし、Androidバージョン、携帯電話のNFCチップなど。

デバイスがサポートしているかどうかを知るには、Tapkeyで「 NFC Check 」などのアプリをダウンロードするだけで、MiFare ClassicおよびMifare Ultralightがサポートされているかどうかが通知されます。最新のリストもありますが、明らかに不一致がある可能性があります。 https://www.shopnfc.com/en/content/7-nfc-compatibility

ここで問題は「方法」です。この目的のために、新しいAndroidのホストベースのカードエミュレーション( [〜#〜] hce [〜#〜] )を使用するアプリをまだ見つけていません(こちらを参照): How Android NFC APIサポートMifare Desfire?

実際、最近MiFareから、代わりに「secure element」メソッドを使用することが提案されています。 https://www.mifare.net/support/forum/topic/emulate-mifare-classic-1k/ =

Ultralightの質問に戻ると、主な難点は、Android APIは、以前のユーザーnCypherによって提案されたように、各タップでランダムUIDを送信するように今日定義されていることです: https: //developer.Android.com/guide/topics/connectivity/nfc/hce

代替ルートアクセス(またはカスタムシアンROM)は、この例のようにUIDの変更に役立つ場合があります。 http://osgt7405i.bkt.clouddn.com/help/en/index.html?t=1536931682474

ただし、最新のAndroid APIはUltralightオブジェクトを直接参照します: https://developer.Android.com/reference/Android/nfc/tech/MifareUltralight

SIMストレージによってこれをエミュレートしている会社を知っています。これらのMIFAREタイプのRFIDカードとして携帯電話を使用するために、MiFareは既にビジネスがクラウドにカードをロードできる1つのソリューションを作成しました https://www.mifare4mobile.org/ キャリアSIMに関連付けられています。公式に認証されたNFCチップで動作します。それらのほとんどはスマートフォンに広く搭載されているNPXです。

ただし、それらのソリューションはSDK API(つまりTapLinx)です。電話エミュレーションソフトウェアやクラウドベースソリューションのようなNXPの純粋なソフトウェア製品はありません。

さらに、MiFareフォーラムはこれについて話します: https://www.mifare.net/support/forum/topic/creating-nfc-Android-app-to-act-as-mifare-card-to- interact-with-mifare-readers /

2
JCM