Твоя seed-фраза скорее всего лежит на бумажке. Может, в сейфе. Может, под половицей. Может, разрезана на три части по разным местам, потому что кто-то на форуме сказал, что «серьёзные» криптолюди делают именно так. Но это всё равно бумага. Бумага горит. Бумагу заливает. Бумага теряется.
Я много лет делаю NFC.cool, приложение для чтения и записи NFC-меток, и в какой-то момент задался вопросом, который вообще не про платежи и не про пропуска: а что, если резервная копия не сможет ни сгнить, ни испортиться, а для нашедшего будет выглядеть пустым местом?
Из этого вопроса и вырос NFC Safe. Он шифрует любой текст, будь то seed-фраза, пароль, коды восстановления или что угодно ещё, что нужно спрятать, и кладёт его на NFC-метку с 256-битным шифрованием AES. Метка самодостаточна. Ни облака, ни сервера, ни аккаунта. Чтобы прочитать секрет, нужны и физическая метка, и парольная фраза. Без обоих метка это просто кусочек пластика с набором мусора.
Одна вещь была для меня принципиальной при проектировании: я не хотел, чтобы твои секреты зависели от существования моего приложения. Поэтому формат шифрования полностью описан и открыт, вместе с эталонным декодером на Python. Если NFC.cool когда-нибудь исчезнет, данные всё равно можно будет достать обычным NFC-считывателем и спецификацией. Это обещание я могу сдержать, потому что писал спецификацию так, чтобы она пережила программу.
В чём проблема с хранением секретов
Если попросить меня назвать слабое место каждого известного мне способа хранить секреты, я отвечу не задумываясь: бумага горит, разъёмы USB окисляются, облачные сервисы взламывают, аппаратные кошельки годятся только под криптовалютные seed-фразы, а мозг забывает. Каждый вариант подводит по-своему.
Поэтому я пошёл от обратного. Идеальная копия должна быть физически прочной, зашифрованной, самодостаточной, размноженной и долгоживущей. NFC-метки закрывают все пять пунктов, и меня это тоже сначала удивило. У них нет ни батарейки, ни движущихся частей, а чип NTAG216 рассчитан на хранение данных больше десяти лет. Варианты в эпоксидной заливке переживают воду, удары и десятилетия забвения. Если ты не знаешь, чем эти чипы отличаются, я разбирал компромиссы в тексте про типы NFC-меток для iPhone.
Как пользоваться NFC Safe
NFC Safe живёт внутри NFC.cool Tools в разделе NFC Apps. Я уместил всё в один экран с переключателем наверху: шифрование или расшифровка. Если ты хоть раз записывал метку, ничего незнакомого тут не будет.
Чтобы зашифровать:
Открой Tools → NFC Apps → NFC Safe
Выбери «Зашифровать»
Введи или вставь свой секрет
Задай стойкую парольную фразу
Нажми «Зашифровать» и поднеси NFC-метку к телефону
Чтобы расшифровать:
Тот же экран, переключись на «Расшифровать»
Введи парольную фразу
Поднеси ранее зашифрованную метку, и секрет появится на экране
Под капотом происходит вот что: AES-256-GCM с PBKDF2 (HMAC-SHA-256, 100 000 итераций, случайная соль в 16 байт). Результат ложится на метку отдельной записью NDEF (urn:nfc:ext:crypto). Если хочется проверить это самому, а не верить мне на слово, полная спецификация формата лежит на GitHub. А если сначала любопытно посмотреть, как выглядит обычная незашифрованная запись, я разбирал это в тексте «Как записывать NFC-метки на iPhone».
Стратегия размножения
Вот как я сам стал бы этим пользоваться. Метка NTAG216 стоит примерно как чашка кофе, так что делать одну-единственную незачем. Купи горсть, зашифруй один и тот же секрет на каждую и разложи их по местам: ящик стола, офис, дом родственника, банковская ячейка и ещё куда-нибудь, куда додумаешься заглянуть только ты. Каждая метка по отдельности без парольной фразы бессмысленна. Это то, что мне в конструкции нравится больше всего: два фактора возникают сами собой, ведь физическая метка и парольная фраза лежат в разных местах, и настраивать для этого ничего не надо.
Почему NFC, а не USB или карта памяти
Меня спрашивают, почему я не отправил всех за флешкой или картой памяти. Честный ответ: я слишком часто видел, как они отказывают скучным и предотвратимым образом. NFC обходит все эти сценарии:
Нет разъёма, то есть нечему окисляться и гнуться
Нет батарейки, метка пассивна и питается от считывателя
Нет файловой системы, значит, нечему повреждаться
Нет драйверов, NFC читает любой смартфон из коробки
Мелкие и дешёвые, размером с монету и меньше доллара при заказе пачкой
Прочные, варианты в эпоксидке терпят воду, удары и ультрафиолет
Единственное реальное ограничение упирается в объём: примерно 500-700 байт с учётом накладных расходов шифрования. Немного, но для задачи этого с запасом: seed-фраза из двадцати четырёх слов, мастер-пароль или набор кодов восстановления помещаются свободно.
Что важно знать про безопасность
Лучше я расскажу про острые углы сразу, чем ты наткнёшься на них потом:
Парольная фраза решает всё. 256-битный AES не взломать. Слабую парольную фразу можно. Возьми случайную строку от двадцати символов и не экономь на этом.
Дальность NFC мала, примерно четыре сантиметра. Через комнату никто не считает, и этот крошечный радиус тут работает на тебя.
Удалённой очистки нет. Потерял метку? Уничтожь её физически. Ножницы справляются, да и без парольной фразы данные всё равно бесполезны.
Восстановления парольной фразы нет. Забыл её, и данные потеряны. Я принял это решение осознанно: путь восстановления всегда служит и путём атаки. Запиши парольную фразу отдельно от меток.
Более широкая картина
Работая с NFC каждый день, я наблюдаю, как эти метки тихо становятся носителем для по-настоящему важных вещей. Цифровой паспорт продукта в Евросоюзе перечисляет NFC среди одобренных носителей данных, прямо рядом с QR-кодами. Philips ставит их в насадки зубных щёток. Отели делают из них ключи от номеров. Дёшево, прочно и читается устройством, которое и так лежит в кармане: такое сочетание встречается редко, и именно поэтому я всё время нахожу им новые применения. Если хочется общей картины, основы я собрал в тексте «NFC-метки: полное руководство для начинающих».
NFC Safe вырос из желания взять эту прочность и добавить к ней единственное, чего не хватало, то есть шифрование. Копия, которая переживёт бумагу, которую не прочитает нашедший и которая стоит дешевле чашки кофе. Я хотел такую штуку для себя, поэтому её и сделал.
Уже доступно в NFC.cool Tools для iPhone и для Android.