1# 移植安全子系统 2 3 4安全子系统提供网络设备连接、认证鉴权等功能,依赖mbedtls实现硬件随机数以及联网功能。 5 6 7由于每个厂商芯片硬件与实现硬件随机数的方式不同,需要适配硬件随机数接口。 8 9 10## 移植指导 11 12OpenHarmony提供了mbedtls的开源三方库,路径为“//third_party/mbedtls”。此库中提供了“mbedtls_platform_entropy_poll”、“mbedtls_hardclock_poll”、“mbedtls_havege_poll”、“mbedtls_hardware_poll”等几种产生随机数的方式。厂商需要根据芯片适配“mbedtls_hardware_poll”方式。 13 14 15## 移植实例 16 171. “config.json”添加文件系统。 18 路径:“vendor/MyVendorCompany/MyProduct/config.json” 19 20 修改如下: 21 22 ``` 23 { 24 "subsystem": "security", 25 "components": [ 26 { "component": "hichainsdk", "features":[] }, 27 { "component": "huks", "features":[]} 28 ] 29 }, 30 ``` 31 322. 配置宏,打开硬件随机数接口相关代码。 33 根据mbedtls的编译文件可以看出,配置宏的位置在"MBEDTLS_CONFIG_FILE=<../port/config/config_liteos_m.h>"文件中。 34 35 路径:“third_party/mbedtls/BUILD.gn” 36 37 38 ``` 39 if (ohos_kernel_type == "liteos_m") { 40 defines += [ 41 "__unix__", 42 "MBEDTLS_CONFIG_FILE=<../port/config/config_liteos_m.h>", 43 ] 44 } 45 ``` 46 47 根据代码我们可以看出需要配置“MBEDTLS_NO_PLATFORM_ENTROPY”、“MBEDTLS_ENTROPY_HARDWARE_ALT”两个宏,才能编译硬件随机数的相关代码。 48 49 路径:“third_party/mbedtls/library/entropy.c” 50 51 52 ``` 53 #if !defined(MBEDTLS_NO_DEFAULT_ENTROPY_SOURCES) 54 #if !defined(MBEDTLS_NO_PLATFORM_ENTROPY) 55 mbedtls_entropy_add_source( ctx, mbedtls_platform_entropy_poll, NULL, 56 MBEDTLS_ENTROPY_MIN_PLATFORM, 57 MBEDTLS_ENTROPY_SOURCE_STRONG ); 58 #endif 59 ...... 60 #if defined(MBEDTLS_ENTROPY_HARDWARE_ALT) 61 mbedtls_entropy_add_source( ctx, mbedtls_hardware_poll, NULL, 62 MBEDTLS_ENTROPY_MIN_HARDWARE, 63 MBEDTLS_ENTROPY_SOURCE_STRONG ); 64 #endif 65 ...... 66 #endif /* MBEDTLS_NO_DEFAULT_ENTROPY_SOURCES */ 67 } 68 ``` 69 703. 适配硬件随机数接口 71 接口定义如下: 72 73 路径:“third_party/mbedtls/include/mbedtls/entropy_poll.h” 74 75 76 ``` 77 int mbedtls_hardware_poll( void *data,unsigned char *output, size_t len, size_t *olen ); 78 ``` 79 80 81 **表1** 安全子系统配置项 82 83| 配置项 | 意义 | 84| -------- | -------- | 85| disable_huks_binary | 是否编译HUKS源码。<br/>(1) 默认值: false,不编译HUKS源码。<br/>(2) 其他值: true,编译HUKS源码。 | 86| disable_authenticate | 是否需要裁剪hichain认证功能。<br/>(1) 默认值: true,不裁剪。<br/>(2) 其他值: false,裁剪hichain认证功能。 | 87| huks_use_lite_storage | 是否采用轻量化存储方案。无文件系统、仅有flash存储的设备,可采用轻量化存储方案。<br/>(1) 默认值: true,使用轻量化存储。<br/>(2) 其他值: false,不使用轻量化存储。 | 88| huks_use_hardware_root_key | 是否使用硬件根密钥。设备存在硬件根密钥能力时,需要根据自身能力适配硬件根密钥方案;HUKS提供的RKC方案仅为模拟实现。<br/>(1) 默认值:false,默认值,默认无硬件根密钥。<br/>(2) 其他值:true,设备具有硬件根密钥相关能力时,应自行适配。 | 89| huks_config_file | 是否使用HUKS默认配置文件。<br/>(1) 默认值:"":使用HUKS默认配置文件hks_config.h。<br/>(2) 其他文件:产品可在HUKS支持能力集合中自行选择所要支持的特性。 | 90 91 92> ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:** 93> 在添加安全子系统时,可直接通过配置feature来选择安全子系统特性。 94> 95> 96> ``` 97> { 98> "subsystem": "security", 99> "components": [ 100> { "component": "hichainsdk", "features":[] }, 101> { "component": "huks", "features": 102> [ 103> "disable_huks_binary = false", 104> "disable_authenticate = false" 105> ] 106> } 107> ] 108> }, 109> ``` 110