From 1fc25b269f5972d0440d8cddf719b1d678b97b14 Mon Sep 17 00:00:00 2001 From: zhirenx Date: Wed, 9 Feb 2022 16:10:38 +0800 Subject: [PATCH] =?UTF-8?q?=E8=AE=BE=E5=A4=87=E5=AE=89=E5=85=A8=E7=AD=89?= =?UTF-8?q?=E7=BA=A7=E7=AE=A1=E7=90=86=E6=96=87=E6=A1=A3=E6=8F=90=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: zhirenx --- .../figure/ohos_device_security_level.png | Bin 0 -> 66460 bytes .../ohos_system_security_architecture.png | Bin 0 -> 48923 bytes .../subsys-security-devicesecuritylevel.md | 424 ++++++++++++++++++ .../subsystems/subsys-security-overview.md | 9 +- .../device-dev/subsystems/subsys-security.md | 10 +- 5 files changed, 436 insertions(+), 7 deletions(-) create mode 100644 zh-cn/device-dev/subsystems/figure/ohos_device_security_level.png create mode 100644 zh-cn/device-dev/subsystems/figure/ohos_system_security_architecture.png create mode 100644 zh-cn/device-dev/subsystems/subsys-security-devicesecuritylevel.md diff --git a/zh-cn/device-dev/subsystems/figure/ohos_device_security_level.png b/zh-cn/device-dev/subsystems/figure/ohos_device_security_level.png new file mode 100644 index 0000000000000000000000000000000000000000..af2b1557e1ab32e4c755059a98f75624ab99e54c GIT binary patch literal 66460 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⁣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 ZmcTfT{W$qb+3FrJjx{}&^+&=CLt literal 0 HcmV?d00001 diff --git a/zh-cn/device-dev/subsystems/subsys-security-devicesecuritylevel.md b/zh-cn/device-dev/subsystems/subsys-security-devicesecuritylevel.md new file mode 100644 index 0000000000..5543654925 --- /dev/null +++ b/zh-cn/device-dev/subsystems/subsys-security-devicesecuritylevel.md @@ -0,0 +1,424 @@ +# 设备安全等级管理开发指南 + +- [设备安全等级管理开发指南](#设备安全等级管理开发指南) + - [概述](#概述) + - [功能简介](#功能简介) + - [基本概念](#基本概念) + - [运作机制](#运作机制) + - [约束与限制](#约束与限制) + - [开发指导](#开发指导) + - [场景介绍](#场景介绍) + - [接口说明](#接口说明) + - [开发步骤](#开发步骤) + - [开发示例](#开发示例) + - [设备安全等级凭据](#设备安全等级凭据) + - [凭据文件说明](#凭据文件说明) + - [凭据文件生成步骤](#凭据文件生成步骤) + - [1. 构造header](#1-构造header) + - [2. 构造payload](#2-构造payload) + - [3. 构造signature](#3-构造signature) + - [3.1 构造构建待签名的原始数据](#31-构造构建待签名的原始数据) + - [3.2 生成签名私钥](#32-生成签名私钥) + - [3.3 对原始数据进行签名](#33-对原始数据进行签名) + - [4. 构造attestation](#4-构造attestation) + - [4.1 生成三级签名验证信息](#41-生成三级签名验证信息) + - [4.2 生成二级签名验证信息](#42-生成二级签名验证信息) + - [4.3 生成根签名验证信息](#43-生成根签名验证信息) + - [4.4 合并生成attestation](#44-合并生成attestation) + - [5. 构造完整的凭据](#5-构造完整的凭据) + - [工具使用介绍](#工具使用介绍) + - [常见问题](#常见问题) + - [参考资料](#参考资料) + +## 概述 + +### 功能简介 + +OpenHarmony的分布式技术可以实现不同设备的资源融合,将多个设备虚拟成一个“超级虚拟终端”。在这个“超级虚拟终端”的内部,处理、流转各类用户数据时,需要确保各个节点不因安全能力薄弱,成为整个“超级虚拟终端”的薄弱点,因此引入设备安全等级管理(DSLM)模块来解决这类问题。 + +OpenHarmony设备安全等级管理(DSLM)模块,负责管理各种不同形态和种类的OpenHarmony设备的设备安全等级。对于OpenHarmony中的各类分布式业务,当其对各类用户数据进行流转或处理的时候,可以调用本模块提供的接口获取相关目标设备的安全等级,并根据获取到的等级进行相应的处理。 + +### 基本概念 + +OpenHarmony设备的安全等级基于OpenHarmony设备的系统安全能力进行评估。OpenHarmony系统安全能力,根植于硬件实现的三个可信根:启动、存储、计算,以基础安全工程能力为依托,重点围绕设备完整性保护、数据机密性保护、漏洞攻防对抗构建相关的安全技术和能力。 + +OpenHarmony系统安全架构如下图所示: + +![OpenHarmony系统安全架构](figure/ohos_system_security_architecture.png) + +上图为典型的OpenHarmony单设备系统安全架构,在不同种类OpenHarmony设备上的实现可以存在差异,取决于设备的威胁分析(风险高低)和设备的软硬件资源。OpenHarmony在参考业界权威的安全分级模型基础上,结合OpenHarmony实际的业务场景和设备分类,将OpenHarmony设备的安全能力划分为 5 个安全等级:SL1 ~ SL5。OpenHarmony操作系统生态体系中,要求高一级的设备安全能力默认包含低一级的设备安全能力。分级概要可参考下图: + +![OpenHarmony设备安全等级](figure/ohos_device_security_level.png) + +- SL1为OpenHarmony设备中最低的安全等级。这类设备通常搭载轻量级系统和使用低端微处理器,业务形态较为单一,不涉及敏感数据的处理。本安全等级要求消除常见的错误,支持软件的完整性保护。若无法满足本等级的要求,则只能作为配件受OpenHarmony设备操控,无法反向操控OpenHarmony设备并进行更复杂的业务协同。 + +- SL2安全等级的OpenHarmony设备,可对自身数据进行标记并定义访问控制规则,实现自主的访问控制,需要具备基础的抗渗透能力。此级别设备可支持轻量化的可安全隔离环境,用于部署少量必需的安全业务。 + +- SL3安全等级的OpenHarmony设备,具备较为完善的安全保护能力。其操作系统具有较为完善的安全语义,可支持强制访问控制。系统可结构化为关键保护元素和非关键保护元素,其关键保护元素被明确定义的安全策略模型保护。此级别设备应具备一定的抗渗透能力,可对抗常见的漏洞利用方法。 + +- SL4安全等级的OpenHarmony设备,可信基应保持足够的精简,具备防篡改的能力。SL4的实现应足够精简和安全,可对关键保护元素的访问控制进行充分的鉴定和仲裁。此级别设备具备相当的抗渗透能力,可抑制绝大多数软件攻击。 + +- SL5安全等级的OpenHarmony设备,为OpenHarmony设备中具备最高等级安全防护能力的设备。系统核心软件模块应进行形式化验证。关键硬件模块如可信根、密码计算引擎等应具备防物理攻击能力,可应对实验室级别的攻击。此级别设备应具备高安全单元,如专用的安全芯片,用于强化设备的启动可信根、存储可信根、运行可信根。 + +### 运作机制 + +当“超级虚拟终端”内的各个设备有了自己的“设备安全等级”,这个“超级虚拟终端”的内部,各类用户数据的处理或流转便有了决策依据。例如:分布式文件存储服务,在处理某些敏感数据时,默认不允许相关数据存储在安全等级低于SL3的设备。 + +### 约束与限制 + +OpenHarmony设备的默认安全等级为SL1,设备制造商可以根据设备实际情况定制更高的安全等级。详细请参考章节[设备安全等级凭据](#设备安全等级凭据)。 + +## 开发指导 + +### 场景介绍 + +各子系统在处理、流转各类用户数据时,可以调用“设备安全等级管理”模块提供的接口,获取相关设备的安全等级信息。并结合其所处理数据的实际情况,决策数据的进一步处理。 + +### 接口说明 + +所有接口均为native C内部接口,仅提供底层能力,不对App开放。相关接口列表如下: +| 接口名 | 说明 | +| ------------------------------------------------------------ | -------------------------------------------- | +| int32_t RequestDeviceSecurityInfo(const DeviceIdentify *identify, const RequestOption *option, DeviceSecurityInfo **info); | 请求获取某设备的设备安全等级信息(同步接口) | +| int32_t RequestDeviceSecurityInfoAsync(const DeviceIdentify *identify, const RequestOption *option, DeviceSecurityInfoCallback callback); | 请求获取某设备的设备安全等级信息(异步接口) | +| void FreeDeviceSecurityInfo(DeviceSecurityInfo *info); | 释放设备安全等级信息 | +| int32_t GetDeviceSecurityLevelValue(const DeviceSecurityInfo *info, int32_t *level); | 从设备安全等级信息中提取对应的设备安全等级 | + +### 开发步骤 + +1. 编译依赖添加 + + ```undefined + external_deps += [ "device_security_level:dslm_sdk" ] + ``` + +2. 头文件依赖添加 + + ```cpp + #include "device_security_defines.h" + #include "device_security_info.h" + ``` + +3. 接口调用 + + ```cpp + // 查询参数1, 构造获取需要查询设备的设备UDID + const DeviceIdentify *device = GetDestDeviceUdid(); + + // 查询参数2,查询RequestOption构造 + const RequestOption *option = DEFAULT_OPTION; + + // 查询参数3,设备安全等级信息指针,用来接收返回结果 + DeviceSecurityInfo *info = NULL; + + // 调用RequestDeviceSecurityInfo接口获取对端设备的设备安全等级信息: + int32_t ret = RequestDeviceSecurityInfo(device, DEFAULT_OPTION, &info); + + int32_t level = 0; + // 从设备安全等级信息中提取设备安全等级字段 + ret = GetDeviceSecurityLevelValue(info, &level); + if (ret == SUCCESS) { + // 查询成功。 + return; + } + // 结束处理前,需要释放内存 + FreeDeviceSecurityInfo(info); + ``` + +### 开发示例 + +假设需要开发具备文件分享功能的某业务,为了防止部分敏感文件被无意识的分享出来。可以在其发送任意文件前增加进行如下处理: + +1、当目标设备的设备安全等级大于或者等于SL3时,默认允许该文件的传递。 +2、当目标设备的设备安全等级小于SL3时,默认拒绝该文件的外传,同时弹框告知用户。 + +参考代码1:(同步接口使用示例) + +```cpp +void CheckDestDeviceSecurityLevel(const DeviceIdentify *device, RequestOption *option) +{ + // 设备安全等级信息指针 + DeviceSecurityInfo *info = NULL; + // 调用同步接口获取设备的安全等级等级信息 + int32_t ret = RequestDeviceSecurityInfo(device, option, &info); + if (ret != SUCCESS) { + // 获取信息失败。此场景建议开发者根据实际情况进行重试 + return; + } + int32_t level = 0; + // 从设备安全等级信息中提取设备安全等级字段 + ret = GetDeviceSecurityLevelValue(info, &level); + if (ret != SUCCESS) { + // 提取信息失败, 此场景建议开发者根据实际情况进行重试 + return; + } + // 成功获取到设备安全等级,确认当前操作允许的最低安全等级 + // 假设当前操作允许的最低设备安全等级为3 + if (level >= 3) { + // 目标设备的设备安全等级满足要求, 相关业务正常处理 + } else { + // 目标设备的设备安全等级不满足要求, 建议开发者结合实际业务场景进行相应处理,例如告警、弹窗提示用户等 + } + // 结束处理前,需要释放内存 + FreeDeviceSecurityInfo(info); +} +``` + +参考代码2:(异步接口使用示例) + +```cpp +// 回调函数 +void DeviceSecurityInfoCallback(const DeviceIdentify *identify, struct DeviceSecurityInfo *info) +{ + int32_t level = 0; + // 从设备安全等级信息中提取设备安全等级字段 + int32_t ret = GetDeviceSecurityLevelValue(info, &level); + if (ret != SUCCESS) { + // 获取信息失败。此场景建议开发者根据实际情况进行重试 + return; + } + // 成功获取到设备安全等级,确认当前操作允许的最低安全等级 + // 假设当前操作允许的最低设备安全等级为3 + if (level >= 3) { + // 目标设备的设备安全等级满足要求, 相关业务正常处理 + } else { + // 目标设备的设备安全等级不满足要求, 建议开发者结合实际业务场景进行相应处理,例如告警、弹窗提示用户等 + } + // 结束处理前,需要释放内存 + FreeDeviceSecurityInfo(info); +} + +void CheckDestDeviceSecurityLevelAsync(const DeviceIdentify *device, RequestOption *option) +{ + // 调用异步接口获取设备设备的安全等级等级信息 + int ret = RequestDeviceSecurityInfoAsync(device, option, DeviceSecurityInfoCallback); + if (ret != SUCCESS) { + // 获取信息失败,此场景建议开发者根据实际情况进行重试 + // 此场景下callback不会回调。 + return; + } + // 调用成功,等待callback回调。 +} +``` + +## 设备安全等级凭据 + +### 凭据文件说明 + +为了保证设备安全等级信息的完整性和不可抵赖性。设备的安全等级信息需要封装在“设备安全等级凭据”(简称为“凭据”)文件中在设备间进行传递,凭据中除了包含设备的安全等级信息之外,还可以包含设备型号、设备版本号等其它设备固有属性,同时使用PKI技术对上述信息进行签名。并结合[设备认证](https://gitee.com/openharmony/security_deviceauth)、[HUKS](https://gitee.com/openharmony/security_huks)等OpenHarmony其他基础安全能力。最大程度的保证了凭据传递的安全性。 + +### 凭据文件生成步骤 + +凭据文件为4段BASE64编码的字符串,中间用"."链接,示例如下: + +```undefined +... +``` + +#### 1. 构造header + +当前header为固定json字符串,其格式化显示如下 + +``` json +{ + "typ": "DSL" +} +``` + +对原header字符串进行BASE64编码,得到``: + +```undefined +eyJ0eXAiOiAiRFNMIn0= +``` + +#### 2. 构造payload + +根据设备实际情况构造payload的json字符串,示例如下: + +``` json +{ + "type": "debug", + "manufacture": "ohos", + "brand": "rk3568", + "model": "rk3568", + "softwareVersion": "3.2.2", + "securityLevel": "SL1", + "signTime": "20220209150259", + "version": "1.0.1" +} +``` + +对payload字符串进行BASE64编码,得到``: + +```undefined +eyJ0eXBlIjogImRlYnVnIiwgIm1hbnVmYWN0dXJlIjogIm9ob3MiLCAiYnJhbmQiOiAicmszNTY4IiwgIm1vZGVsIjogInJrMzU2OCIsICJzb2Z0d2FyZVZlcnNpb24iOiAiMy4yLjIiLCAic2VjdXJpdHlMZXZlbCI6ICJTTDEiLCAic2lnblRpbWUiOiAiMjAyMjAyMDkxNTAyNTkiLCAidmVyc2lvbiI6ICIxLjAuMSJ9 +``` + +#### 3. 构造signature + +##### 3.1 构造构建待签名的原始数据 + +将BASE64编码后的header和payload合并,中间用符号"."连接,得到`.` +示例如下: + +```undefined +eyJ0eXAiOiAiRFNMIn0=.eyJ0eXBlIjogImRlYnVnIiwgIm1hbnVmYWN0dXJlIjogIm9ob3MiLCAiYnJhbmQiOiAicmszNTY4IiwgIm1vZGVsIjogInJrMzU2OCIsICJzb2Z0d2FyZVZlcnNpb24iOiAiMy4yLjIiLCAic2VjdXJpdHlMZXZlbCI6ICJTTDEiLCAic2lnblRpbWUiOiAiMjAyMjAyMDkxNTAyNTkiLCAidmVyc2lvbiI6ICIxLjAuMSJ9 +``` + +##### 3.2 生成签名私钥 + +**本流程需要在安全可靠的环境中执行,例如符合相关安全要求的服务器密码机中,以确保用于签名的密钥不被泄露** +凭据文件使用ECDSA签名算法对原始数据进行签名,首先生成签名用ECDSA密钥对:``和`` + +##### 3.3 对原始数据进行签名 + +将`.`作为参数,使用刚刚生成的ECC私钥``对其进行签名,并对签名结果进行BASE64编码,得到签名结果值``: + +```undefined +MGUCMDb9xoiFzTWVkHDU3VWSVQ59gLyw4TchZ0+eQ3vUfQsLt3Hkg0r7a/PmhkNr3X/mTgIxAIywIRE6vRTRs0xk6xKp8A0XwMMiIyjZlujPJfasCvFonpsvXLAqCAIYbe1J0k4Zfg== +``` + +#### 4. 构造attestation + +**本流程需要在安全可靠的环境中执行,例如符合相关安全要求的服务器密码机中,以确保用于签名的密钥不被泄露** +**本流程涉及到的各密钥对不需要每次都重复生成,在确保密钥安全的前提下,后续可以直接复用。** + +##### 4.1 生成三级签名验证信息 + +1. 首先生成二级签名用ECDSA密钥对:``和`` +2. 使用`` 对3.2章节生成的``进行签名,得到`` +3. 将``和``组合成json字符串示例如下: + +``` json +{ + "userPublicKey": "", + "signature": "" +} +``` + +##### 4.2 生成二级签名验证信息 + +1. 生成一级签名用ECDSA密钥对:``和`` +2. 使用`` 对4.1章节生成的``进行签名,得到`` +3. 将``和``组合成json字符串示例如下: + +``` json +{ + "userPublicKey": "", + "signature": "" +} +``` + +##### 4.3 生成根签名验证信息 + +1. 使用`` 对4.2章节生成的``进行签名(即自签名),得到`` +2. 将``和``组合成json字符串示例如下: + +``` json +{ + "userPublicKey": "", + "signature": "" +} +``` + +##### 4.4 合并生成attestation + +1. 将上述三组签名信息合并到一个json数组中: + + ```json + [ + { + "userPublicKey": "", + "signature": "" + }, + { + "userPublicKey": "", + "signature": "" + }, + { + "userPublicKey": "", + "signature": "" + } + ] + ``` + +2. 对该数据进行base64编码,得到`` + + ```undefined + W3sidXNlclB1YmxpY0tleSI6ICJNSG93RkFZSEtvWkl6ajBDQVFZSkt5UURBd0lJQVFFTEEySUFCREdOMU9xYWZrWFc2a0l1SEZrMVQ0TS84RVJUY3p0eWRDaGtramFROEkzNEc2Q3E1aTNJcnczVnRhQS9KTTF2a0lHOUZDVWRUaHZFUlJFUTFUdG9xemdxZW9SUzVwQW1EYUUyalEwYzdDem8rOHVUWTRIYW1weXZ1TENtenlYUXFnPT0iLCAic2lnbmF0dXJlIjogIk1HTUNMeHVjUnoyZndKZ092QkxyU1U3K1hlVTA3R0EyVXhZbDFMbEJLUnVIUS9wZlNWVHBEd0ZHSTNTb3h5ODR3NThIQWpBeGRtNEY3b3YvYUtEL0NFZi9QZlZDWHVlbE1mQys1L3pkUExXUUJEVnlGdWQrNVdYL3g4U083VXM5UGFhRW1mZz0ifSwgeyJ1c2VyUHVibGljS2V5IjogIk1Ib3dGQVlIS29aSXpqMENBUVlKS3lRREF3SUlBUUVMQTJJQUJHMWU3TDJVd1AyWWxTajB2RWViUGJpNVpLMDh5NS9UeHRWb3VrRFpIUGtSNlRtb2JoVGpyMVRVNzZpUkU4bDlWQlhuU1h1QVB6cjBuSHdKVkdVZVJMdmp4MVh0YUZReE9QNjhjNlIvRTdFWkZ2STdRUFg1N0tvRkhYdkEvVlJaNnc9PSIsICJzaWduYXR1cmUiOiAiTUdRQ01FUVdFNnk0Rm42SFg1ekFvTzNkYzl5cG1Sd2lBclplc2o5aVBROTZEaEhuNXJkRTdNaGFMdWNRZ0MvaXhjSWJsZ0l3QkN5aFBvRUg2RjFITFlwM2xqbWVncVlZQ1E5NHEyZm1kbDB6dHhrWEVTOVpPOVRNSUZQRVpKYlpmUnU5ZHcyOSJ9LCB7InVzZXJQdWJsaWNLZXkiOiAiTUhvd0ZBWUhLb1pJemowQ0FRWUpLeVFEQXdJSUFRRUxBMklBQkZRUUlDWmpWUTV4bkE0c2RMbUJzUmVaMzRJeWdkSmZhanA3SnRReFBzU2RwWTJXV0FneXp6Rm40OFFRRWhoU1BtdzhJYUU3VlJKRENBT3FYRnhGektJbFBFTDFvcFJDUmhhWmJrRzc5Y3ZrWC9HVVhlaFVYc2V2ZGhyb2VRVERFdz09IiwgInNpZ25hdHVyZSI6ICJNR1FDTUdQRndvSDJLbHhwbVZhWXRWV1ViMHpDSUJxYXFXY2F6czFqOVp4YklLUmVkR2tJY0VJdHN0UFoxdnVTanYvNDJnSXdSeGZPcTRoQTdNMHlGV2ZPSndqRTlTc2JsYXhvRDNiRTZCYzN2QjUyMmsyQ0ZJNWJqelpkeUFTVW04d2J2TW5WIn1d + ``` + +#### 5. 构造完整的凭据 + +用符号"."连接上述 `...`四段数据,最终结果示例如下: + +```undefined +eyJ0eXAiOiAiRFNMIn0=.eyJ0eXBlIjogImRlYnVnIiwgIm1hbnVmYWN0dXJlIjogIm9ob3MiLCAiYnJhbmQiOiAicmszNTY4IiwgIm1vZGVsIjogInJrMzU2OCIsICJzb2Z0d2FyZVZlcnNpb24iOiAiMy4yLjIiLCAic2VjdXJpdHlMZXZlbCI6ICJTTDEiLCAic2lnblRpbWUiOiAiMjAyMjAyMDkxNTAyNTkiLCAidmVyc2lvbiI6ICIxLjAuMSJ9.MGUCMDb9xoiFzTWVkHDU3VWSVQ59gLyw4TchZ0+eQ3vUfQsLt3Hkg0r7a/PmhkNr3X/mTgIxAIywIRE6vRTRs0xk6xKp8A0XwMMiIyjZlujPJfasCvFonpsvXLAqCAIYbe1J0k4Zfg==.W3sidXNlclB1YmxpY0tleSI6ICJNSG93RkFZSEtvWkl6ajBDQVFZSkt5UURBd0lJQVFFTEEySUFCREdOMU9xYWZrWFc2a0l1SEZrMVQ0TS84RVJUY3p0eWRDaGtramFROEkzNEc2Q3E1aTNJcnczVnRhQS9KTTF2a0lHOUZDVWRUaHZFUlJFUTFUdG9xemdxZW9SUzVwQW1EYUUyalEwYzdDem8rOHVUWTRIYW1weXZ1TENtenlYUXFnPT0iLCAic2lnbmF0dXJlIjogIk1HTUNMeHVjUnoyZndKZ092QkxyU1U3K1hlVTA3R0EyVXhZbDFMbEJLUnVIUS9wZlNWVHBEd0ZHSTNTb3h5ODR3NThIQWpBeGRtNEY3b3YvYUtEL0NFZi9QZlZDWHVlbE1mQys1L3pkUExXUUJEVnlGdWQrNVdYL3g4U083VXM5UGFhRW1mZz0ifSwgeyJ1c2VyUHVibGljS2V5IjogIk1Ib3dGQVlIS29aSXpqMENBUVlKS3lRREF3SUlBUUVMQTJJQUJHMWU3TDJVd1AyWWxTajB2RWViUGJpNVpLMDh5NS9UeHRWb3VrRFpIUGtSNlRtb2JoVGpyMVRVNzZpUkU4bDlWQlhuU1h1QVB6cjBuSHdKVkdVZVJMdmp4MVh0YUZReE9QNjhjNlIvRTdFWkZ2STdRUFg1N0tvRkhYdkEvVlJaNnc9PSIsICJzaWduYXR1cmUiOiAiTUdRQ01FUVdFNnk0Rm42SFg1ekFvTzNkYzl5cG1Sd2lBclplc2o5aVBROTZEaEhuNXJkRTdNaGFMdWNRZ0MvaXhjSWJsZ0l3QkN5aFBvRUg2RjFITFlwM2xqbWVncVlZQ1E5NHEyZm1kbDB6dHhrWEVTOVpPOVRNSUZQRVpKYlpmUnU5ZHcyOSJ9LCB7InVzZXJQdWJsaWNLZXkiOiAiTUhvd0ZBWUhLb1pJemowQ0FRWUpLeVFEQXdJSUFRRUxBMklBQkZRUUlDWmpWUTV4bkE0c2RMbUJzUmVaMzRJeWdkSmZhanA3SnRReFBzU2RwWTJXV0FneXp6Rm40OFFRRWhoU1BtdzhJYUU3VlJKRENBT3FYRnhGektJbFBFTDFvcFJDUmhhWmJrRzc5Y3ZrWC9HVVhlaFVYc2V2ZGhyb2VRVERFdz09IiwgInNpZ25hdHVyZSI6ICJNR1FDTUdQRndvSDJLbHhwbVZhWXRWV1ViMHpDSUJxYXFXY2F6czFqOVp4YklLUmVkR2tJY0VJdHN0UFoxdnVTanYvNDJnSXdSeGZPcTRoQTdNMHlGV2ZPSndqRTlTc2JsYXhvRDNiRTZCYzN2QjUyMmsyQ0ZJNWJqelpkeUFTVW04d2J2TW5WIn1d +``` + +### 工具使用介绍 + +为方便开发者对于“凭据文件”的进一步理解,设备安全等级管理模块提供了[凭据工具](https://gitee.com/openharmony/security_device_security_level/blob/master/oem_property/ohos/dslm_cred_tool.py),该工具是一个python脚本,基于OPENSSL命令行的简单封装,可以便捷的提供凭据文件的签发和验证功能。 +其使用方法如下: + +1. 签名密钥初始化: + + ``` bash + ./dslm_cred_tool.py init + ``` + +2. 凭据文件的生成: + + 生成一个名为cred.txt的凭据文件,并指定payload中的相关信息。 + + ``` bash + ./dslm_cred_tool.py create --field-manufacture OHOS --field-brand rk3568 --field-model rk3568 --field-software-version 3.0.0 --field-security-level SL3 --cred-file cred.txt + ``` + + 上述命令可以生成一个凭据示例文件如下: + + ``` bash + cat cred.txt + eyJ0eXAiOiAiRFNMIn0=.eyJ0eXBlIjogImRlYnVnIiwgIm1hbnVmYWN0dXJlIjogIk9IT1MiLCAiYnJhbmQiOiAicmszNTY4IiwgIm1vZGVsIjogInJrMzU2OCIsICJzb2Z0d2FyZVZlcnNpb24iOiAiMy4wLjAiLCAic2VjdXJpdHlMZXZlbCI6ICJTTDMiLCAic2lnblRpbWUiOiAiMjAyMjAyMDkxNTUzMDMiLCAidmVyc2lvbiI6ICIxLjAuMSJ9.MGQCMEqZy/snsRyjMupnEvTpQfhQn+IcdCc5Q3NGxllNQVhoZX8PNyw6ATTgyx+26ghmtQIwVH5KwQ4/VejxckeHmtkBVhofhgmRapzvyVnyiB3PdsU7nvHk8A/zC7PFy1CWBG3z.W3sidXNlclB1YmxpY0tleSI6ICJNSG93RkFZSEtvWkl6ajBDQVFZSkt5UURBd0lJQVFFTEEySUFCQzFXRUxSVlU1NGp1U1ZXWlUrT29CM3hacFd5MWg3QW5uSFdKWm5QbTB3S2l0ZlJZelJKZ3FiUGQyZ3ltVXBUWVl1cmhyRDQxbFdPbUNzcmt0VWdaNTFXdGNCTmc5SG1GODkzc2ZHVFM5eUJNS0JoMGcxSHZaSVFSN1k0S3FXaWpnPT0iLCAic2lnbmF0dXJlIjogIk1HUUNNRFVicTZ2Z2R1YVF0bFVwOTR0azd4VjRJcEx2WVZWY3Y4aFNOTkw0azdPRHhmbEVGTHJFaUdPRWhwMUcweGFGYlFJd1pUbTk1cWx4OTBFZnptV3VIOGlEY2ZWYVlQS2N5SEYwR2ZFcEUzb1NESzQwZEFOZ0FJMWVQY09rTzBPOTdnTFAifSwgeyJ1c2VyUHVibGljS2V5IjogIk1Ib3dGQVlIS29aSXpqMENBUVlKS3lRREF3SUlBUUVMQTJJQUJGKzY1a0lSYTM2dkE4QVZWNXFrcUozYXpXTkdGQy9oaVdPL0tFNHR0S1pMOUsyNlhzQ2hQbjVNc3BlT2F3b1dqSU02bTVLOFZTcU1DYlZNN0svY0VRU0tYdDJTeVJGZERVZU9TaFZmQm9YVmxqaXRUU2puN0V5Q2pERVZiWjFRNEE9PSIsICJzaWduYXR1cmUiOiAiTUdRQ01HanF2cnZ5VW1YNVZLVVc1UkFkUTNkZ2hBYmNBazBRQnppQlFWMVFZUTNQMVFPSzdMckM1b0RObXh6T2Y0QUtmd0l3SzVWU2x3ZG5JSUR6Zm9PUXBEUVAycGhTVGgxSGVjbXJRK1F4VGxWelo0aHJsdnJyd2xCNnp0T3pWRFdNblRELyJ9LCB7InVzZXJQdWJsaWNLZXkiOiAiTUhvd0ZBWUhLb1pJemowQ0FRWUpLeVFEQXdJSUFRRUxBMklBQkZCa2FDNE9mc2VTREt2cW8vbU5VaUtXQ3JtK1VDNGFQcjVsODRNM2tMVCtDdkd3OWhqOGJ6d2I1MzNtVVlFZVhWWWtUdFlRYWRURkRJZXV1dGIzNU1QZDlEKytNMFRFWnZvcTY4NFhoYTVQMzBUbVRhK0ZvOG02UWliZWc3TmFQdz09IiwgInNpZ25hdHVyZSI6ICJNR1FDTURJcmpNYzhvODVPRHFZT0R4c05PcmpYdUhvWjM5endpZlhVTkdDc0lkN2xjU2FWcnhCVlNqRjRyaWg5Y1R6T3dRSXdWQXA3RUF5c1pucEI5REJWVWczQzlMeGQ3eTQxWEMwYVVPcGZUKzI3REVvWmM1WVVldDFGa1FwdmFQckduaFhVIn1d + ``` + +3. 凭据文件的校验: + + ``` bash + ./dslm_cred_tool.py verify --cred-file cred.txt + ``` + + 验证回显如下: + + ``` bash + head: + { + "typ": "DSL" + } + payload: + { + "type": "debug", + "manufacture": "OHOS", + "brand": "rk3568", + "model": "rk3568", + "softwareVersion": "3.0.0", + "securityLevel": "SL3", + "signTime": "20220209155303", + "version": "1.0.1" + } + verify success! + ``` + +## 常见问题 + +- Q:凭据工具如何在真实的生产环境中使用? + + A:凭据工具不可以直接用于生产环境,它仅仅是一个示例,用来演示凭据的具体格式和生成过程。在真实的生产环境中,我们建议参考凭据工具的实现,在符合相关安全要求的服务器密码机中进行凭据的生成和相关密钥的保存。 + +- Q:真实的生产环境中,如何对凭据文件进行校验? + + A:我们建议设备制造商使用妥善保管的私钥对凭据文件进行签名,同时替换OpenHarmony中对于凭据文件的默认校验流程,增加对凭据签名者的严格校验。例如仅认可信任机构签发的凭据文件、增加凭据和设备ID的一对一强绑定等校验。 + +## 参考资料 + +无 diff --git a/zh-cn/device-dev/subsystems/subsys-security-overview.md b/zh-cn/device-dev/subsystems/subsys-security-overview.md index 5ce4e86cbc..0deb39dedf 100644 --- a/zh-cn/device-dev/subsystems/subsys-security-overview.md +++ b/zh-cn/device-dev/subsystems/subsys-security-overview.md @@ -1,7 +1,8 @@ # 概述 -- [基本概念](#section175012297491) -- [约束与限制](#section2029921310472) +- [概述](#概述) + - [基本概念](#基本概念) + - [约束与限制](#约束与限制) OpenHarmony安全子系统目前提供给开发者的安全能力主要包含应用可信、权限管理、设备可信。涉及以下几个模块: @@ -17,6 +18,10 @@ OpenHarmony安全子系统目前提供给开发者的安全能力主要包含应 提供基于群组概念的同华为账号群组、点对点群组(如二维码、碰一碰等)的设备安全可信关系的创建和查询,分布式应用可基于该能力进行设备间的可信认证,然后向分布式软总线请求设备间安全会话。 +- 设备安全等级管理 + + OpenHarmony设备安全等级管理(DSLM)模块,负责管理各种不同形态和种类的OpenHarmony设备的设备安全等级。对于OpenHarmony中的各类分布式业务,当其对各类用户数据进行流转或处理的时候,可以调用本模块提供的接口获取相关目标设备的安全等级,并根据获取到的等级进行相应的处理。 + ## 基本概念 diff --git a/zh-cn/device-dev/subsystems/subsys-security.md b/zh-cn/device-dev/subsystems/subsys-security.md index 1a0b0eb101..ce8a509db3 100644 --- a/zh-cn/device-dev/subsystems/subsys-security.md +++ b/zh-cn/device-dev/subsystems/subsys-security.md @@ -1,11 +1,11 @@ # 安全 -- **[概述](subsys-security-overview.md)** +- **[概述](subsys-security-overview.md)** -- **[应用验签开发指导](subsys-security-sigverify.md)** +- **[应用验签开发指导](subsys-security-sigverify.md)** -- **[应用权限管理开发指导](subsys-security-rightmanagement.md)** - -- **[IPC通信鉴权开发指导](subsys-security-communicationverify.md)** +- **[应用权限管理开发指导](subsys-security-rightmanagement.md)** +- **[IPC通信鉴权开发指导](subsys-security-communicationverify.md)** +- **[设备安全等级管理开发指导](subsys-security-devicesecuritylevel.md)** -- GitLab