На столі лежала мітка ICODE 3, на ній мій iPhone, і застосунок охоче зчитував усе, що чип мав розповісти: ідентифікатор, пам’ять, лічильник дотиків, підпис NXP, який доводить, що чип справжній. Тоді я попросив його змінити одну-єдину річ, лічильник, і застосунок повідомив, що мітка віддалилася.
Нікуди вона не віддалялася. Я спробував ще раз. Те саме повідомлення. Спробував натомість поставити пароль. Знову те саме.
До того, що там коїлося, я ще повернуся, бо цікавішого бага я цього року не вистежував. Але спершу про те, навіщо я взагалі колупався в мітці ICODE.
Я хочу, щоб NFC.cool був найпотужнішим NFC-застосунком, який тільки можна поставити на телефон. Цього літа це означало NTAG 424 DNA, мітки, якими бренди доводять, що товар справжній. Після них найбільшою родиною чипів, з якою застосунок досі толком не вмів розмовляти, лишалася NXP ICODE. У NFC.cool Tools 7.1.0 це змінилося.
ICODE: мітки, які вже побували в тебе в руках
Якщо за останні двадцять років ти брав книжку в бібліотеці, то майже напевно тримав у руках і мітку ICODE. Ідеться про пласку етикетку зі спіральною антеною, яку наклеюють під обкладинку. Ті самі чипи стоять у магазинних етикетках проти крадіжок, у бирках для пралень і на етикетках товарів.
Технічно ці чипи працюють за стандартом ISO 15693, який у світі NFC називають Type 5. А NFC-наліпки, які купує більшість людей, скажімо NTAG215, належать до іншого стандарту. Для мене це як дві радіостанції в одному діапазоні: iPhone ловить обидві, та щойно налаштуєшся, з’ясовується, що мовлять вони різними мовами.
Бібліотеки й магазини обирають ICODE через дальність. Велика антена в рамці на виході з бібліотеки чи на касі самообслуговування зчитує такі мітки з більшої відстані, ніж звичайну NFC-наліпку. Телефон усе одно доводиться підносити впритул, бо антена в iPhone крихітна, але створювали чип саме для таких рамок.
Зчитати посилання чи текст із мітки ICODE ніколи не було складно. Найцікавіше лежить глибше: паролі, лічильник, прапорець захисту від крадіжки, режим конфіденційності. Досі ця частина чипа була для NFC.cool за сімома замками.
Що NFC.cool уміє робити з ICODE 3
ICODE 3 з’явився в родині NXP найпізніше й прийшов на зміну ICODE SLIX2. В інтернет-магазинах його часто продають під назвою «SLIX 3». Чипа з такою назвою в NXP немає, тож якщо в оголошенні написано SLIX 3, насправді йдеться про ICODE 3.
Піднеси до такої мітки iPhone з NFC.cool, і побачиш повну картину: що це за чип, скільки в нього пам’яті, що показує лічильник і чи позначить його застосунок як Справжній NXP. NXP ще на заводі підписує ідентифікатор кожного чипа, а застосунок перевіряє цей підпис, тож копія з тим самим ідентифікатором його не підробить.
А далі можна змінити майже все, що вміє чип:
Лічильник дотиків. ICODE 3 сам рахує кожне зчитування. Увімкни NFC-дзеркало, і чип вписуватиме у збережене посилання свій ідентифікатор і поточне значення лічильника, тож кожен дотик відкриватиме трохи інший URL, а сайт зможе ці дотики порахувати. Якщо вже читав про лічильник дотиків NFC, тут та сама ідея, тільки на іншому чипі.
Паролі. В ICODE 3 їх шість, по одному на читання, запис, конфіденційність, знищення, налаштування захисту від крадіжки та конфігурацію. Усі мітки постачаються з однаковими заводськими значеннями, тож захист має сенс лише тоді, коли задаси власні. NFC.cool зберігає паролі у Зв’язці ключів iCloud, окремо для кожної мітки.
Захист пам’яті. Пам’ять можна поділити на дві частини й захистити кожну окремо, наприклад лишити публічне посилання відкритим для читання, а дані, що йдуть після нього, сховати.
Захист від крадіжок і бібліотечні налаштування. Саме через прапорець EAS рамка в магазині чи бібліотеці починає пищати. А байтом AFI бібліотеки позначають, що книжку видано. Обидва можна змінити й заблокувати.
Режим конфіденційності. Мітка ховає свій ідентифікатор і дані, доки хтось не надасть пароль конфіденційності.
Захист від розкриття у версії SL2S3003TT: у неї є провідник, який можна протягнути через кришку пляшки чи пломбу коробки. Застосунок показує, чи пломбу хоч раз порушували.
Власний підпис. Бренд може замінити підпис NXP своїм і заблокувати його.
Знищення. Чип вимикається назавжди, щоб захистити приватність, коли товар відслужив своє.
Частина цих налаштувань незворотна, а деякі можуть зробити мітку недоступною для iPhone. Тому перед кожною дією, яку не скасувати, NFC.cool просить ввести останні чотири символи ідентифікатора мітки. А ще він відмовиться змінювати будь-яку мітку, крім тієї, з якої все почалося. І все одно я радив би спершу пробувати щось нове на запасній мітці.
Попутно я виправив одну дрібницю: тепер чисту мітку ICODE можна відформатувати в застосунку як NFC-мітку, і вона одразу готова прийняти посилання чи текст.
Решта родини ICODE
Застосунок розпізнає, який чип у тебе в руках, і пропонує лише те, що цей чип справді вміє. Старіший SLIX покаже менше параметрів, ніж ICODE 3, просто тому, що в самого чипа менше функцій.
Чипи SLIX, SLIX-S, SLIX-L, SLIX2 і старіші SLI стоять у більшості бібліотек, і саме на них там усе тримається. У SLIX2 є лічильник і захист пам’яті. SLIX-S захищає пам’ять посторінково й підтримує 64-бітні паролі: для кожного захищеного доступу потрібні обидва паролі, і на читання, і на запис.
ICODE DNA відповідає в родині за безпеку. Він зберігає секретні ключі AES, які ніколи не залишають чип. Введи ключ у NFC.cool, і застосунок вимагатиме від чипа довести, що цей ключ у нього є. Копія таку перевірку провалить, навіть якщо ідентифікатор і пам’ять збігаються повністю.
NTAG 5 мене як любителя щось майструвати тішить найбільше. Цей NFC-чип призначений для монтажу на друковану плату. Версія switch напряму керує виводами, а link і boost спілкуються з мікроконтролером через I2C. Ці чипи можуть живити невелику схему самим лише полем телефона, сигналізувати про події на виводі та ділити з платою 256 байтів пам’яті. NFC.cool зчитує й змінює ці налаштування, а з NTP5332 і NTA5332 навіть може звертатися до датчиків, під’єднаних до чипа, просто з iPhone.
Усе це знайдеш серед інструментів NFC, у розділі NXP ICODE і NTAG 5, поруч із NTAG 424 DNA. Або просто піднеси iPhone до мітки ICODE, і застосунок сам відкриє відомості про неї.
Баг, який iOS не давала виправити
Повернімося до мого столу й мітки, яка нібито «віддалилася».
ISO 15693 дає телефону два способи звертатися до мітки. Можна вписувати ідентифікатор мітки в кожне повідомлення, як ім’я адресата на конверті, і тоді відповідає лише ця мітка. А можна спершу вибрати мітку, наче повернутися обличчям до однієї людини в кімнаті, і далі просто говорити.
Спосіб із конвертом охайніший, тому NFC.cool пробує його першим. Щоб перевірити, чи він працює, застосунок надсилав коротке тестове повідомлення з ідентифікатором. Мітка відповідала, застосунок робив висновок, що адресовані повідомлення працюють, і йшов далі.
А ось чого я не знав. iOS ділить ці команди на дві групи. Одна група охоплює стандартні команди, які розуміє будь-який чип ISO 15693. До другої входять власні команди NXP, ті, що відповідають за паролі, лічильник і конфігурацію. Коли адресоване повідомлення несе одну з власних команд NXP, iOS відмовляється його надсилати. Воно навіть не виходить за межі телефона. Система тихо повертає помилку «недійсний параметр», а мій код не відрізняв її від мітки, яку прибрали з-під телефона.
Моє тестове повідомлення несло стандартну команду, тож проходило без сучка й задирки і запевняло мене, що все гаразд. А кожна справжня зміна йшла через команду NXP, тому кожна й провалювалася.
Коли я нарешті в усьому розібрався, виправлення виявилося до смішного простим. Тепер для перевірки застосунок бере одну з власних команд NXP, нешкідливу: вона лише просить у чипа випадкове число. Якщо iOS її не пропускає, застосунок перемикається на другий спосіб і спершу вибирає мітку. Я знову підклав ICODE 3 під iPhone, натиснув Установити лічильник, і число на мітці змінилося. Рідко я так радів, що якийсь лічильник зрушив з місця.
На яких пристроях це працює
На iPhone усе це працює з NFC-зчитувачем, вбудованим у телефон. На iPad і Mac, де NFC-чипа немає, знадобиться зовнішній USB-зчитувач NFC. Він має передавати команди ICODE на мітку напряму. Якщо твій це вміє, застосунок зчитує мітки ICODE і керує ними точнісінько як на iPhone, а баг із попереднього розділу там узагалі не виникає. А зчитувач, який так не вміє, однаково дасть прочитати пам’ять мітки.
Застосунок для Android поки що ICODE не розуміє.
Якщо в тебе в шухляді лежать бібліотечні мітки, з якими досі нічого путнього не вдавалося зробити, або плата з NTAG 5 чекає на свій проєкт, онови застосунок до версії 7.1.0 і піднеси телефон до однієї з них. NFC.cool Tools можна завантажити з App Store.