liboqs是一个用于量子安全密码算法的开源C库。

一,概述

liboqs提供:

  1. 量子安全 密钥封装机制(KEM)和数字签名算法的开源实现的集合;
  2. 这些算法的通用API;
  3. 测试工具和基准测试例程。

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.git
cd liboqs

并建立:

 autoreconf -i
./configure
make clean
make -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_aestest_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 domain
  • src/crypto/sha2/sha2_c.c: public domain
  • src/crypto/sha3/fips202.c: CC0 (public domain)
  • src/crypto/sha3/keccak4x: CC0 (public domain), except brg_endian.h
  • src/kem/bike/x86_64: Apache License v2.0
  • src/kem/kyber/pqclean_*: public domain
  • src/kem/newhope/pqclean_*: public domain
  • src/kem/ntru/pqclean_*: public domain
  • src/kem/saber/pqclean_*: public domain
  • src/sig/dilithium/pqclean_*: public domain
  • src/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

liboqs-量子安全密码算法开源C库的更多相关文章

  1. OpenSSL密码算法库: MD5示例小程序

    OpenSSL http://www.openssl.org/ OpenSSL整个软件包大概可以分成三个主要的功能部分:密码算法库.SSL协议库以及应用程序.OpenSSL 的密码算法库包含多种加密算 ...

  2. 密码算法详解——AES

    0 AES简介 1997年1月2号,美国国家标准技术研究所宣布希望征集一个安全性能更高的加密算法(AES)[3],用以取代DES.我们知道DES的密钥长度是64 bits,但实际加解密中使用的有效长度 ...

  3. logging日志模块,hashlib hash算法相关的库,

    logging: 功能完善的日志模块 import logging #日志的级别 logging.debug("这是个调试信息")#级别10 #常规信息 logging.info( ...

  4. Android逆向之旅---Android中锁屏密码算法解析以及破解方案

    一.前言 最近玩王者荣耀,下载了一个辅助样本,结果被锁机了,当然破解它很简单,这个后面会详细分析这个样本,但是因为这个样本引发出的欲望就是解析Android中锁屏密码算法,然后用一种高效的方式制作锁机 ...

  5. 【复习】密码算法——AES

    0 AES简介 1997年1月2号,美国国家标准技术研究所宣布希望征集一个安全性能更高的加密算法(AES)[3],用以取代DES.我们知道DES的密钥长度是64 bits,但实际加解密中使用的有效长度 ...

  6. 我的Android进阶之旅------>【强力推荐】Android开源图表库XCL-Charts版本发布及展示页

    因为要做图表相关的应用,后来百度发现了一个很好的Android开源图表库(XCL-Charts is a free charting library for Android platform.) 下面 ...

  7. AES密码算法详解(转自https://www.cnblogs.com/luop/p/4334160.html)

    0 AES简介 我们知道数据加密标准(Data Encryption Standard: DES)的密钥长度是56比特,因此算法的理论安全强度是256.但二十世纪中后期正是计算机飞速发展的阶段,元器件 ...

  8. Java实现7种常见密码算法

    原创:扣钉日记(微信公众号ID:codelogs),欢迎分享,转载请保留出处. 简介 前面在密码学入门一文中讲解了各种常见的密码学概念.算法与运用场景,但没有介绍过代码,因此,为作补充,这一篇将会介绍 ...

  9. 信息安全-2:python之hill密码算法[原创]

    转发注明出处:http://www.cnblogs.com/0zcl/p/6106513.html 前言: hill密码算法我打算简要介绍就好,加密矩阵我用教材上的3*3矩阵,只做了加密,解密没有做, ...

随机推荐

  1. yum源问题

    配置本地yum源 1.使用工具将iso文件上传到操作系统,或者直接挂载iso文件 2.配置yum #cd /etc/yum.repos.d/ 删除多余的repo文件 # vi /etc/yum.rep ...

  2. 云服务器 ECS 是什么?

    云服务器 Elastic Compute Service(ECS)是阿里云提供的一种基础云计算服务.使用云服务器 ECS 就像使用水.电.煤气等资源一样便捷.高效.您无需提前采购硬件设备,而是根据业务 ...

  3. Bootstrap-CSS:目录

    ylbtech-Bootstrap-CSS:目录 1.返回顶部 1.   2. 2.返回顶部   3.返回顶部   4.返回顶部   5.返回顶部 1.   2.   6.返回顶部   7.返回顶部 ...

  4. BFC是什么?有什么作用?

    BFC(Block Formatting Context)直译为“块级格式化范围”. 一.常见定位方案 在讲 BFC 之前,我们先来了解一下常见的定位方案,定位方案是控制元素的布局,有三种常见方案: ...

  5. Centos7.4 yum 安装MariaDB

    #系统及版本选择:https://downloads.mariadb.org/mariadb/repositories/#mirror=tunavim /etc/yum.repos.d/MariaDB ...

  6. java源码-ConcurrentHashMap分析-1

    ConcurrentHashMap源码分析 版本jdk8 摈弃了jdk7之前的segement段锁: 首先分析一下put方法,大致的流程就是首先对key取hash函数 判断是否first节点是否存在 ...

  7. HBase 批量删除表 disable_all drop_all

    这两命令可以匹配正则表达式,对表进行批量操作,也可以对确定名字的单表操作,在表名不存在时,也不会返回exception,只会有提示信息.\ny是为了实现自动确认,因为这两命令需要用户交互确认. 例子, ...

  8. 【URL 的编码、解码】

    工具类 /** * URLEncodeTest.java * weixinTest * * Function: TODO * * ver date author * ───────────────── ...

  9. 深入源码分析Spring中的构造器注入

    # 1. 示例 构造器注入类,分别有三个构造器,一个是无参构造器,一个是注入一个Bean的构造器,一个是注入两个Bean的构造器: public class ConstructorAutowiredT ...

  10. 【AMAD】Pysnooper -- 别再用print进行debug了

    简介 动机 作用 用法 热度分析 源码分析 个人评分 简介 pysnooper是低配版debugger,别再用print进行debug了. 动机 想象一个场景,你的Python代码运行后不产生你要的效 ...