身份识别、身份认证与授权的区别

身份识别、身份认证和授权,是安全架构中最容易混淆的三个概念。

它们看起来相近,但解决的是三个完全不同的问题:

你声称是谁;

你如何证明自己是谁;

你通过证明后能做什么。

在嵌入式系统中,很多安全问题都来自于把"身份识别"误认为"身份认证"。例如,只检查 SN、设备 ID、型号或批次号,就认为设备可信,这在工程上是不安全的。

关键词 工程含义
识别 / 认证 / 授权 SN 只是声明,挑战响应才是证明,权限控制决定能做什么。

1. 三个概念的核心区别

可以先用一句话区分三者:

概念 解决的问题 工程含义
身份识别 Identification 你声称自己是谁 上报 SN、设备 ID、用户名、证书编号
身份认证 Authentication 你如何证明自己是谁 密码、证书、挑战响应、MAC、数字签名
授权 Authorization 你通过证明后能做什么 权限控制、功能开关、访问范围、使用次数

这三者是顺序关系,而不是同一个概念。

通常流程是:

先识别身份;

再认证身份;

最后根据身份和权限进行授权。


2. 身份识别 Identification

身份识别是设备、用户或模块声明自己的身份。

通俗地说,它回答的是:

我是谁?

在嵌入式产品中,身份识别可以表现为:

  • 设备上报序列号 SN;
  • 设备上报型号;
  • 设备上报硬件版本;
  • 设备上报证书编号;
  • 设备上报 Device ID;
  • 耗材上报批次号;
  • 探头上报探头类型;
  • 用户输入用户名;
  • 维修工具上报工具编号。

这些信息用于让系统知道当前对象声称的身份。

但是,身份识别只是"声明",不能直接作为可信依据。


3. 为什么 SN 不能等同于安全认证

很多嵌入式产品早期会采用这种方式:

主机读取外设 SN;

SN 在白名单中;

允许外设工作。

这种方式看起来像认证,实际上只是身份识别。

原因很简单:

SN 可以被复制。

如果攻击者从一个合法设备中读取到 SN,然后写入另一个仿冒设备,主机看到的仍然是一个"合法 SN"。

此时主机只能知道:

对方声称自己是某个合法设备。

但主机并不能确认:

对方真的拥有合法设备内部不可复制的秘密。

因此,SN、设备 ID、型号、批次号、版本号,都只能作为身份声明或索引信息,不能单独作为安全认证依据。


4. 身份认证 Authentication

身份认证是证明身份声明为真。

通俗地说,它回答的是:

你怎么证明你就是你?

在嵌入式系统中,身份认证的关键不是把密钥发给主机,而是让设备证明:

我拥有正确的密钥或私钥,但我不需要把它暴露出来。

常见认证方式包括:

  • 密码认证;
  • 共享密钥认证;
  • 挑战响应;
  • MAC 验证;
  • 数字签名;
  • 证书链验证;
  • 安全芯片认证。

5. 挑战响应机制

挑战响应是嵌入式设备认证中非常常见的方式。

基本流程如下:

  1. 主机生成一个随机数 Challenge;
  2. 主机把 Challenge 发送给设备;
  3. 设备使用内部密钥对 Challenge 计算 MAC,或者使用私钥进行签名;
  4. 设备把 Response 返回给主机;
  5. 主机验证 Response 是否正确;
  6. 验证通过后,认为设备拥有正确密钥或私钥。

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

主机验证的不是"设备说了什么",而是验证:

设备是否具备只有合法设备才拥有的秘密。


6. 为什么挑战响应比固定口令更安全

如果设备每次都发送固定口令,例如:

password = 123456

auth_code = ABCD1234

攻击者只要截获一次,就可以后续重复使用。

这就是典型的重放攻击。

挑战响应机制通过随机数解决这个问题。由于每次 Challenge 都不同,设备每次计算出的 Response 也不同。

因此,攻击者即使截获了一次 Response,也很难在下一次认证中复用。


7. 授权 Authorization

授权是在认证通过之后,决定对象可以访问哪些资源、启用哪些功能、执行哪些操作。

通俗地说,它回答的是:

你被证明是合法对象之后,可以做什么?

授权不是认证本身,而是认证之后的权限控制。

在嵌入式产品中,授权常见于以下场景:

  • 维修工具可以进入维护模式;
  • 普通用户只能查看数据,不能修改校准参数;
  • 管理员可以修改系统配置;
  • 普通耗材只能使用固定次数;
  • 特定探头才能启用特定测量功能;
  • 授权模块才能打开高级功能;
  • 产线工装可以进入生产测试模式;
  • 现场设备只能执行有限升级,研发工具才能刷写调试固件。

8. 最小权限原则

授权设计应遵循最小权限原则。

也就是说,一个对象只应该获得完成当前任务所需的最小权限,而不是认证通过后获得全部权限。

例如:

  • 普通用户不应该能修改工厂校准参数;
  • 维修人员不应该能导出密钥;
  • 耗材不应该能修改主机配置;
  • 普通 App 不应该能进入产线模式;
  • 产线工装不应该在现场维护环境中长期有效;
  • 调试权限不应该在量产设备中默认开启。

最小权限原则可以降低单点泄露后的影响范围。


9. 嵌入式案例:合法探头接入主机

假设一个医疗设备主机需要识别外接探头。

第一步:身份识别

探头接入后,先上报:

  • SN;
  • 型号;
  • 硬件版本;
  • 批次号;
  • 证书编号。

这一步只是告诉主机:

我声称自己是哪一个探头。


第二步:身份认证

主机生成随机数 Challenge,发送给探头。

探头内部的安全芯片或安全存储区域使用密钥计算 Response。

主机验证 Response 是否正确。

这一步用于确认:

这个探头确实拥有合法密钥,具备合法身份。


第三步:授权

认证通过后,主机还不能无条件允许所有功能。

主机还需要根据:

  • 探头型号;
  • 探头批次;
  • 注册状态;
  • 有效期;
  • 使用次数;
  • 支持功能;
  • 当前设备型号;
  • 当前软件版本;
  • 当前测量模式。

决定是否允许测量、允许哪些功能、是否提示更换、是否限制高级功能。

这一步才是授权。


10. 三者缺一不可

如果只有身份识别,没有身份认证:

攻击者复制 SN,就可能伪装成合法设备。

如果只有身份认证,没有授权:

合法对象可能获得过大的权限,造成越权访问。

如果只有授权规则,没有可靠认证:

权限规则建立在不可信身份之上,仍然可能被绕过。

因此,完整的嵌入式安全流程应该是:

识别身份 → 认证身份 → 授权访问。


11. 工程总结

身份识别不是安全,身份认证才开始建立信任,授权则决定信任之后的权限边界。

简单来说:

身份识别:你声称是谁;

身份认证:你如何证明自己是谁;

授权:证明之后你能做什么。

在工程实现中,SN、型号、批次号、设备 ID 只能用于识别和索引,不能单独作为可信认证依据。

真正可靠的做法,是结合挑战响应、MAC、数字签名、安全芯片、证书链和权限控制,建立从身份声明到身份证明,再到权限约束的完整闭环。

相关推荐
鹏易灵2 小时前
C++——8.移动语义初探(移动构造、移动赋值)
开发语言·c++·php
凯瑟琳.奥古斯特2 小时前
力扣1008:前序重建BST
开发语言·c++·算法·leetcode·职场和发展
Alvin's Tech Blog2 小时前
内存泄漏会导致操作系统永久丢失内存吗?它会导致应用程序崩溃吗?
c++·内存管理·内存泄漏
会周易的程序员2 小时前
使用 LuaBridge 封装 C++ 日志库 microLog 为 Lua 模块
c++·物联网·junit·lua·日志·iot·aiot
wbs_scy3 小时前
仿 muduo 高并发服务器项目:从 timerfd 到时间轮实现定时任务机制
linux·服务器·c++
Darkwanderor4 小时前
Linux进程优先级操作
linux·运维·c语言·c++
智者知已应修善业4 小时前
【P12159蓝桥杯数组翻转】2025-4-24
c语言·c++·经验分享·笔记·算法·蓝桥杯
盐焗鹌鹑蛋4 小时前
【C++】多态
java·jvm·c++
会周易的程序员5 小时前
microLog 的 log_reader 架构解析:嵌入式日志检索引擎的设计之道
c++·物联网·架构·日志·iot·aiot