Android HCE does not support select MF command?

时间:2016-04-25 08:50:44

标签: android nfc apdu hce

We are developing an app based on Android HCE. We found that HCE uses an AID-based mechanism to route communication to specific apps. This means that if I want to trigger my app, the first command must be a SELECT by name command.

This is a very big limitation on transport domain. In transport, many POS won't send a SELECT by name command as the first command. Instead they would send a SELECT MF (00A40000023F00) command as the first command. So HCE can't work in that case.

Is there any plan to add default select feature? Or do we have some other solution to support this use case?

2 个答案:

答案 0 :(得分:1)

Android使用基于AID的路由机制将卡仿真模式下的通信分派给特定应用程序(HCE应用程序或SE小程序)。这也是NFC论坛设计为在单个NFC设备上支持多个独立卡仿真应用程序的主要手段。

基于AID的路由要求第一个命令是SELECT(通过DF名称/ AID)命令:

00 A4 0400 <Lc> <AID> [<Le>]

这是区分不同应用程序所必需的。否则,Android将无法将通信分派给正确的HCE服务。

但是,这也会阻止在成功选择应用程序之前进行仿真(例如使用SELECT(通过文件名等)命令选择主文件)。如果允许这样做,Android将无法知道哪个HCE应用程序负责处理该命令。因此,不可能在一个设备上托管所有需要主文件的多个HCE应用程序。因此,我不希望很快得到支持。

在其他mutli-application平台上也存在同样的问题。例如,典型的Java Card智能卡也没有主文件。在这些平台上,通常通过允许一个默认选择的应用程序在第一个SELECT(通过DF名称/ AID)命令之前处理所有通信来克服该问题。人们只能推测这种机制是否会出现在未来的Android版本中......我不会指望它。

如果有根设备是一个选项,您可以使用像Xposed这样的框架来调整NFC系统服务,以便将通信分派给某些默认的HCE服务。

答案 1 :(得分:-1)

对于运输,Visa使用其应用程序qVSDC应用程序作为离线解决方案。它为脱机数据身份验证提供特定的公钥,以限制运输中的这些事务。因此,对于Visa而言,默认选择是A0000000031010,而不是用于运输的特定AID。但Visa提供多种AID支持,这意味着您可以开发2.应用程序以用于运输。  您必须个性化您的应用以响应特定的“选择AID”命令。