提交 5af8002e 编写于 作者: Z zhirenx

根据评审意见修改

Signed-off-by: Nzhirenx <xuzhiren@huawei.com>
上级 0a97c6b8
......@@ -4,6 +4,8 @@
- [概述](#概述)
- [功能简介](#功能简介)
- [基本概念](#基本概念)
- [设备安全等级](#设备安全等级)
- [DSLM](#dslm)
- [运作机制](#运作机制)
- [约束与限制](#约束与限制)
- [开发指导](#开发指导)
......@@ -11,10 +13,9 @@
- [接口说明](#接口说明)
- [开发步骤](#开发步骤)
- [开发示例](#开发示例)
- [1. 同步接口使用示例](#1-同步接口使用示例)
- [2. 异步接口使用示例](#2-异步接口使用示例)
- [设备安全等级定制](#设备安全等级定制)
- [设备安全等级凭据](#设备安全等级凭据)
- [默认实现](#默认实现)
- [凭据文件生成步骤](#凭据文件生成步骤)
- [1. 构造header](#1-构造header)
- [2. 构造payload](#2-构造payload)
......@@ -39,11 +40,13 @@
OpenHarmony的分布式技术可以实现不同设备的资源融合,将多个设备虚拟成一个“超级虚拟终端”。在这个“超级虚拟终端”的内部,处理、流转各类用户数据时,需要确保各个节点不因安全能力薄弱,成为整个“超级虚拟终端”的薄弱点,因此引入设备安全等级管理(DSLM)模块来解决这类问题。
OpenHarmony设备安全等级管理(DSLM)模块,负责管理各种不同形态和种类的OpenHarmony设备的设备安全等级。对于OpenHarmony中的各类分布式业务,当其对各类用户数据进行流转或处理的时候,可以调用本模块提供的接口获取相关目标设备的安全等级,并根据获取到的等级进行相应的处理。
OpenHarmony设备安全等级管理(DSLM)模块,负责管理各种不同形态和种类的OpenHarmony设备的设备安全等级。在各类分布式业务中,当OpenHarmony对各类用户数据进行流转或处理的时候,可以调用本模块提供的接口获取相关目标设备的安全等级,并根据获取到的等级进行相应的处理。
### 基本概念
OpenHarmony设备的安全等级基于OpenHarmony设备的系统安全能力进行评估。OpenHarmony系统安全能力,根植于硬件实现的三个可信根:启动、存储、计算,以基础安全工程能力为依托,重点围绕设备完整性保护、数据机密性保护、漏洞攻防对抗构建相关的安全技术和能力。
#### 设备安全等级
OpenHarmony设备的安全等级取决于设备的系统安全能力。OpenHarmony系统安全能力,根植于硬件实现的三个可信根:启动、存储、计算。基于基础安全工程能力,重点围绕以下三点构建相关的安全技术和能力:设备完整性保护、数据机密性保护、漏洞攻防对抗。
OpenHarmony系统安全架构如下图所示:
......@@ -63,6 +66,10 @@ OpenHarmony系统安全架构如下图所示:
- SL5安全等级的OpenHarmony设备,为OpenHarmony设备中具备最高等级安全防护能力的设备。系统核心软件模块应进行形式化验证。关键硬件模块如可信根、密码计算引擎等应具备防物理攻击能力,可应对实验室级别的攻击。此级别设备应具备高安全单元,如专用的安全芯片,用于强化设备的启动可信根、存储可信根、运行可信根。
#### DSLM
DSLM(Device Security Level Managerment), 是OpenHarmony设备安全等级管理的管理模块。负责各OpenHarmony设备之间的设备安全等级信息的同步和验证。并对外提供查询各设备的安全等级的接口。
### 运作机制
当“超级虚拟终端”内的各个设备有了自己的“设备安全等级”,这个“超级虚拟终端”的内部,各类用户数据的处理或流转便有了决策依据。例如:分布式文件存储服务,在处理某些敏感数据时,默认不允许相关数据存储在安全等级低于SL3的设备。
......@@ -75,17 +82,17 @@ OpenHarmony设备的默认安全等级为SL1,设备制造商可以根据设备
### 场景介绍
各子系统在处理、流转各类用户数据时,可以调用“设备安全等级管理”模块提供的接口,获取相关设备的安全等级信息。并结合其所处理数据的实际情况,决策数据的进一步处理。
各子系统在处理、流转各类用户数据时,可以调用DSLM模块提供的接口,获取相关设备的安全等级信息。并结合其所处理数据的实际情况,决策数据的进一步处理。
### 接口说明
所有接口均为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); | 从设备安全等级信息中提取对应的设备安全等级 |
| :----------------------------------------------------------- | :------------------------------------------- |
| 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); | 从设备安全等级信息中提取对应的设备安全等级 |
### 开发步骤
......@@ -98,8 +105,8 @@ OpenHarmony设备的默认安全等级为SL1,设备制造商可以根据设备
2. 头文件依赖添加
```cpp
#include "device_security_defines.h"
#include "device_security_info.h"
#include "device_security_defines.h" // 关键数据结构定义头文件
#include "device_security_info.h" // 接口函数定义头文件
```
3. 接口调用
......@@ -130,12 +137,12 @@ OpenHarmony设备的默认安全等级为SL1,设备制造商可以根据设备
### 开发示例
假设需要开发具备文件分享功能的某业务,为了防止部分敏感文件被无意识的分享出来。可以在其发送任意文件前增加进行如下处理:
假设需要开发具备文件分享功能的某业务,为了防止部分敏感文件被无意识的分享出来。可以在其发送任意文件前增加如下判断处理:
1、当目标设备的设备安全等级大于或者等于SL3时,默认允许该文件的传递。
2、当目标设备的设备安全等级小于SL3时,默认拒绝该文件的外传,同时弹框告知用户。
- 当目标设备的设备安全等级大于或者等于SL3时,默认允许该文件的传递。
- 当目标设备的设备安全等级小于SL3时,默认拒绝该文件的外传,同时弹框告知用户。
#### 1. 同步接口使用示例
1. 同步接口使用示例
```cpp
void CheckDestDeviceSecurityLevel(const DeviceIdentify *device, RequestOption *option)
......@@ -167,7 +174,7 @@ void CheckDestDeviceSecurityLevel(const DeviceIdentify *device, RequestOption *o
}
```
#### 2. 异步接口使用示例
1. 异步接口使用示例
```cpp
// 回调函数
......@@ -208,11 +215,13 @@ void CheckDestDeviceSecurityLevelAsync(const DeviceIdentify *device, RequestOpti
### 设备安全等级凭据
OpenHarmony的设备安全等级管理模块提供了安全等级信息同步与验证的默认实现。它假定所有OpenHarmony设备的安全等级为SL1,并且采用了一套较为宽松的验证方案。详细细节可以参考[相关源码](https://gitee.com/openharmony/security_device_security_level/tree/master/oem_property/ohos)
为了保证设备安全等级信息的完整性和不可抵赖性。设备的安全等级信息需要封装在“设备安全等级凭据”(简称为“凭据”)文件中在设备间进行传递,凭据中除了包含设备的安全等级信息之外,还可以包含设备型号、设备版本号等其它设备固有属性,同时使用PKI技术对上述信息进行签名。并结合[设备认证](https://gitee.com/openharmony/security_deviceauth)[HUKS](https://gitee.com/openharmony/security_huks)等OpenHarmony其他基础安全能力。最大程度的保证了凭据传递的安全性
设备制造商可以根据设备实际情况,参考[基本概念](#基本概念)章节的描述,修改默认的设备安全等级信息。与此同时,设备制造商还可以将OpenHarmony中的默认实现替换为更加严格的验证策略,包括但不限于采用更加精确的一机一凭据策略、从服务器定期下载更新的凭据并严格认证凭据的签发者和有效期、使用TEE甚至SE对凭据文件进行进一步的签名等流程。
### 默认实现
为了保证设备安全等级信息的完整性和不可抵赖性。设备的安全等级信息需要封装在“设备安全等级凭据”(简称为“凭据”)文件中在设备间进行传递,凭据中除了包含设备的安全等级信息之外,还可以包含设备型号、设备版本号等其它设备固有属性,同时使用PKI技术对上述信息进行签名。并结合[设备认证](https://gitee.com/openharmony/security_deviceauth)[HUKS](https://gitee.com/openharmony/security_huks)等OpenHarmony其他基础安全能力。最大程度的保证了凭据传递的安全性。
OpenHarmony的设备安全等级管理模块提供了安全等级信息同步与验证的默认实现。它假定所有OpenHarmony设备的安全等级为SL1,并且采用了一套较为宽松的验证方案。详细细节可以参考[相关源码](https://gitee.com/openharmony/security_device_security_level/tree/master/oem_property/ohos)
设备制造商可以根据设备实际情况,参考[基本概念](#基本概念)章节的描述,修改默认的设备安全等级信息。与此同时,设备制造商还可以将OpenHarmony中的默认实现替换为更加严格的验证策略,包括但不限于采用更加精确的一机一凭据策略、从服务器定期下载更新的凭据并严格认证凭据的签发者和有效期、使用TEE(Trusted Execution Environment)甚至SE(Secure Element)对凭据文件进行进一步的签名等流程。
### 凭据文件生成步骤
......@@ -224,7 +233,7 @@ OpenHarmony的设备安全等级管理模块提供了安全等级信息同步与
#### 1. 构造header
当前header为固定json字符串,其格式化显示如下
当前header为固定json字符串,其格式化显示如下
``` json
{
......@@ -276,10 +285,10 @@ payload中各字段说明如下:
| sn | 设备SN序列号 | 否 | string [0..128] |
| udid | 设备UDID序列号 | 否 | string [0..128] |
#### 3. 构造signature
signature是对前面header和payload的签名
##### 3.1 构造构建待签名的原始数据
将BASE64编码后的header和payload合并,中间用符号"."连接,得到`<base64-head>.<base64-payload>`
......@@ -291,9 +300,11 @@ eyJ0eXAiOiAiRFNMIn0=.eyJ0eXBlIjogImRlYnVnIiwgIm1hbnVmYWN0dXJlIjogIm9ob3MiLCAiYnJ
##### 3.2 生成签名私钥
**本流程需要在安全可靠的环境中执行,例如符合相关安全要求的服务器密码机中,以确保用于签名的密钥不被泄露**
凭据文件使用ECDSA签名算法对原始数据进行签名,首先生成签名用ECDSA密钥对:`<ecc-l3-pk>``<ecc-l3-sk>`
> ![notice](../public_sys-resources/icon-notice.gif)**注意:**
> 本流程需要在安全可靠的环境中执行,例如符合相关安全要求的服务器密码机中,以确保用于签名的密钥不被泄露
##### 3.3 对原始数据进行签名
`<base64-head>.<base64-payload>`作为参数,使用刚刚生成的ECC私钥`<ecc-l3-sk>`对其进行签名,并对签名结果进行BASE64编码,得到签名结果值`<base64-signature>`
......@@ -304,9 +315,6 @@ MGUCMDb9xoiFzTWVkHDU3VWSVQ59gLyw4TchZ0+eQ3vUfQsLt3Hkg0r7a/PmhkNr3X/mTgIxAIywIRE6
#### 4. 构造attestation
**本流程需要在安全可靠的环境中执行,例如符合相关安全要求的服务器密码机中,以确保用于签名的密钥不被泄露**
**本流程涉及到的各密钥对不需要每次都重复生成,在确保密钥安全的前提下,后续可以直接复用。**
##### 4.1 生成三级签名验证信息
1. 首先生成二级签名用ECDSA密钥对:`<ecc-l2-pk>``<ecc-l2-sk>`
......@@ -372,6 +380,10 @@ MGUCMDb9xoiFzTWVkHDU3VWSVQ59gLyw4TchZ0+eQ3vUfQsLt3Hkg0r7a/PmhkNr3X/mTgIxAIywIRE6
W3sidXNlclB1YmxpY0tleSI6ICJNSG93RkFZSEtvWkl6ajBDQVFZSkt5UURBd0lJQVFFTEEySUFCREdOMU9xYWZrWFc2a0l1SEZrMVQ0TS84RVJUY3p0eWRDaGtramFROEkzNEc2Q3E1aTNJcnczVnRhQS9KTTF2a0lHOUZDVWRUaHZFUlJFUTFUdG9xemdxZW9SUzVwQW1EYUUyalEwYzdDem8rOHVUWTRIYW1weXZ1TENtenlYUXFnPT0iLCAic2lnbmF0dXJlIjogIk1HTUNMeHVjUnoyZndKZ092QkxyU1U3K1hlVTA3R0EyVXhZbDFMbEJLUnVIUS9wZlNWVHBEd0ZHSTNTb3h5ODR3NThIQWpBeGRtNEY3b3YvYUtEL0NFZi9QZlZDWHVlbE1mQys1L3pkUExXUUJEVnlGdWQrNVdYL3g4U083VXM5UGFhRW1mZz0ifSwgeyJ1c2VyUHVibGljS2V5IjogIk1Ib3dGQVlIS29aSXpqMENBUVlKS3lRREF3SUlBUUVMQTJJQUJHMWU3TDJVd1AyWWxTajB2RWViUGJpNVpLMDh5NS9UeHRWb3VrRFpIUGtSNlRtb2JoVGpyMVRVNzZpUkU4bDlWQlhuU1h1QVB6cjBuSHdKVkdVZVJMdmp4MVh0YUZReE9QNjhjNlIvRTdFWkZ2STdRUFg1N0tvRkhYdkEvVlJaNnc9PSIsICJzaWduYXR1cmUiOiAiTUdRQ01FUVdFNnk0Rm42SFg1ekFvTzNkYzl5cG1Sd2lBclplc2o5aVBROTZEaEhuNXJkRTdNaGFMdWNRZ0MvaXhjSWJsZ0l3QkN5aFBvRUg2RjFITFlwM2xqbWVncVlZQ1E5NHEyZm1kbDB6dHhrWEVTOVpPOVRNSUZQRVpKYlpmUnU5ZHcyOSJ9LCB7InVzZXJQdWJsaWNLZXkiOiAiTUhvd0ZBWUhLb1pJemowQ0FRWUpLeVFEQXdJSUFRRUxBMklBQkZRUUlDWmpWUTV4bkE0c2RMbUJzUmVaMzRJeWdkSmZhanA3SnRReFBzU2RwWTJXV0FneXp6Rm40OFFRRWhoU1BtdzhJYUU3VlJKRENBT3FYRnhGektJbFBFTDFvcFJDUmhhWmJrRzc5Y3ZrWC9HVVhlaFVYc2V2ZGhyb2VRVERFdz09IiwgInNpZ25hdHVyZSI6ICJNR1FDTUdQRndvSDJLbHhwbVZhWXRWV1ViMHpDSUJxYXFXY2F6czFqOVp4YklLUmVkR2tJY0VJdHN0UFoxdnVTanYvNDJnSXdSeGZPcTRoQTdNMHlGV2ZPSndqRTlTc2JsYXhvRDNiRTZCYzN2QjUyMmsyQ0ZJNWJqelpkeUFTVW04d2J2TW5WIn1d
```
> ![notice](../public_sys-resources/icon-notice.gif)**注意:**
> 本流程需要在安全可靠的环境中执行,例如符合相关安全要求的服务器密码机中,以确保用于签名的密钥不被泄露
> 本流程涉及到的各密钥对不需要每次都重复生成,在确保密钥安全的前提下,后续可以直接复用。
#### 5. 构造完整的凭据
用符号"."连接上述四段数据,最终得到 `<base64-header>.<base64-payload>.<base64-signature>.<base64-attestation>`,其示例如下:
......@@ -382,7 +394,7 @@ eyJ0eXAiOiAiRFNMIn0=.eyJ0eXBlIjogImRlYnVnIiwgIm1hbnVmYWN0dXJlIjogIm9ob3MiLCAiYnJ
### 凭据交换协议
设备安全等级模块在感知到有新设备上线时,会通过[分布式软总线](https://gitee.com/openharmony/communication_dsoftbus)提供的通道向该设备请求其设备安全等级凭据
设备安全等级模块在感知到有新设备上线时,会通过[分布式软总线](https://gitee.com/openharmony/communication_dsoftbus)提供的通道向该设备请求其设备安全等级凭据
凭据请求报文格式如下:
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册