打印
[学习资料]

实现通过PKCS11使用Cryptoauthlib与OpenSSL进行硬件安全模块(SE)操作

[复制链接]
322|11
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
雨果喝水|  楼主 | 2024-7-25 15:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
硬件平台
使用I2C接口操作安全芯片
唤醒芯片:
在SDA线上发送超过60微秒的低电平信号。
之后拉高SDA线并等待1.5毫秒。
通过设备地址(如0xC0)直接读取4个字节,验证是否返回0x04, 0x11, 0x33, 0x43,表示芯片成功唤醒。
由于原生Linux内核不支持动态调整I2C时钟频率,建议固定I2C时钟频率在100KHz。
Buildroot工具链
使用Buildroot构建工具来简化依赖库的安装和配置,包括openssl, openssl-engine, libp11, p11-kit等。

使用特权

评论回复
沙发
雨果喝水|  楼主 | 2024-7-25 15:24 | 只看该作者
安装交叉编译工具
1. 使用apt自动安装
shell

$ sudo apt-get install gcc-arm-linux-gnueabi

使用Buildroot搭建编译工具链
从Buildroot源码构建工具链:

参考Buildroot文档,下载源码并进行配置。
配置完成后,使用Buildroot生成工具链。

使用特权

评论回复
板凳
雨果喝水|  楼主 | 2024-7-25 15:26 | 只看该作者
安装Buildroot的SDK:

下载SDK并解压到指定目录。
运行脚本重定向编译环境:
shell

$ tar xzvf arm-buildroot-linux-gnueabi_sdk-buildroot.tar.gz
$ cd arm-buildroot-linux-gnueabi_sdk-buildroot
$ ./relocate-sdk.sh

使用特权

评论回复
地板
雨果喝水|  楼主 | 2024-7-25 15:29 | 只看该作者
下载并编译支持PKCS11的Cryptoauthlib库
1. 获取Cryptoauthlib最新版本
shell

$ git clone https://github.com/MicrochipTech/cryptoauthlib
如访问GitHub较慢,可以使用国内镜像:

shell

$ git clone https://gitee.com/flyerink/cryptoauthlib

使用特权

评论回复
5
雨果喝水|  楼主 | 2024-7-25 15:29 | 只看该作者
创建CMake交叉编译工具链文件
根据使用的工具链创建arm_toolchain.cmake文件:

使用gcc-arm-linux-gnueabi工具链:
cmake

set(CMAKE_SYSTEM_NAME Linux)
set(CMAKE_SYSTEM_PROCESSOR arm)

set(tools /usr)

SET(CMAKE_C_COMPILER ${tools}/bin/arm-linux-gnueabi-gcc)
SET(CMAKE_CXX_COMPILER ${tools}/bin/arm-linux-gnueabi-g++)
SET(CMAKE_LINKER ${tools}/bin/arm-linux-gnueabi-ld)
SET(CMAKE_NM ${tools}/bin/arm-linux-gnueabi-nm)
SET(CMAKE_OBJCOPY ${tools}/bin/arm-linux-gnueabi-objcopy)
SET(CMAKE_OBJDUMP ${tools}/bin/arm-linux-gnueabi-objdump)
SET(CMAKE_RANLIB ${tools}/bin/arm-linux-gnueabi-ranlib)

使用特权

评论回复
6
雨果喝水|  楼主 | 2024-7-25 15:29 | 只看该作者
使用Buildroot工具链:
cmake

set(CMAKE_SYSTEM_NAME Linux)
set(CMAKE_SYSTEM_PROCESSOR arm)

set(tools /opt/arm-buildroot-linux-gnueabi_sdk-buildroot)

SET(CMAKE_C_COMPILER ${tools}/bin/arm-buildroot-linux-gnueabi-gcc)
SET(CMAKE_CXX_COMPILER ${tools}/bin/arm-buildroot-linux-gnueabi-g++)
SET(CMAKE_LINKER ${tools}/bin/arm-buildroot-linux-gnueabi-ld)
SET(CMAKE_NM ${tools}/bin/arm-buildroot-linux-gnueabi-nm)
SET(CMAKE_OBJCOPY ${tools}/bin/arm-buildroot-linux-gnueabi-objcopy)
SET(CMAKE_OBJDUMP ${tools}/bin/arm-buildroot-linux-gnueabi-objdump)
SET(CMAKE_RANLIB ${tools}/bin/arm-buildroot-linux-gnueabi-ranlib)

使用特权

评论回复
7
雨果喝水|  楼主 | 2024-7-25 15:32 | 只看该作者
修改I2C地址和设备
在lib/atca_cfgs.c文件中,设置I2C地址为0xC0,使用i2c-2设备。如果不确定I2C设备,使用i2cdetect命令检测:

shell

$ i2cdetect -l   # 查看系统已安装的 I2C 总线列表
$ i2cdetect -y -r 1    # 查询i2c-1上的设备
注意,I2C地址以7位表示,0xC0对应0x60。

使用特权

评论回复
8
雨果喝水|  楼主 | 2024-7-25 15:34 | 只看该作者
编译生成ARM下的二进制文件
shell

$ mkdir build
$ cd build
$ cmake -DCMAKE_TOOLCHAIN_FILE="../arm_toolchain.cmake" -DBUILD_TESTS=ON -DATCA_PKCS11=ON -DATCA_HAL_I2C=ON -DATCA_HAL_KIT_HID=OFF -DATCA_HAL_KIT_CDC=OFF -DATCA_TNGTLS_SUPPORT=ON -DATCA_TFLEX_SUPPORT=ON -DATCA_USE_ATCAB_FUNCTIONS=OFF -DATCA_PRINTF=ON ..
$ make

编译选项说明:

BUILD_TESTS: 编译生成测试程序。
ATCA_PKCS11: 编译PKCS11库。
ATCA_HAL_I2C: 使用I2C接口。
ATCA_PRINTF: 启用atca_printf函数。

使用特权

评论回复
9
雨果喝水|  楼主 | 2024-7-25 15:34 | 只看该作者
复制文件到开发板
shell


$ scp cryptoauthlib.conf root@192.168.1.101:/etc/cryptoauthlib
$ scp ../app/pkcs11/slot.conf.tmpl root@192.168.1.101:/var/lib/cryptoauthlib
$ scp lib/libcryptoauth.so root@192.168.1.101:/usr/lib
$ scp test/cryptoauth_test root@192.168.1.101:/root

使用特权

评论回复
10
雨果喝水|  楼主 | 2024-7-25 15:34 | 只看该作者
运行并测试
通过SSH或串口登录到目标板,运行可执行程序cryptoauth_test。

1. 单命令行模式
获取器件的版本信息:

shell

$ ./cryptoauthlib_test info -d ecc608 -i i2c 1 -a 0xC0
revision:
00 00 60 02
获取器件的序列号:

shell


$ ./cryptoauthlib_test sernum -d ecc608 -i i2c 1 -a 0xC0
serial number:
01 23 EE 52 4A 06 FA 85 EE

使用特权

评论回复
11
雨果喝水|  楼主 | 2024-7-25 15:35 | 只看该作者
交互式模式
shell


$ ./cryptoauthlib_test

# 打印帮助信息,列出全部命令
$ help

# 指定使用的器件型号
$ ecc608

# 获取器件的版本信息
$ info -d ecc608 -i i2c 1 -a 0xC0

# 获取器件的序列号
$ sernum -d ecc608 -i i2c 1 -a 0xC0

使用特权

评论回复
12
雨果喝水|  楼主 | 2024-7-25 15:35 | 只看该作者
在应用层代码中调用API
根据目标板的设置修改器件信息:

c

/** \brief configuration for an ECCx08A device */
ATCAIfaceCfg cfg_ateccx08a_i2c = {
    .iface_type                 = ATCA_I2C_IFACE,
    .devtype                    = ATECC608A,
    {
        .atcai2c.slave_address  = 0xC0,
        .atcai2c.bus            = 1,
        .atcai2c.baud = 100000,
    },
    .wake_delay                 = 1500,
    .rx_retries                 = 20
};

int main(int argc, char* argv[])
{
    ATCA_STATUS status;

    // Initialize CryptoAuthLib
    status = atcab_init(&cfg_ateccx08a_i2c);
    if (status != ATCA_SUCCESS) {
        printf("Initialization failed: %d\n", status);
        return status;
    }

    // Perform operations...

    return 0;
}
这样,通过设置I2C接口参数和配置文件,您可以在Linux平台上通过PKCS11调用Cryptoauthlib与OpenSSL进行硬件安全模块的操作。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

77

主题

1128

帖子

0

粉丝