android同时识别多个nfc标签,android – 如何防止NFC标签克隆?

这取决于您使用的标记类型以及您希望克隆的保护级别.

> NFC标签(由NFC Forum定义)没有防止克隆的保护.这些标签旨在作为可自由读取的数据的容器(所谓的NDEF消息).任何人都可以从一个标签读取NDEF消息并将其复制到另一个标签.

>许多NFC标签还包含由标签制造商预编程的唯一标识符,不能在普通标签上修改.您可以使用此唯一标识符来确定标签是否由您(即您知道其ID)或伪造(即您不知道其ID)发出.您还可以在标记的ID及其数据上创建数字签名,而不是使用正版ID列表.这样,您可以查看数据和签名是否用于具有不同唯一标识符的标记.但是,仍然可以从标记中提取所有数据.因此,您应该知道,如果攻击者可以将唯一标识符更改为标记ID的值,则可以使用专用硬件(例如Proxmark等)和现成标签.所以这肯定不是完美的克隆保护.

>您可以使用非接触式智能卡/标签,提供通信加密和基于共享密钥的访问控制(例如MIFARE DESFire).使用此方法,您可以存储不希望攻击者能够在受密钥保护的内存区域中克隆的数据.但是,如果您希望能够从应用程序中读取该数据(即没有直接与卡通信的在线后端),则需要存储密钥才能访问应用程序中的内存区域.因此,在离线场景(即存储在应用程序中的密钥)中,攻击者可能能够提取该密钥并使用它来克隆标记.

>您可以使用包含秘密非对称密钥的标记/智能卡,并提供使用该密钥对加密质询进行签名的命令.在这种情况下,为了验证标签是否是正版,您可以从标签请求此类签名以进行随机质询,并根据对应公钥的标签验证签名.这肯定是最安全的解决方案,因为您不需要在应用程序中存储任何共享密钥.唯一现成的NFC标签解决方案(我现在知道)提供这样的功能似乎是Inside Secure的VaultIC.虽然您可以基于非接触式智能卡(例如Java卡)的非对称加密功能自己创建一个.

请注意,对于上述所有克隆保护方案,您必须创建一个应用程序,以检查标记是真实的还是克隆的.默认情况下,NFC电话仅使用(1)中的信息,因此不执行任何此类检查.

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android设备中,可以使用NFC Adapter进行NFC标签或设备的自动识别。以下是可能的代码实现: 1. 获取NFC Adapter: ``` NfcAdapter nfcAdapter = NfcAdapter.getDefaultAdapter(this); ``` 2. 在Activity中,重写onNewIntent()方法,以便在检测到新的NFC标签或设备时进行处理: ``` @Override protected void onNewIntent(Intent intent) { super.onNewIntent(intent); if (NfcAdapter.ACTION_TAG_DISCOVERED.equals(intent.getAction())) { // 处理NFC标签被发现的情况 Tag tag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG); // 对标签进行读取或写入等操作 } else if (NfcAdapter.ACTION_NDEF_DISCOVERED.equals(intent.getAction())) { // 处理NFC设备被发现的情况 // 对设备进行读取或写入等操作 } } ``` 3. 在Activity中,重写onResume()方法和onPause()方法,以便在Activity处于前台时监听NFC事件: ``` @Override protected void onResume() { super.onResume(); IntentFilter tagDetected = new IntentFilter(NfcAdapter.ACTION_TAG_DISCOVERED); IntentFilter[] filters = new IntentFilter[] { tagDetected }; PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, new Intent(this, getClass()).addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP), 0); nfcAdapter.enableForegroundDispatch(this, pendingIntent, filters, null); } @Override protected void onPause() { super.onPause(); nfcAdapter.disableForegroundDispatch(this); } ``` 以上代码实现了NFC标签或设备的自动识别,并提供了相应的操作。需要注意的是,NFC操作需要相应的权限和硬件支持。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值