Android HCE 不支持select MF 命令?

Android HCE does not support select MF command?

我们正在开发基于 Android HCE 的应用程序。我们发现 HCE 使用基于 AID 的机制将通信路由到特定应用程序。这意味着如果我想触发我的应用程序,第一个命令必须是 SELECT by name 命令。

这对传输域来说是一个很大的限制。在传输中,许多 POS 不会将 SELECT by name 命令作为第一个命令发送。相反,他们会发送 SELECT MF (00A40000023F00) 命令作为第一个命令。所以 HCE 在这种情况下无法工作。

是否有计划添加默认 select 功能?或者我们有其他解决方案来支持这个用例吗?

对于交通,Visa 使用其应用程序 qVSDC 应用程序作为离线解决方案。它为离线数据认证提供了特定的 public 密钥,以限制这些交易在运输过程中发生。因此,Visa 的默认 select 是 A0000000031010,而不是特定的运输 AID。但是 Visa 提供多种 AID 支持,这意味着您可以开发 2. 应用程序以在交通工具上使用。 您必须个性化您的应用程序以响应特定的 "Select AID" 命令。

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

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

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

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

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

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

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