我们每天都在用的很多技术,其实都悄悄藏在了幕后。你轻触付款、解锁、扫描、分享,却从来不会去想底层那套协议。NFC 就是这样一段不起眼的管道,而在打造 NFC.cool 这款读写 NFC 标签的 App 多年之后,我钻进这套管道里的时间,比大多数人一辈子都要多。下面我就用对一位好奇的朋友讲解的方式,说说它在你的 iPhone 上到底是怎么运作的。
NFC 究竟是什么
近场通信(Near Field Communication)是一种近距离无线协议:两台设备相距大约 4 厘米以内时,就能交换数据。在我看来,它就像是蓝牙和 Wi-Fi 的一个简化版、距离短得多的近亲。
这么短的距离一开始会让人犯迷糊,但它并不是局限,而是这套安全模型的核心。当我想明白这一点之后,NFC 许多设计上的取舍就都说得通了。你不可能隔着整个房间就误触了付款终端,恶意读卡器也无法在远处悄悄从你的钱包里抽走数据。如果你对这一切还很陌生,我写过一篇循序渐进的 NFC 标签新手指南,它的起点比本文还要靠前。
iPhone 上 NFC 的简短历史
Apple 在 2014 年的 iPhone 6 和 6 Plus 上首次搭载了 NFC 硬件,但当时这枚射频模块被锁死,只能用于 Apple Pay。第三方 App 根本无法读取 NFC 标签:作为一个后来要做 NFC App 的人,眼睁睁看着这种局面持续了好几年,实在让人着急。
转机出现在 iOS 11(2017 年),它引入了 Core NFC 框架,终于让我这样的开发者得以读取 NDEF 标签。在之后的版本里,Apple 把这扇门越开越大:iOS 13 加入了写入支持,iPhone XS 及更新机型加入了常驻后台的标签读取。如今,在任意一台现代 iPhone 上,你无需打开任何 App,只要轻触一枚标签,系统就会识别它并给出对应的操作。
NFC 究竟如何传输数据
在每一次交互中,NFC 设备都扮演两种角色之一:主动(有供电,会产生磁场)或被动(没有电池,从磁场里取电)。每当有人问我 NFC 是怎么运作的,我都会回到这一个核心概念。
当你用 Apple Pay 付款时,你的 iPhone 就是那台主动的读卡器。它会产生一个频率为 13.56 MHz 的射频场。付款终端里的 NFC 元件在这个磁场里被唤醒,亮明身份,并与你的手机交换一小段加密数据。你的银行卡信息从不离开 Secure Element:那是手机上一枚专用、与硬件隔离的芯片。真正发出去的只是一个一次性令牌。
当你轻触海报上的一枚 NFC 贴纸时,角色就反过来了。海报上的标签是被动的,它没有电池。是你 iPhone 的读卡器在给它供电,标签则把自己存储的 NDEF 记录回应给手机,再由 iOS 决定要做什么(打开一个 URL、启动一个 App、显示一张联系人名片、触发一条快捷指令)。后半段,也就是标签这一侧,正是 NFC.cool 安身立命的地方。如果你想不安装任何东西就看看它的实际效果,可以在 Android 上直接从浏览器里读取 NFC 标签。
NDEF:通用的语言
架在 NFC 射频之上的数据层就是 NDEF,即 NFC 数据交换格式(NFC Data Exchange Format)。我把它形容为一种小巧的自描述记录格式:一枚标签里携带一条或多条记录,每条记录都带有一个类型(URI、文本、vCard、Wi-Fi 凭据、自定义 MIME)和一段数据。
这个星球上每一部支持 NFC 的手机都讲 NDEF 这门语言,所以在 Android 设备上写好的标签,拿到 iPhone 上也能正常读取,反之亦然。在移动领域,这是 iOS 和 Android 为数不多真正共用同一套标准的地方之一。说实话,在做功能的时候,这种互通正是我最庆幸的一点:我面向的是格式,而不是某个平台。如果你想试着自己写入记录,我在 如何在 iPhone 上写入 NFC 标签 里完整走了一遍流程。
隐私与安全
有两道防线值得一提,也正是我最常向人解释的两道:
距离。 仅仅几厘米的范围,若没有一根显眼的天线就很难被截获,这正是 NFC 当初设计时所针对的威胁模型。
令牌化。 Apple Pay 从不传输你真实的卡号。每一笔交易使用的都是一个设备账户号码,外加一段在 Secure Element 内部生成的一次性密文。哪怕终端已被攻破,也无法重放这段数据。
对于标签读取,威胁面则不一样:被信任的对象是标签本身。如果标签上的内容由你掌控(比如你自己的家居自动化、你的电子名片),那就没问题。如果你在公共场所轻触一枚来路不明的标签,iOS 在采取任何动作之前,仍会向你弹出一个确认提示。当我确实需要一枚标签真正存放一个秘密、而不只是指向它时,我会用加密标签,这一点我在 在 NFC 标签上安全地存放加密秘密 一文里讲过。
这一切为什么重要
NFC 属于那种一旦运作起来就消失于无形的协议,而这恰恰是我乐于在它之上做开发的原因。你轻触一道闸机、一台付款终端、一张名片、一个智能音箱,然后某件事就发生了。没有配对,没有 PIN 码,也无需打开 App,只有一个有意为之的物理动作,授权了某一次特定的交换。
正因如此,我打造了 NFC.cool Tools,让人们无需先学会这套协议,就能用上 NFC 完整的 NDEF 能力。读取任意标签、写入任意记录类型、用完后把标签锁定。无论是在 iPhone 上,还是在 Android 上。