Как защитить паролем запись в тег NF C NTAG216 на iOS 13 с помощью NF C Core - PullRequest
0 голосов
/ 01 августа 2020

Я пытаюсь защитить паролем наклейку NF C NTAG216, используя iOS 13. Мне нужно, чтобы тег NF C мог читать кто угодно, но я хочу ограничить запись в тег NF C если у вас нет предустановленного пароля. Согласно спецификациям тега, это должно быть возможно, но API для записи тегов NDEF кажется очень ограниченным. Я обнаружил, что API для тегов NDEF в основном ограничивается написанием полных полезных данных сообщений. Я также обнаружил, что NFCISO15693Tag API действительно позволяет выполнять некоторые операции низкого уровня в соответствии с документацией Apple https://developer.apple.com/documentation/corenfc/nfciso15693tag/3043817-writesingleblock

Может ли кто-нибудь дать мне подсказку о том, как защитить паролем теги NDEF216 с помощью NF C Ядро в iOS 13? Увидев лист NTAG216 spe c, мы должны работать с параметрами PWD и PACK, но я не вижу, как записать их на наклейку, имея только возможность записывать полные полезные данные сообщения?

Поведение I Ищу:

  1. Пользователь получает пустой тег NF C
  2. Пользователь использует приложение ios для записи данных в NF C тег
  3. Пользователь не может выбрать пароль для защиты тега от перезаписи.

Затем через некоторое время пользователю нужно будет обновить тег самостоятельно, поэтому я хочу, чтобы такое поведение было

  1. Пользователь вводит пароль для разблокировки NF C тег
  2. Пользователь разблокирует чип, нажав телефон на чипе
  3. Теперь пользователь записывает новые данные в чип
  4. Теперь пользователь снова блокирует чип, используя тот же или новый пароль без выбора

Любая помощь в правильном направлении приветствуется

Ответы [ 2 ]

1 голос
/ 05 августа 2020

Вы можете использовать следующий метод в iOS для отправки любой команды в NTAG:

func sendCommand(data: CmdData, completionHandler: @escaping(Data?, Error?) -> Void) {
    tag?.sendMiFareCommand(commandPacket: data, completionHandler: { (data, error) in
        completionHandler(data, error)
    })
}

, где данные параметра - это APDU команды, а объект тега имеет тип NFCMiFareTag.

Команда APDU для записи пароля и PACK в NF C Тег:

  1. Пароль (FF FF FF FF): [Команда записи: CMD | Адрес | Данные] -> A2 E5 FF FF FF FF
  2. PACK (01 02): [Команда записи: CMD | Адрес | Данные] -> A2 E6 01 02 RFU RFU

Примечание: вместо RFU вы можете просто написать 00h или сохранить значения, выполнив следующие действия:

  • Read страница E6h ----> Вы получите 16 байтов (4 страницы) данных ----> Выньте первые 4 байта, которые будут данными на странице E6 ----> Замените 0-й и 1-й байт на значение PACK для записи ----> Запишите обновленные 4 байта данных в E6h с помощью команды записи, как указано выше.

Активация защиты

После того, как значения пароля и PACK настроены в NF C, следующим шагом будет активация защиты путем определения, с какой страницы доступ для чтения / записи должен требовать аутентификации. Для этого:

  • Прочитать страницу E3h ---> Скопировать первые 4 байта в data []
  • Заменить значение AUTH0 на индекс 3, с первым номер страницы пользователя 04h, что означает, что любая страница, начинающаяся с 04h, потребует аутентификации для доступа для чтения (по умолчанию)

Доступ к защищенным страницам для чтения

  1. Пользователь вводит PWD & PACK для разблокировка тега
  2. Аутентифицируйте тег, используя введенные данные, используя следующую команду:
    • Аутентифицировать: [Command (1Bh) | PWD] -> 1B FF FF FF FF
    • Тег ответит значением PACK, которое можно проверить, сопоставив его со значением PACK, которое у вас есть для дополнительной безопасности
  3. Теперь, когда тег находится в состоянии аутентификации, в тег можно записать данные. ** Примечание: как только тег выходит за пределы поля, состояние аутентификации сбрасывается. Следовательно, вы должны аутентифицировать и записывать данные в одном сеансе.
  4. Если нет необходимости изменять PWD / PACK, никаких дальнейших действий не требуется, поскольку тег каждый раз возвращается в защищенное состояние сессия завершена, т.е. выходит за пределы поля.

Вы можете сослаться на NTAG 213/215/216 Data sheet

0 голосов
/ 01 августа 2020

NTAG 216 является тегом Mifare Ultralight

Используйте https://developer.apple.com/documentation/corenfc/nfcmifaretag/3043838-sendmifarecommand

Если вы посмотрите на техническое описание https://www.nxp.com/docs/en/data-sheet/NTAG213_215_216.pdf

Раздел 8.8.1

32-битный PWD и 16-битный PACK необходимо запрограммировать на страницах конфигурации, см. Раздел 8.5.7

{ ссылка } подробно описывает установку и использование пароля для одного и того же типа тега, в то время как это для Android это та же концепция.

Используйте обычную сверхлегкую запись команда A2h для записи PWD на страницу E5h (адреса страниц для NTAG 216) и PACK в байты 0 и 1 из E6h

Снова используйте обычную сверхлегкую команду записи в байты 3 страницы E3h, чтобы настроить первую страницу, защищенную паролем (возможно, вы захотите 4h в качестве первой страницы)

Снова используйте обычную сверхлегкую команду записи, чтобы записать правые биты на странице E4h для включения нужного уровня защиты и других параметров (возможно, вы захотите прочитать эту страницу сначала получить текущие значения)

Do c на веб-сайте Apple кажется неправильным относительно CR C см. { ссылка } для примера отправки в тег Mifare Ultralight на iOS.

Просто примечание, я на самом деле не пробовал устанавливать пароль с помощью iOS.

...