authmanager模块是鸿蒙为设备提供认证机制的模块。模块内的主要处理过程包括报文的接收、解密、再次封装、加密、发送的步骤。譬如,当发现有请求时,调用ProcessDataEvent(wifi_auth_manager)函数,收包、检验包头,根据数据包的类型确定不同的处理方式。数据包的类型主要包括以下三种:
MODULE_AUTH_SDK 加密数据类型
MODULE_TRUST_ENGINE 可信类型,直接进行数据传输
MODULE_CONNECTION 进行IP及设备认证
1) 模块的内部结构关系
2) 加密发送步骤及算法
AES-GCM加密算法:AES是一种对称加密算法,GCM是对该对称加密采用Counter模式,并带有GMAC消息认证码。AES-GCM算法是带认证和加密的算法,同时可以对给定的原文,生成加密数据和认证码。
3) 鸿蒙设备互联安全
以下是鸿蒙官网文档的设备互联安全参考图
实现用户数据在设备互联场景下,在各个设备之间的安全流转,实现用户数据的安全传输。
绑定的流程
设备分别生成Ed25519密钥对;
利用PIN码和PAKE(Password authenticated key exchange)进行密钥协商,生成会话密钥;
通过会话密钥加密彼此的公钥(也可不用加密,算个MAC就行,只要能验证公钥确实来自对方即可)
这里的身份标识公钥指的应该是(设备标识, 公钥)的二元组
通信的流程
公钥协商会话密钥;会话密钥应怎么用,一般来说,会将初步协商的密钥进行密钥分散,分为加密密钥、MAC密钥等;
使用会话密钥加密通信数据。
当建立信任关系的主控设备与设备间在进行通信时,双方首先完成信任关系绑定,然后基于存储在本地的对端身份公钥相互进行认证;在每次通信时完成双向身份认证以及会话密钥协商,之后设备使用此会话密钥来解密双方设备间的传输通道。
4.5 认证与会话传输trans_service模块依赖于系统OS提供的网络socket服务,向认证模块提供认证通道管理和认证数据的收发;向业务模块提供session管理和基于session的数据收发功能,并且通过GCM模块的加密功能提供收发报文的加解密保护。
被发现端(轻量设备)注册、发布服务,成功后回调处理,被发现端使用CreateSessionServer来创建会话服务器并等待发现端的连接、创建会话。发现端(如:智慧屏设备)根据服务的名称和设备ID建立一个会话,就可以实现服务间的数据传输。
数据传输部分的源代码位于trans_service/source/libdistbus目录。
主要处理的步骤参考如下:
CreateSessionServer[会话] à SelectSessionLoop[数据] à OnBytesReceived[回调]
1) CreateSessionServer创建会话