使用HCE模式获取静态NFC标签ID

SuS*_*uSu 5 android serial-number uniqueidentifier nfc hce

我是NFC的新手,所以我在HCE模式下调用了几个手机并调用了getTagId()方法,这就是结果:

device       | UID
LG G2        | random
LG G3        | static
S4           | random
HTC One Mini | static
Xiaomi mi3   | static
Run Code Online (Sandbox Code Playgroud)

我的问题:

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

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

Mic*_*and 6

为什么有些手机有静态UID而有些手机没有?这个芯片组有用吗?

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

  • 该设备具有安全元素,并使用该安全元素的静态UID.
  • 无论何时打开,设备都会生成新的随机UID.
  • 设备在每次激活时都会通过外部读卡器设备生成新的随机UID.即每当外部HF场应用于Android设备的NFC天线时.
  • 该设备没有安全元素,但仍使用静态UID(通常不是唯一的),例如0x01020304.[感谢ErikM指出这一点.]

是否有可能获得固定的UID?

通常情况下,您无法影响这一点.具体而言,无需修改Android设备固件(更改为NFC堆栈),这绝对不可能.有关通过修改libnfc-nci库在Broadcom芯片组上设置UID值的方法,请参阅此答案.

我需要它来验证设备.

不要这样做!有关详细信息,请参阅此答案.