分布式软总线认证方式分析

一、进入认证的入口判断

DeviceAuthStateEnter 中,根据以下标志决定认证路径:

auth_session_fsm.c:L1290-L1299

复制代码
if (info->normalizedType == NORMALIZED_SUPPORT || 
    info->isSupportFastAuth || 
    info->isSupportDmDeviceKey) {
    ret = TryRecoveryKey(authFsm);  // 走快速认证
} else {
    // 走完整HiChain PAKE认证
    if (!info->isServer) {
        ret = ProcessClientAuthState(authFsm);
    }
}

大分支有两种,一种走快速认证,一种走haichain完整认证

二、四种认证方式详解

认证方式优先级:DmDeviceKey > Normalized Auth > Fast Auth > HiChain PAKE

三、各认证方式触发条件

方式1️⃣:DmDeviceKey(设备密钥认证)- 优先级最高
项目 说明
触发条件 isSupportDmDeviceKey == true
密钥来源 预共享的设备级密钥(DM Device Key)
适用场景 设备管理器(DM)已建立过信任关系
代码位置 auth_session_fsm.c:L1234-L1240
复制代码
if (authFsm->info.isSupportDmDeviceKey) {
    AUTH_LOGI(AUTH_FSM, "reuse device key");
    return ReuseDeviceKey(authFsm);  // 直接复用,跳过PAKE协商
}

何时设置

  • 当收到包含有效 DM_DEVICE_KEY_ID 的设备ID消息时设置
  • auth_session_json.c:L918-L925

方式2️⃣:Normalized Auth(标准化认证)
项目 说明
触发条件 normalizedType == NORMALIZED_SUPPORT
密钥来源 之前PAKE协商保存的normalizedKey
适用场景 双方都支持标准化链路,且有可用的标准化密钥
代码位置 auth_session_fsm.c:L1243-L1249
复制代码
if (authFsm->info.normalizedType == NORMALIZED_SUPPORT) {
    AUTH_LOGI(AUTH_FSM, "normalized auth succ");
    return RecoveryNormalizedDeviceKey(authFsm);
}

何时设置 - auth_session_json.c:L661-L675:

  • 双方都支持 BIT_SUPPORT_NORMALIZED_LINK 特性
  • 能够找到对应的normalizedKey进行解密验证

何时不设置

  • 对端版本过旧或不支持标准化:NORMALIZED_NOT_SUPPORT
  • 密钥查找失败或解密失败:NORMALIZED_KEY_ERROR

方式3️⃣:Fast Auth(快速认证)
项目 说明
触发条件 isSupportFastAuth == true
密钥来源 之前认证保存的会话密钥(设备Key)
适用场景 设备曾在过去成功认证过,可以快速恢复密钥
代码位置 auth_session_fsm.c:L1251-L1257
复制代码
if (authFsm->info.isSupportFastAuth) {
    AUTH_LOGI(AUTH_FSM, "fast auth succ");
    return RecoveryFastAuthKey(authFsm);
}

何时设置 - auth_session_json.c:L720-L757:

  1. 设备发送了 FAST_AUTH 加密标签
  2. 能够找到对应的设备密钥 (GetFastAuthKey)
  3. 解密验证标签内容为 "SOFTBUS_FAST_AUTH" 成功
  4. 设备是潜在可信设备 (IsPotentialTrustedDevice)

何时不设置

  • 对端版本过旧不发送fastAuth标签
  • 找不到设备密钥
  • 解密验证失败
  • 设备不在可信关系中

方式4️⃣:HiChain PAKE(完整认证)
项目 说明
触发条件 上述三种快速认证都不支持
密钥来源 PAKE协议实时协商生成
适用场景 首次认证、密钥过期、快速认证失败
代码位置 auth_session_fsm.c:L1261-L1273
复制代码
static int32_t ProcessClientAuthState(AuthFsm *authFsm)
{
    return HichainStartAuth(
        authFsm->authSeq, 
        authFsm->info.udid, 
        authFsm->info.connInfo.peerUid, 
        authFsm->info.userId
    );
}

四、触发条件汇总表

认证方式 条件标志 必需前提 失败回退
DmDeviceKey isSupportDmDeviceKey=true DM已预共享密钥 → HiChain PAKE
Normalized normalizedType=SUPPORT + 有可用密钥 双方支持标准化链路 → HiChain PAKE
Fast Auth isSupportFastAuth=true 曾成功认证过,有缓存密钥 → HiChain PAKE
HiChain PAKE 上述都不满足 最终认证方式
复制代码
场景1: 两设备首次配对(无任何历史密钥)
├── normalizedType = NORMALIZED_NOT_SUPPORT(不支持标准化)
├── isSupportFastAuth = false(没有历史密钥)
├── isSupportDmDeviceKey = false(没有DM密钥)
└── 进入: HiChain PAKE 完整认证

场景2: 设备曾认证过,恢复通信
├── normalizedType = NORMALIZED_SUPPORT(支持且有密钥)
├── 进入: Normalized Auth(跳过PAKE协商)

场景3: DM预共享密钥场景
├── isSupportDmDeviceKey = true(DM提供了设备密钥)
├── 进入: DmDeviceKey(最高优先级)

场景4: 历史密钥残留场景
├── normalizedType = NORMALIZED_KEY_ERROR(密钥有问题)
├── isSupportFastAuth = true(快速认证密钥可用)
└── 进入: Fast Auth

六、快速认证 vs 完整认证的本质区别

对比项 快速认证 (RecoveryKey) 完整认证 (HiChain PAKE)
是否需要PIN码 ❌ 不需要 ✅ 需要(PAKE协议)
密钥协商 从本地缓存恢复 实时ECDH类密钥交换
安全性 依赖历史密钥安全存储 基于PAKE协议更安全
认证速度 ⚡ 快(毫秒级) 🐢 慢(涉及网络往返)
适用场景 曾配对过的设备 首次配对/密钥过期
相关推荐
六bring个六2 天前
连接模块中的BLE方式GATT协议分析
ble·open harmony·gatt·分布式软总线
想你依然心痛6 天前
【共创季稿事节】HarmonyOS 7.0 分布式软总线架构演进与多端协同前瞻
超级终端·零信任安全·分布式软总线·harmonyos 7.0·多端协同·意图驱动发现·星闪协议
六bring个六7 天前
open Harmony中分布式软总线的学习任务清单
分布式·学习·c/c++·open harmony
六bring个六10 天前
文件互传在传输层的操作分析
分布式·p2p·c/c++·open harmony
六bring个六11 天前
文件互传功能实现
c/c++·open harmony·文件互传
IT从业者张某某8 个月前
DAY3-Open Harmony PC 命令行适配指南(Windows版)-git Permission denied (publickey) 问题
git·open harmony
鸿蒙小白龙8 个月前
OpenHarmony内核开发实战手册:编译构建、HCK框架与性能优化
harmonyos·鸿蒙·鸿蒙系统·open harmony
鸿蒙小白龙9 个月前
OpenHarmony Location Kit技术详解:定位、地理围栏与编码转换
华为·harmonyos·open harmony
Xxtaoaooo9 个月前
【成长纪实】HarmonyOS分布式软总线原理剖析:从理论到实践的完整指南
华为·harmonyos·原理解析·成长纪实·分布式软总线