liboqs是一個用於量子安全密碼算法的開源C庫。html
liboqs提供:python
liboqs是由Douglas Stebila和Michele Mosca領導的開放量子安全(OQS)項目的一部分,該項目旨在開發量子安全密碼學並將其集成到應用程序中,以促進在現實環境中的部署和測試。特別是,OQS經過OpenSSL和OpenSSH將liboqs原型集成到TLS和SSH中。git
https://openquantumsafe.org/算法
https://openquantumsafe.org/papers/SAC-SteMos16.pdf瀏覽器
https://openquantumsafe.org/papers/NISTPQC-CroPaqSte19.pdf安全
密鑰封裝機制dom
簽名技術工具
隨着研究的進展,受支持的算法可能會看到其安全性的快速變化,甚至可能證實對經典計算機和量子計算機都不安全。測試
liboqs並不打算「選拔優勝者」:算法支持由NIST 後量子密碼術標準化項目提供。咱們強烈建議應用程序和協議在部署後量子加密時依賴於其努力的結果。
咱們認識到一些參與者可能但願在NIST標準化項目結束以前部署量子安全密碼學。咱們強烈建議您嘗試使用所謂的混合密碼術,其中將量子安全的公共密鑰算法與傳統的公共密鑰算法(例如RSA或橢圓曲線)一塊兒使用,以使該解決方案的安全性至少比現有的傳統安全性低加密。
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_aes
,test_sha3
:用於加密子組件的簡單測試工具的測試(包括全部的A範圍test_*
和kat_*
上述的程序)可使用運行python3 -m pytest
4,要生成API的HTML文檔,請運行:
make docs
而後docs/doxygen/html/index.html
在您的Web瀏覽器中打開。
可使用VisualStudio
文件夾中的Visual Studio解決方案生成二進制文件。支持的方案在項目的winconfig.h
文件中定義。
能夠在Wiki中找到有關在OpenBSD和ARM上進行構建的說明。
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), except brg_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)