Mifareおよびその他のプログラミングの研究を行っています(AndroidではなくC/C++)。 proxmarkがあり、proxmark用に複数のエミュレーションコードを作成したので、カードの通信方法を知っています。
私は現在理解していません、Android完全なカードエミュレーションを有効にします。約3日間、これを調査しました。 Android APIとホストベースのカードエミュレーションはこのトリックを実行できるようですが、4.4 KitKatの新しいものであると理解しているようです。誰でもそれを経験したことがありますか?
物事を単純にするために、現在、Mifare Ultralightの基本的な最も単純なエミュレーションを調査しています。このカードはセキュリティの悪夢であり、暗号化はなく、約10の機能しかありません。ですから、私はこのカードを使って研究を始めることに興味があります。なぜなら、このカードは最も簡単に再現できるからです。
だから、Androidでのカードエミュレーションの知識は誰にもありません。ストックOSを使用していない可能性があります。知っておく価値のあるものは非常にありがたいです。
ありがとう。
Android 4.4でホストベースのカードエミュレーション(HCE)を使用すると、ISO/IEC 14443-4プロトコルのみをエミュレートできます。より具体的には、ISO/IEC 7816-4に準拠したアプリケーション構造のみをエミュレートできます。 (したがって、AIDを使用してカードエミュレーションアプリケーションを選択する必要があります。)さらに、APIは、タイプAまたはタイプBプロトコルを使用してカードエミュレーションを実行するかどうかを指定する手段を提供しません。
したがって、さまざまなMIFAREプロトコルのエミュレーションに関して:
MIFARE DESFireプロトコルは、ISO/IEC 14443-4の上で動作します。 DESFireプロトコルには3つのバリアントがあります。
一部の読者は、特定の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などの低レベルのプロトコルパラメーターに影響を与えることもできません。
1年前にこのトピックの調査に数週間費やし、現在の実装に基づく私の結論は次のとおりでした。MIFAREクラシックのエミュレーションは可能ですが、この要素はNXPのNFCチップに埋め込まれています。 (PN65チップは、たとえばSamsung I9300に組み込まれています)。
Android_external_libnfc-nxpライブラリの非表示関数を使用して、Mifare Classicカードを完全にエミュレートできました。私はカードを読むことしかできなかったが、それが役立つためには、ほとんどの場合NXPのアプレットが存在するSecure Elementにアクセスする必要がありますが、このアプレットはエミュレートされたカードを管理するためのフロントエンドです。
この検索を続ける良い方法は、Googleのウォレットアプリケーションをリバースエンジニアリングすることです。
MIFARE UltralightチップMF0ICU1(各16ページx 4バイト)は確かに悪夢ですが、最初のUID
バイト(UID0
)を0x08
であるため、タグにはランダムなUID
があります(NXP標準に準拠)。 MIFARE Ultralightをエミュレートするには、UID0 = 0x04
が必要です。
スタンドアロンMIFARE Ultralightエミュレーター が存在し、UID0
の任意の値を許可し、リセット可能なOTP、ロック、およびブロックロックビットを備えています。詳細については、マニュアルを参照してください。
短い答えは[〜#〜] 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 /