Mifareや他のカードのエミュレーションを研究したことがある プログラミング(AndroidではなくC/C++)の知識が非常に豊富である。proxmarkを持っていて、proxmarkのエミュレーションコードを複数作ったことがあるので、カードがどのように通信しているのか知っている
現在、アンドロイドがカードエミュレーションを完全に行えるのか、理解できていません。 3日ほど前から調べてみたのですが、結論としては一定のパターンはないということです。可能という人もいれば、不可能という人もいます。androidのAPIを調べてみると、Hostベースのカードエミュレーションができるようなのですが、4.4 Kitkatで新しくなったということで、どなたか経験のある方はいらっしゃいませんか?
簡単に説明すると、現在、Mifare Ultralightの基本的で最もシンプルなエミュレーションを調査しています。このカードはセキュリティの悪夢で、暗号化もなく、できる機能も10ほどしかありません。ですから、私はこのカードで研究を始めることに興味があります。なぜなら、最も簡単に再現できるからです。
そこで、どなたかアンドロイドでのカードエミュレーションについてご存知の方はいらっしゃいませんか?たぶん純正OSは使っていないと思います。知っている価値のあることであれば、どんなことでも、とてもありがたいです。
ありがとうございます。
Android 4.4のホストベースカードエミュレーション(HCE)では、ISO/IEC 14443-4プロトコルのみをエミュレートすることが可能です。具体的には、ISO/IEC 7816-4 に準拠したアプリケーション構造のみをエミュレートできます(したがって、カードエミュレーションアプリケーションは、AID を介して選択する必要があります)。さらに、APIはカードエミュレーションがタイプAまたはタイプBのプロトコルを使用して行われるべきかどうかを指定する手段を提供しません。
そこで、各種MIFAREのプロトコルのエミュレーションについて。
リーダーによっては、下位プロトコル層で特定のパラメータ値(特定のUIDカスケードレベル、特定のATQA値、特定のSAK値、または特定のATSなど)を必要とする場合があります。Android HCEは、これらの値を設定する手段を持ちません。特定の root 化されたデバイスでこれらの値を変更する可能性のあるアプローチは Editing Functionality of Host Card Emulation in Android を、カスタム ROM でプログラム的にこれらの値を変更する方策は My answer to Host-based Card Emulation with Fixed Card ID を参照してください。
CyanogenMod バージョン9.1からバージョン10.2までで利用できるHCE機能についての注意点です。これは、ISO/IEC 7816-4に従ったアプリケーションの構造を必要とせずに、任意のISO/IEC 14443-4ベースのプロトコルをエミュレートします。Type AまたはType Bのプロトコルをエミュレートするかどうかを選択することもできます。つまり、DESFireの3つのプロトコルのいずれかをエミュレートすることは可能なはずです(テストはしていませんが)。しかし、CyanogenModのHCE機能を使っても、MIFAREのUltralightやClassicプロトコルをエミュレートすることはできません。さらに、UID、ATQA、SAK、ATSといった低レベルのプロトコル・パラメータに影響を与えることもできません。
私は1年前にこのテーマについて何週間もかけて調査し、現在の実装に基づく私の結論はこうでした。 MIFARE Classicのエミュレーションは可能ですが、Embedded Secure Elementを通じてのみ可能で、この要素はNXP'のNFCチップ(例えばSamsung I9300に組み込まれているPN65チップ)内に埋め込まれています。
android_external_libnfc-nxpライブラリの隠し機能を使って、Mifare Classicカードを完全にエミュレートすることができました。しかし、私はカードを読むことしかできず、それが有用であるためには、ほとんどの場合NXPによるアプレットが存在するセキュアエレメントにアクセスする必要があります。
Googleのウォレットアプリケーションをリバースエンジニアリングするのが、この探索を続ける良い方法でしょう。
MIFARE Ultralight チップ MF0ICU1 (16 pages x 4 bytes each) は確かに悪夢ですが、PN53x を含む NXP インターフェースでエミュレートすることはできません。MIFARE Ultralightをエミュレートするには、UID0 = 0x04
が必要です。
スタンドアロンMIFARE Ultralightエミュレータ](http://emutag.com)があり、`UID0`に任意の値を指定でき、リセッタブルOTP、ロック、ブロックロックビットを備えています。詳しくはマニュアルをご覧ください。