在这里插入图片描述

每日一句正能量

路上总有阴影,但你抬头就能看到光。
光永远在,关键在于你是否愿意调整视角去看见。
孤独却不荒凉,相遇却不黏着,回忆却不停留。仿佛一棵树,根系在黑暗里安静探索,枝叶在光中坦然舒展。日子滚烫,是因为心还在真切地感受;简单极致,是因为已穿过复杂的迷雾。


一、前言:分布式时代的安全挑战

在前五篇文章中,我们依次探讨了 HarmonyOS 的分布式文件系统、分布式数据库、分布式对象存储、分布式任务调度与分布式服务调用。这些技术让数据、任务与服务能够在多设备间自由流动,但也带来了一个根本性的安全挑战:当数据离开本机,流向其他设备时,如何确保"正确的人,通过正确的设备,正确地使用数据"?

在传统的单设备安全模型中,安全边界清晰——数据存储在本机,访问控制由本机操作系统 enforcing。但在分布式场景下,数据需要在手机、平板、智慧屏、车机等多种设备间流转,每种设备的安全能力参差不齐(如手表可能没有 TEE,而手机具备完整的安全芯片),网络环境也复杂多变(Wi-Fi、BLE、5G 混合使用)。攻击面从"单点"扩展为"全网",传统的安全机制已无法应对。

HarmonyOS 的分布式安全机制,以 “正确的人,通过正确的设备,正确地使用数据” 为安全目标,构建了覆盖身份认证、设备可信、数据加密与传输安全的完整防护体系。本文将从三层安全架构、TEE 可信执行环境、设备认证与密钥协商、数据分级加密四个维度深入剖析,并带领读者完成一个基于 TEE 的跨设备安全通信应用。


二、分布式安全三层架构

HarmonyOS 的分布式安全架构围绕"人-设备-数据"三个核心要素展开:

在这里插入图片描述

2.1 正确的人:身份认证层

HarmonyOS 基于 零信任模型 实现用户身份认证,核心机制包括:

  • 多因素融合认证:通过 Huawei ID 身份管理,将不同设备上标识同一用户的认证凭据关联起来。认证因素包括生物特征(指纹/人脸)、锁屏密码、硬件安全密钥等,系统根据场景动态选择认证强度。
  • 协同互助认证:将硬件和认证能力解耦,实现不同设备的资源池化与能力互助。例如,手表没有摄像头,可通过手机的人脸识别完成认证,认证结果通过安全通道传递至手表。
  • 通行密钥(Passkey):在 TEE 环境中为应用生成设备绑定的通行密钥私钥,私钥永不离开安全环境。跨设备认证时,通过近场通信传输共享秘密协商会话密钥,建立安全传输通道。
  • 匿名身份凭证:用户身份使用可吊销、用途受限的凭证进行匿名认证,全程隐藏用户真实身份。网络采用隐私安全协议,云服务器无法获取用户真实 IP 地址、设备信息和用户身份。

2.2 正确的设备:设备可信层

HarmonyOS 通过以下机制确保只有可信设备才能接入分布式网络:

  • 安全启动(Secure Boot):从芯片 BootROM 开始,每一级固件都验证下一级镜像的签名,形成完整的信任链。任何被篡改的镜像都无法通过验证,确保系统固件和应用程序的完整性。
  • 可信执行环境(TEE):华为自研的 iTrustee 基于 ARM TrustZone 技术实现,将处理器工作状态分为安全世界(TEE)和非安全世界(REE)。TEE 微内核通过形式化验证,获得商用 OS 内核 CCEAL5+ 认证评级。密钥生成和计算由独立硬件芯片完成,私钥仅在 TEE 内使用。
  • 设备证书认证:具备 TEE 的设备在产线预置 PKI 设备证书,私钥写入 TEE 环境。设备间通过证书验证彼此身份,确保设备是合法制造生产的。
  • HPIC 安全会话:通过手机、平板、PC 等终端的硬件安全芯片(SE/TPM)进行可信认证与密钥协商,由硬件安全模块生成唯一密钥,确保所有安全行为均基于可测、不可篡改的硬件可信根执行。
  • 控制流完整性(CFI):采用 Clang CFI 及栈保护技术,缓解 ROP/JOP 攻击威胁,限制攻击者可调用的代码片段范围。

2.3 正确地使用数据:数据安全层

  • 文件系统分级加密:采用 AES-XTS-256 算法,利用内核加密文件系统模块和硬件加解密引擎实现文件级加密。明文类密钥和文件密钥在 TEE 中创建、存储、使用和销毁。
  • 访问控制(DAC/MAC):提供自主访问控制与强制访问控制,确保只有正确的应用程序可以访问数据。分布式文件系统具有分布式沙箱功能,确保跨设备数据访问场景中只有正确的应用可以访问。
  • 数据传输安全:高风险数据在未经用户知情同意的情况下,不得传输到安全级别低于源设备的设备。分布式系统提供基于数据风险级别的跨设备访问控制机制。

三、TEE 可信执行环境深度解析

3.1 TEE 架构与隔离机制

TEE(Trusted Execution Environment,可信执行环境)是 HarmonyOS 分布式安全的硬件基石。华为自研的 iTrustee 基于 ARM TrustZone 技术实现,其核心设计包括:

  • 硬件级隔离:TrustZone 将 CPU 和内存划分为安全世界(Secure World)和普通世界(Normal World),通过 SCR 寄存器硬件开关切换执行环境。安全世界的代码和数据对普通世界完全不可见。
  • 多核多线程:支持创建多个安全任务并运行在多个 CPU 核心上,极大提高 TEE 的算力,满足 AI 推理、加密运算等高性能需求。
  • 动态资源管理:支持普通内存动态转换为安全内存,降低静态资源占用比例,提升系统整体效率。

3.2 TEE 安全服务

HarmonyOS TEE 为开发者和系统提供以下核心安全服务:

服务功能应用场景
可信存储服务关键信息加密存储,支持设备绑定与应用隔离指纹模板、支付密钥、数字证书
加解密服务支持 AES/RSA/ECC 等多种算法,密钥派生数据加密、安全通信、数字签名
可信时间服务提供不可篡改的基准时间防重放攻击、证书有效期校验
可信显示与输入(TUI)隔离显示区域,防止截屏与劫持密码输入、支付确认、敏感信息展示

3.3 安全存储的防重放机制

TEE 安全存储通过以下机制防止数据被篡改或回滚:

  • 加密与设备绑定:存储数据以加密形式落盘,解密密钥由 TEE 内部派生,与设备唯一标识(SoC UID、安全芯片 ID)绑定。数据拷贝到另一台设备后无法解密。
  • 防重放攻击:通过版本号 + 消息认证码(MAC)机制防重放。每次写入更新版本计数器,读取时校验版本与 MAC,发现回滚即拒绝。
  • 文件级隔离:不同可信应用(TA)的安全存储相互隔离,TA 之间不能互相读取对方的存储文件。

四、设备认证与密钥协商

4.1 同账号设备认证流程

HarmonyOS 分布式系统的连接安全,核心在于设备之间的相互正确可信。同账号设备的认证流程如下:

在这里插入图片描述

  1. 生成身份凭据:设备登录 Huawei ID 后,在 TEE 中生成椭圆曲线(ECC)公私钥对,作为本机在该账号下的身份认证凭据。
  2. 向云端申请证明:设备向华为云服务器申请对其公钥凭据进行证明。私钥凭据仅在端侧 TEE 存储,永远不会被服务器获取。
  3. 云端签发公钥证明:华为云身份认证服务验证设备身份后,签发公钥证明证书。
  4. 设备发现与近场组网:同账号设备通过 DSoftBus 的 MDNS/BLE 机制发现彼此,发起组网请求。
  5. 公钥交换:设备 A 与设备 B 通过 DSoftBus 安全通道交换公钥。
  6. ECDH 密钥协商:双方基于椭圆曲线 Diffie-Hellman 算法协商共享秘密。
  7. 派生会话密钥:从共享秘密派生本次会话的加密密钥。
  8. AES-GCM 加密通信:软总线安全通道使用会话密钥对传输数据进行 AES-GCM 端端加密。

核心保障

  • 私钥永不离开 TEE,即使操作系统被攻破,攻击者也无法获取私钥。
  • 会话密钥仅本次会话有效,会话结束后自动销毁,实现前向安全。
  • 即使 Wi-Fi 或 BLE 协议层被攻破,传输数据仍被端端加密保护,只有通信双方能解密。

4.2 点对点绑定设备认证

对于非同账号的设备(如家人共享设备),HarmonyOS 支持点对点绑定认证:

  • 用户在两台设备上手动确认配对请求。
  • 设备通过近场通信(NFC/BLE)交换临时公钥。
  • 双方验证配对码(PIN 码或二维码)的一致性。
  • 认证成功后,设备证书写入彼此的信任列表,后续通信无需重复认证。

五、数据分级加密与传输安全

5.1 文件系统五级加密方案

HarmonyOS 根据数据敏感程度,提供五级加密方案:

在这里插入图片描述

级别名称加密方案特点典型数据
S4ECE (Enhanced CE)与锁屏密码强绑定设备锁定时不可打开,不可创建文件支付密钥、生物特征模板
S3SECE (Strong CE)与锁屏密码绑定设备锁定时不可打开,允许创建和写入邮件附件、加密文档
S2CE (Credential Encrypted)与锁屏密码结合开机后输入密码可访问,锁屏后仍可用图库、联系人、短信
S1DE (Device Encrypted)与锁屏密码无关开机后即可访问壁纸、闹钟、铃声
S0NE (Non-Encrypted)不加密明文存储OTA 升级包

密钥层次结构:HUK(硬件唯一密钥)→ 类密钥(CE/SECE/ECE/DE)→ 文件密钥。所有明文密钥在 TEE 中创建、存储、使用和销毁,REE 侧仅持有加密后的密钥密文。

5.2 跨设备传输安全机制

当数据需要在设备间传输时,HarmonyOS 执行以下安全策略:

  1. 数据风险评估:系统首先评估数据的敏感级别(S0-S4)。
  2. 目标设备安全级别校验:检查目标设备是否具备与数据风险级别相称的安全能力(如是否具备 TEE)。
  3. TEE 安全环境验证:通过设备证书验证目标设备的 TEE 完整性与可信度。
  4. 建立 TEE-to-TEE 通道:在源设备 TEE 与目标设备 TEE 之间建立直接的安全通道。
  5. AES-GCM 端端加密传输:数据在源设备 TEE 中加密,通过安全通道传输,在目标设备 TEE 中解密。
  6. 接收端解密与存储:解密后的数据根据目标设备的加密策略重新加密存储。

核心原则:高风险数据(S3/S4)仅传输到安全级别不低于源设备的设备;未经用户知情同意,高风险数据不得外传。


六、实战开发:构建「智联安全」TEE 加密通信应用

本节将构建一个利用 TEE 安全存储与跨设备加密通道实现敏感数据安全传输的应用。

6.1 开发环境

  • IDE:DevEco Studio 5.0+
  • SDK:HarmonyOS 6.0(API 12)
  • 设备:支持 TEE 的手机 + 平板
  • 项目模板:Empty Ability(Stage 模型)

6.2 权限配置

{
  "module": {
    "requestPermissions": [
      {
        "name": "ohos.permission.SECURE_STORAGE",
        "reason": "$string:secure_storage_reason",
        "usedScene": {
          "abilities": ["EntryAbility"],
          "when": "always"
        }
      },
      {
        "name": "ohos.permission.DISTRIBUTED_DATASYNC",
        "reason": "$string:dist_data_reason",
        "usedScene": {
          "abilities": ["EntryAbility"],
          "when": "always"
        }
      }
    ]
  }
}

6.3 TEE 安全存储封装

// manager/TEESecurityManager.ets
import { deviceSecurity } from '@ohos.security.deviceSecurity';

export class TEESecurityManager {
  private session?: deviceSecurity.TrustedExecutionEnvironmentSession;

  /**
   * 初始化 TEE 会话
   */
  async initialize(): Promise<void> {
    try {
      const teeService = await deviceSecurity.getTrustedExecutionEnvironmentService();
      this.session = await teeService.createSession({
        authType: deviceSecurity.AuthType.ALL,
        authLevel: deviceSecurity.AuthLevel.SYSTEM,
        userId: 0,
      });
      console.info('[TEE] 安全会话已创建');
    } catch (error) {
      console.error(`[TEE] 会话创建失败: ${JSON.stringify(error)}`);
      throw error;
    }
  }

  /**
   * 安全存储敏感数据(自动加密,设备绑定)
   */
  async secureStore(key: string, data: string): Promise<void> {
    if (!this.session) throw new Error('TEE 会话未初始化');

    try {
      const dataBuffer = new TextEncoder().encode(data);
      const trustedStorage = await this.session.getTrustedStorage();
      await trustedStorage.save(key, dataBuffer);
      console.info(`[TEE] 数据已安全存储: ${key}`);
    } catch (error) {
      console.error(`[TEE] 存储失败: ${JSON.stringify(error)}`);
      throw error;
    }
  }

  /**
   * 读取安全存储的数据
   */
  async secureRetrieve(key: string): Promise<string> {
    if (!this.session) throw new Error('TEE 会话未初始化');

    try {
      const trustedStorage = await this.session.getTrustedStorage();
      const dataBuffer = await trustedStorage.read(key);
      return new TextDecoder().decode(dataBuffer);
    } catch (error) {
      console.error(`[TEE] 读取失败: ${JSON.stringify(error)}`);
      throw error;
    }
  }

  /**
   * 在 TEE 内执行加密运算
   */
  async encryptInTEE(plainText: string, keyAlias: string): Promise<ArrayBuffer> {
    if (!this.session) throw new Error('TEE 会话未初始化');

    try {
      const cryptoEngine = await this.session.getCryptoEngine();
      const plainBuffer = new TextEncoder().encode(plainText);
      const encrypted = await cryptoEngine.encrypt({
        algorithm: 'AES/GCM/NoPadding',
        keyAlias: keyAlias,
        iv: this.generateIV(),
      }, plainBuffer);
      return encrypted;
    } catch (error) {
      console.error(`[TEE] 加密失败: ${JSON.stringify(error)}`);
      throw error;
    }
  }

  private generateIV(): ArrayBuffer {
    const iv = new Uint8Array(12);
    for (let i = 0; i < 12; i++) {
      iv[i] = Math.floor(Math.random() * 256);
    }
    return iv.buffer;
  }

  /**
   * 销毁会话
   */
  async destroy(): Promise<void> {
    if (this.session) {
      await this.session.close();
      this.session = undefined;
      console.info('[TEE] 安全会话已销毁');
    }
  }
}

6.4 跨设备安全传输

// manager/SecureTransferManager.ets
import { distributedDeviceManager } from '@kit.DistributedServiceKit';
import { rpc } from '@kit.IPCKit';

export interface SecureDataPacket {
  encryptedData: ArrayBuffer;
  iv: ArrayBuffer;
  authTag: ArrayBuffer;
  dataLevel: 'S1' | 'S2' | 'S3' | 'S4';
  timestamp: number;
}

export class SecureTransferManager {
  private dmInstance?: distributedDeviceManager.DeviceManager;

  async initialize(bundleName: string): Promise<void> {
    this.dmInstance = distributedDeviceManager.createDeviceManager(bundleName);
  }

  /**
   * 安全传输数据到目标设备
   * 仅在目标设备安全级别满足要求时传输
   */
  async transferSecurely(
    targetNetworkId: string,
    packet: SecureDataPacket
  ): Promise<boolean> {
    try {
      // 1. 校验目标设备安全级别
      const targetDevice = await this.getDeviceInfo(targetNetworkId);
      if (!targetDevice.isTrusted) {
        console.error('[Transfer] 目标设备不可信');
        return false;
      }

      // S3/S4 数据仅传输至同等级设备
      if ((packet.dataLevel === 'S3' || packet.dataLevel === 'S4') && !targetDevice.hasTEE) {
        console.error('[Transfer] 目标设备无 TEE,无法传输高风险数据');
        return false;
      }

      // 2. 建立远程服务连接(通过 TEE-to-TEE 通道)
      const remoteProxy = await this.connectToRemoteService(targetNetworkId);

      // 3. 发送加密数据包
      const result = await remoteProxy.sendRequest(
        0, // message code
        this.serializePacket(packet),
        new rpc.MessageParcel(),
        new rpc.MessageOption()
      );

      return result.errCode === 0;
    } catch (err) {
      console.error(`[Transfer] 传输失败: ${err}`);
      return false;
    }
  }

  private async getDeviceInfo(networkId: string): Promise<{
    isTrusted: boolean;
    hasTEE: boolean;
    securityLevel: number;
  }> {
    // 实际项目中通过设备管理器查询设备能力
    return {
      isTrusted: true,
      hasTEE: true,
      securityLevel: 4,
    };
  }

  private async connectToRemoteService(networkId: string): Promise<rpc.IRemoteObject> {
    const want = {
      deviceId: networkId,
      bundleName: 'com.example.smartsecurity',
      abilityName: 'SecureTransferAbility',
    };

    return new Promise((resolve, reject) => {
      const options = {
        onConnect: (elementName: object, remote: rpc.IRemoteObject) => resolve(remote),
        onDisconnect: () => reject(new Error('连接断开')),
        onFailed: (code: number) => reject(new Error(`连接失败: ${code}`)),
      };
      // 注意:实际调用需通过 context
    });
  }

  private serializePacket(packet: SecureDataPacket): rpc.MessageParcel {
    const parcel = new rpc.MessageParcel();
    parcel.writeInt8Array(new Int8Array(packet.encryptedData));
    parcel.writeInt8Array(new Int8Array(packet.iv));
    parcel.writeInt8Array(new Int8Array(packet.authTag));
    parcel.writeString(packet.dataLevel);
    parcel.writeLong(packet.timestamp);
    return parcel;
  }
}

6.5 UI 页面实现

// pages/SecurityPage.ets
import { TEESecurityManager } from '../manager/TEESecurityManager';
import { SecureTransferManager, SecureDataPacket } from '../manager/SecureTransferManager';

@Entry
@Component
struct SecurityPage {
  @State inputData: string = '';
  @State storedData: string = '';
  @State transferStatus: string = '就绪';
  @State deviceList: Array<{name: string, networkId: string}> = [];
  private teeManager: TEESecurityManager = new TEESecurityManager();
  private transferManager: SecureTransferManager = new SecureTransferManager();

  aboutToAppear() {
    this.teeManager.initialize();
    this.transferManager.initialize('com.example.smartsecurity');
    this.loadDevices();
  }

  aboutToDisappear() {
    this.teeManager.destroy();
  }

  async loadDevices() {
    // 模拟加载设备列表
    this.deviceList = [
      { name: '平板', networkId: 'device_tablet_001' },
      { name: '智慧屏', networkId: 'device_tv_001' },
    ];
  }

  async storeInTEE() {
    if (!this.inputData) return;
    try {
      await this.teeManager.secureStore('sensitive_data', this.inputData);
      this.transferStatus = '数据已安全存储至 TEE';
    } catch (err) {
      this.transferStatus = `存储失败: ${err}`;
    }
  }

  async readFromTEE() {
    try {
      this.storedData = await this.teeManager.secureRetrieve('sensitive_data');
      this.transferStatus = '数据已从 TEE 读取';
    } catch (err) {
      this.transferStatus = `读取失败: ${err}`;
    }
  }

  async transferToDevice(networkId: string) {
    if (!this.storedData) {
      this.transferStatus = '请先存储数据';
      return;
    }

    this.transferStatus = '正在加密并传输...';
    try {
      // 在 TEE 内加密数据
      const encrypted = await this.teeManager.encryptInTEE(this.storedData, 'transfer_key');

      const packet: SecureDataPacket = {
        encryptedData: encrypted,
        iv: new ArrayBuffer(12),
        authTag: new ArrayBuffer(16),
        dataLevel: 'S3',
        timestamp: Date.now(),
      };

      const success = await this.transferManager.transferSecurely(networkId, packet);
      this.transferStatus = success ? '安全传输成功' : '传输被拒绝(安全级别不匹配)';
    } catch (err) {
      this.transferStatus = `传输异常: ${err}`;
    }
  }

  build() {
    Column({ space: 16 }) {
      Text('智联安全 - TEE 加密与跨设备传输')
        .fontSize(24)
        .fontWeight(FontWeight.Bold)
        .fontColor('#1976D2')
        .margin({ top: 20 })

      // 数据输入
      TextInput({ placeholder: '输入敏感数据...', text: $$this.inputData })
        .width('90%')
        .height(44)
        .backgroundColor('#F5F5F5')
        .borderRadius(8)

      Row({ space: 16 }) {
        Button('存储至 TEE')
          .type(ButtonType.Capsule)
          .backgroundColor('#1976D2')
          .onClick(() => this.storeInTEE())

        Button('从 TEE 读取')
          .type(ButtonType.Capsule)
          .backgroundColor('#388E3C')
          .onClick(() => this.readFromTEE())
      }

      // 已存储数据展示
      if (this.storedData) {
        Column({ space: 8 }) {
          Text('已存储的敏感数据')
            .fontSize(14)
            .fontWeight(FontWeight.Bold)
            .width('90%')
          Text(this.storedData)
            .fontSize(13)
            .fontColor('#333')
            .width('90%')
            .padding(12)
            .backgroundColor('#FAFAFA')
            .borderRadius(8)
        }
      }

      // 设备列表与传输
      Column({ space: 8 }) {
        Text('目标设备(安全传输)')
          .fontSize(14)
          .fontWeight(FontWeight.Bold)
          .width('90%')

        ForEach(this.deviceList, (device: {name: string, networkId: string}) => {
          Row() {
            Text(device.name)
              .fontSize(14)
              .layoutWeight(1)
            Button('安全传输')
              .type(ButtonType.Capsule)
              .backgroundColor('#7B1FA2')
              .fontSize(12)
              .onClick(() => this.transferToDevice(device.networkId))
          }
          .width('90%')
          .padding(10)
          .backgroundColor('#F5F5F5')
          .borderRadius(8)
        })
      }

      Text(this.transferStatus)
        .fontSize(12)
        .fontColor('#666')
        .margin({ bottom: 16 })
    }
    .width('100%')
    .height('100%')
    .backgroundColor('#FFFFFF')
  }
}

七、安全最佳实践与常见问题

7.1 开发安全清单

检查项建议风险等级
敏感数据存储优先使用 TEE 安全存储,避免明文存储在 REE
密钥管理密钥在 TEE 内生成与使用,禁止硬编码在代码中
跨设备传输传输前校验目标设备安全级别,S3/S4 数据仅传至 TEE 设备
会话密钥每次会话独立协商,实现前向安全
生物特征比对过程必须在 TEE 内完成,模板不可导出
日志脱敏日志中禁止输出敏感数据(密钥、密码、Token)

7.2 常见问题排查

问题现象可能原因解决方案
TEE 会话创建失败设备不支持 TEE 或权限未申请检查设备安全能力,确认 SECURE_STORAGE 权限
安全存储读取失败数据被篡改或设备更换检查数据完整性(MAC 校验),确认同一设备
跨设备传输被拒绝目标设备安全级别不足检查目标设备是否具备 TEE,或降低数据级别
设备认证失败设备证书过期或未被信任重新登录 Huawei ID,或手动重新配对
加密运算超时TEE 负载过高或算法参数错误优化算法选择,分片处理大数据

八、总结与展望

本文从 HarmonyOS 分布式安全的三层架构(正确的人、正确的设备、正确地使用数据)出发,深入解析了 TEE 可信执行环境的硬件隔离机制与安全服务、同账号设备认证的 ECDH 密钥协商流程、文件系统五级加密方案(CE/SECE/ECE/DE/NE)以及跨设备 TEE-to-TEE 安全传输机制。通过「智联安全」实战案例,演示了基于 TEE 的安全存储、加密运算与跨设备安全传输的完整开发流程。

HarmonyOS 分布式安全机制的核心设计理念是 “安全内生、信任链传递、最小权限”。从芯片 BootROM 的安全启动,到 TEE 的硬件级隔离,再到设备间的证书认证与端端加密,每一层都构建在前一层的信任基础之上,形成完整的信任链。开发者无需成为安全专家,只需遵循框架提供的安全 API 与最佳实践,即可构建企业级的分布式安全应用。

展望未来,分布式安全将在以下方向持续演进:

  1. 后量子密码学:随着量子计算的发展,HarmonyOS 将逐步引入抗量子攻击的加密算法(如 lattice-based cryptography),保障长期数据安全。
  2. AI 驱动的威胁感知:利用端侧大模型实时分析设备行为模式,自动识别异常访问与潜在攻击,实现"自适应安全"。
  3. 区块链级设备信任:结合分布式账本技术,构建设备身份的不可篡改记录,实现去中心化的设备信任验证。
  4. 隐私计算融合:将联邦学习、安全多方计算(MPC)与 TEE 结合,实现"数据可用不可见"的跨设备隐私计算。

在万物互联的时代,安全不再是功能的"附加项",而是系统的"基座"。掌握 HarmonyOS 分布式安全机制的开发能力,意味着你已经具备了构建可信、可控、可审计的下一代分布式应用的核心竞争力。


转载自:https://blog.csdn.net/u014727709/article/details/164065280
欢迎 👍点赞✍评论⭐收藏,欢迎指正

Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐