Android HCE:AID有规则吗?

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中定义的最相关的组是:

  • AID起始于'A':国际注册的AID
  • AID起始于'D':国家注册的AID
  • 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个字节: