近端安全互联样例使用指导

news2024/12/23 3:21:41

样例介绍

本样例基于rk3568开发板,通过封装openharmony安全子系统deviceauth组件提供的能力,实现了一组可用于设备间快速建立可信认证和连接的接口,通过预先定义关系网,在设备初始化阶段完成端端设备间的认证,构建安全的数据传输通道。

场景介绍

本样例可以作为一个SDK集成到设备版本中,供上层业务APP或IOT SDK使用,具体应用场景可参考下图:

场景1:在城市鸿蒙的智慧管廊场景中,可以通过近端安全互联组件进行设备间可信认证与连接,当燃气监测仪监测到燃气泄漏时,及时对现场进行有效处理。例如:场景内甲烷浓度超标,但是风机没有正常启动,容易造成火灾,导致人员伤亡。在集成近端安全互联组件后,近端设备间可以建立安全的连接,当发生燃气泄漏时,可以实现电磁阀自动关闭、风机自动开启,避免管廊内发生火灾。

场景2:在交通鸿蒙的智慧隧道场景中,可以通过近端安全互联组件进行设备间可信认证与连接,当气体检测仪检测到浓度超标时,近端设备可以自动运行,及时处理现场,避免人工处理错过最佳时间,产生二次伤害。例如:隧道内的气体检测仪检测到浓度超标,但是风机未启动,导致有毒有害气体无法排出,造成人员伤亡。在集成近端安全互联组件后,近端设备间可以组建安全的通信网络,当隧道内气体浓度超标时,检测仪可以直接发送指令给风机,通知风机启动,及时将有毒有害气体排出隧道。

基于上述场景,产生了如下需求:近端设备间实现安全的组网和通信,能够自发进行联动。

本样例以rk3568开发板作为载体,实现设备的近端安全互联与通信,可以应用于上述场景,有效解决该场景中存在的问题。

样例实现的功能包括:

  • 同局域网设备间的互联

  • 获取设备预置的PIN码

  • 基于PIN码和deviceauth模块实现设备互信认证

  • 点对点设备间数据安全传输

本样例可以配合IOT SDK一起使用,IOT SDK主要承担设备注册与PIN码管理的功能,使用者也可以根据自身的实际情况选择用业务APP代替。

IOT SDK源码可以从如下地址获取:https://github.com/huaweicloud/huaweicloud-iot-device-sdk-c

约束与限制

特别说明

  • 本样例仅适用于端端设备间需要保持长连接的场景,除非本端业务主动断开与对端设备的连接,样例本身不会自动超时断开。

  • 设备间连接断开后,当再次连接时会重新进行设备认证,因此会获得新的会话密钥。

  • 保持长连接可以保障设备间数据传输的及时性,但也存在一些安全隐患,比如会话密钥不会进行更新,时间太长就存在泄露的风险,如果对该安全风险比较敏感,请勿使用本样例。

硬件说明

通过测试,rk3568开发板在作为服务端时,最多可连接100台客户端,在作为客户端时,最多可连接100台服务端。

本样例仅选取两块rk3568开发板进行介绍与演示,其中一块作为服务端,一块作为客户端。

环境准备

硬件准备

安装windows 10及以上操作系统的PC主机

两台rk3568开发板

构建环境

首先需要在PC主机上安装Ubuntu操作系统,以提供基础的编译环境,安装方法可参考:https://developer.huawei.com/consumer/cn/training/course/video/C101639987816176315

然后完成Ubuntu基础环境的配置,可参考:https://developer.huawei.com/consumer/cn/training/course/video/C101639988048536240

在Ubuntu系统中下载源码前请先执行如下指令安装所需的工具:

sudo apt-get update && sudo apt-get install binutils git git-lfs gnupg flex bison gperf build-essential zip curl zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z1-dev ccache libgl1-mesa-dev libxml2-utils xsltproc unzip m4 bc gnutls-bin python3.8 python3-pip ruby genext2fs liblz4-tool libssl-dev libtinfo-dev libtinfo5 openjdk-17-jre-headless libc6 libstdc++6 default-jdk u-boot-tools mtools mtd-utils scons gcc-arm-linux-gnueabi

该样例适配的源码版本为:Openharmony-3.1-Release,请确保下载代码时分支选择正确。

源码获取方式可参考开源社区文档 http://www.openharmony.cn/download ,选择第一种获取方式,并使用以下命令替换文档中的下载命令:

repo init -u https://gitee.com/openharmony/manifest.git -b refs/tags/OpenHarmony-v3.1-Release --no-repo-verify
repo sync -c
repo forall -c 'git lfs pull'

编译验证

下载源码后,需要先编译rk3568版本通过,以确保编译环境正常可用。

切换到源码根目录,执行如下命令,安装编译器及二进制工具:

bash build/prebuilts\_download.sh

接着执行如下命令进行版本编译:

./build.sh --product-name rk3568 --ccache

编译完成后,日志中显示如下,则表示编译成功:

\=====build rk3568 successful.

编译生成的镜像文件在 out/rk3568/packages/phone/images/ 目录下。

集成样例

样例源码介绍

样例源码存放在00_src目录下,各个目录中的文件功能如下表:

目录功能说明
dconnectcaseone基于openharmony安全子系统deviceauth组件开发的分布式安全通信样例,可用于多个设备间基于预先定义的关系网完成可信认证与连接,构建安全的数据传输通道
test用于验证样例功能可用的业务程序示例代码,使用者可以参考该代码定制自己的业务程序
figures用于存放readme文件中的图片资源

修改社区源码

基于rk3568设备集成编译该样例时,需要按照如下步骤修改源码(+表示增加行,-表示删除行):

  • 修改base/security/deviceauth/common_lib/impl/src/clib_types.c文件内容:
 void *ClibMalloc(uint32_t size, char val)
 {
-    if (size == 0 || size > CLIB_MAX_MALLOC_SIZE) {
+    if (size == 0) {
         return NULL;
     }
     void* addr = malloc(size);
  • 修改base/security/deviceauth/common_lib/interfaces/clib_types.h文件内容:
 #define NULL 0
 #endif
 
-#define CLIB_MAX_MALLOC_SIZE 4096 /* 4K */
-
 #ifdef __cplusplus
 extern "C" {
 #endif
  • 修改build/prebuilts_download.sh文件内容:
-node_js_ver=v12.18.4
+node_js_ver='v12.18.4'
 node_js_name=node-${node_js_ver}-${host_platform}-x64
 node_js_pkg=${node_js_name}.tar.gz
  • 修改third_party/jsframework/package.json文件内容:
     "sinon": "^9.2.2",
     "ts-node": "^9.0.0",
     "tslib": "^2.0.3",
-    "typescript": "^4.1.2"
+    "typescript": "4.1.3"
   }
 }

接着按照如下流程将样例集成到rk3568产品版本中:

  • 在社区源码的vendor目录下新建目录kits,并将00_src目录下的所有文件放到kits目录下。

  • 修改build/subsystem_config.json文件,增加如下内容,新增一个subsystem:

"kits": {
  "path": "vendor/kits",
  "name": "kits"
},
  • 修改productdefine/common/products/rk3568.json文件,在parts中新增kits中的两个部件:
"type": "standard",
  "product_build_path": "device/hihope/build",
  "parts":{
      "kits:dconnectcaseone":{},
      "kits:test":{},
      "ace:ace_engine_standard":{},

编译镜像

切换到源码根目录,执行如下命令,进行编译构建:

./build.sh --product-name rk3568 --ccache

编译成功后,在 /out/rk3568 目录中通过如下指令检查是否包含本样例:

find ./out/rk3568 -name "libdconnectcaseone.z.so"

通过如下指令检查是否包含测试用业务程序:

find ./out/rk3568/kits -name "demo"

如果找不到样例对应的so文件,请检查00_src目录下的文件是否全部放到了kits目录下(请注意:ohos.build文件也是必需的)。

烧录镜像

环境准备

从 out/rk3568/packages/phone/images/ 目录下复制编译成功的rk3568镜像文件到PC的windows环境中。

然后按照如下流程配置PC的HDC环境:

  • 切换到Ubuntu环境中的源码根目录,执行如下命令,编译ohos-sdk包:
    ./build.sh --product-name ohos-sdk --ccache
  • 编译完成后,从out/sdk/ohos-sdk/windows/ 目录下将toolchains目录整个复制出来,放到D盘根目录下。

  • 将toolchains目录中的hdc_std.exe文件重命名为hdc.exe,方便后续使用,如下图所示:

  • 在环境变量-系统变量-Path中新建一项,值设置为D:\toolchains,之后可以在cmd窗口中直接使用HDC指令:

烧录指导

请参考如下链接进行烧录:

https://gitee.com/hihope_iot/docs/blob/master/HiHope_DAYU200/docs/%E7%83%A7%E5%BD%95%E6%8C%87%E5%AF%BC%E6%96%87%E6%A1%A3.md

烧录验证

烧录完成后,开发板正常启动进入桌面(若未正常启动,需检查烧录是否失败)。

保持USB线仍为连接状态,在PC上开启一个cmd窗口,执行 hdc list targets,可以看到对应设备的序列号,如下图:

接着按下图所示指令执行,可以看到输出libdconnectcaseone.z.so的详细信息,则表示烧录成功:

另外,业务程序对应的可执行文件可通过如下方式找到:

使用说明

开发板烧录镜像完成后,可以通过HDC指令进入设备的shell界面,切换到/system/bin目录下,通过ls -l demo指令可以看到可执行文件demo,就是我们的测试用业务程序。

将两台设备连接网络,通过ifconfig指令查看设备的IP地址,按照下图所示的操作将其中一台设备初始化为服务端,另一台初始化为客户端,在执行客户端初始化时两端设备会自动进行绑定和认证,可以新开一个shell窗口查看认证过程中的日志。

服务端初始化(上边为初始化操作指令,下边为样例打印的日志):

客户端初始化(上边为初始化操作指令,下边为样例打印的日志):

可信认证(左侧为服务端,右侧为客户端,认证会在初始化客户端时自动触发):

收发数据(左侧为服务端,右侧为客户端):

接口列表

本样例将枚举及宏定义、回调函数、对外接口的定义内容放置于下面的头文件中:

dconnectcaseone/interface/include/dconncaseone_interface.h

回调函数

接口名描述
typedef void (*SendDataCallback)(const char *device, uint32_t result)数据发送回调函数
typedef void (*ReceiveDataCallback)(const char *deviceId, const char *receiveData, uint32_t datelen)数据接收回调函数
typedef bool (*IsValidIP)(const char *ip)校验当前连接服务端的
客户端IP地址是否合法
typedef bool (*IsValidDeviceID)(const char *deviceID)校验当前连接服务端的
客户端的设备ID是否合法
typedef char *( *GetAuthKey)(const char *targetDeviceID)获取对应设备的PIN码
typedef char *( *GetDeviceID)()获取本设备ID

样例接口

接口名描述
DCONN_API_PUBLIC uint32_t InitDConnCaseOne(uint32_t type, const char *ipAry, char *errorIp);初始化样例。初始化类型:INIT_SERVICE/INIT_CLIENT
ipAry:IP地址字符串
初始化服务端时仅可传入一个 IP 地址
初始化客户端时可传入多个,以半角逗号分隔
DCONN_API_PUBLIC void RegisterCallback(const CallbackParam *callback);注册回调函数
DCONN_API_PUBLIC uint32_t DConnSendData(const char *targetDeviceId, const char *data, uint32_t dataLen);发送数据
DCONN_API_PUBLIC void UnRegisterCallback();取消注册回调函数
DCONN_API_PUBLIC void CloseDConnCaseOne();关闭样例
DCONN_API_PUBLIC const char *GetDConnVersion();获取样例版本号

为了能让大家更好的学习鸿蒙(HarmonyOS NEXT)开发技术,这边特意整理了《鸿蒙开发学习手册》(共计890页),希望对大家有所帮助:https://qr21.cn/FV7h05

《鸿蒙开发学习手册》:

如何快速入门:https://qr21.cn/FV7h05

  1. 基本概念
  2. 构建第一个ArkTS应用
  3. ……

开发基础知识:https://qr21.cn/FV7h05

  1. 应用基础知识
  2. 配置文件
  3. 应用数据管理
  4. 应用安全管理
  5. 应用隐私保护
  6. 三方应用调用管控机制
  7. 资源分类与访问
  8. 学习ArkTS语言
  9. ……

基于ArkTS 开发:https://qr21.cn/FV7h05

  1. Ability开发
  2. UI开发
  3. 公共事件与通知
  4. 窗口管理
  5. 媒体
  6. 安全
  7. 网络与链接
  8. 电话服务
  9. 数据管理
  10. 后台任务(Background Task)管理
  11. 设备管理
  12. 设备使用信息统计
  13. DFX
  14. 国际化开发
  15. 折叠屏系列
  16. ……

鸿蒙开发面试真题(含参考答案):https://qr18.cn/F781PH

鸿蒙开发面试大盘集篇(共计319页):https://qr18.cn/F781PH

1.项目开发必备面试题
2.性能优化方向
3.架构方向
4.鸿蒙开发系统底层方向
5.鸿蒙音视频开发方向
6.鸿蒙车载开发方向
7.鸿蒙南向开发方向

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1602535.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

探索设计模式的魅力:融合AI大模型与函数式编程、开启智能编程新纪元

​🌈 个人主页:danci_ 🔥 系列专栏:《设计模式》 💪🏻 制定明确可量化的目标,坚持默默的做事。 ✨欢迎加入探索AI大模型与函数式编程模式融合之旅✨ 在编程世界的广阔疆域里,两大…

mamba->jamba

1 mamba解决什么问题 Transformer的问题,其计算复杂度与序列长度的平方成正比,导致在处理长序列时效率低下。 Transformer 的注意力创建一个矩阵,将每个 token 与之前的每个 token 进行比较。矩阵中的权重由 token 对之间的相关性决定。 长度…

B树(B-tree)

B树(B-tree) B树(B-tree)是一种自平衡的多路查找树,主要用于磁盘或其他直接存取的辅助存储设备 B树能够保持数据有序,并允许在对数时间内完成查找、插入及删除等操作 这种数据结构常被应用在数据库和文件系统的实现上 B树的特点包括: B树为…

EelasticSearch是什么?及EelasticSearch的安装

一、概述 Elasticsearch 是一个基于 Apache Lucene 构建的开源分布式搜索引擎和分析引擎。它专为云计算环境设计,提供了一个分布式的、高可用的实时分析和搜索平台。Elasticsearch 可以处理大量数据,并且具备横向扩展能力,能够通过增加更多的…

如何获取手机root权限?

获取手机的 root 权限通常是指在 Android 设备上获取超级用户权限,这样用户就可以访问和修改系统文件、安装定制的 ROM、管理应用权限等。然而,需要注意的是,获取 root 权限可能会导致手机失去保修、安全性降低以及使系统变得不稳定。在获取 …

大话设计模式之单例模式

单例模式是一种创建型设计模式,它确保类只有一个实例,并提供一个全局访问点来访问该实例。 单例模式通常在以下情况下使用: 当一个类只能有一个实例,并且客户端需要访问该实例时。当该唯一实例需要被公开访问,以便在…

基于8B/10BGT收发器的PHY层设计(1)

一、PHY层简介 PHY层(Physical Layer)是OSI模型中最低的一层,也是最基本的一层,PHY是物理接口收发器,它实现物理层。包括MII/GMII(介质独立接口)子层、PCS(物理编码子层&#xff09…

c++的学习之路:24、 二叉搜索树概念

摘要 本章主要是讲一下二叉搜索树的实现 目录 摘要 一、二叉搜索树概念 二、 二叉搜索树操作 1、二叉搜索树的查找 2、二叉搜索树的插入 3、二叉搜索树的删除 三、二叉搜索树的实现 1、插入 2、中序遍历 3、删除 4、查找 四、二叉搜索树的递归实现 1、插入 2、删…

Java的maven项目导入本地jar包的三种方式

一、使用本地jar包 在项目中创建一个lib文件夹&#xff0c;将想要使用的本地jar包放进去 然后直接在pom.xml中添加下列依赖&#xff08;项目协作推荐&#xff09; <dependency><groupId>com.fpl</groupId><artifactId>spring</artifactId><…

牛客NC197 跳跃游戏(一)【中等 动态规划 Java、Go、PHP】

题目 题目链接&#xff1a; https://www.nowcoder.com/practice/23407eccb76447038d7c0f568370c1bd 思路 答案说的merge区间就是每个A[i]的地方能跳到的最远坐标是A[i] [i]&#xff0c; 有一个maxReach&#xff0c;遍历一遍A[i], 不断刷新MaxReach, 如果某个i 位置比maxReac…

你觉得职场能力重要还是情商重要?

职场能力和情商都是职业成功的关键因素&#xff0c;它们在不同的情境和角色中扮演着不同的作用。很难简单地说哪一个更重要&#xff0c;因为它们通常是相辅相成的。 职场能力包括专业技能、知识水平、解决问题的能力、工作效率、创新思维等。这些能力是完成工作任务、达成职业目…

通讯录的实现(顺序表)

前言&#xff1a;上篇文章我们讲解的顺序表以及顺序表的具体实现过程&#xff0c;那么我们的顺序表在实际应用中又有什么作用呢&#xff1f;今天我们就基于顺序表来实现一下通讯录。 目录 一.准备工作 二.通讯录的实现 1.通讯录的初始化 2.插入联系人 3.删除联系人 4.…

一篇文章详细介绍Stable Diffusion模型原理及实现过程(附常用模型网站、下载方式)

目录 前言 何为Stable Diffusion模型&#xff1f; Stable Diffusion工作原理&#xff1a; Stable Diffusion模型的应用场景 Stable Diffusion免费使用网站 stability.ai: 本地部署 Stable Diffusion方法&#xff1a; StableDiffusion中文网 博主介绍&#xff1a;✌专注于前后端…

任务管理与守护进程

1.前台进程与后台进程 1.1守护进程 在上一章中&#xff0c;我们实现了一个Tcp服务器&#xff0c;但是这个服务器还存在一些问题&#xff0c;例如&#xff0c;我们将云服务器&#xff08;xshell&#xff09;关闭之后&#xff0c;服务器就无法使用了。 但是真正的服务器肯定不…

Stable Diffusion WebUI 控制网络 ControlNet 插件实现精准控图-详细教程

本文收录于《AI绘画从入门到精通》专栏&#xff0c;专栏总目录&#xff1a;点这里&#xff0c;订阅后可阅读专栏内所有文章。 大家好&#xff0c;我是水滴~~ 本文主要介绍 Stable Diffusion WebUI 一个比较重要的插件 ControlNet&#xff08;控制网络&#xff09;&#xff0c;主…

第46篇:随机存取存储器(RAM)模块<五>

Q&#xff1a;本期我们使用Quartus软件的IP Catalog工具创建双端口RAM。 A&#xff1a;前期创建的RAM存储模块只有一个端口&#xff0c;同时为读/写操作提供地址。我们将再创建一个具有两个地址输入端口的RAM模块&#xff0c;分别为读操作和写操作提供地址。选择Basic Functio…

Ubuntu:VSCode中编译运行C++代码

版本&#xff1a;Ubuntu22.04.1 LTS 目录 1 安装VSCode并汉化 2 检查Ubuntu是否已经安装了 GCC 3 在VScode中安装C/C扩展 4 在VSCode中进行C/C配置 1 安装VSCode并汉化 安装VSCode&#xff08;参考之前博客Ubuntu&#xff1a;安装VSCode_ubuntu vscode-CSDN博客&#xff…

两数相加(链表)

2. 两数相加 - 力扣&#xff08;LeetCode&#xff09; 题解 给你两个 非空 的链表&#xff0c;表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的&#xff0c;并且每个节点只能存储 一位 数字。 请你将两个数相加&#xff0c;并以相同形式返回一个表示和的链表。…

深入理解 pytest Fixture 方法及其应用

当涉及到编写自动化测试时&#xff0c;测试框架和工具的选择对于测试用例的设计和执行非常重要。在Python 中&#xff0c;pytest是一种广泛使用的测试框架&#xff0c;它提供了丰富的功能和灵活的扩展性。其中一个很有用的功 能是fixture方法&#xff0c;它允许我们初始化测试环…

Ypay源支付最新免授权牛角魔改版

YPay是专为个人站长打造的聚合免签系统&#xff0c;拥有卓越的性能和丰富的功能。采用全新轻量化的界面UI&#xff0c;让您可以更加方便快捷地解决知识付费和运营赞助的难题。同时&#xff0c;它基于高性能的ThinkPHP 6.1.2 Layui PearAdmin架构&#xff0c;提供实时监控和管…