Перейти до вмісту

← Назад до розділу NFC.cool Blog

NTAG 424 DNA: NFC-мітки, які доводять, що вони не підробка

Шкіряна сумка з NFC-міткою для перевірки справжності поруч з iPhone, на екрані якого щит безпеки та іконки ключів

Якийсь час мені раз по раз траплялося те саме твердження: люксові бренди вшивають у свої товари NFC-чипи, щоб можна було піднести телефон до сумки чи до кросівок і переконатися, що річ справжня, а не підробка. Кожна стаття повторювала одне й те саме гарне речення, і жодна не пояснювала як. Що насправді заважає фальсифікатору скопіювати чип разом із сумкою?

Тож я зробив те, що роблю завжди, коли мене зацікавить якась мітка. Зайшов на AliExpress, знайшов оголошення з мітками «NTAG 424 DNA», замовив невелику партію і чекав на конверт. Кілька євро, пара тижнів, і в мене на столі лежав той самий кремній, на якому будують системи захисту брендів. Далі я підніс до однієї з них телефон, щоб побачити, що вона вміє.


Що це за чип NTAG 424 DNA

Зовні це звичайна NFC-мітка. У купі дешевих наліпок ти її не вирізниш, і будь-який телефон зчитує її без нарікань. Якщо читав мій посібник з типів NFC-міток, то перед тобою ще одна мітка Type 4, яку iPhone зчитує без проблем.

Уся різниця ховається у трьох літерах «DNA». Усередині чипа лежить кілька ключів AES-128 і невеликий криптографічний рушій, і завдяки їм він робить те, чого не вміє ні звичайний NTAG215, ні наліпка з набору: підписує кожен окремий дотик. На цьому підписі тримається все. Ось різниця між міткою, яка каже «ось посилання», і міткою, яка каже «ось посилання, а ось криптографічний доказ, що саме я, цей конкретний справжній чип, віддаю його просто зараз».

Саме за це люксові бренди й платять: не за посилання, а за доказ, що віддає його справжній чип.


Як працюють SUN і SDM: посилання, яке переписує себе на кожному дотику

А тепер момент, коли в мене все склалося. Я подивився, що саме мітка надсилає, і зрозумів, що майже весь механізм для розуміння цього написав ще раніше.

На початку цього року я випустив лічильник дотиків: мітка рахує, скільки разів її зчитали, і підставляє це число в посилання, тож сторінка знає, що її відкривають, скажімо, сорок сьомий раз. NTAG 424 DNA стоїть на тій самій ідеї, тільки поверх неї лежить шар шифрування, який робить підробку неможливою.

Механізм називається SUN (Secure Unique NFC), а в технічному описі NXP він же зветься SDM (Secure Dynamic Messaging). На мітку записується звичайне посилання, щось на кшталт https://example.com. Але чипу наказано щоразу на льоту переписувати частини цього посилання. Тож телефон отримує радше ось таке:

https://example.com/?picc_data=A1B2...&cmac=9F3C...

Ці два значення тут не для краси. У picc_data лежить зашифрований справжній ідентифікатор мітки разом з лічильником дотиків, а шифрує їх ключ, який ніколи не залишає чип. cmac містить криптографічний підпис цих даних. Обидва змінюються на кожному дотику. Піднеси ту саму мітку двічі й отримаєш два зовсім різні посилання, і кожне чип підписав наново.

Звичайну NFC-мітку я уявляю як табличку у вітрині: будь-хто сфотографує її й надрукує точну копію. Мітка із SUN радше нагадує охоронця на вході, який щоразу видає новий папірець із власним номером і печаткою. Учорашній папірець нічим не допоможе, бо сьогодні номер інший, а справжня печатка є тільки в охоронця.


Чому клон мітки NTAG 424 DNA видає себе

Ось тут і криється відповідь на моє початкове питання. Вміст мітки фальсифікатор скопіює без проблем: зчитає посилання, перенесе його байт у байт і запише на чистий чип. Так було завжди.

А от наступний дійсний підпис він не видасть. Ключ для підпису живе всередині справжнього чипа і назовні не виходить навіть під час дотику. Тому дотик щось важить лише для того, хто цей ключ має. У справжній системі захисту бренду посилання з мітки веде на сервер виробника, і саме сервер розшифровує кожен дотик, переобчислює підпис, щоб переконатися, що ключ збігається, і стежить за лічильником, поки той росте.

Саме остання частина й ловить клон. На підробку фальсифікатор запише хіба те посилання, яке перехопив зі справжнього дотику, разом із застиглим значенням лічильника з того самого разу. Відтвори його ще раз, і сервер побачить число, яке вже бачив, а лічильник справжнього чипа рухається лише вперед, тож повтор чи крок назад одразу видають підміну. Щоб надіслати свіже, більше значення лічильника з підписом, який пройде перевірку, потрібен ключ, а щоб дістати ключ, треба зламати AES або фізично розкрити корпус чипа. Заради фальшивої сумки цього ніхто робити не буде.

Ось чесна версія того маркетингового речення. Чип не робить товар таким, що його неможливо скопіювати. Він робить таким доказ справжності і переносить цей доказ на річ, яку фальсифікатор відтворити не може.


Що всередині чипа

Усе, що NFC.cool робить із цими мітками, стає зрозумілішим, коли тримаєш у голові будову чипа. Ось карта, яку мені довелося скласти, перш ніж написати перший рядок коду.

NTAG 424 DNA належить до типу NFC Forum Type 4 і має 416 байтів пам’яті, зібраних в одну область із трьома незмінними файлами. Створювати чи видаляти файли, як на MIFARE DESFire, тут не вийде. Ці три й усе:

ФайлРозмірЩо зберігає
Файл 0132 байтиCapability Container, який підказує телефону, де лежать дані NDEF
Файл 02256 байтівПовідомлення NDEF, зазвичай посилання. Саме сюди SUN на кожному зчитуванні підставляє свої живі значення
Файл 03128 байтівВласний файл NXP, який чип уміє тримати зашифрованим. NFC.cool робить із нього сховище, про це нижче

Поруч із файлами лежать п’ять ключів AES-128, пронумерованих від 0 до 4. Ключ 0 править усім: саме ним авторизуєшся, щоб змінити посилання, увімкнути SUN, замінити будь-який інший ключ чи зачепити конфігурацію чипа. Ключі з 1 до 4 самі собою не роблять нічого. Вони починають важити тільки тоді, коли на них вкажуть права доступу до файлу або налаштування SUN. На новій мітці всі п’ять ключів складаються з шістнадцяти нульових байтів, а файл NDEF відкритий на запис будь-кому, тому щойно куплена мітка приймає звичайне посилання без жодних церемоній.

Будь-яка команда, яка щось змінює, виконується всередині авторизованої сесії: телефон і чип обмінюються взаємним запитом та відповіддю за одним із ключів, виводять із нього сеансові ключі, і далі кожна команда несе MAC або йде повністю зашифрованою. Це і є той захищений обмін, про який далі згадуватиметься на кожному кроці. NFC.cool реалізує його повністю, і на iPhone, і на Android, і кожен запис, описаний нижче, проходить через нього.


Що показує один дотик

Піднеси мітку до телефона, і NFC.cool Tools на iPhone чи Android зробить глибоке зчитування, нічого в тебе не питаючи: покаже, що за чип перед тобою і чи це версія TagTamper, саме посилання, налаштування та права доступу кожного файлу, які слоти ключів уже відійшли від заводських, і результати трьох окремих перевірок.

Чи справжній це чип NXP?

Кожен NTAG 424 DNA виходить із заводу з підписом оригінальності. Це підпис ECDSA над власним семибайтовим ідентифікатором чипа, зроблений закритим ключем NXP на кривій P-224. NFC.cool зчитує його й перевіряє за опублікованим відкритим ключем NXP просто на телефоні, і жодного ключа від тебе для цього не треба. Якщо все сходиться, застосунок показує «справжній NXP». Ось відповідь на перше питання: перед тобою справжній кремній NXP чи схожий чип, який лише відгукується на ту саму назву?

Чи автентичний цей дотик?

Тут працює перевірка SUN. Застосунок бере picc_data і cmac із посилання, яке мітка щойно віддала, розшифровує дані PICC, дістає з них ідентифікатор і лічильник зчитувань, наново обчислює CMAC і звіряє його з тим, що надіслала мітка. Якщо збіглося, бачиш «автентичний», а саме число з’являється як лічильник зчитувань.

Для цієї перевірки потрібен ключ мітки, у тому й сенс. Мітка, яка досі на заводських ключах, перевіряється нульовим ключем. Мітка, закрита твоїм ключем, перевіряється тим ключем, що його NFC.cool зберіг під час налаштування. А мітка, закрита чужим ключем, якого в тебе немає, покаже «не перевірено», і це правильна відповідь.

Чи не зривали пломбу?

Окрема версія цих чипів, NTAG 424 DNA TagTamper, зроблена саме як пломба. Це наліпка, крізь яку проходить тонка провідна петля. Наклей її впоперек того, що хочеш захистити, на клапан коробки чи навколо кришки пляшки. Це та сама робота, яку сьогодні виконують наліпки «гарантія втрачається при пошкодженні». Відкриваєш річ, наліпка рветься, і петля розривається.

Чип стежить за петлею одразу з двох боків: постійний фіксатор назавжди запам’ятовує, чи розривали її бодай раз, а поруч лежить її стан просто зараз. NFC.cool зчитує обидва показники на кожному дотику й повідомляє «запечатано», «відкрито» або найцікавіше з трьох, «відкрито і запечатано наново», тобто петлю розірвали, а потім акуратно склеїли назад. Фіксатор спрацьовує лише в один бік, тож заклеєна наново коробка до кінця життя чипа читається як відкрита. Криптографія доводить, що чип справжній. А це доводить, що в коробку ніхто не заглядав.


Як запрограмувати свою мітку: коротка версія

Зчитування покриває лише половину справи. Друга половина в тому, що чисті мітки з AliExpress ти програмуєш сам, а мінімальне налаштування займає три кроки.

  1. Запиши посилання. Звичайний запис NDEF, такий самий, як на будь-якій мітці.

  2. Увімкни SUN. Застосунок запише посилання з порожніми місцями для підстановки і накаже чипу на кожному зчитуванні підставляти туди зашифрований ідентифікатор, лічильник дотиків і підпис. Відтепер кожен дотик дає унікальне підписане посилання.

  3. Постав власний ключ 0. Заводські нулі зміняться на ключ, який знаєш тільки ти, і переналаштувати мітку більше ніхто не зможе.

На останньому кроці вводиш парольну фразу, а не ключ. NFC.cool виводить із неї ключ AES, беручи перші 16 байтів хешу SHA-256 цієї фрази, і робить це однаково на iPhone та Android, тож мітка, налаштована на одному, відкриється тією самою фразою на іншому. Якщо ключ уже згенеровано деінде, скажімо на власному сервері, встав замість фрази 32 шістнадцяткові символи.

Втрачений ключ означає мітку, яку вже ніколи не переналаштувати, тому застосунок обережно поводиться з тим, де цей ключ лежить. На iPhone він потрапляє в Keychain і синхронізується через iCloud Keychain. На Android його шифрує апаратний ключ, а копія їде в Block Store, тож ключ переживе перевстановлення застосунку чи переїзд на новий телефон. Новий ключ зберігається ще до того, як зміна піде на мітку, а якщо дотик перервався посеред зміни, обидва значення, старе й нове, лишаються під рукою, поки мітка не підтвердить, яке з них тримає. Фразу, задану на іншому пристрої, теж можна ввести вручну, і застосунок звірить її з міткою, перш ніж зберегти.

Одну річ застосунок свідомо відмовляється робити: записувати звичайне посилання на мітку з увімкненим SUN через звичайний екран запису. Зміщення для підстановки прив’язані до того посилання, під яке їх налаштували, тож посилання іншої довжини змусило б чип щоразу підставляти значення посеред нового вмісту. Екран NTAG 424 спершу вимикає SUN і лише потім пише.


Решта чипа

На цій короткій версії більшість посібників і закінчується, а щоб піти далі, досі треба було сідати за комп’ютер із TagXplorer від NXP і USB-зчитувачем. Мені хотілося, щоб увесь технічний опис відкривався з телефона, тож я пройшов його розділ за розділом.

Усі п’ять ключів

Ключ 0 має власний екран, а ключі з 1 до 4 живуть у розділі додаткових налаштувань. Кожен задається парольною фразою або шістнадцятковим записом, скидається до заводського значення чи вводиться після того, як його встановили на іншому пристрої. Будь-яка зміна авторизується ключем 0: саме він розпоряджається всіма п’ятьма слотами.

SUN на ключах, які вибереш сам

Увімкнення SUN не зводиться до одного перемикача. Спершу вибираєш режим: зашифрований, коли ідентифікатор їде всередині picc_data і прочитати його може лише власник ключа, або відкритий, коли ідентифікатор і лічильник стоять у посиланні відкрито, а таємним лишається тільки підпис. Далі вибираєш, які ключі виконують роботу: ключ meta-read шифрує дані PICC, а ключ file-read обчислює підпис. Це може бути той самий слот або два різні, і саме так бренд віддає партнеру ключ для перевірки дотиків, не віддаючи ключа, яким розшифровують ідентифікатори.

Застосунок попередить, якщо вибрати слот, який досі на заводських нулях: підпис відомим ключем не захищає нічого. Перевірка розуміє таке саме різноманіття: дотик, підписаний ключем 3 і зашифрований ключем 1, звіриться правильно, поки обидва ключі лежать у телефоні.

Права доступу до файлів

У кожного файлу чотири дозволи: читання, запис, читання разом із записом і зміна правил, і останній вирішує, кому дозволено правити три попередні. Кожен дозвіл вказує на один із п’яти ключів, на Free (будь-хто) або на Never (ніхто й ніколи). Тож можна сказати: «файл 02 читає будь-хто, пише в нього тільки ключ 2, а міняти ці правила має право лише ключ 0», і чип дотримується цього сам, без жодного застосунку поруч.

NFC.cool показує поточні права кожного файлу й дозволяє їх правити, а поруч тримає два попередження. Перше спрацьовує, коли дозвіл указує на ключ, якого в цьому телефоні немає, бо так недовго й самому втратити доступ до мітки. Друге вимагає окремого підтвердження, перш ніж поставити зміну правил у Never, бо після такого запису правила файлу застигають на все життя чипа.

Конфігурація чипа

Під файлами лежить власна конфігурація чипа, яку NXP віддає однією командою SetConfiguration. NFC.cool охоплює такі параметри:

  • Випадковий UID. Зазвичай чип повідомляє кожному зчитувачу той самий незмінний UID, і за ним мітку легко відстежувати від дотику до дотику. З увімкненим випадковим UID він щоразу відповідає новим випадковим числом, а справжнє відкриває лише після авторизації. Виграш для приватності справжній, а зміна незворотна. Застосунок упізнає мітки саме за UID, тому потім відновлює справжній: перебирає всі відомі йому ключі 0 через авторизовану команду GetCardUID, і мітка лишається керованою з того телефона, який її налаштував.

  • Ліміт невдалих авторизацій. Скільки спроб з неправильним ключем чип стерпить, перш ніж заблокує ключ 0. Це захист від підбору ключа, але постав межу надто низько, і кілька невдалих дотиків заблокують головний ключ назавжди.

  • Сила зворотної модуляції. Сильна або стандартна. На маленьких антенах стандартна може взагалі не читатися, тож типове значення варто лишити як є.

  • Ланцюговий запис. Його можна вимкнути, і тоді один запис обмежиться одним кадром. Незворотно.

  • Байти можливостей. Два вільні байти, які NXP лишає під твої потреби.

  • LRP. Перемикач захищеного обміну, і йому відведено окремий розділ нижче.

Сховище

Файл 03 займає 128 байтів, має власний формат NXP і може зберігатися зашифрованим, а NFC.cool робить із нього невелику приватну комірку просто на мітці. Коли зберігаєш туди щось уперше, застосунок переводить файл у повністю зашифрований режим і замикає всі права доступу на ключ 0. Далі в сховищі живе до 126 байтів тексту, які прочитає лише твій ключ, а глибоке зчитування з будь-якого іншого телефона отримає помилку доступу і більше нічого.

Це місце для секрету, який має подорожувати разом із річчю, а не лежати в чиїйсь базі: серійний номер, записка собі майбутньому, токен, на який чекає власний сервер. Скидання ключа 0 до заводського стирає вміст, і це єдиний спосіб позбутися сховища.


Режим LRP

Зазвичай чип береже ключі звичайним AES, і викрасти ключ означало б зламати сам AES. Але є хитріший шлях. Постав чип на стенд, зміряй ледь помітні коливання його споживання струму й електромагнітного випромінювання, поки він крутить шифр, і з достатньої кількості таких слідів ключ відновлюється з самого лише витоку, без жодного дотику до математики. LRP, або Leakage-Resilient Primitive, перебудовує захищений канал так, щоб тому витоку не було за що зачепитися. NXP описує його в AN12304, і для наліпки на пляшці вина це відвертий надлишок, тому більшість міток його ніколи не вмикає, а більшість інструментів так і не вчиться його розуміти.

У нотатках до першої версії навпроти рядка «режим LRP» у мене стояло «не планується». Той рядок муляв мені весь час, тож зрештою я його зробив. NFC.cool переводить мітку в режим LRP і, що важливіше, після цього далі вміє до неї авторизуватися й керувати нею: ключі, права файлів, сховище, конфігурація чипа, усе через канал LRP замість AES.

Перед тим як клацнути цим перемикачем, варто знати дві речі. Крок незворотний: щойно мітка опиняється в режимі LRP, її захищений обмін через AES вимикається назавжди, і жоден інструмент, який знає тільки AES, більше з нею не заговорить. А ще на мітці з LRP недоступний SUN, тож мітка, яка має підписувати дотики, мусить лишатися в режимі AES.


Чого вже не скасувати

Багато з цих команд незворотні, і застосунок каже про це прямо в момент дії: кожен незворотний крок вимагає підтвердження через попередження, де прописано точний наслідок. Варто перелічити їх і тут.

  • Увімкнення LRP.

  • Увімкнення випадкового UID.

  • Вимкнення ланцюгового запису.

  • Дозвіл на зміну правил файлу, переведений у Never.

  • Втрата ключа. Заводського скидання в чипа немає. Немає ключа 0, немає й змоги переналаштувати мітку.

  • Надто низький ліміт невдалих авторизацій, через який ключ 0 блокується після кількох хибних дотиків.

Потренуйся на запасній мітці, перш ніж чіпати ту, яка тобі дорога.


Де NFC-мітки проти підробок справді знадобляться

Чесно? Більшості тих, хто підносить телефон до NFC-мітки, усе це ніколи не знадобиться, і це нормально. Наліпка, яка відкриває посилання, річ прекрасна, нудна й корисна.

Але щойно потримаєш таку мітку в руках, сценарії стають очевидні. Люксова сумка доводить, що вона справжня. Пляшка вина чи віскі показує, що її ніхто тихцем не відкорковував і не доливав, і цю половину роботи бере на себе пломба. Коробка з ліками ручається і за справжній препарат усередині, і за недоторкану пломбу. Квитки на подію перестають бути тим, що можна сфотографувати й роздати друзям, а мітка біля дверей доводить, що людина справді там стояла, а не відтворила збережене посилання з дивана. Це та сама проблема справжності, до якої цифровий паспорт товару в ЄС підходить з боку регулювання, тільки розв’язана на рівні окремої речі.

Я зробив це не тому, що тисяча користувачів попросила. Я зробив це тому, що з цікавості купив в інтернеті дивні мітки, розібрався, як вони працюють, і потім не зміг зупинитися, поки не перегорнув усі сторінки технічного опису. Зазвичай саме так і починаються хороші функції.


Підсумок про мітки NTAG 424 DNA

Мітки NTAG 424 DNA підходять найближче до того, що у світі NFC можна назвати непідробною пломбою. Скопіювати товар вони не завадять, зате роблять доказ його справжності таким, якого не підробити, бо цим доказом щоразу служить свіжий криптографічний підпис, який видає лише справжній чип.

NFC.cool Tools зчитує їх, перевіряє чип, дотик і пломбу, а далі віддає тобі весь чип на налаштування: кожен ключ, права кожного файлу, власні параметри чипа, навіть LRP, і все це з телефона. Якщо колись цікавило, як дотик відрізняє справжнє від підробки, візьми застосунок на iPhone чи Android, замов кілька таких міток за кілька євро й піднеси до однієї з них телефон. У цю тему приємно провалитися з головою.

Готовий сканувати?

4,5·73 500 оцінок·Безкоштовно