【问题标题】:How to detect in Android whether UID from NFC tag is random?如何在Android中检测来自NFC标签的UID是否是随机的?
【发布时间】:2012-03-21 00:33:23
【问题描述】:

我正在开发一个 Android 项目,该项目依赖于发现的 NFC 标签的唯一 UID 来处理标签。我使用以下代码提取此 UID:

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

但是,出于安全目的,对于某些技术,此 UID 是随机生成的。有谁知道我如何检测到这是一个随机生成的 UID?是否设置了某种标志?

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

【问题讨论】:

    标签: android nfc uniqueidentifier


    【解决方案1】:

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

    对于 NfcB(以及 IsoDep 与 NfcB 组合),没有为随机 ID 保留的预定 ID 范围。事实上,任何 NfcB ID 都可以是随机的。 NfcB ID实际上称为PUPI,代表“Pseudo Unique PICC Identifier”。所以名字已经表明不保证唯一性。

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

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

    【讨论】:

    • 这其实有点意外。如果我每次阅读它都会改变 UID,它有什么用?
    【解决方案2】:

    此 RFC:https://www.rfc-editor.org/rfc/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.
    

    【讨论】:

    • 啊,NFC使用非标准UID?
    • NFC UID(或实际上是 ISO/IEC 14443 UID)早于 RFC4122 UUID。 AFAICT,这两种类型之间没有关系。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-24
    • 2016-08-30
    • 2014-06-19
    相关资源
    最近更新 更多