Skip to content

← 返回 NFC.cool Blog

NFC Safe:把加密的机密信息存进耐用的 NFC 标签

手机、NFC 卡片、盾牌和锁,代表加密的 NFC 机密信息

你的助记词大概率写在一张纸上。也许放在保险箱里,也许压在地板下,也许拆成三份分散在三个地方,因为 Reddit 上有人说“认真”的加密货币玩家都这么做。但它终究还是纸。纸会被烧掉,会被水泡,会丢失。

我做 NFC.cool 已经好几年了,这是一款用来读取和写入 NFC 标签的 App。某个时刻,我开始问自己一个跟支付或门禁卡毫无关系的问题:要是你的备份不会腐烂、不会老化,而且在任何捡到它的人眼里都什么都不是,会怎样?

正是这个问题让我做出了 NFC Safe。它用 256 位 AES 加密,把任意文本(助记词、密码、恢复码,任何你需要保密的内容)加密写入一枚 NFC 标签。这枚标签是自包含的:没有云端,没有服务器,没有账户。要读取机密信息,你需要实体标签口令两者兼备。缺了其中一个,这枚标签就只是一小片塑料,上面印着一堆乱码。

设计这个功能时我有一点特别在意:我不希望你的机密信息依赖于我的 App 是否还存在。所以加密格式是完整公开、有完整文档的,还附带一个参考用的 Python 解码器。万一哪天 NFC.cool 消失了,你依然可以用一台标准 NFC 读取器加上这份规范恢复你的数据。这是一个我能兑现的承诺,因为我把规范写成了能比软件活得更久的样子。


存储机密信息的难题

如果你让我说出我见过的每一种机密信息存储方式的弱点,我不假思索就能答出来:纸会烧掉,USB 接口会腐蚀,云服务会被攻破,硬件钱包只能管加密货币助记词,而你的大脑会遗忘。每种方案都有它自己的失效方式。

于是我反向推导。理想的备份应该是物理上耐用、加密、自包含、可冗余而且能长久保存的。NFC 标签把这五点全占齐了,一开始这一点也让我意外。它们没有电池、没有活动部件,而 NTAG216 芯片的数据保存期标定为 10 年以上。环氧树脂封装的型号能扛住水浸、撞击和数十年的搁置不管。如果你还不清楚这些芯片有什么区别,我在 iPhone 上的 NFC 标签类型一文里拆解过各种取舍。


如何使用 NFC Safe

NFC Safe 位于 NFC.cool Tools 里的 NFC Apps 下。我把整个功能压缩到了一个界面,顶部有一个分段控件:加密或解密。如果你以前写入过标签,这一切都不会让你觉得陌生。

加密:

  1. 打开 Tools → NFC Apps → NFC Safe

  2. 选择加密

  3. 输入或粘贴你的机密信息

  4. 设置一个强口令

  5. 轻触“加密”,把一枚 NFC 标签贴近你的手机

解密:

  1. 在同一个界面,切换到解密

  2. 输入你的口令

  3. 轻触一枚之前加密过的标签,你的机密信息就会显示出来

底层我实际做的是这些:AES-256-GCM 配合 PBKDF2(HMAC-SHA-256,10 万次迭代,16 字节随机盐)。结果以一条自定义 NDEF 记录(urn:nfc:ext:crypto)的形式存储在标签上。如果你不想只听我说,而是想自己验证这些细节,完整的格式规范就在 GitHub 上。如果你想先了解一次普通的、未加密的标签写入是什么样子,我在如何在 iPhone 上写入 NFC 标签一文里逐步讲过。


冗余策略

下面是我自己实际会怎么用。一枚 NTAG216 标签的价格跟一杯咖啡差不多,所以没理由只做一枚。买上一把,把同一份机密信息加密写入每一枚,然后分散放置:书桌抽屉、办公室、家人家里、银行保险箱,或者某个只有你自己想得到去找的地方。每一枚标签单独拿出来,没有口令就毫无意义。这是我最喜欢这套设计的地方:它天生就是双因素的,一枚实体标签加一句口令,分别放在两个不同的地方,而你不需要做任何额外的设置。


为什么用 NFC 而不是 USB 或 SD 卡

有人问我为什么不直接让大家用 U 盘或 SD 卡。老实说,是因为我见过太多这类介质以无聊又本可避免的方式失效。NFC 绕开了所有这些问题:

  • 没有接口:没有可腐蚀或可弯折的东西

  • 没有电池:被动供电,由读取器供能

  • 没有文件系统:没有可损坏的东西

  • 没有驱动:每一部智能手机都原生支持读取 NFC

  • 又小又便宜:硬币大小,批量买每枚不到一美元

  • 耐用:环氧树脂型号能扛住水浸、撞击和紫外线

唯一真正的限制是容量:去掉加密开销后大约 500 到 700 字节。这不算多,但对它真正的用途来说已经绰绰有余了:一句 24 词助记词、一个主密码,或者一组恢复码。


安全提示

与其让你日后才发现这些棘手之处,我更愿意把话说在前头:

  • 你的口令就是一切。 256 位 AES 无法破解,弱口令则不然。请使用随机生成的 20 个字符以上的字符串,别在这里打折扣。

  • NFC 的作用距离很短(约 4 厘米)。没人能隔着房间扫描你,这么小的作用距离是优点,不是缺陷。

  • 没有远程擦除。 标签丢了?把它物理销毁。剪刀就行,何况没有口令数据本身也毫无用处。

  • 没有口令找回。 忘了口令,数据就没了。这是我有意做的决定:一条找回的途径同时也是一条攻击的途径。请把口令记在跟标签分开的地方。


更大的图景

每天跟 NFC 打交道,我眼看着这些标签悄悄成为存放重要东西的介质。欧盟数字产品护照(EU Digital Product Passport)将要求用 NFC 验证产品真伪。飞利浦把它们装进牙刷头里。酒店用它们做房卡。便宜、耐用,而且能被你口袋里已有的设备普遍读取,这样的组合并不多见,这也正是我不断为它们找到新用途的原因。如果你想了解更全面的内容,我在 NFC 标签详解:完全新手指南里讲过基础知识。

NFC Safe 是我想把这份耐用性补上它唯一欠缺的那样东西的尝试,那就是加密。一份比纸更耐久、任何捡到它的人都读不出来、而且成本不到一杯咖啡的备份。这正是我想为自己拥有的东西,所以我把它做了出来。

现已在 iPhone 版 NFC.cool Tools 上线。Android 版即将推出。