PQMagic--国内首个高性能后量子密码算法库
随着量子计算发展,现有绝大多数公钥密码(如RSA、Diffie-Hellman、ECC等)将不再安全,传统密码受到前所未有的挑战。
因此,在之前的文章当中,我这也写过,或者提到过不少有关于后量子算法库的一些实现,比如liboqs[2], boringssl[3], botan[4], rust-crypto[5]等等。然后,发现了一个国内团队实现的高性能的后量子密码算法库—PQMagic[1],发现还挺有意思,所以本篇文章,一起来看一下这个算法库吧。
简介
PQMagic是PQMagic团队推出了国内首个支持FIPS 203、FIPS 204以及FIPS 205标准的高性能后量子密码算法库——PQMagic[1],该算法库同时还支持PQMagic团队自研的后量子密码算法,并进一步对所有算法使用的哈希模块完成国密改造,实现完全自主可控,提供抗量子威胁能力。PQMagic在兼顾可扩展性和多样化的同时,达到了目前最优的性能表现。
核心优势
「国内首个支持FIPS 203-205标准」
PQMagic是「国内首个」完全支持FIPS 203、FIPS 204和FIPS 205标准(2024年8月由美国国家标准与技术研究院(NIST)发布的首批后量子加密标准)[6]的后量子密码算法库。
「性能领先,比国际最优开源实现liboqs提升2倍」
在性能方面,PQMagic表现尤为突出。在AMD Ryzen 5 9600x平台上,PQMagic的性能比国际上最优开源实现liboqs提高了2倍左右。
更多详细测试数据,可以访问官方测试结果网站[13],对于其他常见算法库的对比,后文再聊。
「支持国产自研算法,兼顾国密标准,完全自主可控」
除了国际标准,PQMagic还全面支持「团队自研的国产后量子密码算法」[7, 8, 9],并对所有算法底层使用的哈希模块进行了国密[10]改造,进一步提升了算法的适应性和可扩展性。因此PQMagic能够更好地满足国内标准需求,同时也与国际标准无缝衔接,做到了「完全自主可控」。
「开源共享,共建生态」
PQMagic同样提供了高兼容性基础版本,开源在Gitee和Github两个平台:
-
Gitee: https://gitee.com/pqcrypto/pqmagic -
GitHub: https://github.com/pqcrypto-cn/PQMagic
开源不仅有助于技术的快速迭代,也为更多开发者提供了学习和参与的机会,共同构建更加安全、高效的密码学生态。
对于这个库如何使用,我们后文再讲,整体使用起来,也是比较方便的。
PQMagic「团队介绍」
PQMagic团队是国内专注于后量子密码算法设计与高性能安全实现的研究团队,长期从事「密码领域相关的理论研究」,具备丰富的「密码软件高性能安全实现」的开发经验,同时熟悉密码理论与实践层面的安全分析,持续为学术和工业界需求提供技术输出。PQMagic团队设计的多个后量子密码算法具备国际领先的技术水平,同时团队实现的高性能国密算法库——YCrypt也获得2024年“金融密码杯”密码应用与技术创新大赛一等奖。感兴趣的读者可以访问PQMagic团队官网[1]了解更多信息。
接下来,我们就来看一下这个库如何使用,以及这个库与其他现有算法库的一个对比。
安装&使用
这里,我们采用cmake进行处理,当然也可以选择Makefile
, 只需要到对应算法下,运行make
命令即可。
安装依赖
-
On Ubuntu
sudo apt-get install cmake g++ -y
如果想用ninja来构建的话,需要安装ninja-build
sudo apt-get install ninja-build -y
获取源码&编译
这里,需要指定最终的安装路径,如果不指定,默认会在/usr/local/lib
这个位置生成动态链接库和静态链接库,在/usr/local/include
生成对应的头文件。
git clone https://github.com/pqcrypto-cn/PQMagic.gitcd PQMagic# 构建源码mkdir build && cd buildcmake --install-prefix=/path/to/your/installdir ..make
如果采用ninja
构建,只需要改一下构建的命令。
mkdir build && cd buildcmake -GNinja --install-prefix=/path/to/your/installdir ..ninja
如果,选择zed打开,或者其他识别compile_commands.json
来生成索引的IDE呢,需要打开如下的开关
cmake --install-prefix=/path/to/your/installdir -DCMAKE_EXPORT_COMPILE_COMMANDS=ON ..
最终,就会生成这么一个文件。
后面,就是等待编译结束就好了,这里贴一张编译完成的截图。
到这里,算法库就编译好了,然后,如果运行make install
,在前面设置的安装路径下生成对应的文件。
算法参数&哈希函数设置
默认的底层的哈希函数是SM3, 具体开启的,可以看运行之后的输出。
如果要切换为SHAKE
需要指定参数
cmake .. -DUSE_SHAKE=ON
可以发现,哈希函数是可以切换成功的。
然后,如果说是,我们只需要某个模式的某个算法,需要设置对应的开关,比如,我们这里,只开启aigis-enc
的模式1,具体命令如下。
cmake -DCMAKE_VERBOSE_MAKEFILE=ON -DENABLE_ML_KEM=OFF -DENABLE_KYBER=OFF -DENABLE_ML_DSA=OFF -DENABLE_SLH_DSA=OFF -DENABLE_DILITHIUM=OFF -DENABLE_AIGIS_SIG=OFF -DENABLE_SPHINCS_A=OFF -DENABLE_AIGIS_ENC=ON -DAIGIS_ENC_MODES=1 -DUSE_SM3=ON ..
其他详细算法配置,可以参考官方文档[11]。
使用方案
这里,我们也采用CMake的方式,在前面,我们已经安装的基础之上。简单的写一个CMakeList.txt
的文件。
cmake_minimum_required(VERSION 3.29)project(PQMagicDemo C)set(LIBPQMAGIC_INCLUDE_DIR "/usr/local/include" CACHE PATH "Path to liboqs include directory")set(LIBPQMAGIC_LIB_DIR "/usr/local/lib" CACHE PATH "Path to liboqs lib directory")include_directories(SYSTEM "${LIBPQMAGIC_INCLUDE_DIR}")link_directories("${LIBPQMAGIC_LIB_DIR}")set(CMAKE_C_STANDARD 11)add_executable(PQMagicDemo main.c)target_link_libraries(PQMagicDemo PUBLIC PQMagic)
然后,对于如何使用,可以从测试样例[12]里面翻一翻。
#include<stdio.h>#include<pqmagic_api.h>#include<string.h>#define SUCCESS 0#define CRYPTO_FAILURE (-1)intmain(void){unsignedchar ct[ML_KEM_512_CIPHERTEXTBYTES], ss[ML_KEM_512_SSBYTES], ss1[ML_KEM_512_SSBYTES];unsignedchar pk[ML_KEM_512_PUBLICKEYBYTES], sk[ML_KEM_512_SECRETKEYBYTES];int ret_val;// Generate the public/private keypairif ((ret_val = pqmagic_ml_kem_512_std_keypair(pk, sk)) != 0) {printf("crypto_kem_keypair returned <%d>n", ret_val);return CRYPTO_FAILURE; }if ((ret_val = pqmagic_ml_kem_512_std_enc(ct, ss, pk)) != 0) {printf("crypto_kem_enc returned <%d>n", ret_val);return CRYPTO_FAILURE; }if ((ret_val = pqmagic_ml_kem_512_std_dec(ss1, ct, sk)) != 0) {printf("crypto_kem_dec returned <%d>n", ret_val);return CRYPTO_FAILURE; }if (memcmp(ss, ss1, ML_KEM_512_SSBYTES)) {printf("crypto_kem_dec returned bad 'ss' valuen");return CRYPTO_FAILURE; }printf("[*] Success");return SUCCESS;}
好了,运行一下,可以发现是成功的。
其他算法库对比
这里,针对于PQMagic库和其他常见的算法库liboqs, botan, boringssl, RustCrypto库进行了速度测试的对比,这里只展示ML-DSA-85(L5)以及ML-KEM-1024(L5)的结果,测试平台为AMD Ryzen 5 9600x,结果表示每秒执行的算法的次数,数值越大,性能越高,可以发现,对于PQMagic的速度要显著高于其他常见的算法库。
结语
PQMagic作为国内首个支持FIPS 203-205标准的高性能算法库,不仅填补了国内后量子密码算法实现的空白,还对底层进行国密算法改造,增加自研后量子密码算法,实现完全自主可控,提供抗量子威胁能力。
参考资料
-
https://pqcrypto.dev/ -
https://openquantumsafe.org/ -
https://github.com/google/boringssl -
https://github.com/randombit/botan -
https://github.com/RustCrypto -
https://csrc.nist.gov/projects/post-quantum-cryptography/ -
https://sfjs.cacrnet.org.cn/site/content/407.html -
https://sfjs.cacrnet.org.cn/site/content/417.html -
https://eprint.iacr.org/2022/059 -
https://oscca.gov.cn/sca/xxgk/2010-12/17/1002389/files/302a3ada057c4a73830536d03e683110.pdf -
https://github.com/pqcrypto-cn/PQMagic/blob/main/README_CN.md -
https://github.com/pqcrypto-cn/PQMagic/blob/main/kem/aigis-enc/std/test/test_aigis_enc.c -
https://pqcrypto.dev/benchmarkings/pqmagic/
原文始发于微信公众号(Coder小Q):PQMagic--国内首个高性能后量子密码算法库
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论