OpenHarmony解读之设备认证:sts协议-客户端发起start请求

本文深入解析OpenHarmony设备认证中sts客户端如何发起start请求,涉及authenticate_peer函数、构建sts客户端对象、触发sts客户端请求、构造sts协议请求数据等关键步骤,确保设备间安全通信。
摘要由CSDN通过智能技术生成

一、概述

为实现用户个人数据在多个终端设备间的安全传输,设备认证模块提供将多个设备安全连接起来的能力,通过设备间信任关系建立和设备通信时信任关系验证保证安全性。主控设备和配件设备基于PAKE协议完成认证会话密钥协商,并基于该会话密钥,安全的交换各自身份公钥。
当建立过信任关系的主控设备与配件设备间进行通信时,双方将相互交换身份公钥,并通过检查本地是否存储对端身份信息的方式确认对端与本设备的信任关系。进一步地,基于双方的身份公私钥对,通信对端设备可以基于STS协议进行密钥协商并建立安全通信通道,支撑设备间通信数据的端到端加密传输。
从本文开始,将介绍基于STS协议的通信过程,本文重点介绍sts客户端发起start请求的过程。

二、源码分析

这一模块的源码位于:/base/security/deviceauth。

1. authenticate_peer函数:与对端进行身份认证。
/*
函数功能:与对端进行身份认证
函数参数:
    handle:句柄,可用相应结构套取
    params:操作参数
函数返回值:
    成功:0
    失败:error num
*/
DLL_API_PUBLIC int32_t authenticate_peer(hc_handle handle, struct operation_parameter *params)
{
   
    LOGI("Begin authenticate peer");//开始身份验证
    check_ptr_return_val(handle, HC_INPUT_ERROR);//检查参数有效性
    check_ptr_return_val(params, HC_INPUT_ERROR);
    struct hichain *hichain = (struct hichain *)handle;//hichain实例

    int32_t ret = build_object(hichain, STS_MODULAR, true, params);//创建hichain子对象,此处应为创建sts客户端对象
    if (ret != HC_OK) {
   
        LOGE("Build sts client sub object failed, error code is %d", ret);
        return ret;
    }

    ret = triggered_sts_client(hichain, AUTHENTICATE);//触发sts客户端发起AUTHENTICATE请求
    LOGI("Triggered sts client error code is %d", ret);
    LOGI("End authenticate peer");
    return ret;
}
2. build_sts_client_object函数:创建sts客户端对象。
//创建sts客户端对象
static void *build_sts_client_object(struct hichain *hichain, const void *params)
{
   
    struct operation_parameter *para = (struct operation_parameter *)params;//接收操作参数

    return build_sts_client(hichain, para->key_length, &para->self_auth_id,
                            &para->peer_auth_id);//创建sts客户端对象
}

/*
函数功能:创建sts客户端对象
函数参数:
    hichain_handle:hichain实例
    key_length:密钥长度
    client:客户端认证id
    server:服务端认证id
函数返回值:
    成功:返回sts_client对象
    失败:NULL
*/
struct sts_client *build_sts_client(const hc_handle hichain_handle, uint32_t key_length,
    const struct hc_auth_id *client, const struct hc_auth_id *server)
{
   
    struct sts_client *sts_client = (struct sts_client *)MALLOC(sizeof(struct sts_client));//为该对象申请内存空间
    if (sts_client == NULL) {
   
        LOGE("Build sts client object failed");
        return NULL;
    }
    (void)memset_s(sts_client, sizeof(*sts_client), 0, sizeof(*sts_client));//清空该空间

    struct client_virtual_func_group funcs = {
    build_start_request_data, parse_start_response_data,
                                               build_end_request_data, parse_end_response_data };//定义并初始化客户端虚函数组

    init_client(&sts_client->client_info, &funcs);//初始化客户端,包括协议基础信息(如初始状态等)和打包函数
    DBG_OUT("Build sts client object %u success", sts_client_sn(sts_client));

    sts_client->self_id = *client;//赋值本端认证id
    sts_client->peer_id = *server;//赋值对端认证id
    sts_client->identity = &((struct hichain *)hichain_handle)->identity;//赋值会话标识
    sts_client->key_length = key_length;
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值