Mar*_*mos 5 android apdu nfc mifare hce
我正在尝试使用ACR122 NFC阅读器来选择使用Android主机卡仿真在一个Nexus 5中模拟的应用程序.但是,无法识别小型AID.
我的目标是使用三字节长的AID,就像在DESfire卡中一样.我的第一个目标只是能够执行SELECT命令.
我的测试应用程序使用以下配置进行AID:
<host-apdu-service xmlns:android="http://schemas.android.com/apk/res/android"
android:description="@string/service_descr"
android:requireDeviceUnlock="false" >
<aid-group
android:category="other"
android:description="@string/aid_descr" >
<aid-filter android:name="A0A1A2" />
<aid-filter android:name="B0B1B2B3" />
<aid-filter android:name="C0C1C2C3C4" />
<aid-filter android:name="D0D1D2D3D4D5" />
<aid-filter android:name="E0E1E2E3E4E5E6" />
</aid-group>
</host-apdu-service>
Run Code Online (Sandbox Code Playgroud)
如果我运行以下APDU:
00 a4 04 00 03 a0 a1 a2 00
00 a4 04 00 04 b0 b1 b2 b3 00
00 a4 04 00 05 c0 c1 c2 c3 c4 00
00 a4 04 00 06 d0 d1 d2 d3 d4 d5 00
00 a4 04 00 07 e0 e1 e2 e3 e4 e5 e6 00
Run Code Online (Sandbox Code Playgroud)
我总是得到以下答复:
=> 00 a4 04 00 03 a0 a1 a2 00
<= 6f 00
=> 00 a4 04 00 04 b0 b1 b2 b3 00
<= 6a 82
=> 00 a4 04 00 05 c0 c1 c2 c3 c4 00
<= 90 00
=> 00 a4 04 00 06 d0 d1 d2 d3 d4 d5 00
<= 90 00
=> 00 a4 04 00 07 e0 e1 e2 e3 e4 e5 e6 00
<= 90 00
Run Code Online (Sandbox Code Playgroud)
那么,只有长度大于5字节的AID才能与Android一起使用?或者我做错了什么?
Mic*_*and 15
智能卡应用程序标识符(AID)的规则在ISO/IEC 7816-4中定义.AID最多可包含16个字节.基于前4位,AID被分成不同的组.ISO/IEC 7816-4中定义的最相关的组是:
'A':国际注册的AID'D':国家注册的AID'F':专有AID(无注册)对于(国际)国家注册的AID,AID分为两部分,一个5字节的强制性RID(注册的应用程序提供者标识符)和一个最多11个字节的可选PIX(专有应用程序标识符扩展).
对于专有AID(F...),ISO/IEC 7816-4没有明确规定任何最小长度要求.
除此之外,当涉及HCE和从NFC控制器到安全元件或应用处理器的卡仿真通信的路由时,存在NFC论坛NCI规范.该规范要求AID(在基于AID的路由条目中使用)在5到16个字节之间.顺便说一句.同样的限制适用于遵循Java Card规范的智能卡.
对于Android,有一个硬编码要求,SELECT命令中收到的AID至少包含5个字节:
resolveAid()中findSelectAid()中HostEmulationManager.java上线390(这实际上导致奇怪的行为,该4字节AID与"文件或应用程序未发现"(拒绝6A82)状态字作为检查不正确地考虑勒字节)| 归档时间: |
|
| 查看次数: |
8257 次 |
| 最近记录: |