1

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

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

使用以前基于安全元件的 NFC 应用程序,可以通过 NFC 控制器或“接触”接口(芯片和电话之间的插座)与 SE 中托管的小程序交换 APDU。

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

由于我在 Google 文档中阅读了此部分,因此我对 HCE 的类似可能性存有疑问:

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

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

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

谢谢你的时间!

4

1 回答 1

0

这让我认为用户级应用程序不可能与 HCE 服务交换 APDU——它只能通过 NFC 控制器从“外部”发生。

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

如果我错了,该怎么做?是否有任何安全机制来控制哪个用户级应用程序可以与 HCE 服务通信?

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

于 2014-09-10T15:46:05.413 回答