littlebot
Published on 2025-04-11 / 0 Visits
0

【源码】基于C语言的硬件加密与TEE交互系统

项目简介

本项目整合了两个关键部分。librkcrypto提供基于硬件的算法接口,利用DMA方式进行数据计算,适用于加解密、认证等场景,依赖于kernel crypto驱动实现。同时,基于C语言实现了TEE(Trusted Execution Environment)客户端API,TEE作为安全环境可执行受信任代码,此部分提供与TEE设备交互的API,保障数据隐私和完整性。

项目的主要特性和功能

librkcrypto部分

  • 支持DMA方式进行数据计算,用于加解密、认证场景。
  • 可通过strings命令或日志打印查询API版本号。
  • 适用于RK3588、RK356x等多种芯片平台。
  • 不同版本对kernel有特定提交依赖,部分功能对rkbin版本有要求。

TEE客户端API部分

  • 上下文管理:创建、初始化和结束TEE上下文,管理与TEE设备的连接。
  • 会话管理:打开和关闭TEE会话,建立与TEE设备的通信通道。
  • 命令执行:向TEE设备发送命令,执行加密、解密等受信任操作。
  • 内存管理:分配和释放共享内存,实现客户端与TEE设备间的数据传输。
  • 错误处理:将系统调用错误转换为TEEC错误代码,便于应用程序处理。
  • 客户端连接设置:设置客户端连接数据,如UUID,标识连接。

安装使用步骤

编译

Android

```bash $ source build/envsetup.sh $ lunch rk3588_s-userdebug # 以RK3588为例

$ mm `` 编译成功后,根据配置的芯片平台编译出32 - bit或64 - bit目标文件librkcrypto.solibrkcrypto_testlibrkcrypto_demo`,Android编译日志将打印目标文件所在的目录。

Linux

  • 编译lib、test bash $ ./build.sh # 编译32-bit和64-bit $ ./build.sh 32 # 只编译32-bit $ ./build.sh 64 # 只编译64-bit 编译成功后,在librkcrypto/out/target目录生成目标文件librkcrypto.solibrkcrypto.alibrkcrypto_test
  • 编译demo bash $ cd demo $ make 32 # 或 $ make,只编译32-bit $ make 64 # 只编译64-bit $ make clean # 清除目标文件 编译成功后,在librkcrypto/demo目录生成目标文件librkcrypto_demo

使用

头文件

外部程序调用librkcrypto API所需的头文件: ```c

include "rkcrypto_common.h" // 通用

include "rkcrypto_core.h" // 调用cipher、hash、hmac等接口时引用

include "rkcrypto_mem.h" // 调用支持dma_fd的接口时引用

include "rkcrypto_otp_key.h" // 调用otp_key相关接口时引用

include "rkcrypto_random.h" // 调用随机数接口时引用

```

库文件

librkcrypto.so librkcrypto.a (linux平台)

日志打印

rkcrypto的日志等级划分如下: 等级1 - TRACE_ERROR:错误信息 等级2 - TRACE_INFO:常用信息,例如版本号信息等,默认是等级2 等级3 - TRACE_DEBUG:一般的调试信息 等级4 - TRACE_VERBOSE:冗长的调试信息 可以通过以下方式,按需设置日志等级,设置后将打印当前和低于当前等级的日志,注意设备重启后默认是等级2: - 使用rkcrypto提供的API: c RK_RES rkcrypto_set_trace_level(enum RKCRYPTO_TRACE_LEVEL level); - 使用指令: ```shell setprop vendor.rkcrypto.trace.level 1/2/3/4

export rkcrypto_trace_level=1/2/3/4 ```

应用开发说明文档

Rockchip_Developer_Guide_Crypto_HWRNG_CN.pdf

常见问题处理

编译链依赖

CMake中默认编译链为gcc 10.3版本,即gcc-arm-10.3-2021.07-x86_64-arm-none-linux-gnueabihfgcc-arm-10.3-2021.07-x86_64-aarch64-none-linux-gnu。 若没有该编译链版本,编译时会报错,可修改CMakeLists.txt中的编译链路径和版本: makefile set (TOOLCHAIN_PREBUILTS "${CMAKE_CURRENT_SOURCE_DIR}/../../prebuilts") set (TOOLCHAIN_PATH_ARM32 "gcc/linux-x86/arm/gcc-arm-10.3-2021.07-x86_64-arm-none-linux-gnueabihf/bin") set (TOOLCHAIN_PATH_AARCH64 "gcc/linux-x86/aarch64/gcc-arm-10.3-2021.07-x86_64-aarch64-none-linux-gnu/bin") 若运行时出现GLIBC版本不一致的报错,可修改编译链版本或者修改设备GLIBC版本。

下载地址

点击下载 【提取码: 4003】【解压密码: www.makuang.net】