如果我的问题听起来很愚蠢,我提前道歉,我不是开发人员,答案可能很明显(但至少对我来说不是......)。
我对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服务。
谢谢你的时间!
答案 0 :(得分:0)
这让我觉得用户态应用程序不可能 用一个HCE服务交换APDU - 它只能从“ 在外面“通过NFC控制器。
这一般都是正确的。没有允许应用程序与HCE服务通信的机制。但是,仅仅因为没有机制并不意味着不可能构建一个机制,假设您可以控制HCE服务和应用程序。
如果我错了,怎么做,是否有任何安全措施 控制哪个用户态应用程序可以通信的机制 有HCE服务吗?
有多种选择。要选择一个简单的,请查看Unix域套接字android.net.LocalSocket
。您可以使用此机制在应用程序和HCE服务之间构建通信通道。它或多或少与应用程序和Internet之间的任何套接字通信一样,但通信仅限于本地设备。 LocalSocket的getPeerCredentials
成员函数还允许您根据组,进程和用户ID检查谁尝试连接到您。