ARTICLE · INTELLIGENCE

战地情报 · 详情页

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

QCC系列PIN Code自研方案:腾泰技术实现配对弹窗与回连灵活控制

QCC系列PIN Code自研方案:腾泰技术实现配对弹窗与回连灵活控制 前言在高通QCC系列芯片的开发中蓝牙配对的准入控制一直是一个被低估、却又真实存在的需求。从QCC5171、QCC5181到最新的QCC3095高通在蓝牙5.2版本之后已经正式终止了对传统PIN Code配对的原生支持。官方文档、ADK代码注释以及论坛回复均明确指出QCC3084、QCC5181、QCC3095等芯片不再支持PIN Code配对方式传统ADK中修改PIN Code的方法已经失效。这意味着如果你正在使用QCC3095或QCC5181开发蓝牙音频设备想要实现“只有知道PIN Code的人才能连接”高通原生协议栈无法提供任何帮助。腾泰技术基于对高通蓝牙协议栈的深度理解完全自研实现了这一功能并在此基础上增加了配对弹窗输入、回连可选验证、UART/HID动态修改等灵活特性。本文将以QCC3095和QCC5181为例详细解析腾泰PIN Code方案的技术实现、技术选型理由以及典型应用场景。一、为什么PIN Code在某些场景下不可替代蓝牙配对技术从早期的PIN Code演进到SSP之后Just Works模式让配对变得无感Numeric Comparison和Passkey Entry提供了不同程度的安全保障。但在实际产品部署中以下场景仍然强烈依赖PIN Code场景一共享空间中的设备独占一台部署在开放式办公区、咖啡厅或展厅的蓝牙接收器如果使用Just Works模式周围任何开启蓝牙的手机都能随时连接并接管音频输出。误连、抢占、恶意连接等问题频发。通过PIN Code设备管理者可以将PIN码告知特定使用者只有持有正确PIN码的人才能完成配对。场景二车载蓝牙的兼容性需求部分车型的车载蓝牙系统仍然要求输入四位以上的PIN Code才能完成配对这是旧版蓝牙协议的遗留要求。采用高通5.2以上芯片的设备如果完全不支持PIN Code在这些车型上将无法连接。腾泰的PIN Code方案恰好填补了这一兼容性缺口。场景三多设备管理中的权限区分在需要区分“管理员设备”和“访客设备”的场景中PIN Code天然充当了一道轻量级但有效的准入屏障。知道PIN码的人获得完整连接权限不知道的人无法完成配对。场景四与Auracast私有广播形成双层控制腾泰技术此前在Auracast私有广播方案中已经解决了“广播准入控制”的问题——通过Broadcast Code控制谁能加入广播流。但在经典蓝牙配对层面如果设备不设限制任何人仍然可以直接连接设备。PIN Code与Broadcast Code结合构成了完整的设备级安全体系。正如我们在Auracast博客中强调的如果连接的手机不做限制则其他人也可以连接所谓“私有”无从谈起。PIN Code解决的正是经典蓝牙连接层面的“私有”问题。二、高通原生限制与腾泰完全自研2.1 高通原生协议栈的限制高通QCC系列芯片从蓝牙5.2版本开始协议栈全面转向BLE和SSP配对框架。在QCC5171、QCC5181、QCC3095的固件架构中传统的PIN Code交互逻辑已被移除L2CAP层不再响应来自远端的PIN Code请求。这意味着无法通过ADK配置开启PIN Code配对无法通过修改旧接口实现PIN Code官方明确回复“不支持”。2.2 腾泰自研实现路径腾泰技术的实现路径是在应用层重建PIN Code配对流程核心思路如下第一步拦截配对请求当远端手机发起配对请求时QCC芯片在L2CAP连接建立阶段进行拦截。经典蓝牙配对流程中两台设备首先建立ACL链路和L2CAP连接随后才进入配对验证环节。腾泰固件在L2CAP层插入自定义处理逻辑将原本可能直接以Just Works方式完成的配对流程重定向到PIN Code验证分支。第二步构建PIN Code交互通道由于高通协议栈不再原生处理PIN Code腾泰技术自研了一套PIN Code协商机制。当配对请求被拦截后固件通过自定义的交互协议向远端设备发起PIN Code请求。远端设备手机上弹出PIN Code输入框用户输入后PIN Code通过蓝牙链路回传至QCC芯片端由固件进行比对验证。第三步验证通过后完成配对PIN Code比对成功后固件继续调用高通协议栈的配对完成流程生成链路密钥并保存配对信息。后续该设备的再次连接将根据配置决定是否需要再次输入PIN Code。这一实现路径的关键难点在于高通协议栈的配对流程封装在固件内部外部应用无法直接干预。腾泰技术通过Hook机制在协议栈的配对回调点注入自定义逻辑在不破坏原有协议栈完整性的前提下实现了PIN Code的插入。三、技术选型为什么不用BLE也不用SPP在实现PIN Code准入控制时业内常见思路有两种通过BLE GATT服务设置PIN Code通过SPP通道下发PIN Code。腾泰技术没有选择这两种方式原因非常明确。3.1 BLE设置可能被泄漏、被破解、被绕过BLE方案通常是通过一个GATT服务写入PIN Code或者通过BLE连接开关PIN Code功能。但在实际安全模型中BLE存在几个问题BLE连接可能无需经典蓝牙配对即可建立如果GATT特征未加密PIN Code可能被直接读取或篡改如果采用Just Works配对BLE链路缺乏中间人防护密钥交换可能被嗅探BLE广播和扫描过程中设备信息可能被第三方获取攻击者一旦连上BLE服务甚至可能直接修改PIN Code准入控制形同虚设。因此BLE适合做配置通道但不适合做“连接准入”的安全根。把PIN Code放在BLE层存在被泄漏、被破解、被绕过的风险。3.2 SPP设置必须先配对所以没有意义SPP基于经典蓝牙RFCOMM而RFCOMM通道必须建立在ACL链路和配对完成之后。也就是说如果设备未配对根本连不上SPP如果能通过SPP设置PIN Code说明设备已经完成配对已经完成配对就意味着已经获得了连接权限。用一个必须“先配对才能使用”的通道去设置“阻止未配对设备连接”的PIN Code逻辑上自相矛盾。门已经开了再装锁没有意义。3.3 腾泰的选择在经典蓝牙配对层拦截PIN Code必须在信任建立之前验证而不是在配对之后设置。腾泰技术选择在经典蓝牙配对流程的L2CAP层和配对回调点进行拦截在生成Link Key之前要求PIN Code验证。验证发生在准入之前才是真正的准入控制。PIN Code本身则通过UART或HID配置不依赖蓝牙通道避免被远端设备窃取或篡改。方案验证时机能否阻止未授权连接主要问题BLE GATT设置配对后或独立连接弱可能被泄漏、破解、绕过SPP设置必须已配对无意义未配对连不上已配对无需PIN腾泰经典配对层PIN配对前强高通原生不支持需完全自研四、配对弹窗输入密钥手机端原生体验腾泰PIN Code方案最直观的特性是配对时手机端会自动弹窗要求用户输入PIN Code。这一交互与早期蓝牙耳机、车载系统的PIN Code配对体验完全一致用户无需安装任何额外App也无需进行复杂设置。具体流程如下手机搜索到QCC设备点击配对QCC设备固件拦截配对请求向手机发起PIN Code请求手机系统弹出PIN Code输入框Android和iOS均支持用户输入预设的PIN Code如“1234”或“888888”QCC固件比对PIN Code正确则完成配对错误则拒绝连接配对成功后手机端显示设备已连接。PIN Code长度支持腾泰方案支持4位至16位PIN Code满足不同安全等级需求。短PIN码便于记忆长PIN码提供更高安全性。错误处理连续输入错误PIN Code达到设定次数后设备可自动进入拒绝配对状态一段时间防止暴力破解。五、回连行为可选配置灵活满足不同用户需求配对成功后的回连行为是腾泰PIN Code方案的另一大亮点。在实际项目中不同用户对回连是否需要再次输入PIN Code有着截然不同的需求部分用户希望每次连接都输入PIN Code例如共享设备、临时借用场景确保每次连接都经过授权部分用户希望回连时自动连接不再输入例如个人专属设备配对一次后永久信任体验更流畅。腾泰方案同时支持这两种模式并可通过UART或HID动态配置。5.1 回连验证模式模式行为适用场景模式A每次连接均需验证每次回连都弹窗要求输入PIN Code共享设备、高安全场景模式B首次配对验证回连免验证首次配对输入PIN Code后续回连自动连接个人设备、便捷体验模式C回连验证可配置通过UART/HID指令动态切换A/B模式需要灵活调整的场景5.2 配置方式通过UART发送指令即可切换回连验证模式textSET_RECONNECT_PIN1 // 回连需要输入PIN Code SET_RECONNECT_PIN0 // 回连免输入自动连接通过HID事件同样可以配置例如在设备UI中提供“回连验证”开关。这种灵活性使得同一款硬件产品可以适配不同客户的需求无需重新编译固件。六、UART与HID双通道动态修改PIN Code腾泰技术的PIN Code方案支持通过UART或HID两种方式动态修改PIN CodePIN Code不需要在固件编译时硬编码而是可以在设备运行过程中灵活调整。6.1 UART通道设备通过UART串口接收来自外部MCU或PC端的指令。例如textSET_PIN1234\r\n // 将PIN Code设置为1234 SET_PIN888888\r\n // 将PIN Code设置为888888 GET_PIN\r\n // 查询当前PIN Code优势主控MCU可以根据业务逻辑动态决定PIN Code。例如酒店房间的蓝牙音箱可以在退房后自动更换PIN Code新入住的客人获得全新PIN Code。6.2 HID通道对于带有触摸屏或按键的设备PIN Code也可以通过HID事件进行修改。用户在设备本体的UI界面上进入设置菜单输入新的PIN Code固件通过HID事件捕获输入内容并更新存储。优势适用于没有外接MCU的独立设备形态用户可直接在设备上操作。6.3 存储与持久化修改后的PIN Code保存在设备的非易失性存储中掉电不丢失设备重启后依然生效。七、与Auracast私有广播的协同价值腾泰技术此前在Auracast私有广播方案中已经解决了“广播准入控制”的问题。在Auracast场景下私有广播通过Broadcast Code实现访问控制——只有知道Broadcast Code的接收端才能解密并加入广播流。而在经典蓝牙配对场景下PIN Code则扮演了类似的角色它是设备连接层面的“准入凭证”。两者结合构成了一个完整的设备级安全体系Auracast层Broadcast Code控制谁能加入广播流经典蓝牙层PIN Code控制谁能完成配对连接。对于同时支持Auracast广播和经典蓝牙连接的QCC3095/QCC5181设备这两层准入控制可以独立配置也可以联动使用。例如在展厅场景中主办方可以通过Broadcast Code控制Auracast广播的听众范围同时通过PIN Code控制哪些设备可以作为经典蓝牙音频源连接到展厅的功放系统。八、方案优势总结维度腾泰PIN Code自研方案高通原生方案PIN Code支持完整支持4~16位长度蓝牙5.2已终止支持配对弹窗手机原生弹窗输入不支持回连行为可选每次验证 / 免验证 / 动态切换不适用动态修改UART/HID双通道不支持配对记忆支持首次验证后按配置决定回连行为不适用与Auracast联动支持双层准入控制不支持芯片覆盖QCC3095/QCC5181等全系列仅蓝牙5.2以下部分支持腾泰PIN Code方案的核心优势在于灵活性配对时弹窗输入回连时可选验证PIN Code可通过UART或HID动态修改。同时方案没有选择BLE或SPP作为PIN Code设置通道因为BLE存在泄漏和破解风险SPP必须先配对所以没有意义。腾泰选择在经典蓝牙配对层、信任建立之前完成PIN Code验证这才是真正有效的准入控制。结语高通QCC系列芯片原生不支持PIN Code这是既定事实。但需求不会因为芯片不支持而消失。腾泰技术通过完全自研的方式在QCC3095、QCC5181等芯片上实现了完整的PIN Code配对方案并增加了配对弹窗、回连可选验证、UART/HID动态修改等灵活特性。如果您的产品需要实现蓝牙连接的PIN Code准入控制或者需要将PIN Code能力与Auracast私有广播方案进行协同设计欢迎与腾泰技术团队联系。我们提供从固件定制、硬件设计到量产工具的全链路支持。腾泰技术让蓝牙连接更可控。
RELATED READING

延伸阅读

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