鲲鹏社区首页
中文
注册
我要评分
文档获取效率
文档正确性
内容完整性
文档易理解
在线提单
论坛求助

国密硬件加速

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

约束与限制

  • 当前virtCCA国密硬件加速不支持stage1 SMMU。
  • BIOS需要使能SMMU,具体可参考2

导入鲲鹏加速引擎(KAE)相关license

  1. 登录iBMC网页,选择iBMC管理>许可证管理

    在未导入License的情况下,Kunpeng accelerator SEC FunctionKunpeng accelerator HPRE FunctionKunpeng accelerator RDE FunctionKunpeng accelerator ZIP Function均处于“已关闭”状态。如果需要申请TEE License,请联系华为业务负责人申请。

  2. 单击“安装”,选择获取的KAE License。

    成功导入KAE License后,KAE相关特性处于“已开启”状态,并显示对应截止日期。

编译加速器驱动

  1. 获取Guest OS代码
  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
  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算法,需要执行如下命令修改测试脚本来指定包长。

    1. 打开openssl_perf.sh脚本文件。
      vim KAE/KAEOpensslEngine/test/perf_test/openssl_perf.sh
    2. “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

    3. “Esc”键退出编辑模式,输入:wq!,按“Enter”键保存退出文件。