首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >访问MIFARE DESFire卡

访问MIFARE DESFire卡
EN

Stack Overflow用户
提问于 2014-08-19 14:26:41
回答 2查看 2K关注 0票数 1

如何使用安卓手机作为DESFire阅读器访问MIFARE NFC卡?我计划在android手机上开发一个Android应用程序(用于支付)。

我想使用Android手机执行的DESFire操作(身份验证、读写)需要SAM卡,我想我可以使用HCE在手机中模拟SAM卡。

EN

回答 2

Stack Overflow用户

发布于 2014-10-08 15:24:29

因此,在安卓设备上,可以通过IsoDep类访问它们。因此,一旦获得标记句柄(Tag对象),就可以使用以下命令实例化IsoDep对象:

代码语言:javascript
复制
Tag tag = ...  // (e.g. get from NFC discovery intent)
IsoDep isoDep = IsoDep.get(tag);

您可以连接到该卡并使用IsoDep对象的transceive()方法向该卡发送命令(以及从该卡接收响应):

代码语言:javascript
复制
isoDep.connect();
byte[] response = isoDep.transsceive(command);

您可以使用DESFire本机命令集、ISO包装本机命令集或DESFire /IEC7816-4命令集(有关更多详细信息,请参阅DESFire数据表)。由于一些设备上的存在检测的已知问题(自动发送读取的二进制APDU来检测标签是否仍然可用),我强烈建议使用APDU包装的本机命令集或ISO/IEC7816-4命令集(参见this question)。

现在,有问题的部分是 SAM。 SAM(安全访问模块)是一种安全智能卡芯片,它保存密钥并执行与 DESFire 卡通信的安全关键部分。 您不能简单地使用基于主机的卡仿真来“仿真”这样的 SAM。 这没有多大意义,因为 HCE 的整个想法是通过 NFC 接口将非接触式智能卡读卡器的通信路由到(不安全的)应用处理器。 在应用处理器上实现 SAM 功能会破坏专用 SAM 芯片的全部目的(即高安全级别)。 此外,为了模拟 SAM 功能,您不需要 HCE,因为您可以在应用程序中直接存储访问 DESFire 卡的凭据。

您可能拥有的一个选项是使用基于云的安全元素方法。 因此,您可以在服务器/云中拥有 SAM 功能,并通过您的应用程序将与您的 DESFire 卡的通信路由到该服务器。

代码语言:javascript
复制
byte[] command = receiveCommandFromBackend();  // receive command from server/cloud over the network
byte[] response = isoDep.transsceive(command);
sendResponseToBackend(response); // send response to server/cloud over the network

总结一下:您不需要 HCE。 根据您的安全要求,您可以在应用程序中存储访问 DESFire 卡的凭据(请注意,攻击者可能能够提取该信息),或者您可以使用基于云的 SE 方法来转移安全关键部分 到在线后端系统(但这通常需要在与卡通信期间持续访问网络)。

另一种方法当然是在您的设备中使用本地安全元素,但这需要您可以访问它,这通常不容易/不可能。

票数 6
EN

Stack Overflow用户

发布于 2014-08-21 17:05:31

Mifare DESFire不是一种支付标准,你应该依靠ISO14443-4 (即ISO7816-4),至少所有的大公司都是这么做的。这些也是HCE所基于的标准。有一个基于DESFire的支付系统可能是非常具体的。DESFire的问题在于它是专有技术。使用HCE开发支付应用在安全性方面非常具有挑战性。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25376914

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档