2014-12-01 45 views
4

我在NFC新的东西,所以我测试了几个电话,并调用getTagId()在HCE模式的方法,这就是结果:获取静态NFC标签的ID与HCE模式

device  | UID 
LG G2  | random 
LG G3  | static 
S4   | random 
HTC One Mini | static 
Xiaomi mi3 | static 

我的问题:

  1. 为什么有些手机有静态的UID,有些不是?这个芯片组是相关的吗?
  2. 是否有可能获得固定的UID?我需要它来验证设备。
  3. 另一方面,我在Xperia M上使用Kitkat CyanogenMod 11,但是我没有设法将它用于HCE,为什么?

任何可以解释/支持答案的文档?

+0

你正在使用什么'getTagId()'方法?你能描述一下你的测试设置吗? – 2014-12-05 12:35:59

+0

嗨,罗兰,我在阅读器端使用onTagDiscovered(标记标记)中的getTagId – SuSu 2014-12-05 23:46:42

回答

5

为什么有些手机具有静态UID,有些则没有?这个芯片组是相关的吗?

这取决于芯片组和NFC堆栈的实现。据我所知,各种Android NFC设备使用三种不同的场景:

  • 设备具有一个安全元素并使用该安全元素的静态UID。
  • 设备在打开时会生成一个新的随机UID。
  • 设备通过外部阅读器设备在每次激活时生成一个新的随机UID。即每当外部HF场被应用到Android设备的NFC天线时。
  • 该设备没有安全元件,但仍使用静态UID(通常不是独特),例如, 0x01020304。 [感谢埃里卡姆指出这一点。]

是否有可能得到一个固定的UID?

通常情况下,你不能影响这一点。特别是在不修改Android设备固件(更改NFC堆栈)的情况下,绝对不可能。有关通过修改libnfc-nci库设置Broadcom芯片组上的UID值的方法,请参阅this answer

我需要它来验证设备。

不要这样做!有关详细信息,请参见this answer

+1

在此处添加一个更多场景:设备没有安全元素并使用静态UID,即01020304.主要由Sony使用。 – ErikM 2017-10-16 07:17:32

+0

那么,它不在我的手中,给定的实体(办公室,学院等)使用什么设计进行身份验证。如果他们仅使用基于UID的系统,则所有答案都是“不要这样做”,根本没有帮助。我只想知道如何模仿,而不是如何设计一个认证系统。 – TJJ 2018-01-29 16:51:43