是否可以从Android用户区发送APDU到HCE服务?

时间:2014-09-10 14:38:31

标签: android nfc hce

如果我的问题听起来很愚蠢,我提前道歉,我不是开发人员,答案可能很明显(但至少对我来说不是......)。

我对Android Kit-Kat中引入的相对较新的主机卡仿真的可能性感兴趣。

使用以前基于Secure-Element的NFC应用程序,可以通过NFC控制器或“联系”接口(芯片和电话之间的插槽)将SEDU与SE中托管的applet进行交换。 / p>

后者支持SE与在Android用户区中运行的应用程序之间的通信(可以充当远程服务器的代理)。应用程序与applet通信的授权是基于必须在SE中“预先注入”的应用程序的某种散列授予的 - 据我所知,此安全机制是Global Platform规范的一部分。

自从我在Google文档中阅读this section以来,我对HCE的类似可能性存在疑问:

  

HCE体系结构本身提供了一个核心安全性:因为您的服务受BIND_NFC_SERVICE系统权限保护,所以只有操作系统可以绑定到您的服务并与之通信。

这让我觉得用户空间应用程序不可能用APC服务交换APDU - 它只能通过NFC控制器从“外部”发生。 如果我错了,怎么做,是否有任何安全机制来控制哪个用户态应用程序可以与HCE服务进行通信?

我问这些问题,因为我想知道是否有可能开发一个Android应用程序,能够显示通过HCE模拟的卡的内容,并启动远程服务器(充当NFC读卡器)和HCE服务。

谢谢你的时间!

1 个答案:

答案 0 :(得分:0)

  

这让我觉得用户态应用程序不可能   用一个HCE服务交换APDU - 它只能从“   在外面“通过NFC控制器。

这一般都是正确的。没有允许应用程序与HCE服务通信的机制。但是,仅仅因为没有机制并不意味着不可能构建一个机制,假设您可以控制HCE服务和应用程序。

  

如果我错了,怎么做,是否有任何安全措施   控制哪个用户态应用程序可以通信的机制   有HCE服务吗?

有多种选择。要选择一个简单的,请查看Unix域套接字android.net.LocalSocket。您可以使用此机制在应用程序和HCE服务之间构建通信通道。它或多或少与应用程序和Internet之间的任何套接字通信一样,但通信仅限于本地设备。 LocalSocket的getPeerCredentials成员函数还允许您根据组,进程和用户ID检查谁尝试连接到您。