编程进阶网 编程进阶网
首页
  • 计算机原理
  • 操作系统
  • 网络协议
  • 数据库原理
  • 面向对象
  • 设计原则
  • 设计模式
  • 系统架构
  • 性能优化
  • 编程原理
  • 方案设计
  • 稳定可靠
  • 工程运维
  • 基础认知
  • 线性结构
  • 树与哈希
  • 工业级实现
  • 算法思想
  • 实战与综合
  • 算法题考核
  • C语言入门
  • C综合案例
  • C专栏博客
  • C标准集库
  • C++入门教程
  • C++综合案例
  • C++专栏博客
  • C++开发技巧
  • Java入门教程
  • Java综合案例
  • Java专栏博客
  • Go入门教程
  • Go综合案例
  • Go专栏博客
  • Go开发技巧
  • JavaScript入门
  • JavaScript高级
  • Android库解读
  • Android专栏
  • Android智能硬件
  • iOS ObjC入门
  • iOS Swift入门
  • iOS入门精通
  • Web之Html手册
  • Web之TypeScript
  • Web之Vue高级进阶
  • Linux之QML入门
  • Linux之QT核心库
  • Linux实践开发
  • Python教程
  • Shell&Bash教程
  • 工具脚本
  • 自动化脚本
  • 质量保障
  • 产品思考
  • 软实力
  • 开发流程
  • Git应用
  • 技术模版
  • 技术规范
  • Markdown
  • Mermaid
  • 开源协议
  • JSON工具
  • 文本工具
  • 图片处理
  • 文档转化
  • 代码压缩
  • 关于我
  • 自我精进
  • 职场管理
  • 职场面试
  • 心情杂货
  • 友情链接

杨充

专注编程 · 终身学习者
首页
  • 计算机原理
  • 操作系统
  • 网络协议
  • 数据库原理
  • 面向对象
  • 设计原则
  • 设计模式
  • 系统架构
  • 性能优化
  • 编程原理
  • 方案设计
  • 稳定可靠
  • 工程运维
  • 基础认知
  • 线性结构
  • 树与哈希
  • 工业级实现
  • 算法思想
  • 实战与综合
  • 算法题考核
  • C语言入门
  • C综合案例
  • C专栏博客
  • C标准集库
  • C++入门教程
  • C++综合案例
  • C++专栏博客
  • C++开发技巧
  • Java入门教程
  • Java综合案例
  • Java专栏博客
  • Go入门教程
  • Go综合案例
  • Go专栏博客
  • Go开发技巧
  • JavaScript入门
  • JavaScript高级
  • Android库解读
  • Android专栏
  • Android智能硬件
  • iOS ObjC入门
  • iOS Swift入门
  • iOS入门精通
  • Web之Html手册
  • Web之TypeScript
  • Web之Vue高级进阶
  • Linux之QML入门
  • Linux之QT核心库
  • Linux实践开发
  • Python教程
  • Shell&Bash教程
  • 工具脚本
  • 自动化脚本
  • 质量保障
  • 产品思考
  • 软实力
  • 开发流程
  • Git应用
  • 技术模版
  • 技术规范
  • Markdown
  • Mermaid
  • 开源协议
  • JSON工具
  • 文本工具
  • 图片处理
  • 文档转化
  • 代码压缩
  • 关于我
  • 自我精进
  • 职场管理
  • 职场面试
  • 心情杂货
  • 友情链接
  • README
  • 性能优化实践

  • 程序编程原理

  • 稳定性与可靠性

  • 工程化与运维

  • 方案设计思想

    • README
    • 架构与组件

    • 数据与存储

    • 通信与协议

    • 稳定性与安全

      • 幂等性设计方案
      • 分布式锁方案设计
      • 监控告警方案设计
      • 终端设备鉴权设计
        • 01.被克隆的设备
          • 1.1 假设备刷数据
          • 1.2 攻击扩散链路
          • 1.3 反思设备鉴权
        • 02.要解决的核心矛盾
          • 2.1 设备 vs 用户
          • 2.2 安全与成本
          • 2.3 离线与在线
          • 2.4 设备鉴权的本质
        • 03.业界主流方案
          • 03.1 四大鉴权方案
          • 03.2 横向对比矩阵
          • 03.3 适用场景速查
        • 04.设计核心原则
          • 04.1 一机一密原则
          • 04.2 密钥安全原则
          • 04.3 防重放原则
          • 04.4 可吊销原则
        • 05.方案落地实战
          • 05.1 整体架构
          • 05.2 对称密钥方案
          • 05.3 非对称密钥方案
          • 05.4 证书 mTLS 方案
          • 05.5 OAuth 设备流
        • 06.关键问题解决
          • 06.1 密钥存储问题
          • 06.2 接口防篡改
          • 06.3 防重放设计
        • 07.常见陷阱与反例
          • 07.1 一密走天下反例
          • 07.2 明文存密钥反例
          • 07.3 无吊销机制反例
        • 08.演进路线
          • 08.1 V1 简单 token
          • 08.2 V2 一机一密
          • 08.3 V3 证书 + 安全芯片
        • 09.总结与决策
          • 09.1 上线检查表
          • 09.2 选型决策树
      • 移动端防抓包实践
    • 端侧专项性

    • 研发的效能

  • 专栏
  • 方案设计思想
  • 稳定性与安全
杨充
2025-06-16
目录

终端设备鉴权设计

# 20.终端设备鉴权设计

本篇定位:设备鉴权是 IoT、移动端、车机、智能硬件的"身份证"——决定一台设备能不能接入服务。本文从一次"假设备刷数据"的故事讲起,回答三个核心问题——为什么设备鉴权和用户鉴权不一样?业界四种鉴权方案怎么选?怎么设计一个抗破解的设备鉴权体系?

# 目录介绍

  • 01.被克隆的设备
    • 1.1 假设备刷数据
    • 1.2 攻击扩散链路
    • 1.3 反思设备鉴权
  • 02.要解决的核心矛盾
    • 2.1 设备 vs 用户
    • 2.2 安全与成本
    • 2.3 离线与在线
    • 2.4 设备鉴权的本质
  • 03.业界主流方案
    • 03.1 四大鉴权方案
    • 03.2 横向对比矩阵
    • 03.3 适用场景速查
  • 04.设计核心原则
    • 04.1 一机一密原则
    • 04.2 密钥安全原则
    • 04.3 防重放原则
    • 04.4 可吊销原则
  • 05.方案落地实战
    • 05.1 整体架构
    • 05.2 对称密钥方案
    • 05.3 非对称密钥方案
    • 05.4 证书 mTLS 方案
    • 05.5 OAuth 设备流
  • 06.关键问题解决
    • 06.1 密钥存储问题
    • 06.2 接口防篡改
    • 06.3 防重放设计
  • 07.常见陷阱与反例
    • 07.1 一密走天下反例
    • 07.2 明文存密钥反例
    • 07.3 无吊销机制反例
  • 08.演进路线
    • 08.1 V1 简单 token
    • 08.2 V2 一机一密
    • 08.3 V3 证书 + 安全芯片
  • 09.总结与决策
    • 09.1 上线检查表
    • 09.2 选型决策树

# 01.被克隆的设备

# 1.1 假设备刷数据

某共享单车平台某日发现:某个区域单日新增"骑行"50w 次,但实际车辆总数才 8000 辆。一辆车不可能每天骑 60+ 次。

排查发现:黑产把 App 反编译,提取了"设备签名密钥",伪造了 5w 个虚假"骑行设备"——直接刷流量套补贴,单日损失 18 万元。

flowchart TD
    A[App 反编译] --> B[找到签名密钥]
    B --> C[发现密钥写死在代码里]
    C --> D[用 5w 台 PC 模拟设备]
    D --> E[每个模拟设备刷"骑行"]
    E --> F[骗到补贴 18 万/天]
    
    Cause[根因] --> R1[密钥硬编码在代码]
    Cause --> R2[全局只有一个密钥<br/>所有设备共用]
    Cause --> R3[没有设备身份校验]
    Cause --> R4[没有异常行为识别]
    
    style F fill:#ffebee
1
2
3
4
5
6
7
8
9
10
11
12
13

# 1.2 攻击扩散链路

flowchart TD
    Start[设备鉴权用了"全局密钥"] --> Risk{密钥被破解后?}
    
    Risk --> A[所有设备身份都能伪造]
    Risk --> B[服务端无法区分真假]
    Risk --> C[只能强制升级 + 换密钥]
    
    Real[真实代价] --> R1[补贴损失]
    Real --> R2[业务数据被污染]
    Real --> R3[用户信任危机]
    Real --> R4[紧急停服换密钥]
    
    style A fill:#ffebee
    style C fill:#ffebee
1
2
3
4
5
6
7
8
9
10
11
12
13
14

# 1.3 反思设备鉴权

事后这个团队总结了三个最深刻的教训:

  1. 绝不能用"全局密钥"——必须一机一密
  2. 密钥不能写在代码里——必须用安全存储
  3. 必须有异常行为识别——单密钥被盗时能限速 / 限流

设备鉴权和用户鉴权最大的区别:用户密码丢了改一下就行,设备密钥泄露往往是大规模灾难。

# 02.要解决的核心矛盾

# 2.1 设备 vs 用户

维度 用户鉴权 设备鉴权
主体 真实人 物理设备
凭证 用户名 + 密码 设备 ID + 密钥/证书
变更频率 用户可改密码 出厂烧录,难变更
数量级 每人 1 个 每用户 N 个
存储 服务端数据库 设备本地(容易被破解)
吊销难度 低(改密码即可) 高(设备难批量更新)

# 2.2 安全与成本

graph LR
    A[硬件安全芯片<br/>TEE / SE] --> B[最高安全]
    B --> C[硬件成本 + 量产复杂]
    
    A2[纯软件密钥] --> B2[低成本]
    B2 --> C2[容易被破解]
    
    A3[白盒密钥<br/>代码混淆] --> B3[中等]
    B3 --> C3[平衡选择]
    
    style C fill:#fff3e0
    style C2 fill:#fff3e0
    style B3 fill:#e8f5e8
1
2
3
4
5
6
7
8
9
10
11
12
13

# 2.3 离线与在线

场景 鉴权要求
联网设备(手机、车机) 在线鉴权,可动态更新
离线设备(IoT 偶尔联网) 本地鉴权 + 上线同步
断电断网(智能锁、智能表) 完全离线鉴权(挑战大)

# 2.4 设备鉴权的本质

设备鉴权 = 验证"这是不是合法的设备"

它的核心是 唯一性 + 不可伪造性——服务端能识别每一台真实设备。

# 03.业界主流方案

# 03.1 四大鉴权方案

方案 核心机制 典型场景
对称密钥 设备和服务端共享一个 key IoT 简单设备
非对称密钥 设备私钥签名,服务端公钥验签 中高安全
数字证书 mTLS 双向 TLS 证书 银行、车联网
OAuth 设备流 设备通过用户授权 智能音箱、TV

# 03.2 横向对比矩阵

维度 对称密钥 非对称密钥 mTLS 证书 OAuth
安全性 ⭐⭐⭐ ⭐⭐⭐⭐ ⭐⭐⭐⭐⭐ ⭐⭐⭐⭐
性能 ⭐⭐⭐⭐⭐ ⭐⭐⭐ ⭐⭐⭐ ⭐⭐⭐⭐
实现复杂度 ⭐ ⭐⭐⭐ ⭐⭐⭐⭐⭐ ⭐⭐⭐
密钥分发 麻烦 公钥可公开 PKI 体系 用户授权
吊销机制 改密钥 服务端清除公钥 CRL/OCSP 撤销 token
典型代表 MQTT 简单设备 智能门锁 车联网 智能 TV

# 03.3 适用场景速查

flowchart TD
    Start([设备鉴权选型]) --> Q1{安全级别?}
    
    Q1 -->|低 IoT 玩具| Sym[对称密钥<br/>简单快速]
    Q1 -->|中 智能家居| Asym[非对称密钥]
    Q1 -->|高 金融/汽车/医疗| MTls[mTLS 证书]
    
    Q2[需要用户授权吗?] --> OAuth[OAuth 设备流]
    Q2 -.特殊场景.-> Q1
    
    style Sym fill:#e3f2fd
    style Asym fill:#e8f5e8
    style MTls fill:#fff3e0
    style OAuth fill:#f3e5f5
1
2
3
4
5
6
7
8
9
10
11
12
13
14

# 04.设计核心原则

# 04.1 一机一密原则

铁律:每台设备有自己唯一的密钥——一台被破解不影响其他。

graph TB
    subgraph "❌ 全局密钥"
        K1[一个密钥 K]
        D1[设备 1] -.- K1
        D2[设备 2] -.- K1
        D3[设备 3] -.- K1
        D4[设备 N] -.- K1
        Note1[一个泄露 全部沦陷]
    end
    
    subgraph "✅ 一机一密"
        D5[设备 1] -.- K2[密钥 K1]
        D6[设备 2] -.- K3[密钥 K2]
        D7[设备 3] -.- K4[密钥 K3]
        D8[设备 N] -.- K5[密钥 KN]
        Note2[一个泄露 只影响这台]
    end
    
    style K1 fill:#ffebee
    style Note1 fill:#ffebee
    style Note2 fill:#e8f5e8
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21

实现:

  • 出厂时为每台设备烧录唯一密钥
  • 服务端存对应关系:deviceId → key
  • 大规模设备用密钥派生:device_key = HMAC(master_key, deviceId)

# 04.2 密钥安全原则

mindmap
  root((密钥安全))
    硬件级
      安全芯片 SE
      TEE 可信执行环境
      不可读出
    系统级
      iOS Keychain
      Android Keystore
      由 OS 保护
    应用级
      白盒密码学
      代码混淆
      加密存储
    最差
      明文文件 ❌
      硬编码 ❌
      日志输出 ❌
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

# 04.3 防重放原则

重放攻击:黑客抓到一个合法请求,反复重发——服务端无法识别。

sequenceDiagram
    participant H as 黑客
    participant S as 服务
    
    H->>H: 抓到合法请求 sign=abc
    H->>S: 重发 1: 请求 + sign=abc
    S-->>H: 处理通过
    H->>S: 重发 2: 请求 + sign=abc
    S-->>H: ❌ 又通过了!
    H->>S: 重发 1000 次
    S-->>H: 全部通过 → 业务被刷
1
2
3
4
5
6
7
8
9
10
11

防重放手段:

  • timestamp:请求带时间戳,超过 5 分钟拒绝
  • nonce:随机串,服务端记录已用 nonce
  • sequence:递增序列号,必须比上次大

# 04.4 可吊销原则

设备丢失 / 被破解时必须能立即吊销:

flowchart TD
    Lost[设备丢失/破解] --> Action[管理员吊销]
    Action --> Server[服务端黑名单]
    Server --> Reject[该设备的请求一律拒绝]
    
    Mech[吊销机制] --> M1[黑名单缓存 Redis]
    Mech --> M2[CRL 证书吊销列表]
    Mech --> M3[OCSP 在线证书状态]
    Mech --> M4[Token 短期过期]
    
    style Reject fill:#ffebee
    style Mech fill:#e8f5e8
1
2
3
4
5
6
7
8
9
10
11
12

# 05.方案落地实战

# 05.1 整体架构

graph TB
    subgraph "设备端"
        Device[终端设备]
        Storage[安全存储<br/>密钥/证书]
        SDK[鉴权 SDK]
    end
    
    subgraph "鉴权服务"
        Gate[接入网关]
        Auth[鉴权服务]
        KeyMgr[密钥管理]
        BlackList[黑名单]
    end
    
    subgraph "存储"
        DeviceDB[(设备库)]
        Redis[(缓存)]
    end
    
    Device --> SDK --> Gate
    Gate --> Auth
    Auth --> KeyMgr
    Auth --> BlackList
    KeyMgr --> DeviceDB
    BlackList --> Redis
    
    style Auth fill:#fff3e0
    style Storage fill:#e8f5e8
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28

# 05.2 对称密钥方案

典型流程(HMAC 签名):

sequenceDiagram
    participant D as 设备 deviceKey=K
    participant S as 服务 deviceKey=K
    
    Note over D,S: 出厂时双方都有 K
    
    D->>D: 1. 拼接请求参数 + timestamp + nonce
    D->>D: 2. sign = HMAC-SHA256 K, 拼接串
    D->>S: 3. 发送 请求 + sign + timestamp + nonce
    
    S->>S: 4. 用同样规则 + 自己的 K 计算 sign'
    S->>S: 5. 比较 sign == sign' ?
    S->>S: 6. 校验 timestamp 不超过 5 分钟
    S->>S: 7. 校验 nonce 没用过
    S-->>D: 通过 / 拒绝
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

优点:性能高(HMAC 速度极快)。 缺点:服务端要存所有设备的 key(一旦泄露影响大)。

# 05.3 非对称密钥方案

典型流程(RSA / ECDSA 签名):

sequenceDiagram
    participant D as 设备<br/>privateKey
    participant S as 服务<br/>publicKey
    
    Note over D,S: 出厂: 设备生成密钥对<br/>把 publicKey 上报给服务端
    
    D->>D: 用 privateKey 签名请求
    D->>S: 请求 + signature
    S->>S: 用 publicKey 验签
    S-->>D: 通过 / 拒绝
1
2
3
4
5
6
7
8
9
10

优点:服务端只存公钥(公钥泄露无所谓)。 缺点:签名 / 验签性能比 HMAC 慢 100 倍。

实战:私钥必须存在设备的 TEE / Keystore,永不外传。

# 05.4 证书 mTLS 方案

双向 TLS 握手:

sequenceDiagram
    participant D as 设备 + 客户端证书
    participant S as 服务 + 服务端证书
    participant CA as CA 证书机构
    
    D->>S: ClientHello
    S->>D: ServerHello + 服务端证书
    D->>D: 用 CA 公钥验证服务端证书
    
    Note over S: 单向 TLS 到此为止<br/>但 mTLS 还要验设备
    
    S->>D: 请求客户端证书
    D->>S: 提交客户端证书
    S->>S: 用 CA 公钥验证客户端证书
    S->>CA: 检查证书是否吊销 OCSP
    CA-->>S: 有效
    
    Note over D,S: 双向认证完成<br/>建立加密通道
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

适用:

  • 银行、金融
  • 车联网(车与云)
  • 工业 IoT(高价值设备)

# 05.5 OAuth 设备流

适用场景:智能 TV、音箱、车机——设备没键盘,无法输用户名密码。

sequenceDiagram
    participant D as 智能 TV
    participant U as 用户手机
    participant Auth as 授权服务器
    
    D->>Auth: 1. 申请设备码
    Auth-->>D: 2. device_code + user_code + 验证 URL
    D->>D: 3. 屏幕显示 user_code 和 URL
    
    U->>U: 4. 用手机访问 URL
    U->>Auth: 5. 输入 user_code + 登录授权
    Auth-->>U: 6. 授权成功
    
    loop 设备每 5 秒轮询
        D->>Auth: poll device_code
        alt 用户已授权
            Auth-->>D: access_token
        else 用户未授权
            Auth-->>D: pending
        end
    end
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21

# 06.关键问题解决

# 06.1 密钥存储问题

不同平台的安全存储能力:

平台 推荐方案
iOS Keychain + Secure Enclave
Android KeyStore + StrongBox(硬件)
Linux IoT TPM 芯片 / OP-TEE
MCU 单片机 安全启动 + 安全 Flash
车机 HSM(硬件安全模块)

通用最佳实践:

  • 密钥永不离开安全模块——签名操作发生在内部
  • 代码里不直接读密钥——通过 API 调用
  • 多重保护:白盒密码学 + 代码混淆

# 06.2 接口防篡改

完整接口安全 = 鉴权 + 签名:

flowchart LR
    Req[请求参数] --> Sort[参数排序]
    Sort --> Concat[拼接 + timestamp + nonce]
    Concat --> Sign[HMAC/RSA 签名]
    Sign --> Send[发送 请求 + sign + timestamp + nonce]
    
    Send --> Server[服务端]
    Server --> Verify[同样规则验签]
    Verify --> Check[检查 timestamp / nonce]
    Check --> Result[通过/拒绝]
    
    style Sign fill:#fff3e0
    style Verify fill:#e8f5e8
1
2
3
4
5
6
7
8
9
10
11
12
13

典型签名规则:

fun sign(params: Map<String, String>, secret: String): String {
    val sorted = params.toSortedMap()
    val raw = sorted.entries.joinToString("&") { "${it.key}=${it.value}" }
    val signRaw = "$raw&timestamp=$timestamp&nonce=$nonce"
    return HmacSHA256(secret, signRaw)
}
1
2
3
4
5
6

# 06.3 防重放设计

完整防重放三件套:

fun verifyRequest(req: Request): Boolean {
    // 1. 时间窗口校验
    if (System.currentTimeMillis() - req.timestamp > 5 * 60 * 1000) {
        return false  // 5 分钟外拒绝
    }
    
    // 2. nonce 去重
    if (redis.exists("nonce:${req.nonce}")) {
        return false  // 用过了
    }
    redis.setEx("nonce:${req.nonce}", value = "1", expire = 5 * 60)
    
    // 3. 签名校验
    return verifySignature(req)
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

# 07.常见陷阱与反例

# 07.1 一密走天下反例

反例:开篇共享单车,所有设备共用一个 key 写死在代码。

教训:必须一机一密。

# 07.2 明文存密钥反例

反例:某 IoT 厂商把设备密钥直接存在 /etc/device.key,任何人 root 后能直接读到。

教训:必须用安全存储(TEE / Keystore / TPM)。

# 07.3 无吊销机制反例

反例:某车联网用了证书 mTLS,但没接 CRL/OCSP——一辆车被偷后证书还能正常使用,黑客可以一直冒充该车。

教训:必须有吊销机制(黑名单 / CRL / OCSP)。

mindmap
  root((三大反例))
    一密走天下
      全局密钥
      硬编码
      一破全沦陷
    明文存密钥
      文件存储
      日志输出
      Root 即破
    无吊销机制
      丢失无法处理
      证书永久有效
      必须接 CRL/OCSP
1
2
3
4
5
6
7
8
9
10
11
12
13
14

# 08.演进路线

# 08.1 V1 简单 token

特征:业务起步、安全要求不高。

做法:

  • 简单 token(如 deviceId + 时间戳哈希)
  • 服务端校验
  • 适合内部 / 测试设备

# 08.2 V2 一机一密

特征:上规模、需要防破解。

做法:

  • 出厂烧录唯一密钥
  • HMAC 签名 + 防重放
  • 安全存储
  • 接口完整签名

适用阶段:智能家居 / IoT / 移动 App

# 08.3 V3 证书 + 安全芯片

特征:金融级 / 工业级 / 车联网。

做法:

  • mTLS 双向证书
  • HSM / SE 安全芯片
  • PKI 体系(CA/RA/CRL)
  • OCSP 在线吊销

适用阶段:银行、汽车、医疗设备

flowchart LR
    V1[V1 简单 token<br/>低安全] --> V2[V2 一机一密<br/>主流]
    V2 --> V3[V3 证书+硬件<br/>金融级]
    
    style V1 fill:#e3f2fd
    style V2 fill:#e8f5e8
    style V3 fill:#fff3e0
1
2
3
4
5
6
7

# 09.总结与决策

# 09.1 上线检查表

设备接入前对照:

  • [ ] 一机一密机制就位(绝不全局密钥)
  • [ ] 密钥安全存储(TEE/Keystore/TPM)
  • [ ] 密钥不在代码 / 日志 / 配置里
  • [ ] 接口签名机制(HMAC / RSA)
  • [ ] 防重放(timestamp + nonce)
  • [ ] 吊销机制(黑名单 / CRL)
  • [ ] 异常行为检测(频率 / 地理位置)
  • [ ] 密钥派生方案(主密钥不落地)
  • [ ] 设备生命周期管理(注册 / 激活 / 注销)
  • [ ] OTA 升级安全(签名校验)
  • [ ] 监控(鉴权失败率、异常设备)
  • [ ] 应急预案(密钥泄露后的批量切换)

# 09.2 选型决策树

flowchart TD
    Start([设备鉴权选型]) --> Q1{设备价值?}
    
    Q1 -->|低 玩具/小家电| L1{联网?}
    L1 -->|是| Sym[对称密钥 HMAC]
    L1 -->|偶尔| Sym2[对称 + 离线缓存]
    
    Q1 -->|中 智能家居/共享| Asym[非对称密钥<br/>+ 一机一密]
    
    Q1 -->|高 金融/汽车/工业| MTls[mTLS 证书<br/>+ 安全芯片]
    
    Q2([特殊]) --> Sp1{无键盘设备?}
    Sp1 -->|是 智能 TV/音箱| OAuth[OAuth 设备流]
    
    style Sym fill:#e3f2fd
    style Asym fill:#e8f5e8
    style MTls fill:#fff3e0
    style OAuth fill:#f3e5f5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

最后一句话:设备鉴权和用户鉴权最大的差别就是密钥不容易换——一旦设计错了就是大规模灾难。

好的设备鉴权 = 一机一密、密钥不出芯片、签名防篡改、可吊销可追溯。

上次更新: 2026/06/07, 10:26:12
监控告警方案设计
移动端防抓包实践

← 监控告警方案设计 移动端防抓包实践→

最近更新
01
信号崩溃快速排查
06-15
02
CoreDump破案
06-15
03
perf火焰图实战
06-15
更多文章>
Theme by Vdoing | Copyright © 2019-2026 杨充 | MIT License | 桂ICP备2024034950号 | 桂公网安备45142202000030
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式