TI bq26100硬件认证芯片:基于SHA-1/HMAC的电池安全方案与评估软件实战
1. 项目概述与核心价值在嵌入式硬件开发尤其是涉及电池供电的设备领域如何确保连接到主机的电池组是原装、安全且未被篡改的一直是个既基础又关键的挑战。想象一下你设计了一款高端的医疗设备或电动工具如果用户随意更换一个廉价的、电芯质量不明的第三方电池轻则导致设备性能不稳定、续航缩水重则可能引发安全问题甚至损坏主机。因此硬件级别的身份认证机制就成为了保护产品生态、确保用户体验和安全的“守门员”。德州仪器TI的 bq26100 芯片正是为解决这一问题而生的专用认证芯片。它不像通用MCU那样需要复杂的软件和算法库而是将 SHA-1/HMAC 认证算法、128位唯一密钥存储以及相关的通信协议都固化在硅片里为电池包或其它外围设备提供了一个低成本、高安全性的“数字身份证”。而 bq26100 评估软件EVSW和配套的评估板EVM则是我们工程师拿到这颗芯片后快速理解其工作原理、验证认证流程、并进行密钥烧录测试的“瑞士军刀”。这篇文章我将结合官方文档和实际调试经验为你彻底拆解 bq26100 评估软件的使用方法并深入浅出地讲明白其背后的 SHA-1/HMAC 认证原理。无论你是正在选型的系统架构师还是负责具体实现的嵌入式软件工程师亦或是进行电池包设计的硬件工程师都能从中获得可直接上手操作的干货。我们会从硬件连接开始一步步走到完整的认证测试并重点分享那些数据手册里不会写的实操细节和避坑指南。2. 核心安全原理SHA-1/HMAC 如何为硬件“上锁”在直接动手操作软件之前我们必须先搞懂 bq26100 的“大脑”是如何工作的。它的核心是一个基于 SHA-1 的 HMACHash-based Message Authentication Code基于哈希的消息认证码算法引擎。理解了这个你才能明白后续每一个操作步骤的真正意图。2.1 从哈希到消息认证码单向门的妙用首先SHA-1 是一种密码学哈希函数。你可以把它想象成一个高度复杂且不可逆的“单向榨汁机”。你输入任意长度的“水果”数据它都会输出一个固定长度160位即20字节的“果汁”哈希值。这个过程的特性是确定性同样的输入永远产生同样的输出。雪崩效应输入哪怕只改变一个比特输出结果也会变得面目全非。单向性从输出的“果汁”你几乎不可能反推出原始的“水果”是什么。如果只用 SHA-1 对一段消息做哈希只能验证消息的完整性是否被篡改但无法验证消息的来源。这时 HMAC 登场了。HMAC 在计算哈希时引入了一个密钥Key。只有拥有相同密钥的双方才能对同一段消息计算出相同的哈希值。这样输出的结果称为 MAC 或摘要就同时具备了完整性校验和身份认证双重功能。在 bq26100 的应用场景中密钥Key是一个128位16字节的密码在芯片生产时被写入其 OTP一次性可编程存储器中且无法从外部读取。这是每个电池包的“绝密身份信息”。消息Message由认证发起方主机比如你的设备主板生成的一段随机或特定的数据长度也是160位20字节。每次认证都可以不同防止重放攻击。摘要Digestbq26100 芯片内部使用其存储的密钥对主机发来的消息进行 HMAC-SHA1 运算得到一个160位的计算结果。2.2 bq26100 的认证握手流程整个认证过程就像一次秘密接头暗号核对主机发起挑战主机生成一个随机的160位消息通过单线通信接口SDQ发送给 bq26100。芯片内部计算bq26100 收到消息后在芯片内部使用其 OTP 中存储的、外界无法读取的128位密钥对该消息进行 HMAC-SHA1 计算得到160位的摘要Digest。主机并行计算与此同时主机也在用自己的软件或硬件算法使用它认为正确的、与芯片内部匹配的128位密钥对同一个消息进行计算得到另一个160位摘要。核对暗号主机通过命令读取 bq26100 计算出的摘要。验证结果主机比较自己算出的摘要和从芯片读回的摘要。如果完全一致证明 bq26100 芯片内部的密钥与主机持有的密钥一致认证成功。电池包被判定为“原装正品”。如果有任何不一致认证失败。主机可以采取相应措施如拒绝充电、降低充电功率、或报警。关键点与避坑提示密钥的绝对保密性整个系统的安全基石在于密钥的保密。一旦密钥泄露任何仿冒电池都能通过认证。因此密钥的生成、分发和烧录必须在严格受控的环境下进行。评估软件中的“随机生成”功能仅用于演示和测试实际生产必须使用安全的真随机数生成器并且密钥一旦烧录OTP永远无法读取或更改。为何选择 SHA-1虽然 SHA-1 在密码学领域因其潜在的碰撞漏洞已不推荐用于数字签名等场景但在 HMAC 结构中其安全性仍然是足够的HMAC 的安全性依赖于哈希函数的抗碰撞性要求较低。对于电池认证这类资源受限、成本敏感的嵌入式应用SHA-1 HMAC 在安全性、芯片面积和功耗之间取得了很好的平衡。消息的随机性每次认证使用随机消息至关重要。如果每次都发送相同的消息攻击者可能通过窃听通信记录下正确的“挑战-响应”对进行重放攻击。评估软件的“随机消息生成”功能正是为此设计。3. 评估套件硬件连接与配置要点工欲善其事必先利其器。要运行评估软件首先得把硬件环境搭建好。官方套件主要包含三部分bq26100EVM 模块HPA170板、PC接口板EV2300和运行软件的PC。3.1 硬件清单与连接图解读根据文档中的图6和表格连接的核心逻辑如下供电部分主电源需要一个7V直流电源连接到 HPA170 板的7V和VSS地端子。这个电源仅在需要对芯片的 OTP 存储器进行编程时才需要用于产生高压编程脉冲。正常通信和认证时不需要。芯片工作电源bq26100 芯片本身的工作电压VCC由 EV2300 接口板通过VOUT引脚提供通常是3.3V。在连接线束中通常红/橙色线是VOUT3.3V黑色线是GND。密钥编程特殊供电文档中提到在编程密钥时还需要一个额外的约3.3V电源串联一个100Ω电阻和一个二极管如1N4148后连接到板上的PWR测试点。这是一个非常容易忽略的细节很多人在第一次尝试烧录密钥失败时问题就出在这里。信号连接通信线SDQ这是 bq26100 与主机通信的唯一数据线采用单总线协议。连接 HPA170 板的SDQ端子到 EV2300 的HDQ接口通常用棕色线。编程使能PROG连接 HPA170 板的PROG端子到 EV2300 的VOUT通常用白色线。当需要 OTP 编程时评估软件会控制 EV2300 通过此线路配合7V电源产生高压脉冲。地线VSS确保所有电源地和信号地共地连接 HPA170 的VSS到 EV2300 的GND黑色线。跳线设置J3OTP 编程跳线。当你需要对 OTP 存储器包括密钥和状态字节进行写操作时必须短接此跳线。它使能了板上的高压脉冲发生电路。在仅进行读操作或普通认证时可以断开。J4外部上拉电阻跳线。EV2300 接口板内部已经在 SDQ 线上集成了一个10kΩ上拉电阻。因此当你使用 EV2300 进行通信时此跳线必须断开。如果你绕过 EV2300直接用 MCU 的 GPIO 与 bq26100 通信并且你的 MCU 端口没有内部上拉或上拉较弱则需要短接 J4并从PACK端子提供一个上拉电压通常为3.3V或5V。实操心得与硬件陷阱电源顺序建议先连接好所有信号线最后再接通电源特别是7V高压电源。突然的电压冲击可能损坏芯片。EV2300 的红色线文档警告如果 EV2300 线束中有一根红色线它可能连接到3.3V输出。如果不需要应将其屏蔽或剪断避免意外短路。最稳妥的方法是使用万用表确认每根线的功能。100Ω电阻与二极管在搭建密钥编程所需的额外3.3V供电时务必确保100Ω电阻和二极管阴极朝向芯片PWR引脚正确串联。这个电路的作用是限制编程期间的电流保护芯片。忽略它可能导致编程失败或芯片损坏。接地的重要性务必确保 PC、EV2300、HPA170 板和所有外部电源的“地”是连接在一起的。接地不良是导致通信不稳定、软件无法识别设备的最常见原因之一。3.2 软件安装与驱动问题排查软件安装本身按照文档步骤即可先安装 EV2300 的 USB 驱动程序再安装 bq26100 评估软件。但在 Windows 10/11 系统上你可能会遇到驱动签名问题。常见问题与解决设备管理器中出现黄色感叹号如果 EV2300 连接后无法识别通常是因为 Windows 强制要求驱动签名。解决方案适用于Windows 10/11前往“设置”-“更新与安全”-“恢复”-“高级启动”下的“立即重新启动”。重启后选择“疑难解答”-“高级选项”-“启动设置”-“重启”。重启后按数字键7或F7选择“禁用驱动程序强制签名”。系统启动后再尝试重新安装 EV2300 驱动。注意此设置仅在本次启动有效。下次正常启动后强制签名会再次启用但已安装的驱动通常可继续工作。安装成功后启动软件如果 EV2300 和 HPA170 板连接正确且供电正常软件界面应该能正常打开而不会持续报USB连接错误。4. 评估软件深度操作解析软件启动后你会看到几个标签页对应不同的功能模块。我们按照从基础到高级的顺序来解析。4.1 ROM CMD 页面与芯片“打招呼”这个页面处理的是 SDQ 单总线协议底层的 ROM 命令用于识别总线上的器件。bq26100 像很多单总线器件一样有一个唯一的64位 ROM ID。Application 模式Single Device如果你的板上只有一个 bq26100 芯片就选这个。软件在每次通信前会自动发送SKIP ROM命令跳过寻址直接与器件对话。Multiple Devices如果总线上有多个 bq26100比如在测试多个电池包模拟器时必须选这个。你需要先用SEARCH ROM功能找出所有器件ID然后用MATCH ROM指定你要操作哪一个。SEARCH ROM点击按钮软件会执行搜索算法将总线上所有 bq26100 的64位 ROM ID 列在下方列表中。这是检测硬件连接是否成功的最直接方法。如果点击后列表为空99%的可能是硬件连接电源、地线、SDQ线有问题。READ ROM在单器件模式下直接点击即可读取该器件的 ROM ID。MATCH ROM在多器件模式下你需要从搜索到的列表中复制一个 ID粘贴到输入框点击“Select Device”。之后所有的操作读数据、认证等都只会针对这个选中的器件。注意事项 SDQ 总线对时序要求严格。如果通信不稳定除了检查硬件连接还可以尝试降低通信速率虽然软件没提供直接选项但 EV2300 的驱动或固件可能有限制。确保信号线不要太长并远离噪声源。4.2 DATA 页面OTP 与 EEPROM 的读写这是配置芯片的核心页面。bq26100 内部有两块重要的非易失性存储器OTP 和 EEPROM。4.2.1 OTP一次性可编程存储器这是芯片的“熔丝”区域一旦写入位只能从1变成0不能再变回1且内容不可擦除。它存储了最核心的安全数据128位认证密钥存储在受保护的 OTP 区域无法被直接读取。状态字节控制存储区的写保护等。其他用户数据5页 x 32字节的空间可用于存储电池序列号、生产日期等信息。操作要点硬件准备进行任何 OTP写入操作前必须确保7V 编程电源已正确连接。J3 跳线已短接。EV2300 的VOUT已连接到 HPA170 的PROG。读取点击“Read OTP”可以读取全部5页内容。正在读取的页码会显示为红色。写入手动写入直接在数据网格中双击某个地址输入16进制值如A5然后按回车。务必谨慎OTP 写入不可逆。建议先完整读取并保存现有数据。文件导入写入这是生产环境推荐的方式。你可以提前准备好一个.otp格式的文本文件通过File - Open OTP File导入数据会填充到网格然后点击“Write OTP”一键写入。软件安装目录下有一个示例文件展示了文件格式通常是地址-数据对。文件比对写入后可以使用“Compare w/File”功能将芯片中的 OTP 数据与你本地的.otp文件进行逐字节比对确保烧录无误。4.2.2 EEPROM 存储器这是一个16字节的可重复擦写存储器。与 OTP 不同写入 EEPROM不需要7V高压直接通过 SDQ 通信即可完成。它通常用于存储一些可能需要更新的信息比如电池循环次数、校准参数等。操作方式与 OTP 类似支持手动修改和文件.eep格式导入/导出/比对。核心避坑指南OTP 写入失败分析 OTP 写入失败是调试中最常见的问题。如果点击“Write OTP”后软件提示失败或校验错误请按以下顺序排查高压电源确认首先用万用表测量 HPA170 板上7V和VSS之间的电压确保在编程瞬间有稳定的7V或略高如7.2V电压。有些电源在脉冲负载下电压会跌落。跳线 J3百分之百确认 J3 已用短路帽或焊锡短接。PROG 连线确认 EV2300VOUT到 HPA170PROG的白色线连接可靠。时序与电源稳定性OTP 编程对高压脉冲的宽度和时序有严格要求。评估软件和 EV2300 已经处理好了这一点。但如果你的7V电源质量太差纹波大、响应慢也可能导致失败。尝试更换一个更稳定的线性电源或质量好的开关电源。芯片是否已锁检查 STATUS 页面见下文确认你要写入的 OTP 页是否已经被写保护。如果保护位已设置对应页的写入操作会被硬件拒绝。4.3 STATUS 页面管理写保护这个页面用于读写 OTP 的状态字节。状态字节本身也是 OTP一旦置位就无法清除所以操作时要格外小心。功能状态字节中的位主要用于设置 OTP 存储区的写保护。例如你可以设置某个位来永久保护存储了密钥的 OTP 页防止被意外或恶意覆盖。操作可以直接在网格中修改值或使用软件提供的便捷按钮如“Write Protection Bits”来设置特定的保护位。重要警告在密钥KEY烧录完成后评估软件会自动设置相应的LOCKK0或LOCKK1状态位分别对应密钥的低64位和高64位以防止密钥被重新编程。在实际产品中你必须仔细规划哪些数据需要保护并在烧录流程的最后阶段设置这些保护位。4.4 AUTH 页面完整的认证实战这是整个软件最体现价值的页面在这里你可以模拟完整的认证流程。标准认证操作步骤输入密钥在“Authentication Key”输入框填入你已烧录到 bq26100 芯片 OTP 中的那个128位密钥16字节32个16进制字符。重要密钥本身无法从芯片中读出你必须自己妥善记录。软件提供了从 KEY PGM 页面复制密钥的快捷按钮。生成并发送挑战消息点击“Generate Random Msg”软件会生成一个随机的160位20字节消息。点击“Send Msg to bq26100”将这个随机消息发送给芯片。启动认证计算点击“AUTH”按钮。这个操作会向芯片发送命令触发其内部的 HMAC-SHA1 计算。与此同时评估软件也会在后台使用你刚才输入的密钥和生成的随机消息独立计算一次 HMAC-SHA1。比对与验证芯片计算完成后软件会读取芯片的“DIGEST Register”摘要寄存器。软件界面会并排显示两个结果“Digest Calculated by bq26100”芯片算的和 “Digest Calculated by EVSW”软件算的。如果两者完全一致下方会显示“Authentication PASSED”。如果不一致则显示“Authentication FAILED”。测试与验证技巧正向测试使用正确的密钥认证应100%通过。反向测试必须做故意输入一个错误的密钥然后重复认证流程。此时你必须看到“Authentication FAILED”。这个测试是为了验证你的系统在密钥不匹配时确实能正确识别并拒绝。消息敏感性测试使用正确的密钥但在点击“AUTH”前手动修改一下“Message”框中的一两个字符再执行认证。由于 SHA-1 的雪崩效应结果应该完全失败。这验证了认证过程对消息的敏感性。4.5 KEY PGM 页面密钥烧录的终极步骤这是整个评估流程中最关键、也最容易出错的一步。密钥烧录的本质是向芯片的 OTP 区域写入一个由两个64位消息通过特定算法衍生出的128位密钥。硬件特殊准备再次强调 在进行密钥编程前除了 OTP 编程所需的7V电源和 J3 跳线必须按照图6所示准备一个额外的3.3V电源串联一个100Ω电阻和一个二极管如1N4148阴极朝向芯片连接到 HPA170 板的PWR测试点。缺少这个电路密钥烧录必定失败。两种密钥生成/编程模式随机消息生成Random在“Message Generation”部分选择“Random”。在“Key to program”中选择要编程的部分Lower 64bits, Higher 64bits, 或 Both。点击“Generate Key”。软件会生成随机消息并自动完成向芯片的编程。编程成功后生成的密钥会显示在下方“Generated Key”框中。你必须立即、妥善地保存这个密钥因为芯片无法再读出它。用户输入消息User Input在“Message Generation”部分选择“User Input”。手动输入两个64位8字节16个16进制字符的消息到“Message 0”和“Message 1”框中。选择要编程的密钥部分点击“Generate Key”。这种方式适用于生产环节你可能希望从一个安全的随机数源生成消息然后在此输入确保密钥的可控性。关键操作与风险提示“Transfer Key”按钮点击后会将刚刚生成的密钥自动复制到 AUTH 页面的密钥输入框方便你立即进行认证测试。锁定机制软件在成功编程密钥的每一半低64位或高64位后会自动设置对应的状态锁定位LOCKK0/LOCKK1。这是一个安全功能防止密钥被二次编程。但在实际产品中你需要确认这个自动锁定的行为是否符合你的生产流程例如你是否需要先烧录密钥测试通过后再手动锁定。密钥备份编程成功后显示的密钥是你唯一一次看到它的机会。务必将其记录在安全的地方如加密的生产记录系统。一旦忘记这颗芯片就无法再用于认证只能报废。分步编程你可以选择只编程“Lower 64bits”或“Higher 64bits”。这在某些特殊调试场景下有用但最终你必须编程完整的128位密钥才能用于认证。5. 从评估到量产工程实践中的关键考量评估软件让我们在桌面上验证了技术的可行性但要将 bq26100 集成到真实产品中还有很长的路要走。以下是几个必须考虑的工程实践要点。5.1 生产烧录流程设计量产时你不可能为每个电池包连接 EV2300 和运行 PC 软件。你需要设计自动化的烧录工装。密钥注入密钥必须在安全的环境中生成如使用硬件安全模块 HSM并通过加密通道传输到烧录工装。工装上的主控 MCU 需要实现 bq26100 的 SDQ 通信协议和 OTP 编程时序。OTP 编程算法你需要根据数据手册用 MCU 的 GPIO 模拟 SDQ 协议并精确控制7V高压脉冲的时序来实现 OTP 写入。这个过程比评估软件通过 EV2300 完成要复杂得多需要仔细调试。自动化校验烧录后工装应自动读取 OTP 中可读的部分如状态字节、用户数据区并与预期值比对。对于密钥则需执行一次完整的认证流程工装生成随机挑战消息发送给 bq26100读取响应摘要并与工装本地计算的正确摘要比对。只有认证通过电池包才能流出产线。数据追溯将烧录成功的芯片 ROM ID、对应的密钥索引或哈希值、生产时间戳等信息关联记录便于后续溯源。5.2 主机端设备主板集成在产品主机端你需要实现认证逻辑。通信驱动在主机 MCU 上实现 SDQ 单总线协议驱动程序。协议本身不复杂但时序要求严格需注意中断屏蔽和延时精度。SHA-1/HMAC 算法软件实现如果主机 MCU 性能足够如 Cortex-M3/M4 及以上可以移植一个轻量级的 SHA-1 算法库并在软件中完成 HMAC 计算。优点是成本低灵活性高。硬件加速如果主机 MCU 有硬件加密模块如 AES/SHA 加速器应优先使用速度更快且更安全。预计算在某些对认证速度要求极高的场景可以考虑预计算。主机生成一个随机数后可以同时计算多个可能密钥对应的 HMAC如果密钥数量有限但这会增加软件复杂性和存储开销。密钥管理主机端用于比对的正确密钥必须安全存储。可以考虑存储在 MCU 的只读存储区、加密的 Flash 中甚至使用专用的安全芯片SE来存储和进行 HMAC 运算。认证策略何时认证上电时、充电开始时、周期性地如每小时失败处理认证失败后是彻底禁止充电/放电还是限制功率或仅记录日志并报警错误重试网络通信可能有干扰建议设计1-2次重试机制但重试次数不宜过多以防暴力破解。5.3 常见故障排查速查表在实际开发中你会遇到各种问题。下表汇总了典型问题及排查思路问题现象可能原因排查步骤软件无法连接ROM CMD 搜索无结果1. 硬件连接错误或松动2. 电源未接通3. EV2300 驱动未正确安装4. SDQ 上拉电阻问题1. 检查所有连线特别是 VCC, GND, SDQ。2. 用万用表测量 HPA170 板 VCC 对地电压是否为 ~3.3V。3. 检查设备管理器重新安装 EV2300 驱动禁用驱动签名。4. 确认使用 EV2300 时 J4 跳线断开。可以搜索到 ROM ID但无法读取 OTP/EEPROM1. 通信时序不稳定2. 电源噪声大3. 芯片损坏1. 缩短连接线远离干扰源。2. 检查电源纹波在 VCC 附近增加滤波电容如10uF。3. 更换芯片尝试。OTP 写入失败1. 7V 编程电源未接或电压不足2. J3 跳线未短接3. PROG 线未连接4. 目标 OTP 页已被写保护1. 确认7V电源已开启并测量电压。2. 确认 J3 已短接。3. 检查 EV2300 VOUT 到 PROG 的白色线。4. 检查 STATUS 字节的写保护位。密钥编程失败1. 上述 OTP 写入失败的所有原因2.未连接额外的 3.3V (PWR) 编程电源3. 100Ω电阻和二极管连接错误1. 按 OTP 写入失败排查。2.重点检查是否按照图6搭建了 PWR 引脚的特殊供电电路。3. 确认二极管方向阴极接芯片 PWR。认证AUTH一直失败1. AUTH 页面输入的密钥与芯片内烧录的密钥不一致2. 消息Message在发送和计算间被意外修改3. 芯片内的密钥未成功烧录1. 仔细核对输入的32位16进制密钥确保无误。可从 KEY PGM 页面使用“Transfer Key”。2. 使用软件“Generate Random Msg”和“Send Msg”按钮避免手动输入错误。3. 返回 KEY PGM 页面确认密钥已成功生成并编程有成功提示。认证间歇性失败1. 电源波动导致计算错误2. SDQ 通信受到干扰3. 主机端 HMAC 计算算法有误1. 加强电源滤波。2. 检查 PCB 布局SDQ 线远离噪声源可考虑串联小电阻如22Ω。3. 使用标准的、经过验证的 SHA-1 算法库并确保 HMAC 的填充和分组操作正确。5.4 安全增强建议与局限性认识bq26100 提供了基础的认证功能但在面对高等级威胁时需要系统级的设计来补充。密钥多样性不要所有产品使用同一个密钥。应为每个电池包或每批产品烧录不同的密钥并建立密钥管理系统。认证频率与随机性提高认证频率并使用高质量的随机数生成器产生挑战消息增加攻击难度。物理防护电池包封装应具备防拆解设计一旦外壳被打开应能触发自毁机制或清除密钥如果设计支持防止攻击者通过物理探针读取芯片信号或数据。了解局限性bq26100 是认证芯片不是加密芯片。它只能回答“你是不是我认识的那个设备”不能用于加密传输数据。其通信总线SDQ上的数据是明文的虽然密钥不传输但挑战和响应是可见的理论上存在被窃听和重放的风险通过使用随机挑战可有效防御。对于需要数据保密性的应用需要额外的加密芯片。回过头看bq26100 评估软件不仅仅是一个演示工具它更是一个强大的学习和调试平台。通过亲手操作密钥烧录、触发认证、分析失败你能深刻理解基于哈希的挑战-响应认证机制的精髓。从评估板到最终产品最大的跨越在于将 PC 软件上的点击操作转化为嵌入式 MCU 中稳定、可靠的代码逻辑。这个过程需要你对协议时序、电源管理、错误处理和安全策略有更深入的思考。希望这篇指南能帮你扫清入门障碍更顺利地踏上硬件安全认证的设计之路。