对称密钥认证:主机和设备共享同一把密钥

对称密钥认证,是指主机和设备共享同一类密钥,通过相同算法计算认证结果,从而判断对方是否拥有正确密钥。

它的特点是:

  • 速度快;
  • 资源占用低;
  • 实现相对简单;
  • 适合 MCU、耗材、配件、传感器等资源受限场景。

在嵌入式系统中,对称密钥认证常用于:

  • 耗材认证;
  • 配件认证;
  • 探头认证;
  • 电池认证;
  • 短报文消息认证;
  • 主机与外设之间的挑战响应。

但它也有一个非常关键的工程风险:

关键词 工程含义
对称密钥 / 派生密钥 适合低成本认证,但必须避免全局共享密钥。

1. 什么是对称密钥认证

对称密钥认证的核心思想是:

主机和设备都持有同一类密钥。

谁能用这把密钥算出正确结果,谁就被认为是可信对象。

这里的"对称"指的是:

  • 主机端知道密钥;
  • 设备端也知道对应密钥;
  • 双方使用相同算法计算认证结果。

例如,主机发送一个随机 Challenge,设备使用内部密钥计算 MAC,主机使用相同密钥计算期望 MAC。

如果两个结果一致,说明设备大概率持有正确密钥。


2. 典型认证流程

对称密钥认证最常见的形式是 Challenge-Response 挑战响应

典型流程如下:

复制代码
1. 主机读取设备 SN
2. 主机生成随机 Challenge
3. 主机将 Challenge 发送给设备
4. 设备使用内部密钥计算 MAC
5. 设备返回 Response
6. 主机使用对应密钥计算 Expected_Response
7. 主机比较 Response 和 Expected_Response
8. 一致则认证通过,不一致则拒绝使用

可以简化表示为:

复制代码
Host → Device:
    Challenge

Device:
    Response = HMAC(Device_Key, Challenge)

Device → Host:
    Response

Host:
    Expected = HMAC(Device_Key, Challenge)

if Response == Expected:
    认证通过
else:
    认证失败

这个过程中,设备不需要把密钥发送出来。

设备只需要证明:

我拥有正确密钥。


3. 为什么不能所有设备共用一把密钥

最简单的设计是:

复制代码
所有设备都使用同一把 Global_Key

这种方式实现简单,但风险非常高。

因为一旦攻击者从某一台设备中提取出 Global_Key,就可以伪造所有设备。

后果包括:

  • 可以批量克隆耗材;
  • 可以伪造合法配件;
  • 可以绕过探头认证;
  • 可以伪造通信报文;
  • 可以生产山寨设备;
  • 可以影响整批产品安全。

这就是典型的全局共享密钥风险

所以工程上应尽量避免:

复制代码
Device_A_Key = Global_Key
Device_B_Key = Global_Key
Device_C_Key = Global_Key
...

更合理的方式是:

复制代码
Device_A_Key != Device_B_Key != Device_C_Key

也就是每台设备都有自己的唯一密钥。


4. 唯一派生密钥

为了避免所有设备共用一把密钥,工程上常用唯一派生密钥

基本思想是:

使用一个父密钥 Root_Key,再结合设备唯一信息,派生出每台设备自己的密钥。

例如:

复制代码
Device_Key = KDF(Root_Key, Device_SN)

或者:

复制代码
Device_Key = HMAC-SHA256(Root_Key, Device_SN)

其中:

字段 含义
Root_Key 父密钥,只存在于安全产线系统、HSM 或主机安全模块中
Device_SN 设备唯一序列号
Device_Key 每台设备最终保存的唯一密钥

这样做的好处是:

  • 每台设备密钥不同;
  • 单台设备密钥泄露,不会直接泄露父密钥;
  • 攻击者不能直接推导其他设备密钥;
  • 主机可以根据 SN 动态计算对应设备密钥;
  • 产线可以按设备唯一身份写入不同密钥。

5. 派生密钥的工程示例

假设有 3 个耗材:

复制代码
SN_A = 100001
SN_B = 100002
SN_C = 100003

使用父密钥派生:

复制代码
Key_A = HMAC-SHA256(Root_Key, SN_A)
Key_B = HMAC-SHA256(Root_Key, SN_B)
Key_C = HMAC-SHA256(Root_Key, SN_C)

最终结果是:

复制代码
Key_A != Key_B != Key_C

耗材 A 内部只保存 Key_A。

耗材 B 内部只保存 Key_B。

耗材 C 内部只保存 Key_C。

即使攻击者破解了耗材 A,拿到 Key_A,也不能直接得到 Key_B、Key_C,更不能反推出 Root_Key。

这就把攻击影响范围限制在单台设备或单个耗材上。


6. 认证时主机如何得到设备密钥

使用唯一派生密钥后,主机认证设备时通常有两种方式。


6.1 方式一:主机保存父密钥并动态派生

主机读取设备 SN 后,动态计算:

复制代码
Device_Key = HMAC-SHA256(Root_Key, Device_SN)

然后用 Device_Key 验证设备 Response。

优点是:

  • 不需要保存所有设备密钥表;
  • 只要知道 SN,就能计算对应密钥;
  • 适合大量设备、耗材和配件认证。

缺点是:

  • 主机必须保护 Root_Key;
  • 如果主机 Root_Key 泄露,可能影响大量设备;
  • 主机端最好使用安全芯片、安全区域或受控模块保存 Root_Key。

6.2 方式二:主机保存设备密钥表

主机或服务器保存:

复制代码
SN_A → Key_A
SN_B → Key_B
SN_C → Key_C

认证时根据 SN 查找对应 Device_Key。

优点是:

  • 主机不需要保存 Root_Key;
  • 单个密钥泄露影响范围可控;
  • 可以单独吊销某个设备密钥。

缺点是:

  • 密钥表管理复杂;
  • 大批量设备时存储和维护成本较高;
  • 离线设备可能不方便同步密钥表。

7. 产线设计

对称密钥认证是否安全,很大程度取决于产线密钥管理。

生产阶段应由 HSM 或受控产线系统完成密钥派生和写入。

推荐流程:

复制代码
1. 产线系统读取设备 SN
2. HSM 根据 Root_Key 和 SN 派生 Device_Key
3. 产线系统将 Device_Key 写入设备安全区域或加密芯片
4. 写入后锁定调试口和读保护
5. 产线记录 SN、批次、证书编号、写入状态
6. Device_Key 不以明文形式保存在普通产线电脑中

关键原则是:

父密钥不应出现在普通产线电脑、脚本、日志、烧录文件或 MCU 固件中。

设备端只保存派生密钥。

主机端可以保存父密钥,也可以通过安全模块动态派生。


8. 父密钥不能放在哪里

工程上应避免把父密钥放在以下位置:

  • 普通 PC 脚本;
  • Excel 表格;
  • 烧录配置文件;
  • MCU 固件源码;
  • 固件常量数组;
  • 调试日志;
  • 产线明文数据库;
  • 邮件或网盘文档;
  • 普通外部 Flash;
  • 未保护的 EEPROM。

一旦 Root_Key 泄露,攻击者可能批量派生合法设备密钥。

因此,Root_Key 应尽量只存在于:

  • HSM;
  • 安全服务器;
  • 安全芯片;
  • MCU 安全区域;
  • 受控密钥管理系统。

9. 设备端密钥存储

设备端保存的是 Device_Key,而不是 Root_Key。

设备端密钥应尽量存放在:

  • 加密芯片;
  • 安全认证芯片;
  • MCU 安全存储区域;
  • OTP / eFuse;
  • 读保护 Flash;
  • TrustZone 安全区;
  • 不可直接读取的密钥槽。

如果只能存放在普通 MCU Flash 中,应至少采取:

  • 开启读保护;
  • 关闭 SWD/JTAG;
  • 禁止调试口量产开放;
  • 固件中避免明文打印密钥;
  • 产线写入后立即锁定;
  • 防止升级包覆盖密钥区;
  • 对密钥区做访问权限隔离。

10. 对称认证的优点

对称密钥认证在嵌入式系统中非常实用,主要优点包括:

10.1 速度快

HMAC、AES-CMAC 等算法计算速度较快。

对于 MCU 来说,认证一次通常可以在较短时间内完成。


10.2 资源占用低

相比非对称算法,对称算法通常占用更少的 Flash、RAM 和 CPU。

这对低成本 MCU、耗材芯片、传感器模块非常重要。


10.3 实现简单

主机和设备使用相同算法即可完成认证。

协议流程清晰,容易嵌入到现有通信流程中。


10.4 适合短报文认证

对于控制命令、状态包、配置包、耗材认证包等短报文,对称 MAC 很适合。


11. 对称认证的缺点

对称认证最大的挑战是密钥管理。

11.1 密钥分发压力大

因为主机和设备都要知道对应密钥,所以密钥必须安全写入双方。

密钥在产线、维修、升级、备份过程中都有泄露风险。


11.2 主机密钥保护压力大

如果主机需要保存 Root_Key 或大量 Device_Key,就必须有足够保护。

否则一旦主机被破解,攻击者可能伪造大量设备。


11.3 不适合公开验证场景

对称认证要求验证方也知道密钥。

如果有很多第三方系统都需要验证设备,就必须把密钥分发给多个验证方。

这会增加密钥泄露风险。

这种场景更适合使用非对称签名或证书机制。


11.4 密钥轮换和吊销复杂

当某个密钥泄露后,需要考虑:

  • 如何吊销;
  • 如何更新;
  • 如何通知主机;
  • 如何兼容旧设备;
  • 如何防止攻击者继续使用旧密钥。

这些都需要在架构阶段提前设计。


12. 对称认证适合哪些场景

对称密钥认证适合:

  • 耗材认证;
  • 探头认证;
  • 电池认证;
  • 传感器模块认证;
  • 主机与固定外设认证;
  • 短报文完整性保护;
  • 成本敏感设备;
  • 低资源 MCU;
  • 离线认证场景。

尤其适合主机和设备关系比较固定的系统,例如:

复制代码
主机 ↔ 耗材
主机 ↔ 探头
主机 ↔ 电池
主机 ↔ 传感器模块
主控 MCU ↔ 安全芯片

13. 不太适合哪些场景

对称认证不太适合:

  • 多个第三方都要验证设备;
  • 验证方不可信;
  • 主机容易被攻击者拿到并逆向;
  • 大规模开放生态;
  • 需要公开验证固件来源;
  • 需要跨组织信任链;
  • 需要强身份体系和证书链。

例如,固件升级包验证通常不推荐只依赖对称 MAC。

因为设备端如果保存验证密钥,一旦设备被破解,攻击者可能伪造升级包。

对于固件发布验证,更常见做法是:

复制代码
发布方私钥签名
设备端公钥验证

也就是使用数字签名。


14. 工程注意事项

14.1 避免全局共享密钥

不要让所有设备使用同一把密钥。

应尽量做到:

复制代码
一机一密
一耗材一密
一探头一密
一模块一密

14.2 密钥与设备身份绑定

派生密钥时应绑定设备唯一信息,例如:

复制代码
Device_Key = HMAC-SHA256(Root_Key, Device_SN || Product_Type || Batch_ID)

这样可以避免不同产品线、不同批次之间密钥混用。


14.3 Challenge 必须随机且一次性

对称认证通常依赖挑战响应。

因此 Challenge 必须满足:

  • 由验证方生成;
  • 随机或不可预测;
  • 一次性使用;
  • 绑定当前会话;
  • 超时失效;
  • 成功或失败后都失效。

否则截获的 Response 可能被重放。


14.4 MAC 比对使用常量时间比较

验证 Response 时,不建议使用普通字符串比较函数。

应使用常量时间比较,避免因为提前退出导致时序泄露。


14.5 不要自己设计算法

不要自行设计类似下面的认证算法:

复制代码
Response = CRC(Key + Challenge)
Response = Hash(Key + Challenge)
Response = Challenge XOR Key
Response = AES_Encrypt(Challenge) 的部分字节

工程上应使用成熟算法,例如:

  • HMAC-SHA256;
  • AES-CMAC;
  • 安全芯片提供的 MAC 认证接口;
  • 经过验证的密码库。

15. 工程总结

对称密钥认证适合资源受限、成本敏感、主机与设备关系固定的嵌入式场景。

它的核心优势是:

速度快、成本低、实现简单。

但它的核心风险是:

密钥一旦泄露,攻击者就可以伪造合法设备或合法报文。

因此,对称认证工程落地时必须注意:

  • 避免全局共享密钥;
  • 每台设备使用唯一派生密钥;
  • 父密钥只存在于 HSM 或安全系统中;
  • 设备端只保存派生密钥;
  • Challenge 必须随机、一次性、短时有效;
  • 密钥写入、调试口关闭、读保护和产线记录必须形成闭环。

简单来说:

对称认证不是难在算法,而是难在密钥管理。

一机一密、安全产线、密钥隔离,是对称认证能否真正安全的关键。

相关推荐
bukeyiwanshui3 小时前
20260622 安装配置ubuntu
linux·运维·ubuntu
写代码的学渣3 小时前
Linux 安装 Swap 交换分区大小标准(通用 + 生产服务器 + 个人 PC)
linux·运维·服务器
tonydf3 小时前
.NET 项目集成可观测性:从架构思考到落地实践
运维·后端
金智维科技官方4 小时前
AI驱动的应付账款自动化,落地时要拆解哪些流程?
运维·人工智能·自动化
写代码的学渣4 小时前
Linux 彻底清空历史命令 & 恢复历史命令(完整版、重启永久生效)
linux·运维·chrome
fei_sun4 小时前
ARP(地址解析协议)与NDP(邻居发现协议)
运维·服务器
技术不好的崎鸣同学5 小时前
[极客大挑战 2019]EasySQL 思路及解法
网络·安全·web安全
Web极客码5 小时前
跨国网络抖动下的 AI 爬虫流调优:我如何用 Claude 打造“智能退避”资讯清洗管道
网络·人工智能·爬虫
Qimooidea5 小时前
祁木 CAD Translator 全套功能 & 官网入口汇总
运维·服务器