在 2022/3/29 21:36, Zhiqi Song 写道:
A quick start document is added to help users quickly start using UADK and UADK engine.
Signed-off-by: Zhiqi Song songzhiqi1@huawei.com
UADK_quick_start.md | 802 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 802 insertions(+) create mode 100644 UADK_quick_start.md
diff --git a/UADK_quick_start.md b/UADK_quick_start.md new file mode 100644 index 00000000..db2c0aca --- /dev/null +++ b/UADK_quick_start.md @@ -0,0 +1,802 @@ +# UADK 快速入门 +- [UADK 快速入门](#uadk-快速入门)
- [1 概述](#1-概述)
- [2 使用要求](#2使用要求)
- [2.1 硬件](#21硬件)
- [2.2 软件](#22软件)
- [2.2.1 操作系统要求](#221操作系统要求)
- [2.2.2 其他软件包要求](#222其他软件包要求)
- [2.3 工具链](#23工具链)
- [3 安装部署](#3安装部署)
- [3.1 获取UACCE框架内核态源码](#31获取uacce框架内核态源码)
- [3.2 获取厂商加速器内核态驱动源码](#32获取厂商加速器内核态驱动源码)
- [3.3 配置厂商加速器内核态驱动编译选项](#33配置厂商加速器内核态驱动编译选项)
- [3.4 编译安装厂商加速器内核态驱动](#34编译安装厂商加速器内核态驱动)
- [3.5 加载UACCE驱动](#35加载uacce驱动)
- [3.6 加载厂商加速器驱动](#36加载厂商加速器驱动)
- [3.7 UADK 抽象算法层安装部署](#37uadk-抽象算法层安装部署)
- [3.7.1 yum源安装](#371-yum源安装)
- [3.7.2 RPM包安装](#372-rpm包安装)
- [3.7.3 源码编译安装](#373-源码编译安装)
- [3.8 UADK engine 安装部署](#38uadk-engine-安装部署)
- [3.8.1 yum源安装](#381-yum源安装)
- [3.8.2 RPM包安装](#382-rpm包安装)
- [3.8.3 源码编译安装](#383-源码编译安装)
- [4 开始使用](#4开始使用)
- [4.1 UADK](#41uadk)
- [4.1.1 开启环境变量功能](#411开启环境变量功能)
- [4.1.2 测试RSA性能](#412测试rsa性能)
- [4.1.3 测试DH性能](#413测试dh性能)
- [4.1.4 测试ECDH性能](#414测试ecdh性能)
- [4.1.5 测试ECXDH性能](#415测试ecxdh性能)
- [4.1.6 测试ECDSA性能](#416测试ecdsa性能)
- [4.1.7 测试SM2性能](#417测试sm2性能)
- [4.1.8 测试MD5性能](#418测试md5性能)
- [4.1.9 测试SM3性能](#419测试sm3性能)
- [4.1.10 测试SHA性能](#4110测试sha性能)
- [4.1.11 测试AES性能](#4111测试aes性能)
- [4.1.12 测试SM4性能](#4112测试sm4性能)
- [4.2 使用UADK engine](#42使用uadk-engine)
- [4.2.1 开启环境变量功能](#421开启环境变量功能)
- [4.2.2 使用RSA加速器功能](#422使用rsa加速器功能)
- [4.2.3 使用DH加速器功能](#423使用dh加速器功能)
- [4.2.4 使用ECDH加速器功能](#424使用ecdh加速器功能)
- [4.2.5 使用ECXDH加速器功能](#425使用ecxdh加速器功能)
- [4.2.6 使用ECDSA加速器功能](#426使用ecdsa加速器功能)
- [4.2.7 使用SM2加速器功能](#427使用sm2加速器功能)
- [4.2.8 使用MD5加速器功能](#428使用md5加速器功能)
- [4.2.9 使用SM3加速器功能](#429使用sm3加速器功能)
- [4.2.10 使用SHA加速器功能](#4210使用sha加速器功能)
- [4.2.11 使用AES加速器功能](#4211使用aes加速器功能)
- [4.2.12 使用SM4加速器功能](#4212使用sm4加速器功能)
- [4.2.13 使用DES加速器功能](#4213使用des加速器功能)
+----
+## 1 概述 +欢迎使用UADK 和 UADK engine。 +本文档编写的目的是,如何快速开始使用UADK 和UADK engine。 +### 1.1 **UADK** +UADK(User Space Accelerator Development Kit,用户态加速器开发工具集)是采用SVA(Shared Virtual Address)技术的**通用型**用户态加速器框架,为用户提供硬件加速计算密码学以及压缩相关算法的统一编程接口。UADK中包含UACCE(Unified/User-space-access-intended Accelerator Framework),使得**不同厂商支持SVA技术的硬件加速器均可适配到UADK框架**。
用户态加速器开发工具集 ->用户态加速器开发包 密码学以及压缩相关算法 ->密码学、压缩等算法
+例如,当前已有鲲鹏(Kunpeng)硬件加速器设备注册到UACCE,并通过UADK框架,为用户提供了卸载CPU、使用硬件加速器计算密码学、压缩相关算法的功能,从而达到释放CPU算力、提升计算性能的目的。
“例如”,可以去掉。
+### 1.2 **UADK engine** +UADK engine是UADK的一种上层应用,基于OpenSSL的engine机制开发。UADK engine提供通过OpenSSL命令行工具使用硬件加速器设备的功能。 +例如,鲲鹏(Kunpeng)硬件加速器设备注册到UADK框架后,用户能使用OpenSSL命令行工具通过UADK engine使用鲲鹏(Kunpeng)硬件加速器设备的相关功能。 +### 1.3 UADK的组成模块&各模块提供的功能 +UADK框架包含UACCE、vendor driver、抽象算法层。需要硬件加速器设备支持SVA,操作系统支持IOMMU和SVA。 +不同厂商的硬件加速器设备通过厂商自身的内核态驱动,在UACCE上注册成为不同的字符设备。这使得,用户能够在用户态通过字符设备操作来访问不同厂商的硬件加速器设备。也因此,UADK能够支持不同厂商的硬件加速器设备。 +UADK针对密码学算法抽象出了算法层,这个抽象算法层实现了主流的密码学算法接口。 +以鲲鹏(Kunpeng)硬件加速器设备为例,鲲鹏(Kunpeng)硬件加速器设备在注册到UADK框架后,用户通过UADK框架调用密码学以及压缩相关算法的接口,可以使用鲲鹏(Kunpeng)硬件加速器提供的: +- AES、SM4、SM3、SHAx、AEAD、HMAC算法功能; +- RSA、DH、ECDH、X25519、X448、SM2算法功能; +- gzip、zlib、deflate、lz77_zstd算法功能; +### 1.4 UADK engine的组成模块&各模块提供的功能 +UADK engine按照OpenSSL对密码算法的分类方式,由RSA engine、DH engine、ECC engine、Cipher engine、Digest engine这5个子模块组成。不同厂商的硬件加速器设备,在注册到UADK框架之后,通过UADK engine,用户能够使用OpenSSL 命令行工具获得不同厂商的硬件加速计算功能。engine id统一为uadk_engine。 +以鲲鹏(Kunpeng)硬件加速器设备为例,鲲鹏(Kunpeng)硬件加速器设备在注册到UADK框架后,用户能够通过OpenSSL命令行工具,获得以下具体算法硬件加速计算的功能: +- RSA engine子模块,密钥生成、非对称加解密、数字签名功能。 +- DH engine 子模块,密钥协商功能。 +- ECC engine 子模块,数字签名、密钥协商、非对称加解密功能。 +- Cipher engine子模块,对称加解密功能。 +- Digest engine 子模块,生成消息摘要功能。 +### 1.5 UADK 和UADK engine的使用场景 +- 大数据
加个 分布式存储
+- 数据机密 +- 智能安防 +- Web服务等。
+-----------
+## 2 使用要求 +本章节以鲲鹏(Kunpeng)硬件加速器设备为例,介绍UADK以及UADK engine的使用,其他厂商的硬件加速器设备使用方法类似。 +### 2.1 硬件 +已注册到UADK框架的鲲鹏(Kunpeng)9xx系列CPU 。 +### 2.2 软件 +#### 2.2.1 操作系统要求 +OpenEuler主线版本 +Ubuntu主线版本 +CentOS主线版本 +操作系统要求内核支持IOMMU &SVA特性。 +#### 2.2.2 其他软件包要求 +OpenSSL 1.1.1a及以上版本,建议使用OpenSSL1.1.1l版本。 +### 2.3 工具链 +编译UADK 和UADK engine 依赖的工具链: +gcc version 10.2.0 (GCC)
+--------
+## 3 安装部署 +本章节以鲲鹏(Kunpeng)硬件加速器设备为例,介绍UADK以及UADK engine的安装、升级和卸载,其他厂商的硬件加速器设备方法类似。 +需要鲲鹏(Kunpeng)加速器内核态驱动、UADK用户驱动态配合使用。请按照顺序进行安装。 +### 3.1 获取UACCE框架内核态源码 +不同厂商的硬件加速器均需要注册到UACCE,因此需要先部署UACCE框架。 +源码获取方式有两种。 ++ 方式一:从Linux主线获取 +Linux主线已支持UACCE框线,可以通过Linux主线代码 https://www.kernel.org/ +获取UACCE框架代码。
- UACCE框架内核态代码的目录为:
- <linux /drivers/misc/uacce/>
++ 方式二:从OpenEuler社区获取 +OpenEuler社区中的代码仓库地址:https://gitee.com/openeuler/kernel
- UACCE框架内核态代码的目录为:
- <linux /drivers/misc/uacce/>
+### 3.2 获取厂商加速器内核态驱动源码 +以鲲鹏(Kunpeng)硬件加速器内核为例。 +两种方式二选一。 ++ 方式一:从Linux主线获取 +鲲鹏(Kunpeng)加速器内核态HPRE、SEC、ZIP的主要特性已经上传到Linux主线,可以通过Linux主线代码 https://www.kernel.org/ +获取鲲鹏(Kunpeng)加速器内核态驱动代码。
- 鲲鹏(Kunpeng)加速器内核态代码的目录为:
- <linux/drivers/crypto/hisilicon/>
++ 方式二:从OpenEuler社区获取 +OpenEuler社区中的代码仓库地址:https://gitee.com/openeuler/kernel
- 鲲鹏(Kunpeng)加速器内核态代码的目录为:
+• <linux/drivers/crypto/hisilicon/> +### 3.3 配置厂商加速器内核态驱动编译选项 +以鲲鹏(Kunpeng)硬件加速器内核为例。鲲鹏(Kunpeng)加速器内核态驱动需要在config文件中,进行以下配置:
+内核态驱动使能选项: +``` +CONFIG_CRYPTO_DEV_HISI_QM=m +CONFIG_CRYPTO_DEV_HISI_ZIP=m +CONFIG_CRYPTO_DEV_HISI_HPRE=m +CONFIG_CRYPTO_DEV_HISI_SEC2=m +CONFIG_CRYPTO_DEV_HISI_TRNG=m +CONFIG_CRYPTO_DEV_HISI_MIGRATION=m +``` +用户态驱动依赖的选项: +``` +CONFIG_UACCE=m +``` +说明:当需要使能ZIP模块、HPRE模块、SEC模块的用户态功能时,需要配置此项;使能内核态功能,不需要配置此项。TRNG模块不支持用户态。
+用户态驱动SVA特性依赖的选项: +``` +CONFIG_IOMMU_SVA_LIB=y +CONFIG_ARM_SMMU_V3_SVA=y +CONFIG_IOMMU_PAGE_FAULT=y +CONFIG_IOMMU_SUPPORT=y +CONFIG_PCI_PASID=y +CONFIG_IOMMU_SVA=y +```
+虚拟化热迁移依赖的选项: +``` +CONFIG_VFIO=m +CONFIG_VFIO_PCI=m +``` +### 3.4 编译安装厂商加速器内核态驱动
+| 平台 | 编译指令 | +|:---|:---| +X86|make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu-| +ARM|make ARCH=arm64|
+说明:在kernel根目录下进行编译。 +### 3.5 加载UACCE驱动 +在加载厂商的硬件加速器驱动前,需要先加载uacce.ko。 +### 3.6 加载厂商加速器驱动 +以鲲鹏(Kunpeng)硬件加速器得的驱动加载为例。
+| 加速器模块 | 模块加载顺序 | +|---|---| +HPRE|uacce.ko, hisi_qm.ko, hisi_hpre.ko| +ZIP|uacce.ko, hisi_qm.ko, hisi_zip.ko| +SEC|uacce.ko, hisi_qm.ko, hisi_sec2.ko|
+说明:加载 +hisi_hpre.ko/hisi_zip.ko/hisi_sec2.ko时可以指定uacce_mode,uacce_mode=1为SVA模式,uacce_mode=2为no-SVA模式。
确认下主线或者openEuler 有mode 1 和mode 2 ?
+ZIP、HPRE、SEC模块依赖QM队列管理,因此需要先加载hisi_qm.ko;鲲鹏(Kunpeng)加速器用户态驱动依赖uacce框架(内核态不依赖),因此需要先加载uacce.ko。 +可以使用insmod或modprobe工具加载驱动,例如, +- 加载HPRE模块SVA模式用户态驱动的命令: +``` +modprobe uacce +modprobe hisi_qm +modprobe hisi_hpre uacce_mode=1 +``` +- 加载ZIP模块SVA模式用户态驱动的命令: +``` +modprobe uacce +modprobe hisi_qm +modprobe hisi_zip uacce_mode=1 +``` +- 加载SEC模块SVA模式用户态驱动的命令: +``` +modprobe uacce +modprobe hisi_qm +modprobe hisi_sec2 uacce_mode=1 +```
+- 模块参数配置说明
+在加载驱动时,可以进行模块参数配置,参数没有先后顺序要求。在配置模块参数加载驱动后,可以通过```cat /sys/bus/pci/drivers/<driver>/module/parameters/``` 来查询模块参数。模块参数在加载驱动后不支持更新;如果需要更改模块参数,需要先卸载驱动,在重新加载驱动时设置新的模块参数。
+模块参数配置方式: +``` +insmod <driver> [uacce_mode] [pf_q_num] [vfs_num] [sgl_sge_nr] [ctx_q_num] +``` +[]中的参数为可选项,均有默认值,无顺序要求。 ++ 所有模块uacce_mode默认值为0,表示不支持用户态,因此对于用户态的用户来说,需要配置uacce_mode=1。 ++ SEC模块pf_q_num的默认值为256;HPRE/ZIP模块pf_q_num的默认值为64。 ++ 所有模块vfs_num的默认值为0。 ++ 所有模块sgl_sge_nr的默认值为10。 ++ 所有模块ctx_q_num的默认值为2。 +例如,加载ZIP驱动时,不使用默认值,手动参数配置命令如下: +``` +insmod hisi_zip.ko uacce_mode=1 pf_q_num =16 vfs_num=1 sgl_sge_nr=16 +``` +初次仅需要使用SVA特性时,配置uacce_mode=1即可。
+详细的参数值说明,参见用户手册。
+### 3.7 UADK 抽象算法层安装部署 +UADK抽象算法库安装部署方式有三种:yum源安装、RPM包安装以及源码编译安装。可根据实际情况,选择一种安装方式。
+#### 3.7.1 yum源安装 +对于OpenEuler 22.03用户,可以直接用yum源安装,安装命令: +yum install libwd
+#### 3.7.2 RPM包安装 +从OpenEuler社区获取UADK rpm包:https://gitee.com/src-openeuler/libwd
+安装命令如下: +``` +cd /usr/src/
+git clone https://gitee.com/src-openeuler/libwd.git
+mkdir -p /usr/src/rpmbuild
+cd /usr/src/ rpmbuild
+mkdir SOURCES SPECS BUILD RPMS SRPMS
+cp /usr/src/libwd/libwd-xxx.tar.gz /usr/src/libwd/*patch /usr/src/rpmbuild/SOURCES/
+cp /usr/src/libwd/warpdrive.spec /usr/src/rpmbuild/SPECS/
+rpmbuild –bb SPECS/warpdrive.spec +```
+#### 3.7.3 源码编译安装 +从Linaro社区上获取到UADK源码:https://github.com/Linaro/uadk +详细源码编译安装步骤参见以下链接: +https://github.com/Linaro/uadk/blame/master/INSTALL
+### 3.8 UADK engine 安装部署 +UADK engine安装部署方式有三种:yum源安装、RPM包安装以及源码编译安装。可根据实际情况,选择一种安装方式。 +#### 3.8.1 yum源安装 +对于OpenEuler 22.03用户,可以直接用yum源安装,安装命令: +``` +yum install uadk_engine +``` +#### 3.8.2 RPM包安装 +从OpenEuler社区获取uadk_engine rpm包:https://gitee.com/src-openeuler/uadk_engine
+安装命令如下: +``` +cd /usr/src/
+git clone https://gitee.com/src-openeuler/uadk_engine.git
+mkdir -p /usr/src/rpmbuild
+cd /usr/src/ rpmbuild
+mkdir SOURCES SPECS BUILD RPMS SRPMS
+cp /usr/src/uadk_engine/uadk_engine-xxx.tar.gz /usr/src/uadk_engine/*patch /usr/src/rpmbuild/SOURCES/
+cp /usr/src/uadk_engine/ uadk_engine.spec /usr/src/rpmbuild/SPECS/
+rpmbuild –bb SPECS/uadk_engine.spec +``` +#### 3.8.3 源码编译安装 +可以从Linaro社区获取到UADK engine源码:https://gitee.com/src-openeuler/uadk_engine
+详细源码编译安装步骤参见以下链接: +https://github.com/Linaro/uadk_engine/blob/master/README
+-----------
+## 4 开始使用 +### 4.1 UADK
使用UADK。
跟下面“使用uadk engine”对应。
+uadk/uadk_tool/下的提供了UADK的性能测试工具,编译安装UADK可以自动生成名为uadk_benchmark的工具,可以通过```uadk_benchmark --help```查看工具使用方法及参数说明。通过```uadk_benchmark --alglist```可以查看支持的算法列表。 +#### 4.1.1 开启环境变量功能 +使用export命令设置队列数量: +``` +export WD_RSA_CTX_NUM="sync:2@0,async:4@0" +export WD_DH_CTX_NUM="sync:2@0,async:4@0" +export WD_CIPHER_CTX_NUM="sync:2@2,async:4@2" +export WD_DIGEST_CTX_NUM="sync:2@2,async:4@2" +export WD_ECC_CTX_NUM="sync:2@0,async:4@0" +```
加一句话说明sync:2@0,async:4@0的意思。
+详细参数说明,参见用户手册。
+#### 4.1.2 测试RSA性能 +测试rsa-1024在SVA模式进行加密的性能(同步模式): +``` +uadk_benchmark --alg rsa-1024 --mode sva --optype 0 --sync --seconds 5 --thread 2 --multi 1 --ctxnum 6 +``` +测试rsa-1024在SVA模式进行解密的性能(异步模式): +``` +uadk_benchmark --alg rsa-1024 --mode sva --optype 1 --async --seconds 5 --thread 2 --multi 1 --ctxnum 6 +```
+其他测试场景可以通过uadk_benchmark --help查看并配置参数。 +#### 4.1.3 测试DH性能 +测试dh-1024在SVA模式生成个人密钥的性能(同步模式): +``` +uadk_benchmark --alg dh-1024 --mode sva --optype 0 --sync --seconds 5 --thread 2 --multi 1 --ctxnum 6 +```
+测试dh-1024在SVA模式生成共享密钥的性能(异步模式): +``` +uadk_benchmark --alg dh-1024 --mode sva --optype 1 --async --seconds 5 --thread 2 --multi 1 --ctxnum 6 +```
+其他测试场景可以通过uadk_benchmark --help查看并配置参数。
+#### 4.1.4 测试ECDH性能 +测试ecdh-1024在SVA模式生成个人密钥的性能(同步模式): +``` +uadk_benchmark --alg ecdh-1024 --mode sva --optype 0 --sync --seconds 5 --thread 2 --multi 1 --ctxnum 6 +```
+测试ecdh-1024在SVA模式生成共享密钥的性能(异步模式): +``` +uadk_benchmark --alg ecdh-1024 --mode sva --optype 1 --async --seconds 5 --thread 2 --multi 1 --ctxnum 6 +```
+其他测试场景可以通过uadk_benchmark --help查看并配置参数。
+#### 4.1.5 测试ECXDH性能 +测试x25519在SVA模式生成个人密钥的性能(同步模式): +``` +uadk_benchmark --alg x25519 --mode sva --optype 0 --sync --seconds 5 --thread 2 --multi 1 --ctxnum 6 +```
+测试x25519在SVA模式生成共享密钥的性能(异步模式): +``` +uadk_benchmark --alg x25519 --mode sva --optype 1 --async --seconds 5 --thread 2 --multi 1 --ctxnum 6 +```
+测试x448在SVA模式生成个人密钥的性能(同步模式): +``` +uadk_benchmark --alg x25519 --mode sva --optype 0 --sync --seconds 5 --thread 2 --multi 1 --ctxnum 6 +```
+测试x448在SVA模式生成共享密钥的性能(异步模式): +``` +uadk_benchmark --alg x25519 --mode sva --optype 1 --async --seconds 5 --thread 2 --multi 1 --ctxnum 6 +```
+其他测试场景可以通过uadk_benchmark --help查看并配置参数。
+#### 4.1.6 测试ECDSA性能 +测试ecdsa-256在SVA模式签名的性能(同步模式): +``` +uadk_benchmark --alg ecdsa-256 --mode sva --optype 4 --sync --seconds 5 --thread 2 --multi 1 --ctxnum 6 +```
+测试ecdsa-256在SVA模式验签的性能(异步模式): +``` +uadk_benchmark --alg ecdsa-256 --mode sva --optype 5 --async --seconds 5 --thread 2 --multi 1 --ctxnum 6 +```
+其他测试场景可以通过uadk_benchmark --help查看并配置参数。
+#### 4.1.7 测试SM2性能 +测试sm2在SVA模式签名的性能(同步模式): +``` +uadk_benchmark --alg sm2 --mode sva --optype 4 --sync --seconds 5 --thread 2 --multi 1 --ctxnum 6 +```
+测试sm2在SVA模式验签的性能(异步模式): +``` +uadk_benchmark --alg sm2 --mode sva --optype 5 --async --seconds 5 --thread 2 --multi 1 --ctxnum 6 +```
+其他测试场景可以通过uadk_benchmark --help查看并配置参数。
+#### 4.1.8 测试MD5性能 +测试md5在SVA模式计算摘要的性能(同步模式): +``` +uadk_benchmark --alg md5 --mode sva --optype 0 --sync --seconds 5 --thread 2 --multi 1 --ctxnum 6 +```
+测试md5在SVA模式计算摘要的性能(异步模式): +``` +uadk_benchmark --alg md5 --mode sva --optype 0 --async --seconds 5 --thread 2 --multi 1 --ctxnum 6 +```
+其他测试场景可以通过uadk_benchmark --help查看并配置参数。
+#### 4.1.9 测试SM3性能 +测试sm3在SVA模式计算摘要的性能(同步模式): +``` +uadk_benchmark --alg sm3 --mode sva --optype 0 --sync --seconds 5 --thread 2 --multi 1 --ctxnum 6 +```
+测试sm3在SVA模式计算摘要的性能(异步模式): +``` +uadk_benchmark --alg sm3 --mode sva --optype 0 --async --seconds 5 --thread 2 --multi 1 --ctxnum 6 +```
+其他测试场景可以通过uadk_benchmark --help查看并配置参数。
+#### 4.1.10 测试SHA性能 +测试sha-512在SVA模式计算摘要的性能(同步模式): +``` +uadk_benchmark --alg sha-512 --mode sva --optype 0 --sync --seconds 5 --thread 2 --multi 1 --ctxnum 6 +``` +测试sha-512在SVA模式计算摘要的性能(异步模式): +``` +uadk_benchmark --alg sha-512 --mode sva --optype 0 --async --seconds 5 --thread 2 --multi 1 --ctxnum 6 +```
+其他测试场景可以通过uadk_benchmark --help查看并配置参数。
+#### 4.1.11 测试AES性能 +测试aes-128-cbc在SVA模式进行加密的性能(同步模式): +``` +uadk_benchmark --alg aes-128-cbc --mode sva --optype 0 --sync --pktlen 1024 --seconds 5 --multi 1 --thread 2 --ctxnum 6 +```
+测试aes-128-cbc在SVA模式进行解密的性能(异步模式): +``` +uadk_benchmark --alg aes-128-cbc --mode sva --optype 1 --async --pktlen 1024 --seconds 5 --multi 1 --thread 2 --ctxnum 6 +``` +其他测试场景可以通过uadk_benchmark --help查看并配置参数。
+#### 4.1.12 测试SM4性能 +测试sm4在SVA模式进行加密的性能(同步模式): +``` +uadk_benchmark --alg sm4 --mode sva --optype 0 --sync --pktlen 1024 --seconds 5 --multi 1 --thread 2 --ctxnum 6 +```
+测试sm4在SVA模式进行解密的性能(异步模式): +``` +uadk_benchmark --alg sm4 --mode sva --optype 1 --async --pktlen 1024 --seconds 5 --multi 1 --thread 2 --ctxnum 6 +``` +其他测试场景可以通过uadk_benchmark --help查看并配置参数。
+### 4.2 使用UADK engine +可以通过openssl命令行工具直接调用uadk engine。可以通过各个openssl工具的帮助菜单查看使用方式。 +#### 4.2.1 开启环境变量功能 +UADK engine支持环境变量配置功能,能够根据需要设置执行任务的队列数量,需要进行以下配置: +1. 修改openssl.cnf文件(一般在/usr/local/ssl/路径下),将以下内容添加到配置文件的开头 +``` +openssl_cnf = openssl_def +[openssl_def] +engines = engine_section +[engine_section] +uadk_engine = uadk_section +[uadk_section] +UADK_CMD_ENABLE_RSA_ENV = 1 +UADK_CMD_ENABLE_DH_ENV = 1 +UADK_CMD_ENABLE_CIPHER_ENV = 1 +UADK_CMD_ENABLE_DIGEST_ENV = 1 +UADK_CMD_ENABLE_ECC_ENV = 1 +```
+2. 使用export命令设置队列数量 +``` +export WD_RSA_CTX_NUM="sync:2@0,async:4@0" +export WD_DH_CTX_NUM="sync:2@0,async:4@0" +export WD_CIPHER_CTX_NUM="sync:2@2,async:4@2" +export WD_DIGEST_CTX_NUM="sync:2@2,async:4@2" +export WD_ECC_CTX_NUM="sync:2@0,async:4@0" +```
+详细参数说明,参见用户手册。
+#### 4.2.2 使用RSA加速器功能 +生成私钥: +``` +openssl genrsa -out prikey.pem -engine uadk_engine 1024 +``` +获取公钥: +``` +openssl rsa -in prikey.pem -pubout -out pubkey.pem -engine uadk_engine +``` +加密: +``` +openssl rsautl -encrypt -in plain.txt -inkey pubkey.pem -pubin -out enc.txt -engine uadk_engine +``` +解密: +``` +openssl rsautl -decrypt -in enc.txt -inkey prikey.pem -out dec.txt -engine uadk_engine +``` +签名: +``` +openssl rsautl -sign -in msg.txt -inkey prikey.pem -out signed.txt -engine uadk_engine +``` +验签: +``` +openssl rsautl -verify -in signed.txt -inkey pubkey.pem -pubin -out verified.txt -engine uadk_engine +``` +使用openssl speed工具测试: +``` +openssl speed -elapsed -engine uadk_engine rsa1024 +openssl speed -elapsed -engine uadk_engine -async_jobs 10 rsa1024 +openssl speed -elapsed -engine uadk_engine -async_jobs 36 rsa1024 +``` +#### 4.2.3 使用DH加速器功能 +生成全局公钥参数: +``` +openssl dhparam -out dhparam.pem 768 +``` +生成Alice私钥: +``` +openssl genpkey -paramfile dhparam.pem -out alice_prikey.pem -engine uadk_engine +``` +获取Alice公钥: +``` +openssl pkey -in alice_prikey.pem -pubout -out alice_pubkey.pem +``` +生成Bob私钥: +``` +openssl genpkey -paramfile dhparam.pem -out bob_prikey.pem -engine uadk_engine +``` +获取Bob公钥: +``` +openssl pkey -in bob_prikey.pem -pubout -out bob_pubkey.pem +``` +交换公钥,各自生成协商出的密钥: +``` +openssl pkeyutl -derive -inkey alice_prikey.pem -peerkey bob_pubkey.pem -out secret1.bin -engine uadk_engine +openssl pkeyutl -derive -inkey bob_prikey.pem -peerkey alice_pubkey.pem -out secret2.bin -engine uadk_engine +``` +对比协商出的共享密钥: +``` +cmp secret1.bin secret2.bin +xxd secret1.bin +xxd secret2.bin +``` +#### 4.2.4 使用ECDH加速器功能 +生成Alice私钥: +``` +openssl ecparam -name secp128r1 -genkey -noout -out alice_prikey_secp128r1.pem -engine uadk_engine +``` +查看生成的私钥: +``` +openssl pkey -in alice_prikey_secp128r1.pem -text +``` +生成Alice公钥: +``` +openssl pkey -pubout -in alice_prikey_secp128r1.pem -out alice_secp128r1.pub +``` +生成Bob私钥: +``` +openssl ecparam -name secp128r1 -genkey -noout -out bob_prikey_secp128r1.pem -engine uadk_engine +``` +生成Bob公钥: +``` +openssl pkey -pubout -in bob_prikey_secp128r1.pem -out bob_secp128r1.pub +``` +Alice生成共享密钥: +``` +openssl pkeyutl -derive -out alicebob_secp128r1.key -inkey alice_prikey_secp128r1.pem -peerkey bob_secp128r1.pub -engine uadk_engine +``` +Bob生成共享密钥: +``` +openssl pkeyutl -derive -out bobalice_secp128r1.key -inkey bob_prikey_secp128r1.pem -peerkey alice_secp128r1.pub -engine uadk_engine +``` +比较Alice和Bob各自生成的共享密钥: +``` +cmp alicebob_secp128r1.key bobalice_secp128r1.key +xxd alicebob_secp128r1.key +xxd bobalice_secp128r1.key +``` +#### 4.2.5 使用ECXDH加速器功能 +生成Alice私钥: +``` +openssl genpkey -algorithm X25519 -out alice_x25519_prikey.pem -engine uadk_engine +``` +查看生成的私钥: +``` +openssl pkey -in alice_x25519prikey.pem -text +``` +生成Alice公钥: +``` +openssl pkey -pubout -in alice_x25519_prikey.pem -out alice_ x25519.pub +``` +生成Bob私钥: +``` +openssl genpkey -algorithm X25519 -out bob_x25519_prikey.pem -engine uadk_engine +``` +生成Bob公钥: +``` +openssl pkey -pubout -in bob_x25519_prikey.pem -out bob_x25519.pub +``` +Alice生成共享密钥: +``` +openssl pkeyutl -derive -out alicebob_x25519.key -inkey alice_x25519_prikey.pem -peerkey bob_x25519.pub -engine uadk_engine +``` +Bob生成共享密钥: +``` +openssl pkeyutl -derive -out bobalice_x25519.key -inkey bob_x25519_prikey.pem -peerkey alice_ x25519.pub -engine uadk_engine +``` +比较Alice和Bob各自生成的共享密钥: +``` +cmp alicebob_x25519.key bobalice_x25519.key +xxd alicebob_x25519.key +xxd bobalice_x25519.key +``` +注:当需要使用X448算法时,在使用genpkey工具生成私钥时,将algorithm参数设置为X448,即-algorithm X448 +#### 4.2.6 使用ECDSA加速器功能 +生成私钥: +``` +openssl ecparam -genkey -name secp384r1 -noout -out private.pem -engine uadk_engine +``` +生成公钥: +``` +openssl ec -in private.pem -pubout -out public.pem +``` +假设需要签名的文件为msg.txt, +结合SHA256签名: +``` +openssl dgst -sha256 -sign private.pem -out ecdsa_384r1.sig -engine uadk_engine msg.txt +``` +结合SHA256验签: +``` +openssl dgst -sha256 -verify public.pem -signature ecdsa_384r1.sig -engine uadk_engine msg.txt +``` +openssl speed工具测试: +``` +openssl speed -elapsed -engine uadk_engine ecdsap256 +openssl speed -elapsed -engine uadk_engine -async_jobs 1 ecdsap256 +``` +#### 4.2.7 使用SM2加速器功能 +生成私钥: +``` +openssl ecparam -name SM2 -genkey -out sm2_prikey.pem -engine uadk_engine +``` +获取公钥: +``` +openssl ec -in sm2_prikey.pem -pubout -out sm2_pubkey.pem +``` +假设需要签名的文件为msg.txt, +结合SHA256签名: +``` +openssl dgst -sha256 -sign sm2_prikey.pem -out sm2.sig -engine uadk_engine msg.txt +``` +结合SHA256验签: +``` +openssl dgst -sha256 -verify sm2_pubkey.pem -signature sm2.sig -engine uadk_engine msg.txt +``` +#### 4.2.8 使用MD5加速器功能 +假设需要计算摘要的文件为data.txt: +``` +openssl md5 -engine uadk_engine data.txt +``` +openssl speed工具测试: +``` +openssl speed -engine uadk_engine -async_jobs 1 -evp md5 +``` +#### 4.2.9 使用SM3加速器功能 +假设需要计算摘要的文件为data.txt: +``` +openssl sm3 -engine uadk_engine data.txt +``` +#### 4.2.10 使用SHA加速器功能 +假设需要计算摘要的文件为data.txt: +``` +openssl sha1 -engine uadk_engine data.txt +openssl sha256 -engine uadk_engine data.txt +openssl sha512 -engine uadk_engine data.txt +``` +#### 4.2.11 使用AES加速器功能 +aes-128-cbc模式加密: +``` +openssl enc -aes-128-cbc -a -in data -out data.en -pass pass:123456 -K abc -iv abc -engine uadk_engine -p +``` +aes-128-cbc模式解密: +``` +openssl enc -aes-128-cbc -a -d -in data.en -out data.de -pass pass:123456 -K abc -iv abc -engine uadk_engine -p +``` +aes-192-cbc模式加密: +``` +openssl enc -aes-192-cbc -a -in data -out data.en -pass pass:123456 -K abc -iv abc -engine uadk_engine -p +``` +aes-192-cbc模式解密: +``` +openssl enc -aes-192-cbc -a -d -in data.en -out data.de -pass pass:123456 -K abc -iv abc -engine uadk_engine -p +``` +aes-256-cbc模式加密: +``` +openssl enc -aes-256-cbc -a -in data -out data.en -pass pass:123456 -K abc -iv abc -engine uadk_engine -p +``` +aes-256-cbc模式解密: +``` +openssl enc -aes-256-cbc -a -d -in data.en -out data.de -pass pass:123456 -K abc -iv abc -engine uadk_engine -p +``` +aes-128-ecb模式加密: +``` +openssl enc -aes-128-ecb -a -in data -out data.en -pass pass:123456 -K abc -iv abc -engine uadk_engine -p +``` +aes-128-ecb模式解密: +``` +openssl enc -aes-128-ecb -a -d -in data.en -out data.de -pass pass:123456 -K abc -iv abc -engine uadk_engine -p +``` +aes-192-ecb模式加密: +``` +openssl enc -aes-192-ecb -a -in data -out data.en -pass pass:123456 -K abc -iv abc -engine uadk_engine -p +``` +aes-192-ecb模式解密: +``` +openssl enc -aes-192-ecb -a -d -in data.en -out data.de -pass pass:123456 -K abc -iv abc -engine uadk_engine -p +``` +aes-256-ecb模式加密: +``` +openssl enc -aes-256-ecb -a -in data -out data.en -pass pass:123456 -K abc -iv abc -engine uadk_engine -p +``` +aes-256-ecb模式解密: +``` +openssl enc -aes-256-ecb -a -d -in data.en -out data.de -pass pass:123456 -K abc -iv abc -engine uadk_engine -p +``` +aes-128-ctr模式加密: +``` +openssl enc -aes-128-ctr -a -in data -out data.en -pass pass:123456 -K abc -iv abc -engine uadk_engine -p +``` +aes-128-ctr模式解密: +``` +openssl enc -aes-128-ctr -a -d -in data.en -out data.de -pass pass:123456 -K abc -iv abc -engine uadk_engine -p +``` +aes-192-ctr模式加密: +``` +openssl enc -aes-192-ctr -a -in data -out data.en -pass pass:123456 -K abc -iv abc -engine uadk_engine -p +``` +aes-192-ctr模式解密: +``` +openssl enc -aes-192-ctr -a -d -in data.en -out data.de -pass pass:123456 -K abc -iv abc -engine uadk_engine -p +``` +aes-256-ctr模式加密: +``` +openssl enc -aes-256-ctr -a -in data -out data.en -pass pass:123456 -K abc -iv abc -engine uadk_engine -p +``` +aes-256-ctr模式解密: +``` +openssl enc -aes-256-ctr -a -d -in data.en -out data.de -pass pass:123456 -K abc -iv abc -engine uadk_engine -p +``` +#### 4.2.12 使用SM4加速器功能 +sm4-cbc模式加密: +``` +openssl enc -sm4-cbc -a -in data -out data.en -pass pass:123456 -K abc -iv abc -engine uadk_engine -p +``` +sm4-cbc模式解密: +``` +openssl enc -sm4-cbc -a -d -in data.en -out data.de -pass pass:123456 -K abc -iv abc -engine uadk_engine -p +``` +sm4-ecb模式加密: +``` +openssl enc -sm4-ecb -a -in data -out data.en -pass pass:123456 -K abc -iv abc -engine uadk_engine -p +``` +sm4-ecb模式解密: +``` +openssl enc -sm4-ecb -a -d -in data.en -out data.de -pass pass:123456 -K abc -iv abc -engine uadk_engine -p +``` +#### 4.2.13 使用DES加速器功能 +des-ede3-cbc模式加密: +``` +openssl enc -des-ede3-cbc -a -in data -out data.en -pass pass:123456 -K abc -iv abc -engine uadk_engine -p +``` +des-ede3-cbc模式解密: +``` +openssl enc -des-ede3-cbc -a -d -in data.en -out data.de -pass pass:123456 -K abc -iv abc -engine uadk_engine -p +``` +des-ede3-ecb模式加密: +``` +openssl enc -des-ede3-ecb -a -in data -out data.en -pass pass:123456 -K abc -iv abc -engine uadk_engine -p +``` +des-ede3-ecb模式解密: +``` +openssl enc -des-ede3-ecb -a -d -in data.en -out data.de -pass pass:123456 -K abc -iv abc -engine uadk_engine -p +```