天天看點

YoC安全元件在CH5631晶片上的移植編譯參數源檔案編譯參數源檔案

YoC安全元件在CH5631晶片上的移植編譯參數源檔案編譯參數源檔案

簡介

随着IoT裝置爆發式的增長,IoT裝置的安全性已經越來越得到廣泛的重視,其應用場景包括敏感資料存儲、雲服務接入、網絡安全通信、系統啟動、系統固件更新、多媒體版權保護等。然而由于IoT裝置能力、成本的碎片化,較難形成能夠覆寫所有裝置的普适方案,系統設計者必須提供高伸縮性、高可配置的系統方案。 CH5631晶片是用于智能語音互動類産品的AIOT平台,搭配RTOS系統軟體和語音算法,在計算能力、存儲性能、內建度、低功耗、安全做了深度優化,向産品開發者提供真正低成本、低功耗的完整解決方案。本文基于CH5631晶片平台介紹安全應用pangu_secure_demo的建立及安全元件的移植過程。

移植前準備

代碼下載下傳

YoC代碼下載下傳見YoC, 本文使用的YoC版本為7.4.

CH5631平台分析

CH5631平台主核為CK804T, 支援TEE安全機制的硬體安全保護,具有片上efuse資源,安全算法上支援AES/RSA/SHA/TRNG硬體安全引擎。

元件移植分析

移植mbedtls元件,支援系統雲安全接入、網絡安全通信。mbedtls安全算法通過調用sec_crypto元件間接調用CH5631平台硬體能力。

移植sec_crypto,提供安全算法接口。

移植key_mgr, 支援基于efuse的密鑰存儲。

pangu_secure_demo

基于pangu_demo模闆快速建立新應用方案。

移植前請閱讀了解yocbook相關内容 最小系統、安全機制及安全元件介紹、CSI設計驅動接口、阿裡雲(MQTT)傳感資料上雲例程。

CSI驅動移植。安全元件依賴AES、SHA、RSA、RNG、Efuse驅動。

安全元件移植

步驟1、建立pangu_secure_demo

YoC代碼根目錄下從模闆建立目錄

cd ./solutions

cp -r pangu_demo pangu_secure_demo

修改pangu_secure_demo/package.yaml 配置檔案,修改後如下:

name: pangu_secure_demo

version: v7.4-dev # <必選項> 元件版本号

description: CH5631安全元件DEMO

type: solution

solution:

board_name: pangu_cpu0

cpu_id: cpu0

depends: # 該元件依賴其他的元件

  • csi: v7.4-dev
  • drivers: v7.4-dev
  • minilibc: v7.4-dev
  • aos: v7.4-dev
  • rhino: v7.4-dev
  • console: v7.4-dev
  • csi_pangu: v7.4-dev
  • pangu_cpu0: v7.4-dev # '>' | ‘>=' | ''
  • uservice: v7.4-dev
  • partition: v7.4-dev

編譯參數

build_config:

include:

- app/include
-           

internal_include:

- app/include
- app/src           

libs:

libpath:

#cflag: "-g -O0"

ldflag: -nostartfiles -Wl,--gc-sections -lm -Wl,-ckmap="yoc.map" -Wl,-zmax-page-size=1024

源檔案

source_file:

  • app/src/init/cli_cmd.c
  • app/src/init/init.c
  • app/src/*.c

def_config:

CONFIG_DEBUG: 1

CONFIG_ARCH_CSKY: 1

CONFIG_PARAM_NOT_CHECK: 1

CONFIG_CLI: 1

CONFIG_KV_SMART: 1

CONFIG_SOFTWDT: 1

CONFIG_AT: 1

CONFIG_NTP: 1

CONFIG_USING_TLS: 1

CONFIG_NON_ADDRESS_FLASH: 1

CONFIG_KERNEL_WORKQUEUE: 1

CONFIG_SYSTICK_HZ: 1000

CONFIG_CHIP_PANGU: 1

CONFIG_CHIP_PANGU_CPU0: 1

CONFIG_KERNEL_RHINO: 1

CONFIG_ARCH_INTERRUPTSTACK: 4096

CONFIG_CLI_TASK_STACK_SIZE: 8192

CONFIG_VENDOR_NAME: "thead"

CONFIG_CHIP_NAME: "pangu"

CONFIG_BOARD_NAME: "pangu_cpu0"

CONFIG_CPU: "ck804ef"

删除pangu_demo代碼并添加pangu_secure_demo應用的代碼。添加後目錄如下:

├── app

│ ├── include

│ │ ├── app_config.h

│ │ ├── app_init.h

│ │ ├── csi_config.h

│ │ └── yoc_config.h

│ └── src

│ ├── app_main.c

│ ├── app_main.h

│ ├── demo_ecc_dsa.c

│ ├── demo_ecc_utils.c

│ ├── demo_ecc_utils.h

│ ├── demo_key_mgr.c

│ ├── demo_mbedtls.c

│ ├── demo_sec_crypto.c

│ ├── demo_sec_alimqtt.c

│ ├── demo_utils.h

│ ├── init

│ │ ├── cli_cmd.c

│ │ └── init.c

├── Makefile

├── package.yaml

├── README.md

└── SConstruct

步驟2、安全元件配置

package.yaml中添加安全元件依賴:

...

  • mbedtls: v7.4-dev
  • sec_crypto: v7.4-dev
  • key_mgr: v7.4-dev

    package.yaml中添加配置項,設定平台安全機制為TEE:

CONFIG_TEE_CA: 1

package.yaml中添加配置項,使mbedtls 安全算法調用sec_crypto平台實作,進而間接調用平台TEE安全機制。

MBEDTLS_AES_ALT: 1

MBEDTLS_SHA256_ALT: 1

MBEDTLS_RSA_ALT: 1

package.yaml中添加配置項,支援密鑰存儲在efuse中:

CONFIG_TB_KP: 1

package.yaml 配置檔案修改後如下:

- app/include
-           
- app/include
- app/src           

  • app/src/init/*

##secure config##

CONFIG_TEE_CA: 1

#mbedtls

MBEDTLS_AES_ALT: 1

#key_mgr

CONFIG_TB_KP: 1

#pangu_secure_demo

MBEDTLS_SELF_TEST: 1

CONFIG_SECURITY_DEMO_MBEDTLS: 1

CONFIG_SECURITY_DEMO_SEC_CRYPTO: 1

CONFIG_SECURITY_DEMO_TEST: 1

CONFIG_SECURITY_DEMO_KEY_MGR: 1

步驟3、移植驗證

該步驟驗證以上的移植是否成功。

編譯pangu_secure_demo 并燒寫鏡像。

重新開機單闆,系統自動運作pangu_secure_demo程式。

重新開機後序列槽應該有如下列印,提示輸入運作指令。

Welcome to CLI...

mbedtls基本驗證指令

sdemo mbedtls

運作成功後序列槽有如下列印:

AES-ECB-128 (dec): passed

AES-ECB-128 (enc): passed

AES-ECB-192 (dec): passed

AES-ECB-192 (enc): passed

AES-ECB-256 (dec): passed

AES-ECB-256 (enc): passed

AES-CBC-128 (dec): passed

AES-CBC-128 (enc): passed

AES-CBC-192 (dec): passed

AES-CBC-192 (enc): passed

AES-CBC-256 (dec): passed

AES-CBC-256 (enc): passed

AES-CTR-128 (dec): passed

AES-CTR-128 (enc): passed

AES-CTR-128 (dec): passed

SHA-1 test #1: passed

SHA-1 test #2: passed

SHA-1 test #3: passed

SHA-224 test #1: passed

SHA-224 test #2: passed

SHA-224 test #3: passed

SHA-256 test #1: passed

SHA-256 test #2: passed

SHA-256 test #3: passed

CTR_DRBG : passed

CTR_DRBG : passed

RSA key validation: passed

PKCS#1 encryption : passed

PKCS#1 decryption : passed

PKCS#1 data sign : passed

PKCS#1 sig. verify: passed

key_mgr驗證指令:

sdemo km

key_mgr_demo_main passed!

sec_crypto驗證指令

sdemo sec_crypto

sec_crypto_sha1_demo passed!

sec_crypto_sha224_demo passed!

sec_crypto_sha256_demo passed!

sec_crypto_rng_demo passed!

sec_crypto_aes_demo passed!

sec_crypto_rsa_demo passed!

mbedtls元件聯網驗證

通過調用mbedtls實作已MQTT方式安全接入aliyun IoT,驗證mbedtls正常工作。

package.yaml中配置MQTT需要的WIFI SSID、PSK、device name資訊:

CONFIG_WIFI_SSID: "TESTXXX"

CONFIG_WIFI_PSK: "TESTXXX"

CONFIG_DEVICE_NAME: "e6d0ec6104400000b97baff21bebe40f"

通過序列槽 CLI指令配置從阿裡雲注冊的聯網三要素,如:

factory setali 222lg7ARENf e6d0ec1234400000b97baff21bebe40f 9aaa94b0bdfabdcab815b79ec51ae37e ab09

運作MQTT接入指令:

sdemo alimqtt

[ 22.594]tls LD CA root Cert

[ 22.599]tls SSL/TLS struct

[ 22.602]tls Conn /a18lg7ARENf.iot-as-mqtt.cn-shanghai.aliyuncs.com/1883

[ 22.684]tls Handshake

[ 22.938]tls Verify X.509

[ 22.941]tls certverify ret 0x00

[ 22.997]app_net CONNNECT SUCCESS

運作資料釋出指令:

sdemo push

{"temp":20,"humi":20,"led":1,"deviceName":"e6d0ec6104400000b97baff21bebe40f"}

[ 28.877]app_net push action

[ 28.976]app_net PUSH_SUCCESS

繼續閱讀