Как сделать NFC-метку доступной только для чтения?

#python #python-3.x #nfc #access-control #lockbits

#python #python-3.x #nfc #контроль доступа #блокировки

Вопрос:

У меня есть NTAG213 наклейка NFC. Мне было интересно, как я могу сделать эту наклейку доступной только для чтения. Если позже я переключусь на NTAG215 , как я мог бы сделать этот тег доступным только для чтения. Какой процесс задействован в создании различных типов наклеек, доступных только для чтения. Когда я говорю «только для чтения», я имею в виду, что записи NFC никогда не могут быть изменены, но устройства все еще могут читать записи без аутентификации.

Я прочиталhttps://answers .launchpad.net/nfcpy/ question/242606 и попытался реализовать это решение

 import nfc
from time import sleep
from nfc.clf import RemoteTarget
import ndef

clf = nfc.ContactlessFrontend('usb')

while True:
    target = clf.sense(RemoteTarget('106A'), RemoteTarget('106B'), RemoteTarget('212F'))
    if target is None:
        sleep(1)
        continue

    serial = target.sdd_res.hex()
    tag = nfc.tag.activate(clf, target)

    if not tag.ndef:
        print("No NDEF records found!")
        continue
    
    for record in tag.ndef.records:
        print("Found record: "   str(record))

    record = ndef.UriRecord("https://www.example.com")
    tag.ndef.records = [record]
    # Code is fine until it gets to these tag indexes
    tag[15] = tag[15] | 0x0F
    tag[10] = 0xFF
    tag[11] = 0xFF
  

Я получаю сообщение об ошибке:

   File "test.py", line 26, in <module>
    tag[15] = tag[15] | 0x0F
TypeError: 'NTAG213' object does not support indexing
  

Комментарии:

1. Все подробности в техническом описании карты nxp.com/docs/en/data-sheet/NTAG213_215_216.pdf Существуют различные способы сделать это с записью в нужное место памяти, чтобы изменить биты блокировки, есть 2 способа навсегда сделать память доступной только для чтения (по одному для разных областей памяти) или, вероятно, гораздо лучше защитить операции записи паролем (поскольку это можно отменить, если вы знаете пароль)

2. tag это класс, а не массив. Вы не можете получить доступ к классу по индексу массива. Вы ДОЛЖНЫ использовать функции, определенные в этом классе (или API).

Ответ №1:

Глядя на то, что в библиотеке Python есть простой способ сделать доступ только для чтения с использованием байтов блокировки или с помощью пароля.

https://nfcpy.readthedocs.io/en/stable-0.10/modules/tag.html#nfc.tag.tt2_nxp.NTAG21x

Просто вызовите protect метод для tag объекта с паролем или без него (без пароля использует байты блокировки и доступен только для чтения).

Итак, в библиотеке запрограммированы правильные адреса памяти и биты для переключения для различных карт, включая все карты NTAG21x.