如何在Android中检测NFC标签中的UID是否是随机的?

问题描述:

我正在致力于一个Android项目,该项目依靠发现的NFC标签的唯一UID来处理标签。我使用以下代码提取此UID:如何在Android中检测NFC标签中的UID是否是随机的?

byte[] extraID = intent.getByteArrayExtra(NfcAdapter.EXTRA_ID); 

但是,对于某些技术,此UID是为了安全目的而随机生成的。有人有一个想法,我怎么能检测到这是一个随机生成的UID?有没有设置某种标志?

注意:一个简单的解决方案是读取标签两次并比较UID。但是,我想避免这种情况。

对于NFCA(和IsoDep和/或与MifareClassic组合NFCA),该ID是随机的,如果它正好是4字节长,并用0x08的开始。有一些卡(MIFARE DESFire)可以配置一个4字节长的随机ID并以0x80开头。

对于NfcB(和IsoDep与NfcB组合),没有为随机ID保留的预定ID范围。实际上,任何NfcB ID都可以是随机的。 NfcB ID实际上被称为PUPI,它代表“伪唯一PICC标识符”。所以这个名字已经表明独特性不能保证。

对于NfcF和NfcV,ID一般不会是随机的。

读取标签两次以检测随机ID只有在您从RF域中移除标签时才有效。只要标签保持由Rf字段供电,标签通常会保持相同的随机ID。

+0

你是更好的答案! – 2012-03-21 08:16:33

+1

这实际上有点令人惊讶。如果每次读取它时UID有什么用处? – zundi 2015-08-03 15:26:36

此RFC:http://tools.ietf.org/html/rfc4122#section-4.1.3定义了UID的格式;它包括一个字段,用于指示它是什么类型的UID:

Msb0 Msb1 Msb2 Msb3 Version Description 

    0  0  0  1  1  The time-based version 
            specified in this document. 

    0  0  1  0  2  DCE Security version, with 
            embedded POSIX UIDs. 

    0  0  1  1  3  The name-based version 
            specified in this document 
            that uses MD5 hashing. 

    0  1  0  0  4  The randomly or pseudo- 
            randomly generated version 
            specified in this document. 

    0  1  0  1  5  The name-based version 
            specified in this document 
            that uses SHA-1 hashing. 
+0

这与nfc无关... – 2012-03-21 00:48:43

+0

啊,NFC使用的是非标准的UID? – jimw 2012-03-21 00:57:25

+0

NFC UID(或实际上是ISO/IEC 14443 UID)早于RFC4122 UUID。 AFAICT,这两种类型之间没有关系。 – 2012-03-21 08:14:34