开发者
资源
文档评分
获取效率
正确性
完整性
易理解
在线提单
论坛求助

KACC_Crypto鲲鹏密码算法优化介绍

简体中文|[English]

最新消息

  • [2026.09.30]:发布KACC_Crypto V1.1.0,新增AES-XTS SVE2优化、AES-GCM SVE2优化和RSA multi-buffer优化。

项目介绍

KACC_Crypto介绍

KACC_Crypto是面向鲲鹏950处理器AArch64平台的OpenSSL密码算法优化源码仓库,当前包含AES-XTS、AES-GCM和RSA三类优化代码、源码接入脚本以及功能/性能验证脚本。

本仓库当前不提供独立运行时库。AES-XTS和AES-GCM优化通过源码接入方式集成到目标OpenSSL源码树。重新编译OpenSSL后,业务应用仍通过OpenSSL EVP/provider接口调用对应算法。RSA优化当前通过独立benchmark可执行文件验证8路多缓冲private CRT路径。

KACC_Crypto适用于OpenSSL密码算法优化验证、SVE2指令路径评估、上游化补丁开发和性能基线对比等场景。

软件架构

KACC_Crypto以OpenSSL源码树为集成目标,通过接入脚本把优化源码、构建规则和分发逻辑写入OpenSSL对应模块。整体架构如图 1 软件架构所示。

图 1 软件架构

软件架构中各模块功能如表 1 模块功能描述所示。

表 1 模块功能描述

模块名称功能描述
应用程序使用OpenSSL标准接口调用AES-XTS、AES-GCM或RSA能力。
OpenSSL EVP/provider提供算法入口、上下文管理和硬件能力分发。
OpenSSL开源路径保留OpenSSL已有ARMv8/NEON/BN实现,作为不满足优化条件时的回退路径。
AES-XTS SVE2优化新增AArch64 SVE2 AES-XTS stream实现,支持AES-128/192/256 XTS加解密。
AES-GCM SVE2优化新增SVE2 AES-CTR与GHASH大窗口融合路径,支持AES-128/192/256 GCM加解密。
RSA SVE2 x8优化新增8路多缓冲Montgomery计算内核,通过benchmark验证RSA2048/RSA4096 private CRT性能。
接入脚本把优化源码复制到目标OpenSSL源码树,并修改构建规则和分发锚点。
测试脚本提供正确性验证、性能矩阵测试和benchmark可执行文件生成入口。

算法支持与规格

当前支持的算法和调用方式如表 2 算法支持与规格所示。

表 2 算法支持与规格

算法支持规格优化方式调用方式说明
AES-XTSAES-128-XTS、AES-192-XTS、AES-256-XTS加密和解密SVE2 AES指令实现XTS stream热路径OpenSSL EVP/provider AES-XTS不满足能力条件或不适合SVE2的输入继续使用OpenSSL开源路径。
AES-GCMAES-128-GCM、AES-192-GCM、AES-256-GCM加密和解密SVE2 AES-CTR与GHASH大窗口融合OpenSSL EVP/provider AES-GCM默认8192Byte及以上进入SVE2路径,小包和尾部保留ARMv8/NEON路径。
RSARSA2048、RSA4096 private CRT benchmarkSVE2 x8 Montgomery多缓冲计算独立benchmark可执行文件当前不是OpenSSL对外RSA API的透明分发。
  • AES-XTS当前热路径按SVE vector length为256bit的机器调优,其他VL需要单独验证。
  • AES-GCM需要目标机器支持ARMv8 AES、PMULL和SVE2。
  • RSA benchmark输出correctness=PASS表示功能校验通过。

目录结构

项目目录层级介绍如下。

├── docs                                      # 项目文档目录
│   ├── LICENSE                               # 文档许可证
│   └── zh                                    # 中文文档目录
│       ├── figures                           # 文档图片资源
│       ├── installation_guide.md             # 安装指南
│       ├── menu_kacc_crypto.md               # 文档菜单
│       ├── quick_start.md                    # 快速入门
│       ├── release_notes.md                  # 版本说明书
│       ├── user_guide.md                     # 用户指南
│       └── public_sys-resources              # 文档图标资源
├── openssl
│   ├── crypto
│   │   ├── aes/asm                           # AES-XTS SVE2 源码和测试
│   │   ├── bn/asm                            # RSA SVE2 x8 汇编内核
│   │   └── modes                             # AES-GCM SVE2 源码和测试
│   └── test                                  # RSA benchmark 源码
├── scripts                                   # OpenSSL 源码接入和测试脚本
└── README.md                                 # 项目说明文档

版本说明

当前版本信息如表 3 版本信息所示。

表 3 版本信息

项目说明
产品名称鲲鹏BoostKit
产品版本26.2.RC1
软件名称KACC_Crypto
软件版本V1.1.0

详细版本能力、注意事项和遗留问题请参见《版本说明书》。

软件包完整性校验

本项目当前通过Git仓库提供源码,使用git clone获取,不提供独立的软件压缩包、数字签名文件或SHA-256校验文件。获取源码后,可检查Git对象完整性、源码提交版本及工作区状态。

获取源码

从本文使用的仓库地址获取dev分支。

git clone --branch dev https://gitcode.com/weiaq/kacc_crypto.git
cd kacc_crypto

校验步骤

  1. 检查Git对象数据库的完整性。

    git fsck --full

    命令退出状态为0且没有对象损坏或缺失错误,表示Git对象完整性检查通过。dangling提示表示存在未被引用的对象,本身不代表对象损坏。

  2. 查看当前源码的完整提交编号。

    git rev-parse HEAD

    将输出与可信渠道确认的目标提交编号核对。dev分支会持续更新,交付和复现时应记录完整提交编号。

  3. 在编译或接入优化源码之前,检查工作区和暂存区是否有修改或额外文件。

    git status --porcelain --untracked-files=all --ignored

    新克隆的仓库应无输出;如有输出,请核查对应文件是否为预期修改或生成文件。

Git对象完整性检查不能单独证明发布者身份,也不等同于数字签名验证。源码地址和用于核对的目标提交编号仍需通过可信渠道确认。

结果判定

校验结果判定及处理
Git对象检查通过、提交编号与可信目标一致,且工作区检查无输出源码完整性及版本检查通过,可继续使用。
Git对象损坏或缺失不应继续使用该副本,应重新克隆仓库。
提交编号与目标不一致确认所需源码版本后再继续。
工作区检查有输出核查本地修改、未跟踪文件和被忽略文件,确认后再继续。
未获取可信的目标提交编号只能检查本地对象完整性,无法确认是否为预期交付版本。

异常处理

校验失败时,请保留需要的本地修改,在新目录中从可信仓库地址重新克隆,并重新执行上述检查。如问题仍未解决,请提交issue。

环境部署

环境要求

部署前请确保环境满足表 4 环境要求。

表 4 环境要求

环境要求
服务器和处理器鲲鹏950处理器
架构AArch64
操作系统AArch64 Linux
指令能力ARMv8 AES、PMULL、SVE2
编译器支持AArch64 SVE2相关-march选项的GCC或Clang
构建工具git、gcc或clang、make、perl
OpenSSL版本建议OpenSSL 3.0系列或与接入脚本锚点匹配的源码树

安装基础软件

  • 以 yum系发行版为例。
sudo yum install -y git gcc make perl
  • 以 apt系发行版为例。
sudo apt-get update
sudo apt-get install -y git gcc make perl

准备OpenSSL

git clone https://github.com/openssl/openssl.git -b openssl-3.0
cd openssl
./Configure linux-aarch64
make -j$(nproc)

更详细的环境部署、源码接入和安装后检查步骤请参见《安装指南》。

快速入门

  1. 获取KACC_Crypto源码。

    git clone https://gitcode.com/weiaq/kacc_crypto.git -b dev
    cd kacc_crypto
    export OPENSSL_DIR=/path/to/openssl
  2. 接入AES-XTS优化。

    ./scripts/install_sve2_xts_dispatch.sh "${OPENSSL_DIR}"
    cd "${OPENSSL_DIR}"
    make -j$(nproc)
  3. 接入AES-GCM优化。

    cd /path/to/kacc_crypto
    ./scripts/install_sve2_gcm_dispatch.sh "${OPENSSL_DIR}"
    cd "${OPENSSL_DIR}"
    make -j$(nproc)
  4. 生成RSA benchmark可执行文件。

    cd /path/to/kacc_crypto
    OPENSSL_DIR=/path/to/openssl ./scripts/apply_and_test_rsa.sh
  5. 执行基础验证。

    cd /path/to/kacc_crypto
    OPENSSL_DIR=/path/to/openssl ./scripts/apply_and_test_xts.sh
    OPENSSL_DIR=/path/to/openssl ./scripts/apply_and_test_gcm.sh
    
    cd /path/to/openssl
    taskset -c 10 test/rsa2048_private_rsaz29_x8_bench 1000 all
    taskset -c 10 test/rsa4096_private_rsaz29_x8_bench 200 all

更详细的源码获取、OpenSSL构建、优化代码接入和基础验证操作,请参见快速入门。

使用说明

AES-XTS优化

AES-XTS优化接入OpenSSL provider AES-XTS分发层。重新编译OpenSSL后,应用无需调用新的外部接口,仍通过OpenSSL EVP/provider使用AES-XTS。

可使用OpenSSL speed验证EVP路径。

cd /path/to/openssl
./apps/openssl speed -elapsed -seconds 10 -evp aes-128-xts aes-192-xts aes-256-xts

AES-GCM优化

AES-GCM优化接入OpenSSL provider AES-GCM大块update路径。默认8192B及以上进入SVE2路径,小包、尾部和不满足能力条件的场景继续使用ARMv8/NEON路径。

可使用OpenSSL speed验证EVP路径。

cd /path/to/openssl
./apps/openssl speed -elapsed -seconds 10 -evp aes-128-gcm aes-192-gcm aes-256-gcm

RSA

RSA当前通过独立benchmark验证8路多缓冲private CRT路径。默认脚本只生成RSA2048和RSA4096 benchmark可执行文件,不自动执行长时间性能测试。

cd /path/to/openssl
taskset -c 10 test/rsa2048_private_rsaz29_x8_bench 1000 all
taskset -c 10 test/rsa4096_private_rsaz29_x8_bench 200 all

输出中包含correctness=PASS表示功能校验通过。性能结果重点关注blinded_speedup_vs_native_default;分析纯数学内核时可参考math_speedup_vs_native_no_blind。

学习文档

学习文档名称学习资源简介
快速入门快速完成源码获取、OpenSSL构建、优化代码接入和基础验证。
安装指南描述环境要求、三算法接入步骤、编译步骤和测试步骤。
用户指南描述AES-XTS、AES-GCM和RSA优化的使用入口、参数和验证方法。
版本说明书描述版本配套、能力范围、注意事项和遗留问题。
文档许可证文档许可证。

License

文档许可证详见 docs/LICENSE。源码许可证如需单独声明,请以后续新增的仓库根目录许可证文件为准。

贡献声明

欢迎大家为社区做贡献,如果使用过程中有任何问题/建议,或者需要反馈特性需求和bug报告,可以提交Issues联系我们,具体贡献方法可参考贡献指南。同时也欢迎大家在讨论专区展开讨论交流。感谢您的支持。

致谢

感谢来自社区的每一个PR,欢迎贡献鲲鹏KACC_Crypto!