我正在尝试使用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>
如果我运行以下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
我总是得到以下回复:
=> 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
那么,只有长度大于5字节的AID才能与Android配合使用?或者我 做错了什么?
答案 0 :(得分:15)
智能卡应用程序标识符(AID)的规则在ISO / IEC 7816-4中定义。 AID最多可包含16个字节。基于前4位,AID被分成不同的组。 ISO / IEC 7816-4中定义的最相关的组是:
'A'
开头的AID:国际注册的AID 'D'
开头的AID:全国注册的AID 'F'
开头的AID:专有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()
中(实际上会导致奇怪的行为,即4个字节的AID被“文件或应用程序未找到”(6A82
)状态字拒绝检查没有正确解释Le byte)答案 1 :(得分:3)
根据EMV标准,AID由具有最少5个字节的注册应用程序提供者标识符(RID)和可选的应用程序标识符扩展(PIX)或最大长度为11个字节的专有应用程序标识符组成,它们共同构成应用程序ID(AID),因此,应用程序ID的长度永远不会少于5个字节。如果卡中存在多个应用程序,则AID将具有附加到RID的可选应用程序标识符,以区分卡中存在的应用程序。请阅读他们网站上的EMV标准:EMVCO,尤其是他们的书籍,第1册到第4册,以便了解更多信息。