Android HCE:AID有规则吗?

时间:2014-12-17 19:20:19

标签: android nfc mifare apdu 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>

如果我运行以下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配合使用?或者我 做错了什么?

2 个答案:

答案 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个字节:

答案 1 :(得分:3)

根据EMV标准,AID由具有最少5个字节的注册应用程序提供者标识符(RID)和可选的应用程序标识符扩展(PIX)或最大长度为11个字节的专有应用程序标识符组成,它们共同构成应用程序ID(AID),因此,应用程序ID的长度永远不会少于5个字节。如果卡中存在多个应用程序,则AID将具有附加到RID的可选应用程序标识符,以区分卡中存在的应用程序。请阅读他们网站上的EMV标准:EMVCO,尤其是他们的书籍,第1册到第4册,以便了解更多信息。