---
title: 国密硬件加速
description: "鲲鹏芯片支持国密算法加速，硬件实现SM2/3/4国密算法加解密。本章节主要介绍如何在机密虚拟机内使能鲲鹏芯片国密硬件加速功能。"
url: https://www.hikunpeng.com/document/detail/zh/kunpengboostkithistory/252RC2/confidt/kunpengtee_16_0043.html
sourcePath: /source/zh/kunpengboostkithistory/252RC2/confidt/kunpengtee_16_0043.html
indexId: 7c0622caec71a90a972837938c09e1086d439c956150a3e83dbfe2c9cc0caf2a72
---
# 国密硬件加速

鲲鹏芯片支持国密算法加速，硬件实现SM2/3/4国密算法加解密。本章节主要介绍如何在机密虚拟机内使能鲲鹏芯片国密硬件加速功能。

#### 约束与限制

- 当前virtCCA国密硬件加速不支持stage1 SMMU。


- BIOS需要使能SMMU，具体可参考  2
。

#### 导入鲲鹏加速引擎（KAE）相关license

1. 登录iBMC网页，选择“iBMC管理”>“许可证管理”。
  在未导入License的情况下，Kunpeng accelerator SEC Function、Kunpeng accelerator HPRE Function、Kunpeng accelerator RDE Function、Kunpeng accelerator ZIP Function均处于“已关闭”状态。如果需要申请TEE License，请联系华为业务负责人申请。

2. 单击“安装”，选择获取的KAE License。
  成功导入KAE License后，KAE相关特性处于“已开启”状态，并显示对应截止日期。


#### 编译加速器驱动

1. 获取Guest OS代码，具体请参见获取链接(https://gitee.com/openeuler/virtCCA_sdk/blob/master/kata-v3.15.0/doc/kata机密容器.md)。
2. 编译内核。

```
make Image -j64
```


3. 编译完成后在“drivers/misc/uacce”目录下获取uacce.ko并通过scp命令传入虚拟机内。

```
scp uacce.ko root@xx.xx.xx.xx:/home/run
```


  使用时请按照虚拟机实际IP操作。


#### 在虚拟机中使能KAE

请参见启动虚拟机，在已启动的虚拟机的xml文件中作如下修改。

将<qemu:arg value='tmm-guest,id=tmm0,sve-vector-length=128,num-pmu-counters=1'/>修改为<qemu:arg value='tmm-guest,id=tmm0,sve-vector-length=128,num-pmu-counters=1,kae=4'/>

其中kae=4中的“4”表示通入机密虚拟机中VF数量，取值范围[0,11]。单个虚拟机最多支持通入11组VF，每个物理机最多支持通入虚拟机48组VF。


#### KAE驱动编译部署

1. 执行以下命令拉取代码。

```
git clone https://gitee.com/openeuler/virtCCA_driver.git
```


2. 执行以下命令切换至“virtCCA_driver”目录下并进行编译。

```
cd virtCCA_driver && make
```


3. 执行以下命令将目录切换至“kae_driver”下，找到hisi_plat_qm.ko, hisi_plat_sec.ko, hisi_plat_hpre.ko并通过scp命令传到虚拟机中。

```
cd kae_driver
scp hisi_plat_qm.ko root@xx.xx.xx.xx:/home/run
scp hisi_plat_sec.ko root@xx.xx.xx.xx:/home/run
scp hisi_plat_hpre.ko root@xx.xx.xx.xx:/home/run
```


  使用时请按照虚拟机实际IP地址操作。

4. 执行以下命令依次加载qm、sec、hpre驱动。
  执行此步骤前须确保uacce.ko已成功加载。

```
insmod hisi_plat_qm.ko
insmod hisi_plat_sec.ko
insmod hisi_plat_hpre.ko
```


5. 驱动加载完成后，执行以下命令查看驱动是否注册到uacce。

```
ll /sys/class/uacce/
```


#### 部署UADK

1. 安装依赖。

```
yum install gcc make kernel-devel libtool numactl-devel  openssl-devel chrpath
```


  OpenSSL支持版本为1.1.1以上，通过yum安装openssl-devel即可。如果测试SM2算法需要指定OpenSSL的版本为1.1.1。

2. 执行以下命令在机密虚拟机中拉取KAE代码。

```
git clone -b v2.0.3 https://gitee.com/kunpengcompute/KAE.git
```


  目前v2.0.3版本的KAE不支持切换OpenSSL版本，如果需要切换OpenSSL版本请执行以下命令手动拉取KAE最新代码。 git clone -b kae2 https://gitee.com/kunpengcompute/KAE.git && cd KAE && git checkout f3712fa

3. 编译安装。

```
sh build.sh uadk
sh build.sh engine
```


4. 执行脚本进行测试，生成res.txt。

```
export OPENSSL_ENGINES=/usr/local/lib/engines-1.1
sh KAE/KAEOpensslEngine/test/perf_test/openssl_perf.sh
```


  如果需要测试SM2算法，需要执行如下命令修改测试脚本。 打开openssl_perf.sh脚本文件。 vim KAE/KAEOpensslEngine/test/perf_test/openssl_perf.sh 按“i”进入编辑模式，在SM2算法测试函数function RSA_SYNC()中，将 SPEED=`taskset -c 0-63 $EXE speed -engine $ENGINE_NAME -elapsed -multi $MULTT I $ALG | tail -n 1 ` #hard 修改为 SPEED=`taskset -c 0-63 $EXE speed -engine $ENGINE_NAME -elapsed -bytes 512 -multi $MULTT I $ALG | tail -n 1 ` #hard 按“Esc”键退出编辑模式，输入:wq!，按“Enter”键保存退出文件。
