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

样例介绍

本样例基于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.mfbz.cn/a/553256.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

ES源码四:网络通信层流程

听说ES网络层很难?今天来卷它😄 前言 ES网络层比较复杂,分为两个部分: 基于HTTP协议的REST服务端基于TCP实现的PRC框架 插件化设计的网络层模块(NetworkModule) 入口还是上一章的创建Node构造方法的地方…

目标检测应用场景—数据集【NO.31】布匹数据集目标检测数据集

写在前面:数据集对应应用场景,不同的应用场景有不同的检测难点以及对应改进方法,本系列整理汇总领域内的数据集,方便大家下载数据集,若无法下载可关注后私信领取。关注免费领取整理好的数据集资料!今天分享…

uniapp picker 多列选择器用法

uniapp picker 多列选择器联动筛选器交互处理方法, uniapp 多列选择器 mode"multiSelector" 数据及筛选联动交互处理, 通过接口获取数据,根据用户选择当前列选项设置子列数据,实现三级联动效果, 本示例中处…

【honggfuzz学习笔记】honggfuzz的基本特性

本文架构 1.动机2.honggfuzz的基本概念官网描述解读 3. honggfuzz的反馈驱动(Feedback-Driven)软件驱动反馈(software-based coverage-guided fuzzing)代码覆盖率代码覆盖率的计量单位 代码覆盖率的统计方式 硬件驱动反馈( hardware-based co…

IDEA 安装、基本使用、创建项目

文章目录 下载基本使用修改颜色主题Keymap插件 创建项目创建模块新建 Java 类运行新建 Package打包 Jar运行 jar 包 查看文档 下载 官方下载地址:https://www.jetbrains.com/zh-cn/idea/download/?sectionmac 这里我下载 macOS 社区版,IDEA 2024.1 (C…

60道计算机二级模拟试题选择题(含答案和解析)

点击下载《60道计算机二级模拟试题选择题(含答案和解析)》 1. 前言 本文设计了一份针对计算机二级考试的选择题,旨在考察考生对计算机基础知识和应用技能的掌握情况。试题涵盖了计算机基础知识、操作系统、办公软件、计算机网络等多个方面&…

【学习】Jmeter、postman、python如何与数据库相互配合

在当今数字化时代,数据库已经成为我们日常生活中不可或缺的一部分。无论是购物、社交还是工作,数据库都在默默地为我们提供着高效、稳定的服务。而在众多的技术工具中,Jmeter、Postman和Python成为了操作数据库的三大主流技术。今天&#xff…

虚拟机vm桥接模式linux(centos,ubuntu)联网

台式机网线 查看宿主机网络 编辑虚拟机—>虚拟网络编辑器–>更改设置 选择,确定 进入linux系统 输入ip addr找到自己的网卡 我的是eno16777736 centos: 编辑 HWADDR"00:0C:29:54:CE:B8" TYPE"Ethernet" BOOTPROTO"…

刷题。。。。。。

1.ezmd5 根据题目提示 我们知道应该是要上传两张md5值相同的图片 根据原文链接:cryptanalysis - Are there two known strings which have the same MD5 hash value? - Cryptography Stack Exchange 把保存下来的图片上传一下 得到flag 2.ezhttp 根据原文链接&…

LeetCode36: 有效的数独(Java)

题目: 请你判断一个 9 x 9 的数独是否有效。只需要 根据以下规则 ,验证已经填入的数字是否有效即可。 数字 1-9 在每一行只能出现一次。数字 1-9 在每一列只能出现一次。数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。(请参考示例…

适配器模式【结构型模式C++】

1.概述 适配器模式是一种结构型设计模式, 又称为变压器模式、包装模式(Wrapper) 将一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作。 2.结构 Target:适配…

美创科技19周年数据安全案例展

2005-2024 践行“让数据更安全,更有价值”的使命 美创19年砌垒,与不同行业用户 一同筑牢数字之基 美创19周年案例展 走进这段时间长廊 探索美创与各行业伙伴的数据安全实践 #1 数据安全体系化建设 浙江省,数字化改革先行地。以数字化…

Java面试八股之fail-fast和fail-safe的区别

简述fail-fast和fail-safe的区别 定义与基本概念 fail-fast: 定义:fail-fast是一种迭代器机制,当集合在迭代过程中被结构上修改(如添加、删除元素),会立即抛出ConcurrentModificationException异常&…

Python数据容器(二)

一.list列表的案例 二.list列表的循环遍历 既然数据容器可以存储多个元素,那么,就会有需求从容器内依次取出元素进行操作。 将容器内的元素依次取出进行处理的行为,称之为:遍历、迭代。 (一)列表的遍历—…

文献速递:深度学习肝脏肿瘤诊断---双能量CT深度学习放射组学预测大梁状大块型肝细胞癌

Title 题目 Dual-Energy CT Deep Learning Radiomics to Predict Macrotrabecular-Massive Hepatocellular Carcinoma 双能量CT深度学习放射组学预测大梁状大块型肝细胞癌 Background 背景 It is unknown whether the additional information provided by multiparametric …

获取公募基金净值【数据分析系列博文】

摘要 从指定网址获取公募基金净值数据,快速解析并存储数据。 (该博文针对自由学习者获取数据;而在投顾、基金、证券等公司,通常有Wind、聚源、通联等厂商采购的数据) 导入所需的库:代码导入了一些常用的库…

OpenCV从入门到精通实战(五)——dnn加载深度学习模型

从指定路径读取图像文件、利用OpenCV进行图像处理,以及使用Caffe框架进行深度学习预测的过程。 下面是程序的主要步骤和对应的实现代码总结: 1. 导入必要的工具包和模型 程序开始先导入需要的库os、numpy、cv2,同时导入utils_paths模块&…

PACNet CellNet(代码开源)|bulk数据作细胞分类,评估细胞命运性能的一大利器

文章目录 1.前言2.CellNet2.1CellNet简介2.2CellNet结果 3.PACNet3.1安装R包与加载R包3.2加载数据3.3开始训练和分类3.4可视化分类过程3.5可视化分类结果 4.细胞命运分类和免疫浸润比较 1.前言 今天冲浪看到一个细胞分类性能评估的R包——PACNet,它与转录组分析方法…

【经验总结】Jupyter 配置内核

1. 背景描述 使用 国家超算互联网中心 的服务器,创建 jupyterlab 容器,想在之前 conda 创建的环境中运行,可是不行,进入容器就直接进入 jupyterlab 2. 解决方法 配置内核 2.1 激活环境 conda activate peft2.2 安装内核 pip…

vector类——常用函数模拟(C++)

在上一篇中我们介绍了 string 类的常用函数模拟,接下来我们将开始讲解 vector 类的常用函数的讲解以及模拟实现,相较于 string 来说,vector 的函数不那么冗余,用法也没有那么多,但是在 vector 中的函数使用和模拟中&am…
最新文章