Твоя сід-фраза, найпевніше, лежить на папірці. Може, у сейфі. Може, під мостиною. Може, розділена на три схованки, бо хтось на Reddit написав, що «серйозні» криптолюди роблять саме так. Але це все одно папір. Папір горить. Папір розмокає. Папір губиться.
Я роками роблю NFC.cool, застосунок для читання й запису NFC-міток, і колись почав ставити собі питання, яке не має стосунку ні до платежів, ні до перепусток: а що, якби резервна копія не гнила, не псувалася і нічого не значила для того, хто її знайде?
Через це питання і з’явився NFC Safe. Він шифрує будь-який текст (сід-фрази, паролі, коди відновлення, узагалі будь-що таємне) і кладе його на NFC-мітку з шифруванням AES на 256 біт. Мітка самодостатня. Ні хмари, ні сервера, ні облікового запису. Щоб прочитати секрет, потрібна сама мітка і пароль. Без обох вона залишається шматочком пластику з нісенітницею всередині.
Одна річ була для мене принциповою: твої секрети не мають залежати від того, чи існує мій застосунок. Тому формат шифрування задокументований і повністю відкритий, разом з еталонним декодером на Python. Якщо NFC.cool колись зникне, дані все одно можна буде дістати звичайним NFC-зчитувачем і специфікацією. Цю обіцянку я можу тримати, бо писав специфікацію так, щоб вона пережила програму.
Де ламається зберігання секретів
Якби мене попросили назвати слабке місце кожного способу зберігання секретів, який я бачив, я б не думав ні секунди: папір горить, роз’єми USB окислюються, хмарні сервіси зламують, апаратні гаманці годяться лише для криптовалютних сід-фраз, а голова забуває. Кожен варіант підводить по-своєму.
Тож я пішов від зворотного. Ідеальна резервна копія має бути фізично міцною, зашифрованою, самодостатньою, розмноженою і довговічною. NFC-мітки закривають усі п’ять пунктів, і спершу мене це теж здивувало. Ні батарейки, ні рухомих частин, а для чипа NTAG216 заявлено понад 10 років зберігання даних. Варіанти з епоксидним покриттям витримують воду, удари і десятиліття забуття. Якщо ще не знаєш, чим ці чипи різняться, я розклав усі компроміси в статті Типи NFC-міток для iPhone.
Як користуватися NFC Safe
NFC Safe живе всередині NFC.cool Tools у розділі NFC Apps. Я вмістив усе в один екран із перемикачем угорі: шифрування або розшифрування. Якщо доводилося записувати мітку, тут не буде нічого незнайомого.
Щоб зашифрувати:
Відкрий Tools → NFC Apps → NFC Safe
Вибери Encrypt
Набери або встав свій секрет
Задай надійний пароль
Натисни Encrypt і піднеси NFC-мітку до телефона
Щоб розшифрувати:
Той самий екран, перемкнись на Decrypt
Введи пароль
Піднеси раніше зашифровану мітку, і секрет з’явиться на екрані
Під капотом усе виглядає так: AES-256-GCM з PBKDF2 (HMAC-SHA-256, 100 000 ітерацій, випадкова 16-байтова сіль). Результат лягає на мітку окремим записом NDEF (urn:nfc:ext:crypto). Якщо хочеш перевірити це сам, а не вірити мені на слово, повна специфікація формату лежить на GitHub. А якщо спершу цікаво подивитися, як виглядає звичайний незашифрований запис, я розбирав це в статті як записати NFC-мітку на iPhone.
Стратегія запасних копій
Ось як я користувався б цим сам. Мітка NTAG216 коштує приблизно як кава, тож робити одну-єдину немає сенсу. Візьми кілька, зашифруй на кожну той самий секрет і розклади їх: шухляда столу, офіс, дім когось із рідних, банківська комірка, місце, про яке здогадаєшся тільки ти. Окремо взята мітка без пароля не значить нічого. Саме це мені в задумі й подобається найбільше, бо двофакторність тут виходить сама собою: фізична мітка плюс пароль, які лежать у двох різних місцях, і жодного зайвого налаштування.
Чому NFC, а не USB чи картка пам’яті
Мене питають, чому я просто не порадив усім флешку чи SD-картку. Чесна відповідь така: я забагато разів бачив, як вони відмовляють нудно й цілком передбачувано. NFC обходить кожну з цих причин:
Немає роз’єму: нічому окислюватися чи гнутися
Немає батарейки: мітка пасивна, живлення дає зчитувач
Немає файлової системи: нічому псуватися
Немає драйверів: NFC читає будь-який смартфон із коробки
Мала і дешева: розміром з монету, менше долара за штуку в наборі
Витривала: варіанти з епоксидним покриттям тримають воду, удари та ультрафіолет
Єдине справжнє обмеження стосується обсягу: від 500 до 700 байтів після витрат на шифрування. Небагато, але для того, заради чого все це робилося, вистачає з головою: сід-фраза на 24 слова, головний пароль або набір кодів відновлення.
Про безпеку чесно
Краще я одразу назву гострі кути, ніж ти натрапиш на них потім:
Усе тримається на паролі. 256-бітний AES не зламати. Слабкий пароль зламати легко. Візьми випадковий рядок від 20 символів і не йди тут на поступки.
Радіус NFC крихітний (близько 4 см). Ніхто не зчитає мітку з іншого кінця кімнати, і мала відстань тут працює на тебе, а не проти.
Віддаленого стирання немає. Мітку можна прибрати тільки фізично, ножицями. Та й без пароля дані на ній усе одно нікому не потрібні.
Пароль не відновлюється. Забув його, і дані зникли. Я вирішив так свідомо, бо шлях відновлення завжди водночас і шлях атаки. Запиши пароль десь окремо від міток.
Ширша картина
Працюючи з NFC щодня, я бачив, як ці мітки тихо стали носієм для по-справжньому важливих речей. Цифровий паспорт виробу в ЄС називає NFC серед дозволених носіїв даних, поруч із QR-кодами. Philips ставить мітки в насадки зубних щіток. Готелі роблять з них ключі від номерів. Дешеві, витривалі, і їх читає будь-який пристрій, що вже лежить у кишені: таке поєднання трапляється рідко, і саме тому я раз у раз знаходжу для них нові застосування. Якщо хочеться ширшого огляду, основи я розібрав у статті NFC-мітки простими словами: посібник для початківців.
NFC Safe став моєю спробою взяти цю витривалість і додати єдине, чого їй бракувало, тобто шифрування. Резервна копія, яка переживе папір, нічого не скаже випадковій людині й коштує менше за чашку кави. Саме такого я хотів для себе, тому й зробив.
Уже доступно в NFC.cool Tools для iPhone і для Android.