Как определить в Android, является ли UID из тега NFC случайным? - PullRequest
1 голос
/ 21 марта 2012

Я работаю над проектом Android, который использует уникальный UID обнаруженного тега NFC для обработки тега. Я извлекаю этот UID, используя следующий код:

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

Однако для некоторых технологий этот UID генерируется случайным образом в целях безопасности. У кого-нибудь есть идея, как я мог обнаружить, что это случайно сгенерированный UID? Есть ли какой-нибудь флаг, который установлен?

примечание: простое решение - прочитать тег дважды и сравнить UID. Однако я бы хотел этого избежать.

Ответы [ 2 ]

4 голосов
/ 21 марта 2012

Для NfcA (и IsoDep и / или MifareClassic в сочетании с NfcA) идентификатор является случайным, если он ровно 4 байта, и начинается с 0x08.Существуют некоторые карты (MIFARE DESFire), которые могут быть настроены со случайным идентификатором длиной 4 байта и начинающимся с 0x80.

Для NfcB (и IsoDep в сочетании с NfcB) не существует заранее определенного диапазона идентификаторов, которыйзарезервировано для случайных идентификаторов.Фактически, любой идентификатор NfcB может быть случайным.Идентификатор NfcB фактически называется PUPI, что означает «псевдо уникальный идентификатор PICC».Таким образом, имя уже указывает на то, что уникальность не гарантируется.

Для NfcF и NfcV идентификатор обычно не будет случайным.

Двойное чтение тега для обнаружения случайного идентификатора работает, только если вы удалитетег из поля RF.Тэг, как правило, будет сохранять тот же случайный идентификатор, пока он остается включенным в поле Rf.

0 голосов
/ 21 марта 2012

Этот 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.
...