公司动态
NFC无电池安全支付:Secora Connect X能量采集方案解析
去年接了个智能戒指的预研项目需求一句话就能说完戒指要能开门、能支付而且不装电池。听着挺科幻但真正动手后你会发现市面上大多数NFC芯片只能做到“读个ID给你看”真要做安全支付还得再挂一颗独立安全芯片而一旦涉及供电大家通常默认只能塞电池。我后来查了一圈NXP的Secora Connect X就是冲着这个矛盾来的——用NFC本身把无线充电和安全支付两件事一起办了。这篇文章围绕Secora Connect X这类“支付能量采集”方案聊聊它解决什么问题、13.56MHz无线充电的物理原理、芯片内部怎么分工、防中继攻击的安全机制以及做天线和原型验证时会踩的坑。适合正在做穿戴设备、智能门锁、微型传感器或者任何“体积受限又需要安全交易能力”产品的硬件工程师、嵌入式开发者和产品经理参考。1. 超小型设备卡在两座山前装不下电池也绕不开安全1.1 当产品小到“装电池都是奢望”供电怎么破我在做智能戒指之前先列了一版传统方案结果全部被体积和功耗打回来了。用BLE加纽扣电池是最常见的路线。CR2032直径20毫米、厚度3.2毫米塞进普通手环没问题但放到戒指、耳标、一次性医疗贴片这种产品里就是灾难。戒指的内径空间本来就紧张塞一颗电池意味着外壳要加厚、重量要增加而且电池总有没电的一天客户不可能把戒指寄回来换电池。换充电接口更不现实IP68防水直接泡汤。用无源RFID标签是另一条路。标签本身没有电池靠读卡器供电体积可以做得很小。但普通RFID标签只是“存储简单逻辑”它不会做密钥运算不会生成动态签名也不可能跑一套支付应用。门禁卡那套逻辑在支付场景里根本不够用因为支付要对交易报文做签名、验签、防重放普通标签不具备这些能力。所以超小型设备真正缺的是一个既能从射频场里“偷电”又能安全执行支付流程的芯片方案。这就是Secora Connect X这类产品出现的背景把能量采集单元和安全元素整合在一起天线既收数据也收电SE负责所有安全相关的计算和密钥管理。相当于把一台“微型收款机”和一根“无线供电线圈”封装进了同一颗芯片里设备本身不用装电池。1.2 支付不是“存个账号”就完事安全元素缺一不可这里要展开说一下为什么支付场景必须有独立安全元素不能拿普通MCU硬扛。你可以在MCU里用软件实现AES、RSA理论上是可行的。但实际产品有个绕不开的问题密钥放在哪里。放在Flash里攻击者用探针、固件逆向、侧信道分析就能搞出来放在MCU内置的加密引擎里很多低功耗MCU的防护能力也远达不到金融级要求。支付行业通行标准是密钥必须待在安全芯片内部芯片本身要有防剖片、防激光攻击、防电压毛刺的能力密钥生命周期管理也要符合规范。安全元素SE就是干这个的。它内部有专门的加密协处理器、真随机数发生器、防篡改传感器和安全操作系统私钥从出厂到销毁都不会以明文形式离开芯片。Secora这个名字本身就是NXP安全芯片产品线的延续Connect X是在原有SE基础上加了NFC能量采集能力。结构上可以理解成“传统SE 能量收集电源管理 NFC模拟前端”三块拼在一起。1.3 对开发者来说这意味着什么我接触这类方案后最大的感受是它把产品的设计约束从“如何塞电池”变成了“如何在不稳定供电下保证安全交易”。这是截然不同的思维模式。以前做带电池的NFC支付手环要考虑电池电量、充电接口、低电关机策略一堆事。现在做无电池方案你只需要保证设备在贴近读卡器的几百毫秒内完成能量积累和交易流程即可。产品形态可以做到非常自由没有电池舱、没有充电触点、不用考虑用户忘记充电的问题。同时也要提醒一句选择这种方案不等同于“自动获得了支付安全”。安全是架构带来的不是芯片本身能保证的。后面第四章我会展开讲威胁模型尤其是NFC中继攻击这是做这类产品时必须认真对待的部分。2. 射频场里的电能搬运13.56MHz无线充电的底层逻辑2.1 从电磁感应开始不带铁芯的变压器NFC无线充电的原理说白了就是一个没有铁芯的高频变压器。读卡器端的线圈是初级绕组设备端的线圈是次级绕组初级线圈通过13.56MHz正弦波产生交变磁场次级线圈在磁场中感应出交变电压再经过整流和滤波变成直流电给储能电容或低功耗电路供电。感应电压的基本关系式是法拉第电磁感应定律V -N * dΦ/dt。N是次级线圈匝数Φ是穿过线圈的磁通量。磁通量的大小取决于两个线圈之间的耦合系数k而耦合系数k又和线圈尺寸、距离、角度、周围金属环境强相关。距离越远k越小感应到的能量断崖式下降。这也是为什么NFC无线充电只能“贴一贴”没法像Qi那样隔空几厘米充电。NFC天线的耦合距离通常不超过2到3厘米实际产品里往往要求几乎接触。对支付场景这反而是优点——用户本来就是“碰一下”完成的动作距离限制天然防止远程误刷。2.2 ISO14443A vs ISO15693让充电与支付选同一个协议做NFC相关开发的人应该都碰到过14443A和15693的选择题。这两个都工作在13.56MHz但面向的场景差别很大。维度ISO/IEC 14443AISO/IEC 15693典型通信距离0-10cm10-100cm通信速率106/212/424/848 kbps6.62 / 26.48 kbps典型应用支付、公交、门禁图书管理、资产盘点、仓储能量耦合强度高近场密集耦合低远场松散耦合防冲突机制二进制搜索树时隙ALOHA从支付角度14443A是全球支付生态的事实标准EMVCo非接触支付规范、Apple Pay、各种POS机都基于它。从无线充电角度14443A通信距离近反而意味着设备在通信期间处于强耦合区能采集到的功率更大。如果你为了“感应距离更远”选15693那能量采集效率会明显吃亏而且POS机终端也不认。所以Secora Connect X这类方案走14443A路线是顺理成章的。设备贴近读卡器的瞬间既满足近场能量传输条件又满足支付协议兼容性要求。这里想特别提醒开发时不要把天线调成“远距离也能读”那样会牺牲能量采集效率导致设备能通信但充不上电这是我在实际项目里踩过的坑。2.3 毫瓦级能量到底能不能干活能量采集爱好者经常问一个问题贴着读卡器能充多少瓦答案是别期待瓦级现实是毫瓦级。手机里的NFC读卡器天线发射功率本身就被限定在很低的水平通常是几百毫瓦级别。设备端天线面积又小耦合效率很低最终到整流输出端的可用功率我实测过的参考设计大概在1到10毫瓦之间体积稍大、天线做得好的方案能到几十毫瓦。这部分功率足够驱动一颗低功耗MCU跑状态机、点亮一颗低功耗LED、执行一次AES运算但别指望它跑WiFi或者驱动马达。更重要的设计思路是“间歇工作”。设备不一定要在进场瞬间完成所有工作可以先把能量攒在超级电容或薄膜电池里等电压升到阈值再启动通信和交易。这种“先充电再干活”的模式能大幅提高交易成功率对接触不良、用户手抖等现实情况更宽容。第三章我会详细讲这个状态机怎么设计。3. 充电与支付如何塞进一颗芯片内部架构与状态机拆解3.1 芯片内部的模块划分从系统角度看Secora Connect X这类芯片大致可以拆成四块第一块是射频模拟前端负责和读卡器耦合完成13.56MHz信号的调制解调、负载调制、整流和稳压。第二块是数字协议层实现ISO14443A的协议状态机处理REQA、ATQA、SAK、防冲突和APDU指令收发。第三块是安全域包括安全CPU、加密协处理器、真随机数发生器、密钥存储和防篡改传感器所有支付相关运算都在这里完成。第四块是电源管理单元把射频采集到的能量整理成稳定的数字电压给芯片内部和外挂传感器供电同时管理储能电容的充放电和欠压锁定。模块之间不是简单的堆叠而是有严格的访问控制。电源管理单元知道当前处于“充电中”还是“已就绪”状态但内存安全域的密钥区域不会因为外部电源状态变化而失去保护。也就是说哪怕供电电压在抖动SE的边界依然成立。3.2 从进场到交易完成的完整状态机我习惯把整个流程拆成一个五状态状态机方便和硬件同事对齐。场检测。设备进入读卡器射频场天线感应到13.56MHz载波RF前端产生一个场检测中断内部电路开始复位释放。能量积累。电源管理单元开始给储能电容充电等VCC升到工作阈值。这个过程通常需要几十到几百毫秒具体取决于读卡器功率、天线尺寸和电容容量。协议激活。数字协议层按照ISO14443A流程应答REQA返回ATQA完成防冲突进入ACTIVE状态。这里有个容易被忽视的细节调试时可以读Page0-3中的UID、厂商信息和校验字节确认天线链路、协议配置是否正常但安全芯片的真正能力不体现在Page里。安全支付。主机通过APDU指令发起交易典型的链路是SELECT PPSE、GET PROCESSING OPTIONS、READ RECORD、GENERATE AC芯片在安全域内完成脱机数据认证和动态签名。交易完成。读卡器收到确认报文后撤场设备端电压下降状态机保存交易日志然后断电。开发时可以在每一步预留调试事件通过I2C或SPI把状态打印出来。我试过在状态机里加一个轻量级日志环形缓冲区记录最近一次“死在哪个状态”对定位现场问题特别有用。否则用户报告“刷不上”的时候你根本不知道是能量不够、协议没跑通还是支付被拒。3.3 “先充电再支付”的时序设计经验设备内置储能电容的量级决定了状态机的容错能力。如果电容只有几微法整流输出稍一波动电压就跌破阈值交易随时可能中断。如果电容能到几百微法甚至毫法级就能实现“充一会儿电、然后一口气跑完支付流程”即使读卡器稍有移动也不怕。我的建议是第一版设计至少预留100微法级别的储能电容用低ESR陶瓷电容并联靠近芯片电源引脚摆放。充电阈值和放电阈值的滞回要拉开比如3.0V启动、2.7V停机防止电压在阈值附近反复抖动导致芯片反复复位。另外一个容易被忽略的点是欠压锁定UVLO。射频供电天然不稳定用户在刷戒指时会下意识缩手读卡器功率也可能波动UVLO可以保证电压不足时主动丢弃当前会话避免半个交易写入日志造成对账问题。支付行业的对账最怕“半截交易”宁可不交易也不能状态不明。4. 安全不是贴个芯片就自动有中继攻击与威胁模型分析4.1 中继攻击为什么是NFC支付的头号敌人很多第一次接触NFC安全的人以为芯片有加密算法就安全了。但中继攻击完全不碰加密它只“搬运”数据。攻击者准备两个设备一个贴近用户的支付戒指另一个贴近商家的POS机。贴近戒指的设备读取到芯片的响应报文通过蓝牙、WiFi或长导线把数据传到贴近POS机的设备再由贴近POS机的设备把报文原样发给读卡器。从POS机的角度看它识别到的就是一张“正在现场”的卡片实际上卡片本人在另一个城市。NFC中继攻击之所以难防是因为RF层不提供距离证明。你没法从一张APDU响应里判断发出者离读卡器是1厘米还是100公里。这在“NFC无线充电支付”场景里更要命因为设备不仅包含支付密钥还包含能量采集和传感器数据攻击面更广。4.2 Secora Connect X类方案的防护机制真正产品化的方案不会只靠某一个防御点而是叠好几层每一层都让中继或重放攻击的难度上升一个量级。攻击方式风险表现缓解措施中继攻击非现场交易卡在身边却被异地扣款距离探测、场强检测、通信时延限制交易重放截获报文后重复提交造成重复扣款每次会话生成新随机数交易计数器递增恶意读卡器提取数据通过假POS抓取卡片信息双向实体认证密钥不出SE安全域隔离侧信道分析通过功耗曲线推测密钥SE内部抗攻击设计、随机时延、掩码运算先说轻量级距离探测。读卡器发射一个挑战设备必须在极短时间内响应超过设定时延就判定为可疑。中继链路每增加一跳就会引入延迟虽然这个延迟可以优化到很小但把阈值压到几毫秒级别还是能把绝大多数自制中继设备挡在门外。这类方案在低成本设备里是可用的但坦白讲真正的强距离证明需要额外硬件安全等级和成本成正比。再说会话随机数。每次交易时读卡器下发随机数设备用私钥对该随机数加交易数据做签名。攻击者即使录下整条报文下次重放也会因为随机数不同而被拒绝。配合交易计数器每笔交易序号只能递增从协议层杜绝重放。最后是双向认证。能量采集阶段设备不仅接收能量也会验证读卡器是否合法。这样可以防止攻击者用一个自制读卡器把设备骗到跟前趁机读取内部数据或写入恶意指令。4.3 开发者必须做好的安全自查清单芯片提供安全能力不代表系统使用得当。我做安全评审时习惯按下面这个清单过一遍你可以直接拿去当自查表生产后是否锁死调试接口防止固件被读出是否强制启用双向认证而不是默认关闭交易重试次数和频率是否有上限防止暴力枚举密钥是否支持远程轮换设备被破解后能否单独吊销日志和上报数据是否包含卡号、密钥等敏感字段读卡器端是否校验设备返回的签名和证书链。第6条特别重要。即使芯片侧做了全套防护如果读卡器端代码没有校验设备签名攻击者完全可以伪造一张“模拟卡片”直接冒充设备。安全是整个链路的事芯片只是其中一环。5. 天线、调试与原型验证把方案从数据手册落到桌面5.1 超小天线设计的三个坑天线是整个项目里最“玄学”的部分尤其设备体积小到极致时我在调试中踩过几个坑分享出来希望你能避开。第一个坑是只看谐振频率不看Q值。用网络分析仪把天线调到13.56MHz谐振这只是第一步。Q值太高意味着带宽很窄一旦贴了外壳、换了批次线圈谐振频率漂移一点就完全失配Q值太低则能量泄漏严重采集效率上不去。量产设计建议留出调谐电容余量并在整机外壳装配完成后再微调。第二个坑是忽略金属环境。金属外壳、电池、甚至人体手指都会在天线附近感应出涡流吸收能量并拉偏谐振频率。所以调谐不能在天线裸板状态下做必须在整机装配、模拟真实使用时做。你会发现同一个天线外面套上金属壳之后谐振频率能偏出去几百千赫兹。第三个坑是天线尺寸差太大。手机读卡器天线面积可能有三四平方厘米设备天线只有几平方毫米两个线圈尺寸悬殊导致耦合系数很低。单纯调高天线Q值并不能完全解决“场型失配”问题必要时得通过增加匝数、增大线圈包围面积来补偿。5.2 调试工具怎么搭从Page0-3读到APDU级调试调试这类方案工具链可以分三层搭。第一层是手机App比如NFC TagInfo或者NFC Tools。手机贴近芯片时能直接读出Page0到Page3的内容包括UID、厂商信息、ATQA、SAK。Page0里常见的0x00、0x10、0x20、0x30前缀是不同厂商/产品类型的标识数据具体映射要查对应芯片手册。这一层适合快速验证天线是否工作、协议是否选对但注意别把Page内容当成安全状态它只是协议层信息。第二层是PC/SC读卡器加libnfc。用命令行工具nfc-poll可以看到完整的轮询结果用nfc-list -t 1可以确认读卡器类型。这层比手机App更可控适合自动化测试脚本反复执行防冲突、APDU读写。第三层是逻辑分析仪。抓读卡器芯片和主控MCU之间的SPI或I2C通信可以定位是协议层没响应、还是应用层APDU被拒。我一般先抓SPI看主控有没有正确下发指令再抓射频侧数据看芯片返回是否符合预期。逐层看问题定位非常快。5.3 用ESP32PN532搭一台最小验证平台如果你只是想做原型验证不一定要立刻买厂商评估板。我用ESP32加PN532模块搭过一套最小读卡器平台用来跑协议流程成本低且代码好改。#include Wire.h #include Adafruit_PN532.h #define PN532_IRQ (2) #define PN532_RESET (3) Adafruit_PN532 nfc(PN532_IRQ, PN532_RESET); void setup() { Serial.begin(115200); nfc.begin(); nfc.SAMConfig(); // 配置为读卡器模式 Serial.println(F(PN532 ready, waiting for target...)); } void loop() { uint8_t uid[7] {0}; uint8_t uidLen 0; // 轮询 ISO14443A 卡片 if (nfc.readPassiveTargetID(PN532_MIFARE_ISO14443A, uid, uidLen, 100)) { Serial.print(F(Target found, UID: )); for (uint8_t i 0; i uidLen; i) { Serial.print(uid[i], HEX); Serial.print( ); } Serial.println(); // 发送一个简单的APDU比如 SELECT PPSE uint8_t apduSelect[] {0x00, 0xA4, 0x04, 0x00, 0x07, 0xA0, 0x00, 0x00, 0x03, 0x86, 0x0D, 0x00}; uint8_t response[64]; uint8_t responseLen sizeof(response); if (nfc.InDataExchange(apduSelect, sizeof(apduSelect), response, responseLen)) { Serial.print(F(APDU response, len)); Serial.println(responseLen); } else { Serial.println(F(APDU exchange failed)); } } delay(500); }注意PN532只是用来模拟读卡器侧行为验证与你设备芯片之间的协议交互是否正常它并不代表目标芯片内部实现的性能。这套平台最大的价值是能让你在不依赖正式收单终端的情况下把REQA握手、防冲突、APDU链路全部跑通。代码里有个细节要提醒Initial Data Exchange的缓冲区要留足有些支付APDU响应很长64字节不一定够我第一次用32字节缓冲区时经常得到超时错误换了128字节才稳定。5.4 实测常见故障与排查链路现象可能原因排查方向设备完全无法识别天线未调谐、距离太远、协议选错网络分析仪测谐振检查ISO14443A配置能读到UID但APDU无响应能量不足通信后电压跌落加大储能电容检测整流输出电压指示灯闪一下就熄灭储能电容容量偏小电压跌破阈值增加电容降低启动电流手机提示“不支持的卡类型”卡模拟协议用错确认读卡器配置的是14443A而非15693交易偶发超时天线匹配不稳定场强波动整机状态下重新调谐检查接触点日志出现重复交易号会话随机数未更新检查随机数生成链路和计数器实现排查链路最关键的一步是先把“通信问题”和“能量问题”分开。我常用的方法是在储能电容正极接一个ADC采样点利用Espressif或STM32的ADC记录充电曲线。充电曲线如果是一条慢慢爬升然后封顶的曲线说明能量链路正常如果电压瞬间就掉下去重点查电容和天线匹配。6. 应用场景与选型建议什么时候用安全芯片什么时候用Tag就够6.1 适合NFC能量采集支付的典型场景手里有了“能充电、能支付、体积小”这套能力能做的产品其实不少。我接触过的案例大概分几类。支付穿戴设备是最直接的智能戒指、支付手环、儿童手表背夹无电池降低了安全认证和航空运输的麻烦。工业巡检是另一个高价值场景工作人员拿手机或手持机贴近设备标签既能读取温湿度、振动数据又能同时完成操作员身份认证设备本身不用布线供电。医疗领域也有需求一次性体温贴片、药品冷链监测标签成本和体积都被卡得很死NFC能量采集是少数能同时满足两条约束的方案。这类产品共同特征是数据量小、交互时间短、无持续供电条件、需要轻量级身份认证。只要需求符合这四条NFC能量采集方案就是值得考虑的。6.2 和NTAG215音乐墙这类方案的边界网上很火的NFC音乐墙用的是NTAG215芯片贴一张带URL的标签在墙上手机一碰就自动播放歌单。那种方案成本极低但芯片本身没有安全计算能力任何人都能用手机改写标签内容也不存在密钥和交易概念。如果你做的是文创产品、防伪溯源、信息展示NTAG215是够用的。但如果你做的是“碰一下支付”“碰一下开锁”“碰一下打卡上班”就必须用带SE和动态鉴权能力的芯片。判断标准很简单你的业务链路里后端的操作行为能不能被轻易伪造能被伪造就需要安全芯片不能就选普通NFC标签。6.3 落地产品时我建议你按这个顺序推进第一个阶段是评估板跑通。不管选什么芯片方案先拿官方评估板和参考设计把天线、协议、APDU整条链跑通别现场改天线浪费时间。第二个阶段是天线定制。根据最终外壳尺寸设计FPC或PCB天线在整机装配状态下用网络分析仪调谐振记录不同批次和不同外壳材质下的频率漂移范围。第三个阶段是画原理图和PCB。储能电容靠近芯片电源引脚NFC天线走线远离高频数字信号线接地要完整给天线下方留出净空区。第四个阶段是做认证和量产准备。先过NFC Forum和EMVCo非接触支付相关的互操作测试再锁死和裁剪安全调试接口最后做产线测试工装确保每个设备出厂前都能通过一次标准读卡器的完整交易流程测试。我个人的体会是整个项目里最容易翻车的地方不是芯片选型也不是协议栈而是天线和供电配合没做好。特别在产线上如果每万台产品里有几十台因为天线批次偏差导致交易失败售后会非常痛苦。所以量产前一定要做天线参数的一致性抽检并把调谐电容的容差收紧。另外分享一个我自己调试时很管用的小技巧在设备里加一个“回环自测模式”让芯片被读卡器识别后主动返回一段固定的状态字包含充电电压、储能电容电压、最近一次交易结果。这样只要拿手机一贴马上就知道整条链路健康不健康排查问题能省掉一半时间。如果文档里没写这个功能也可以自己通过APDU扩展实现只要不触碰安全域边界就行。