分布式软总线认证模块架构与实现分析
一、整体架构概述软总线认证模块是OpenHarmony分布式通信的核心安全组件位于foundation/communication/dsoftbus/core/authentication/目录下。该模块基于HiChain安全认证框架实现了设备间的双向身份认证和会话密钥协商。二、认证管理器 (AuthManager)2.1 核心数据结构auth_manager.h:L18-L33typedef struct { int64_t authId; // 认证唯一标识 bool isServer; // 角色标志(服务器/客户端) uint64_t connId[AUTH_LINK_TYPE_MAX]; // 各链路连接ID AuthConnInfo connInfo[AUTH_LINK_TYPE_MAX]; // 连接信息 int64_t lastAuthSeq[AUTH_LINK_TYPE_MAX]; // 最近认证序列 SessionKeyList sessionKeyList; // 会话密钥列表 char udid[UDID_BUF_LEN]; // 设备唯一标识 char uuid[UUID_BUF_LEN]; // UUID SoftBusVersion version; // 协议版本 bool hasAuthPassed[AUTH_LINK_TYPE_MAX]; // 各链路认证状态 } AuthManager;2.2 关键管理接口创建认证管理器-NewAuthManager()根据authSeq和会话信息创建新的AuthManager实例客户端加入g_authClientList服务器加入g_authServerList初始化会话密钥列表删除认证管理器-DelAuthManager()支持按链路类型删除(type参数)仅删除单个链路时保留其他链路连接全部链路都无连接时才完全释放资源会话密钥管理AuthManagerSetSessionKey()- 设置会话密钥AuthManagerGetSessionKey()- 获取会话密钥RemoveAuthSessionKeyByIndex()- 按索引删除密钥2.3 双链表组织结构auth_manager.c:L45-L46static ListNode g_authClientList { g_authClientList, g_authClientList }; static ListNode g_authServerList { g_authServerList, g_authServerList };三、认证会话与状态机 (AuthSessionFsm)3.1 状态机定义auth_session_fsm.h:L24-L30typedef enum { STATE_SYNC_NEGOTIATION 0, // 协商阶段 STATE_SYNC_DEVICE_ID, // 设备ID同步 STATE_DEVICE_AUTH, // 设备认证(HiChain) STATE_SYNC_DEVICE_INFO, // 设备信息同步 STATE_NUM_MAX } AuthFsmStateIndex;3.2 状态转换图3.3 状态处理函数auth_session_fsm.c:L75-L99static FsmState g_states[STATE_NUM_MAX] { [STATE_SYNC_NEGOTIATION] { .enter SyncNegotiationEnter, .process SyncNegotiationStateProcess, .exit NULL, }, [STATE_SYNC_DEVICE_ID] { .enter SyncDevIdStateEnter, .process SyncDevIdStateProcess, .exit NULL, }, [STATE_DEVICE_AUTH] { .enter DeviceAuthStateEnter, .process DeviceAuthStateProcess, .exit NULL, }, [STATE_SYNC_DEVICE_INFO] { .enter NULL, .process SyncDevInfoStateProcess, .exit NULL, }, };3.4 消息类型定义auth_session_fsm.c:L36-L51typedef enum { FSM_MSG_RECV_DEVICE_ID, // 接收设备ID FSM_MSG_RECV_AUTH_DATA, // 接收认证数据 FSM_MSG_RECV_TEST_AUTH_DATA, // 接收测试数据 FSM_MSG_SAVE_SESSION_KEY, // 保存会话密钥 FSM_MSG_AUTH_ERROR, // 认证错误 FSM_MSG_RECV_DEVICE_INFO, // 接收设备信息 FSM_MSG_RECV_CLOSE_ACK, // 接收关闭确认 FSM_MSG_AUTH_FINISH, // 认证完成 FSM_MSG_AUTH_TIMEOUT, // 认证超时 FSM_MSG_DEVICE_NOT_TRUSTED, // 设备不可信 FSM_MSG_DEVICE_DISCONNECTED, // 设备断开 FSM_MSG_STOP_AUTH_FSM, // 停止认证 } StateMessageType;3.5 认证会话信息结构auth_session_fsm.h:L53-L82typedef struct { uint32_t requestId; bool isServer; uint64_t connId; AuthConnInfo connInfo; char udid[UDID_BUF_LEN]; char uuid[UUID_BUF_LEN]; char udidHash[SHA_256_HEX_HASH_LEN]; SoftBusVersion version; bool isSupportFastAuth; // 支持快速认证 bool isNeedFastAuth; // 需要快速认证 NormalizedType normalizedType; // 标准化类型 SessionKey *normalizedKey; // 标准化密钥 int64_t normalizedIndex; // 标准化索引 AuthStartState localState; // 本地认证状态 AuthStartState peerState; // 对方认证状态 // ... } AuthSessionInfo;四、设备认证 (AuthDevice)4.1 设备认证核心功能auth_device.h:L19-L32int32_t AuthDevicePostTransData(AuthHandle authHandle, const AuthTransData *dataInfo); int32_t AuthDeviceEncrypt(AuthHandle *authHandle, const uint8_t *inData, uint32_t inLen, ...); int32_t AuthDeviceDecrypt(AuthHandle *authHandle, const uint8_t *inData, uint32_t inLen, ...); int32_t AuthDeviceGetConnInfo(AuthHandle authHandle, AuthConnInfo *connInfo); void AuthDeviceNotTrust(const char *udid); // 标记设备不可信 int32_t AuthDirectOnlineCreateAuthManager(int64_t authSeq, const AuthSessionInfo *info);4.2 认证限制机制auth_device.c:L22-L90设备认证失败后会触发限制机制防止频繁重试#define DELAY_AUTH_TIME (8 * 1000L) // 8秒延迟 void AuthAddNodeToLimitMap(const char *udid, int32_t reason) { // 当reason为以下情况时加入限制map // - SOFTBUS_AUTH_HICHAIN_LOCAL_IDENTITY_NOT_EXIST // - SOFTBUS_AUTH_HICHAIN_GROUP_NOT_EXIST // - SOFTBUS_AUTH_HICHAIN_NO_CANDIDATE_GROUP } bool IsNeedAuthLimit(const char *udidHash) { // 检查限制map如果在8秒内则延迟认证 }五、HiChain安全认证5.1 HiChain概述HiChain是设备认证的核心安全协议栈基于PAKE(Password-Authenticated Key Exchange)协议族实现支持P2P认证设备间直接认证账户认证支持华为账号体系Mesh认证多设备组网认证5.2 核心接口auth_hichain.h:L20-L40int32_t HichainStartAuth(int64_t authSeq, const char *udid, const char *uid, int32_t userId); int32_t HichainProcessData(int64_t authSeq, const uint8_t *data, uint32_t len); void HichainCancelRequest(int64_t authReqId);5.3 PAKE协议实现pake_server.h:L20-L80struct pake_server { struct key_agreement_server server_info; uint32_t key_length; struct hc_pin pin; struct hc_salt salt; struct hc_auth_id self_id; struct hc_auth_id peer_id; struct esk self_esk; // 临时私钥 struct pake_session_key session_key; // 会话密钥 struct pake_hmac_key hmac_key; // HMAC密钥 struct hc_session_key service_key; // 服务密钥 // ... };5.4 HiChain回调机制auth_hichain.c:L55-L90static bool OnTransmit(int64_t authSeq, const uint8_t *data, uint32_t len) { // 将数据通过AuthSessionPostAuthData发送到对端 } static void OnSessionKeyReturned(int64_t authSeq, const uint8_t *sessionKey, uint32_t sessionKeyLen) { // 密钥协商成功后保存会话密钥 (void)AuthSessionSaveSessionKey(authSeq, sessionKey, sessionKeyLen); } static void OnFinish(int64_t authSeq, int operationCode, const char *returnData) { // 认证完成处理 (void)AuthSessionHandleAuthFinish(authSeq); }5.5 错误码转换auth_hichain.c:L110-L135HiChain错误码转换为SoftBus错误码#define HICHAIN_DAS_ERRCODE_MIN 0xF0000001 #define HICHAIN_DAS_ERRCODE_MAX 0xF00010FF #define HICHAIN_COMMON_ERRCODE_MIN 0x0001 #define HICHAIN_COMMON_ERRCODE_MAX 0xFFFF void GetSoftbusHichainAuthErrorCode(uint32_t hichainErrCode, uint32_t *softbusErrCode) { // 根据错误码范围进行转换 }六、认证连接 (AuthConnection)6.1 连接管理结构auth_connection.h:L15-L35typedef struct { void (*onConnectResult)(uint32_t requestId, uint64_t connId, int32_t result, const AuthConnInfo *connInfo); void (*onDisconnected)(uint64_t connId, const AuthConnInfo *connInfo); void (*onDataReceived)(uint64_t connId, const AuthConnInfo *connInfo, bool fromServer, const AuthDataHead *head, const uint8_t *data); } AuthConnListener;6.2 连接ID生成auth_connection.c:L65-L75uint64_t GenConnId(int32_t connType, int32_t id) { uint64_t connId (uint64_t)connType; connId (connId INT32_BIT_NUM) MASK_UINT64_H32; connId | (((uint64_t)id) MASK_UINT64_L32); return connId; }6.3 支持的链路类型auth_common.h:L18-L30typedef enum { DATA_TYPE_AUTH 0xFFFF0001, // 设备认证数据 DATA_TYPE_DEVICE_INFO 0xFFFF0002, // 设备信息同步 DATA_TYPE_DEVICE_ID 0xFFFF0003, // 设备ID同步 DATA_TYPE_CONNECTION 0xFFFF0004, // 连接数据 DATA_TYPE_CLOSE_ACK 0xFFFF0005, // 关闭确认 DATA_TYPE_META_NEGOTIATION 0xFFFF0006, // Meta协商 DATA_TYPE_DECRYPT_FAIL 0xFFFF0007, // 解密失败 DATA_TYPE_META_DEVICE_INFO_ACK 0xFFFF0008, DATA_TYPE_CANCEL_AUTH 0xFFFF0009, } AuthDataType;6.4 数据收发流程ConnectAuthDevice() // 建立认证连接 PostAuthData() // 发送认证数据 AuthConnListener // 回调通知连接结果和数据接收七、Meta认证与PTK7.1 Meta认证管理auth_meta_manager.h:L18-L35int32_t AuthMetaInit(const AuthTransCallback *callback); int32_t AuthMetaStartVerify(uint32_t connectionId, const AuthKeyInfo *authKeyInfo, uint32_t requestId, int32_t callingPid, const AuthVerifyCallback *callBack); void AuthMetaReleaseVerify(int64_t authId); int32_t AuthMetaEncrypt(int64_t authId, const uint8_t *inData, uint32_t inLen, ...); int32_t AuthMetaDecrypt(int64_t authId, const uint8_t *inData, uint32_t inLen, ...);7.2 PTK处理流程auth_meta_ptk_proc.h:L18-L30int32_t AuthGetPtkSyncInfoByAuthId(int64_t authId, bool *syncDone, int32_t *reason); int32_t AuthAddPtkSyncInfoForPendingList(AuthHandle authHandle, const NodeInfo *nodeInfo); int32_t AuthDelPtkSyncInfoFromPendingList(int64_t authId); int32_t AuthWaitingRequestCallback(int64_t authId); int32_t UpdateAuthSyncPtkInfoStatus(int64_t authId); int64_t GetAuthIdFromAuthSyncPtkInfo(const char *uuid);7.3 PTK同步状态Meta认证中的PTK(Peer Transaction Key)同步机制八、认证流程时序图九、关键安全特性9.1 密钥长度与算法PAKE密钥长度16字节(128位) - auth_hichain.c:L28会话密钥长度16字节 - pake_server.h:L26支持快速认证通过normalizedKey实现无PAKE协商的快速认证9.2 认证超时机制认证总超时30秒 - auth_common.c:L52各状态超时处理协商/设备ID同步超时 →SOFTBUS_AUTH_SYNC_DEVICEID_TIMEOUT设备认证超时 →SOFTBUS_AUTH_HICHAIN_TIMEOUT设备信息同步超时 →SOFTBUS_AUTH_SYNC_DEVICEINFO_TIMEOUT9.3 并发认证控制AddConcurrentAuthRequest()- 添加并发认证请求同一UDID的多个认证请求会被队列管理十、总结软总线认证模块采用分层架构设计层级组件职责管理层AuthManager维护已认证设备的会话和状态会话层AuthSessionFsm管理认证流程的4状态状态机协议层HiChainPAKE协议实现安全密钥协商连接层AuthConnection底层连接和数据传输Meta层AuthMetaManager元认证和PTK管理该设计实现了多链路统一认证支持WiFi/BLE/P2P等多种链路快速认证通过normalizedKey跳过PAKE协商安全可靠基于PAKE协议族提供身份认证和密钥协商高可用支持并发认证请求和超时重试机制

相关新闻

高校严查AI写作!如何让论文“天然抗检测”,这3招是关键

高校严查AI写作!如何让论文“天然抗检测”,这3招是关键

博主介绍:✌️码农一枚 ,专注于大学生🚢文降重,降AIGC服务 ✌️技术范围:全学科🚢文降重,降AIGC服务 主要内容:人工降重和降AIGC,基于语义理解重构句式,替换同…

2026/10/3 9:21:32 阅读更多 →
C语言学习心得(2026.7.19)

C语言学习心得(2026.7.19)

介绍目标我是一名电气工程及其自动化准大二学生,之前对c语言有过初步学习,但感觉学得较浅,所以我的目标就是进一步对C语言的本质进行学习,了解其底层逻辑,同时也要加强对指针,结构体,函数的掌握…

2026/10/6 21:38:30 阅读更多 →
2026年毕业论文指导小程序全方位横评:五大真实平台深度对比

2026年毕业论文指导小程序全方位横评:五大真实平台深度对比

先说结论,2026年打工人和学生党选毕业论文指导小程序,如果不想被坑到哭,直接看这三家就够了:学范文凭7.0亿文献库全套软著核心壁垒坐稳综合实力榜首;PaperPass靠查重指纹算法稳居查重避坑梯队;笔杆网则用32…

2026/10/6 16:56:40 阅读更多 →

最新新闻

libnodave实战:在C#和LABVIEW中调用S7通讯库

libnodave实战:在C#和LABVIEW中调用S7通讯库

简介:libnodave-0.8.5.zip 是一套面向工业自动化开发者的西门子 S7 系列 PLC 通信库,适合在 LABVIEW、C# 等环境中集成调用,解决跨平台与 PLC 进行数据交互的问题。压缩包共 120 个文件,约 1.71MB,包含 28 个 C 源码、…

2026/10/12 7:35:23 阅读更多 →
数据恢复全链路:文件系统原理、开源工具与避坑指南

数据恢复全链路:文件系统原理、开源工具与避坑指南

简介:易我数据恢复软件(EaseUS Data Recovery Wizard)技术员版v11.9.0以中文绿色便携形式打包,专为系统维护、数据救援及临时应急场景设计,面向有数据找回需求的技术员和普通用户。工具可覆盖电脑误删文件、格式化硬盘…

2026/10/12 7:35:23 阅读更多 →
中控考勤机C#开发实战:通信选型、SDK对接与避坑指南

中控考勤机C#开发实战:通信选型、SDK对接与避坑指南

简介:面向中控考勤机二次开发的工程师与集成商,这份资料包聚焦设备通讯、SDK调用与考勤数据管理,提供从底层API到界面实现的完整参考。压缩包共1264个文件,容量约11.08MB,包含221个C#源码(cs)、…

2026/10/12 7:35:23 阅读更多 →
Linux iNode 7.3 802.1X认证客户端安装配置与排错指南

Linux iNode 7.3 802.1X认证客户端安装配置与排错指南

简介:面向64位Linux运维与网络管理人员的H3C iNodeManager网络管理工具安装包,用于统一管控H3C路由器、交换机等设备,适合需要配置管理、性能监控和故障检测的中大型网络环境。压缩包共25个文件,整体约47.9MB,除核心可…

2026/10/12 7:35:23 阅读更多 →
Vue应用打包Linux桌面客户端:一键安装与自动升级实践

Vue应用打包Linux桌面客户端:一键安装与自动升级实践

Vue 应用交付时通常是给用户一个浏览器地址,但在 Linux 客户机这个场景里,事情没那么简单。客户机往往是工控机、瘦终端、旧台式机,没有固定的人去维护浏览器,网络也不保证稳定,操作员更不可能记一串 IP 再去敲回车。把…

2026/10/12 7:35:23 阅读更多 →
WASI 文件系统路径解析与沙箱机制深度剖析:从 openat 手动算法到 openat2 内核原语

WASI 文件系统路径解析与沙箱机制深度剖析:从 openat 手动算法到 openat2 内核原语

【免费下载链接】WASI WebAssembly System Interface 项目地址: https://gitcode.com/gh_mirrors/wa/WASI 点击查看 免费下载 导读 WASI(WebAssembly System Interface)的文件系统接口采用"能力导向(capability-oriented&a…

2026/10/12 7:34:22 阅读更多 →

日新闻

复古胶片颗粒感噪点合成器:Canvas ImageData 像素高斯杂色注入算法

复古胶片颗粒感噪点合成器:Canvas ImageData 像素高斯杂色注入算法

在数码相机、高清显示屏与现代矢量图形技术高度发达的今天,画面可以做到绝对的锐利、平滑与无瑕。然而,当一张秋日手账插画或拍立得照片过于“平整无瑕”时,往往会散发出一种冰冷生硬的“数码塑料感(Digital Plasticity&#xff0…

2026/10/12 0:00:59 阅读更多 →
活字印刷古籍线装排版:Canvas 竖排文字与栏线自适应算法

活字印刷古籍线装排版:Canvas 竖排文字与栏线自适应算法

在现代网页与移动端设计中,横排(Horizontal Layout)早已经成为了绝对的主流。然而,当我们翻开泛黄的线装古籍、宋版木刻诗集,或是欣赏一张茶道雅集的手写便签时,那种**自上而下纵向书写、自右向左逐列铺展&…

2026/10/12 0:00:59 阅读更多 →
周日晚间的“精神松绑减震器”:无压力情绪倾倒箱与温和轻声陪伴

周日晚间的“精神松绑减震器”:无压力情绪倾倒箱与温和轻声陪伴

每到周日的晚上八点到十点,很多人心里都会悄悄亮起一盏警示灯。 在心理学上,这种现象有一个专门的称谓——“周日夜晚焦虑症(Sunday Scaries)”。明天又是周一,闹钟又要重新在七点响彻卧房;脑海里仿佛有一个…

2026/10/12 0:00:59 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/12 0:16:30 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/12 0:16:38 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/12 0:16:43 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 10:45:37 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 14:36:53 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 14:36:54 阅读更多 →