liboqs-量子安全密码算法开源C库
liboqs是一个用于量子安全密码算法的开源C库。
一,概述
liboqs提供:
- 量子安全 密钥封装机制(KEM)和数字签名算法的开源实现的集合;
- 这些算法的通用API;
- 测试工具和基准测试例程。
liboqs是由Douglas Stebila和Michele Mosca领导的开放量子安全(OQS)项目的一部分,该项目旨在开发量子安全密码学并将其集成到应用程序中,以促进在现实环境中的部署和测试。特别是,OQS通过OpenSSL和OpenSSH将liboqs原型集成到TLS和SSH中。
有关OQS的更多信息,请参见
https://openquantumsafe.org/
https://openquantumsafe.org/papers/SAC-SteMos16.pdf
https://openquantumsafe.org/papers/NISTPQC-CroPaqSte19.pdf
二,目前状态
2.1支持的算法
密钥封装机制
- BIKE: BIKE1-L1, BIKE1-L3, BIKE1-L5, BIKE2-L1, BIKE2-L3, BIKE2-L5, BIKE3-L1, BIKE3-L3, BIKE3-L5 (NIST Round 1 version)
- FrodoKEM: FrodoKEM-640-AES, FrodoKEM-640-SHAKE, FrodoKEM-976-AES, FrodoKEM-976-SHAKE, FrodoKEM-1344-AES, FrodoKEM-1344-SHAKE
- Kyber: Kyber512, Kyber768, Kyber1024
- NewHope: NewHope-512-CCA, NewHope-1024-CCA
- NTRU: NTRU-HPS-2048-509, NTRU-HPS-2048-677, NTRU-HPS-4096-821, NTRU-HRSS-701
- SABER: LightSaber-KEM, Saber-KEM, FireSaber-KEM
- SIKE: SIDH-p434, SIDH-p503, SIDH-p610, SIDH-p751, SIKE-p434, SIKE-p503, SIKE-p610, SIKE-p751, SIDH-p434-compressed, SIDH-p503-compressed, SIDH-p610-compressed, SIDH-p751-compressed, SIKE-p434-compressed, SIKE-p503-compressed, SIKE-p610-compressed, SIKE-p751-compressed
签名技术
- Dilithium: Dilithium2, Dilithium3, Dilithium4
- MQDSS: MQDSS-31-48, MQDSS-31-64
- Picnic: Picnic-L1-FS, Picnic-L1-UR, Picnic-L3-FS, Picnic-L3-UR, Picnic-L5-FS, Picnic-L5-UR, Picnic2-L1-FS, Picnic2-L3-FS, Picnic2-L5-FS
- qTESLA: qTESLA-I, qTESLA-III-size, qTESLA-III-speed (NIST Round 1 version)
- SPHINCS+-Haraka: SPHINCS+-Haraka-128f-robust, SPHINCS+-Haraka-128f-simple, SPHINCS+-Haraka-128s-robust, SPHINCS+-Haraka-128s-simple, SPHINCS+-Haraka-192f-robust, SPHINCS+-Haraka-192f-simple, SPHINCS+-Haraka-192s-robust, SPHINCS+-Haraka-192s-simple, SPHINCS+-Haraka-256f-robust, SPHINCS+-Haraka-256f-simple, SPHINCS+-Haraka-256s-robust, SPHINCS+-Haraka-256s-simple
- SPHINCS+-SHA256: SPHINCS+-SHA256-128f-robust, SPHINCS+-SHA256-128f-simple, SPHINCS+-SHA256-128s-robust, SPHINCS+-SHA256-128s-simple, SPHINCS+-SHA256-192f-robust, SPHINCS+-SHA256-192f-simple, SPHINCS+-SHA256-192s-robust, SPHINCS+-SHA256-192s-simple, SPHINCS+-SHA256-256f-robust, SPHINCS+-SHA256-256f-simple, SPHINCS+-SHA256-256s-robust, SPHINCS+-SHA256-256s-simple
- SPHINCS+-SHAKE256: SPHINCS+-SHAKE256-128f-robust, SPHINCS+-SHAKE256-128f-simple, SPHINCS+-SHAKE256-128s-robust, SPHINCS+-SHAKE256-128s-simple, SPHINCS+-SHAKE256-192f-robust, SPHINCS+-SHAKE256-192f-simple, SPHINCS+-SHAKE256-192s-robust, SPHINCS+-SHAKE256-192s-simple, SPHINCS+-SHAKE256-256f-robust, SPHINCS+-SHAKE256-256f-simple, SPHINCS+-SHAKE256-256s-robust, SPHINCS+-SHAKE256-256s-simple
2.2局限性与安全性
随着研究的进展,受支持的算法可能会看到其安全性的快速变化,甚至可能证明对经典计算机和量子计算机都不安全。
liboqs并不打算“选拔优胜者”:算法支持由NIST 后量子密码术标准化项目提供。我们强烈建议应用程序和协议在部署后量子加密时依赖于其努力的结果。
我们认识到一些参与者可能希望在NIST标准化项目结束之前部署量子安全密码学。我们强烈建议您尝试使用所谓的混合密码术,其中将量子安全的公共密钥算法与传统的公共密钥算法(例如RSA或椭圆曲线)一起使用,以使该解决方案的安全性至少比现有的传统安全性低加密。
三,快速开始
3.1Linux/ MacOS
1,安装依赖项:
在Ubuntu上:
sudo apt install autoconf automake libtool gcc libssl-dev python3-pytest unzip xsltproc doxygen graphviz
在macOS上,使用您选择的软件包管理器(我们选择了Homebrew):
brew install autoconf automake libtool openssl wget doxygen graphviz pip3 install pytest
2,获取来源:
git clone -b master https://github.com/open-quantum-safe/liboqs.gitcd liboqs
并建立:
autoreconf -i./configuremake cleanmake -j
可以传递各种选项来配置以禁用算法,使用不同的实现,指定要使用的OpenSSL库或交叉编译。有关./configure --help
详细信息,请参见。
(如果在macOS上遇到类似的错误Can't exec "libtoolize": No such file or directory at ...
,请尝试使用运行LIBTOOLIZE=glibtoolize autoreconf -i
。)
3,主要的构建结果是liboqs.a
,一个静态库。(可以将其放置在.libs
目录中。)目录下还构建了各种程序tests
:
test_kem
:用于关键封装机制的简单测试工具test_sig
:用于密钥签名方案的简单测试工具kat_kem
:使用与NIST提交要求相同的过程为密钥封装机制生成已知答案测试(KAT)值的程序,用于使用以下方法检查提交的KAT值tests/test_kat.py
kat_sig
:使用与NIST提交要求相同的过程为签名方案生成已知答案测试(KAT)值的程序,用于使用以下方法检查提交的KAT值tests/test_kat.py
speed_kem
:关键封装机制的基准测试程序;请参阅./speed_kem --help
使用说明speed_sig
:签名机制的基准测试程序;请参阅./speed_sig --help
使用说明example_kem
:最小的可运行示例,显示了KEM API的用法example_sig
:最小的可运行示例,显示了签名API的用法test_aes
,test_sha3
:用于加密子组件的简单测试工具的测试(包括所有的A范围test_*
和kat_*
上述的程序)可以使用运行
python3 -m pytest
4,要生成API的HTML文档,请运行:
make docs
然后docs/doxygen/html/index.html
在您的Web浏览器中打开。
3.2Windows
可以使用VisualStudio
文件夹中的Visual Studio解决方案生成二进制文件。支持的方案在项目的winconfig.h
文件中定义。
3.3其他
可以在Wiki中找到有关在OpenBSD和ARM上进行构建的说明。
3.4License
liboqs是根据MIT许可获得许可的;有关详细信息,请参见LICENSE.txt。
liboqs包含一些许可不同的第三方库或模块;相应的子文件夹包含在这种情况下适用的许可证。尤其是:
src/crypto/aes/aes_c.c
: public domainsrc/crypto/sha2/sha2_c.c
: public domainsrc/crypto/sha3/fips202.c
: CC0 (public domain)src/crypto/sha3/keccak4x
: CC0 (public domain), exceptbrg_endian.h
src/kem/bike/x86_64
: Apache License v2.0src/kem/kyber/pqclean_*
: public domainsrc/kem/newhope/pqclean_*
: public domainsrc/kem/ntru/pqclean_*
: public domainsrc/kem/saber/pqclean_*
: public domainsrc/sig/dilithium/pqclean_*
: public domainsrc/sig/mqdss/pqclean_*
: CC0 (public domain)src/sig/picnic/external/sha3
: CC0 (public domain)src/sig/rainbow/pqclean_*
: CC0 (public domain)src/sig/sphincs/pqclean_*
: CC0 (public domain)
https://github.com/open-quantum-safe/liboqs#status
转载于:https://www.cnblogs.com/xdyixia/p/11577363.html
liboqs-量子安全密码算法开源C库相关推荐
- NTL密码算法开源库--综述
2021SC@SDUSC NTL密码算法开源库--综述 项目综述 NTL算法库是开放源码的自由软件,具有专业处理任意精度大整数.实数的计算数论与计算代数的高性能可移植c++库,提供了任意大整数.任意精 ...
- NTL密码算法开源库-大整数ZZ类(一)
2021SC@SDUSC NTL密码算法开源库-大整数ZZ类(一) 本章综述 代码分析 贝祖公式 本章综述 大整数ZZ类主要实现了任意长度大整数表示.最大公因数.Jacobi符号和素性检验.笔者将通过 ...
- NTL密码算法开源库-大整数ZZ类(三)
2021SC@SDUSC NTL密码算法开源库-大整数ZZ类(三) 中国剩余定理 一次同余式 乘法逆元 简化剩余的等价描述 二次同余式 雅可比符号 中国剩余定理 //中国剩余定理模板代码 typede ...
- NTL密码算法开源库(数论库)代码分析项目--综述
2021SC@SDUSC NTL密码算法开源库(数论库)代码分析项目--综述 项目综述 NTL开源代码库的安装和使用 NTL代码开源库主要解决的问题 项目分工以及核心代码的分配 项目综述 NTL算法库 ...
- NTL密码算法开源库——大整数ZZ类(四)
2021SC@SDUSC RSA算法原理 密钥生成的步骤 第一步,随机选择两个不相等的质数p和q. 爱丽丝选择了61和53.(实际应用中,这两个质数越大,就越难破解.) 第二步,计算p和q的乘积n. ...
- Miracle密码算法开源库(一)源码分析 :mraes.c
2021SC@SDUSC 山东大学软件学院软件工程应用与实践 一.mraes.c结构 mraec.c的总体结构如下,具有fbsub.ftable1等数组,主要实现了aes_decrypt .aes_e ...
- 【NTL密码算法开源库-概述】
NTL库基本数据类型 ZZ: big integers(支持不等式运算) ZZ_p: big integers modulo p zz_p: integers mod "single pre ...
- NTL密码算法开源库——大整数ZZ类(二)
2021SC@SDUSC 素数检测 (1)数学基础:费马小定理,二次探测定理,欧拉定理,Miller-Rabin素数测试,同余式, wilson定理,乘法逆元,简化剩余系 费马小定理:若存在整数 a ...
- NTL密码算法开源库——大整数ZZ类(一)
2021SC@SDUSC 本章综述 大整数ZZ类主要实现了任意长度大整数表示.最大公因数.Jacobi符号和素性检验.笔者将通过逐个分析ZZ.cpp源代码中函数的形式来一步步向读者展示NTL是如何实现 ...
最新文章
- 非线性方程求根的牛顿法
- 支付宝支付 第十集:支付回调
- [一维粒子模拟 version3.6]实现initial.m函数
- Refactoring Connection To Sql
- 不少人暗搓搓的准备春招了,我有一些好东东和招聘信息给你
- 在 Vs2013中查看类的内部布局
- linux mtime参数,linux find mtime参数详解
- 在保护继承中基类的共有成员_c++中的继承
- 深度应用驱动的医学知识图谱构建(一)
- Android 监听软键盘弹出/隐藏,控制软键盘弹出/隐藏
- 模拟电子电路技术基础 | 基本放大电路
- 从Linux服务器下载文件夹到本地
- Java学习笔记 (韩顺平循序渐进学Java零基础篇)——01
- 探索分布式服务框架Dubbo开篇:牛逼哄哄的RPC
- 苹果手机内屏幕出现彩色条纹怎么办
- 工作站的容器化和虚拟化实践
- 安卓谷歌浏览器全屏打开HTML
- 人工智能-数据分析-鸢尾花
- 精确率(precision)、召回率(recall)、准确率(accuracy)
- 2022年天梯赛题目解析