ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

让指纹留在卡内:Secure MCU如何成就生物识别卡

让指纹留在卡内:Secure MCU如何成就生物识别卡 1. 项目解析Secure MCU 在生物识别卡里到底解决什么问题先把这个项目说透。Secure MCU Targets Biometric Cards翻译过来就是安全微控制器瞄准生物识别卡市场这听起来像一句芯片厂商的新闻稿但实际拆开看它背后是一条非常具体的产品技术路线把指纹识别、安全存储、支付/门禁逻辑全部塞进一张 ISO 7816 标准卡片里让这张卡在没有外部供电、没有显示屏、厚度只有 0.76 毫米的限制下完成指纹比对、密钥运算、数据加密传输这一整套流程。我最早接触这个方向是给一家卡厂做方案评估当时客户给的需求很直白能不能把现有的接触式 CPU 卡升级成按指纹才能刷的版本普通 CPU 卡大家都熟悉就是银行卡、社保卡里那颗芯片通过接触式读卡器和外部终端通信。但生物识别卡不一样它的核心诉求是——指纹模板不能出厂时存在服务器里而是存在卡里比对也要在卡里完成这样用户指纹数据永远不会离开卡片从源头解决隐私问题。这里要引入一个概念Match-on-Card卡上比对简称 MoC。传统指纹支付是终端采集指纹后上传到后台服务器比对或者在内有 TrustZone 的手机 SoC 里比对。而 MoC 要求指纹传感器读到的手指特征值直接在卡内安全芯片里和预存的模板做比对比对结果只输出一个通过/不通过的布尔值。这个设计彻底改变了安全边界——指纹数据不出卡攻击者就算截获了卡和终端之间的通信也拿不到任何生物特征信息。那 Secure MCU 在这张卡里是什么位置它不是普通单片机而是集成了安全协处理器、真随机数发生器TRNG、公钥算法引擎、防篡改检测电路的专用控制芯片。它在卡里的作用可以类比成带保险柜的微型电脑普通 MCU 只能算算术Secure MCU 能确保算算术的过程不被窥探、不被篡改。为什么要用 Secure MCU 而不是普通低功耗 MCU我后面会详细展开但先记住一个核心结论在这张卡上性能不是第一指标安全才是。指纹比对算法大约需要几十毫秒到几百毫秒的运算时间普通 MCU 也能跑但跑完之后密钥怎么保护、传感器数据怎么防注入、通信怎么防中间人这些才是决定产品能不能通过 CC EAL5 认证、能不能被银行和发卡机构接受的关键。这个项目适合谁来参考如果你是做智能卡、安全芯片、物联网身份认证设备的工程师或者正在评估端侧生物识别方案的架构师这篇文章能给你一条从选型到量产验证的完整思路特别是那些规格书里不会写的坑我会全部抖出来。2. 核心架构与关键选型为什么这块芯片必须又小又安全2.1 一张卡片里到底要塞哪些东西先把生物识别卡的硬件组成拆开你就明白设计难度在哪。一张标准银行卡的物理尺寸是 85.6mm x 53.98mm厚度 0.76mm内部要容纳一个 Secure MCU安全主控芯片一个指纹传感器通常埋在卡面特定位置厚度不超过 0.3mm一组天线线圈用于非接触通信比如 ISO 14443 协议的 NFC 接口可能存在的接触式触点ISO 7816 的 8 个铜触点一颗微小的电池可选方案有些卡设计成无源模式靠读卡器射频场供电你可能会有疑问指纹传感器加上安全芯片再加上天线卡片不会很厚吗这确实是早期方案的痛点。我见过第一代方案整卡厚度做到 0.9mm 左右虽然能塞进非接触读卡器但手感已经不如普通银行卡。后来传感器厂把封装做到 0.25mm 以下芯片用 WLCSP晶圆级芯片封装才勉强控制在 0.76mm 标准线内。关键选型上还有一个方向要区分传感器和主控是两个独立芯片还是集成在一起。市面上有把指纹传感器和安全 MCU 封装成 SiP系统级封装的方案也有一颗芯片搞定采集和比对的一体化方案。从供应链灵活度看分开选型更常见——传感器可以根据卡厂的成本压力选国产或海外方案安全 MCU 则固定用通过 Common Criteria 认证的那么几颗。但一体方案的好处是省面积、省布线、功耗更可控适合对厚度和成本敏感的卡型。2.2 安全元件怎么选独立 SE 还是全能 SoCSecure MCU这个叫法很微妙。有些人把它理解成带安全功能的单片机有些人理解成独立的 Secure Element安全元件。实际项目里其实有两条路线路线一普通低功耗 MCU 独立 SE 芯片。指纹采集和算法运行在 MCU 上SE 只负责密钥存储和签名运算。这种方案灵活MCU 可以用成熟型号快速开发SE 则用 NXP、Infineon 或国产 CJCR 的认证产品。缺点是多一颗芯片就多一分功耗和成本且 MCU 和 SE 之间的通信通道会成为攻击面。路线二单一 Secure MCU 包办所有事。指纹图像处理、特征提取、模板比对、密钥管理全在一颗芯片内完成。这就是项目标题里 Secure MCU Targets Biometric Cards 指的最典型形态。好处是安全边界最干净——生物特征数据从采集到比对结果输出全程不离开芯片内部总线中间没有任何外部引脚可以探测。代价是这颗 MCU 必须具备足够的算力同时功耗又不能突破卡片供电上限。我实际比较过这两条路线。如果是做门禁卡路线一够用因为门禁系统的安全等级要求相对低认证成本也不是主要矛盾。但如果是做金融支付卡必须走路线二因为 Mastercard、Visa 的生物识别卡规范明确要求指纹模板和比对过程必须在安全环境内完成而且要求芯片通过 CC EAL5 或 CC EAL6 认证。另外一个容易被忽视的选型要素是内存资源。指纹模板通常每条 2KB 到 8KB一张卡可能要存 2 到 10 个模板。加上算法运行时的临时缓冲区、固件本身的存储Flash 空间最好有 256KB 以上RAM 至少 32KB。如果你选的芯片只有 64KB Flash跑指纹算法会非常吃力频繁擦写还会缩短芯片寿命。2.3 无源供电与功耗预算整个系统的天花板生物识别卡最独特的约束是供电。绝大多数设计采用无源方案——卡片不装电池完全靠读卡器发出的射频场供电。这意味着所有器件必须工作在极低的功耗预算内。一个典型的射频场能提供的电流大约在 5mA 到 15mA 之间取决于读卡器功率和通信距离电压通常在 1.8V 到 3.3V。整个系统功耗预算一般是指纹传感器峰值 2-5mA采集瞬间安全 MCU 运行指纹算法峰值 3-8mA天线和模拟前端电路1-2mA传感器待机和 MCU 休眠总计小于 10µA你要算的一笔账是指纹识别必须在卡片进入射频场后的300ms 到 500ms 内完成因为用户不可能一直举着卡片不动。这个时间内要把手指放上去、传感器采集图像、MCU 跑完比对、返回结果给终端。如果算法太慢用户手一抖就超时了如果峰值功耗太高射频场直接拉垮卡片瞬间掉电重启。所以在选型和优化时我习惯用一个公式粗估功耗 电压 × 电流而 Flash 写入和传感器图像采集是两个最大的电流尖峰。实战里我会做两件事一是降低传感器分辨率从 508dpi 降到 256dpi 可能识别率不降但图像处理量少很多二是把算法里的浮点运算改成定点运算减少 MCU 主频和运行时间。3. 指纹注册与匹配卡上比对的完整流程实现3.1 从采集到模板生成指纹注册阶段指纹卡不是拿来就能用的用户第一次使用必须经过注册Enrollment阶段。这个过程通常不在日常支付场景里完成而是在发卡机构或自助终端上完成。整个注册流程如下用户将新卡放在专用的注册终端上终端给卡供电并建立安全信道。终端提示用户把同一根手指按压 3 到 5 次传感器采集多帧指纹图像。Secure MCU 对每帧图像做增强处理提取细节点Minutiae包括脊线端点、分叉点、断点等特征。MCU 将多次采集的特征做融合生成一个稳定模板存入芯片的安全 Flash 区。卡片向终端返回注册成功终端再清空临时缓存。这一步里很多细节会踩坑。首先是传感器污渍和手指干燥度问题。电容式传感器对干手指、浅纹理手指非常敏感注册阶段如果模板质量就不好后续日常识别率会惨不忍睹。我的经验是在注册前加一个图像质量评分环节低于阈值就强制要求重新按压宁可多按几次也不能让模板带病入库。另一个坑是模板存储方式。指纹模板是用户生物特征数据在金融卡场景里受到严格监管不能明文存储。Secure MCU 内部通常有 OTP一次性可编程区域或安全 Flash模板必须以密文形式存放密钥从芯片内部真随机数发生器生成永不出芯片。有的方案还做了防回滚保护——模板一旦写入只能整体擦除不能逐字节修改防止攻击者拼接出一个万能指纹。3.2 日常比对安全信道的建立与结果返回注册完成后日常使用的流程是持卡人把卡贴近读卡器终端通过射频场给卡供电卡内 MCU 唤醒等待用户按压指纹。这时候问题来了——卡和终端之间怎么通信指纹比对结果怎么安全地告诉终端这里涉及两层协议。第一层是物理层和链路层通常走 ISO 14443-A 或 B 协议的非接触通信和普通银行卡刷 NFC 一样。第二层是应用层必须走一条安全消息通道。典型做法是卡和终端预先共享一套会话密钥通过对称加密AES-128 或 AES-256保护所有 APDU 命令和响应。APDU 命令是 ISO 7816-4 标准里的应用协议数据单元简单理解就是终端发给卡的一条条指令。整个比对流程的 APDU 序列大致是终端发送SELECT命令选中卡内的生物识别应用。终端发送VERIFY命令要求验证持卡人指纹。卡内 MCU 启动传感器采集完成特征提取和比对。卡返回Status Word0x9000 代表成功0x63Cx 代表验证失败。你可能会问卡返回的只是一个状态码终端怎么知道真的是用户的手指按上去了而不是攻击者重放了一条之前录下的VERIFY响应这就是安全信道存在的意义。所有响应都带随机数和消息认证码MAC重放攻击会在 MAC 校验阶段被直接拒绝。这里我还想提醒一个容易忽略的点传感器数据防注入。攻击者的思路往往是绕过传感器直接在 MCU 的 SPI/I2C 引脚上灌入伪造的指纹图像。Secure MCU 必须对传感器通信做双向认证或者至少对传感器返回的数据包加 CRC 校验和密钥签名。市面上一体化 SiP 方案的优势就在这里——传感器和 MCU 在同一封装内走专用总线物理上很难探测和注入。3.3 密钥体系与生产个人化指纹卡全生命周期的安全模型可以概括成三套密钥体系传输密钥Transport Key用于卡在个人化阶段和发卡系统之间建立安全信道。每张卡出厂后先注入一批传输密钥只有在发卡机构的母钥Master Key参与下才能完成后续操作。应用密钥Application Key卡内支付或门禁应用真正使用的密钥可以是 DES/AES 对称密钥也可以是 RSA/ECC 非对称密钥对。私钥存芯片安全区永不可读。生物特征保护密钥Biometric Key用于加密指纹模板的专用密钥由芯片 TRNG 生成只在芯片内部使用。生产环节的密钥注入是很多项目翻车的高发区。最常见的问题是密钥注入流程不规范导致的母钥泄露。比如产线上通过串口工具往芯片里烧录密钥结果调试串口没禁用后面的测试人员轻轻松松就能读出来。正确做法是使用发卡机配合硬件安全模块HSM通过卡片 OS 提供的INSTALL和STORE KEY指令在安全信道内完成注入产线测试设备永远接触不到明文密钥。我个人还建议在生产阶段额外做一个唯一性自检每张卡在注入密钥后由芯片内部随机生成一个挑战值和外部 HSM 做一次双向认证只有通过认证的卡才允许进入包装环节。这个步骤能筛掉一批芯片内部 RNG 故障或 Flash 初始化异常的坏片避免整批卡发到客户现场才发现问题。4. 安全攻击面分析与防护为什么普通 MCU 扛不住4.1 三类典型攻击路径把生物识别卡看作一个小型安全设备它的攻击面可以分为三类。第一类是物理攻击。攻击者把卡拆开用探针接触芯片引脚或内部总线尝试读取 Flash 里的模板和密钥。这类攻击需要专用设备成本高但对高价值目标如银行卡批量密钥完全值得。Secure MCU 的应对手段是芯片级防护——顶层金属屏蔽网Active Shield会在芯片被 FIB聚焦离子束修改或探针接触时触发短路导致芯片自毁或数据擦除。第二类是侧信道攻击。芯片执行 AES 加密或指纹比对时的功耗波动、电磁辐射会泄露密钥信息。SPA简单功耗分析和 DPA差分功耗分析是经典方法。Secure MCU 内部会做功耗平衡把高功耗操作和随机延时混合让功耗曲线和密钥的关联性降到统计不可区分。第三类是逻辑攻击。攻击者不碰芯片硬件而是通过通信接口发送畸形命令尝试触发缓冲区溢出或越权访问。这就要求卡片操作系统和 Applet 代码必须经过严格的安全评审所有输入长度要校验所有索引访问要加边界检查。4.2 侧信道防护的实际工程做法侧信道防护听起来高大上但在实际项目里就是一组很具体的代码和硬件配合。以 AES 算法为例最容易泄露的是 S-Box 查表操作——查表地址和密钥直接相关功耗曲线上会有明显尖峰。工程上用两种方式规避第一种是掩码Masking。把密钥和明文在运算前分别拆成两个随机共享子分别做 AES最后再合并。这样任何单一运算路径的功耗都和真实密钥无关攻击者至少要分析两条路径的联合分布难度指数级上升。第二种是隐藏Hiding。在算法运行时引入随机中断、随机插入无效循环、随机改变指令执行顺序把功耗曲线对齐打乱。DPA 攻击的前提是多次采样后按触发点对齐平均一旦时序随机化对齐这一步就做不了。我知道很多团队在项目初期完全不重视侧信道觉得我这款卡只是门禁用没人会花几百万美金做 DPA。但一旦你想进入金融级市场无论是 Mastercard 的认证测试还是国内金融芯片的国测要求侧信道测试都是必选项。到那时再回来补硬件防护几乎是重新流片。所以我强烈建议不管目标市场是什么选型时至少选带基础防护的安全 MCU不要省这几毛钱。4.3 卡片生命周期管理从发卡到销毁一个容易被忽略的安全问题是卡片的全生命周期管理。指纹卡里存了用户生物特征一旦卡片丢失或被用户注销这些数据必须能安全销毁。Secure MCU 需要提供标准的生命周期状态机。出厂时是CREATED状态个人化完成后进入INITIALIZED日常使用处于ACTIVATED卡挂失或超过有效期后进入TERMINATED。在TERMINATED状态下芯片会做两件事一是逻辑删除所有应用数据二是将存有指纹模板的 Flash 块执行安全擦除。安全擦除不是简单的写 0xFF正规做法是向所有存储单元写随机数据再写全 0连续做三轮确保数据无法通过电子显微镜残留电荷恢复。这个生命周期状态迁移必须由发卡机构通过安全信道下发指令卡片不能自己主动降级。我见过一个项目在产测阶段误把一批卡的状态从CREATED直接跳到了TERMINATED结果发到客户手里整批卡全部锁死最后只能物理回收。所以状态机相关的代码一定要加防误操作保护比如要求同时校验安全报文和状态跳转路径彻底避免非法跳转。4.4 认证与合规CC EAL 等级到底意味着什么聊到安全芯片CC EAL5这个词几乎绕不开。Common CriteriaCC是国际通用的信息技术安全评估标准EAL 等级从 EAL1 到 EAL7数字越高代表评估越严格。EAL5 意味着芯片在抗物理攻击、侧信道攻击方面已经达到半导体安全芯片商用级别的顶级标准主流的金融安全芯片基本都要过这个等级。做项目时选 CC EAL5 认证过的 Secure MCU 不只是为了满足监管更是给整个系统设计兜底。因为认证不是只针对芯片硬件还会覆盖芯片内嵌的固件库和密码算法实现。你拿到一颗 EAL5 的芯片至少可以确信随机数发生器是真随机的、AES 引擎是侧信道防护过的、总线加密是生效的。这就相当于你请了一个顶尖的验房师帮你检查了房子的结构安全你再装修时只需要关注自己的软装和布线不用从地基开始操心。不过要注意芯片本身的安全认证并不能代表你的应用层代码安全。如果你的 Applet 写得稀烂命令解析有缓冲区溢出就算底层硬件是金刚石做的攻击者也能从软件层面把卡打穿。所以项目里我一般安排两次独立安全评审一次针对底层芯片选型一次针对卡内应用代码。很多团队把这两件事混为一谈最后在认证测试时才被列为失败项白白浪费几轮流片。5. 常见问题与排查实录5.1 问题一指纹识别率低但传感器参数看起来没问题我在项目调试中遇到最多的反馈就是识别率才 80%怎么都提升不上去。排查了一圈传感器 ok算法在 PC 上模拟仿真能达到 99%但一到卡片上就不行。最后定位到两个根因。第一个是注册和使用时的按压力度不一致。注册终端是固定平面用户从容按压日常使用场景是悬空持卡手指可能只按了半边。解决方案是注册时要求手指轻轻按压同时带一定偏转角度使模板包含更多纹理变化。第二个是传感器窗口脏污或表面有保护层导致信号衰减。卡片表面通常会加一层保护膜或覆膜工艺这层材料会改变传感器电极和手指之间的介电常数。我的经验是在选型阶段就拉着传感器原厂做覆膜后性能测试不要等模具都开好了再发现信号不够那时改传感器位置或者换传感器型号都是推倒重来级的改动。5.2 问题二卡片靠近读卡器后不断重启这是无源供电方案最常见的故障卡片一进射频场MCU 刚唤醒开始跑算法电源电压瞬间被拉低芯片掉电重启然后重新上电又开始跑形成重启循环。用户看到的表象是读卡器一直嘟~嘟~嘟响但业务始终完成不了。排查思路分三步。第一步用示波器测卡片端 VCC 波形确认掉电是不是发生在指纹采集瞬间。如果是就是峰值电流超了需要降低传感器采集分辨率或者把采集和比对拆成两个低功耗阶段中间加入缓存。第二步检查天线匹配网络。读卡器输出的射频能量要经过电容和线圈谐振才能高效转换成直流电如果匹配电容偏差超过 5%转换效率会大幅下降。我遇到过一个批次电容来料偏差 20%导致整批卡在部分读卡器上无法工作这类问题在实验室用标准读卡器测不出来只有拿不同品牌 POS 机做兼容性测试才会暴露。第三步确认 MCU 的电源管理策略。有些安全 MCU 默认上电后先跑一遍完整安全启动流程耗时几十毫秒再加上传感器初始化等真正开始干活时用户的读卡动作已经结束了。优化方向是把应用代码放到快速启动的 RAM 区跳过不必要的自检或者使用保留唤醒源把系统状态直接恢复到上次休眠点。这里每个毫秒都要抠因为射频场供电场景下用户从贴近卡片到移开卡片的有效窗口通常不超过 800ms。5.3 问题三量产测试时个别卡片出现安全芯片异常量产测试遇到的安全芯片异常可以分成两类。一类是芯片本身焊接不良比如芯片引脚虚焊、锡珠短路这类问题通常能在产线的 IC 测试ICT环节抓出来。另一类是安全状态寄存器初始化失败表现为卡片通信正常但SELECT命令后就无响应。这种问题往往和静电放电ESD有关——卡片在生产过程中多次接触塑料部件和金属工装产生静电积累在贴合或搬运时通过天线或触点打进芯片导致安全状态寄存器翻转。解决办法是产线全流程增加防静电措施。操作人员穿戴防静电手环贴合机和工作台使用防静电材料卡片托盘也用抗氧化导电材料。质量管控上我建议在每批次产出中抽 2% 的卡片做高低温循环测试-25°C 到 85°C加随机振动测试确保芯片封装在内层应力变化下还能稳定工作。指纹卡比普通银行卡多了一道传感器贴合工序这道工序的应力集中区恰恰就在芯片封装边缘是冷焊和微裂纹的高发地带。5.4 问题四跨品牌读卡器兼容性问题指纹卡和读卡器的兼容性比普通非接卡更敏感因为比对过程需要几百毫秒的连续供电和稳定通信。有些读卡器射频场输出功率偏低天线调谐又比较激进卡片在 3 厘米外能工作但贴近到 1 厘米时反而因为过耦合导致卡片端电压过高进入过压保护然后掉电。排查这类问题我得准备一套参考读卡器矩阵至少包含 3 款不同主控芯片的 POS 机、2 款手机 NFC 模拟终端、1 款工业级读卡模块。测试时记录每种读卡器的通信建立时间、卡端最小工作场强、以及指纹比对成功所需的最短驻留时间。给到天线工程师后他们会调整卡片天线谐振频率和 Q 值在远距离耦合效率和近距离过压保护之间找平衡。6. 几个后续可以继续做的方向开头我说这个领域坑多但它的技术延伸性也强光是指纹卡这一个形态就有很多可玩的空间。最后聊聊几个我观察到的扩展方向都是拿现成的 Secure MCU 和安全架构就可以往下延伸的。第一个方向是多因素融合卡片。指纹只是生物特征的一种同一颗安全 MCU 完全可以同时处理指纹和指静脉数据。指静脉识别比指纹更难伪造而且不受手指干湿影响适合门禁等级更高的场景。只要传感器模组厚度允许安全 MCU 的存储空间可以同时管理两种模板认证时可以按安全等级选择指纹或指静脉指纹加指静脉两种组合方式。第二个方向是卡内操作系统的远程升级。金融卡一旦发出去要改卡内逻辑非常困难。但如果安全 MCU 预留了足够的 Flash 空间和升级引导程序并通过安全认证信道下发新固件就能实现卡片应用热更新。这在数字人民币钱包、动态 CVV、卡内风险控制等场景里都有明确需求。不过远程升级的安全风险很高必须设计好回滚保护和防降级攻击策略否则升级通道本身就会变成新的攻击面。第三个方向是边缘身份与区块链结合。生物识别卡本质上是一种分布式终端身份验证设备卡片在本地完成生物识别输出的签名结果可以作为链上操作的授权凭证。如果你在 Secure MCU 里预置一个 ECC 密钥对指纹比对通过后直接用私钥对交易哈希签名就能做一张需要指纹才能转账的硬件钱包。这个方向技术上难度不大难的是产品定义和合规评审。我个人的体会是做这类安全智能卡项目最难的不是某个单点技术而是把安全思维贯穿到产品定义的每一个环节。芯片选型要懂硬件攻击固件开发要懂密码学工程生产测试要懂 ESD 防护认证申请要懂 Common Criteria 的评估方法一个环节掉链子整个产品周期都会被拉长甚至推翻。但正因为门槛高一旦做出来竞争壁垒也高。一篇博文很难讲尽全部细节如果你正好在做相关项目卡在哪个环节过不去可以顺着我上面说的思路去逐一排查这套方法论至少能帮你避免几周的无头调试。
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进