
Cライブラリ。量子耐性暗号のプロトタイピングと実験のためのもの。
liboqsは、量子安全な暗号アルゴリズムのためのオープンソースのCライブラリです。
liboqsが提供するもの:
liboqsはOpen Quantum Safe (OQS) プロジェクトの一部であり、量子安全な暗号を開発し、アプリケーションに統合して、実世界のコンテキストでの展開とテストを容易にすることを目的としています。特に、OQSは、OpenSSL 3 Providerを通じて、TLS、X.509、S/MIMEなどのプロトコルへのliboqsのプロトタイプ統合を提供し、その他のさまざまなポスト量子対応デモも提供しています。
OQSプロジェクトは、Linux Foundationの一部としてPost-Quantum Cryptography Allianceによって支援されています。Open Quantum Safeプロジェクトの詳細については、openquantumsafe.orgをご覧ください。
OQSは、コミュニティをよりよく理解するために調査を実施しています。組織や個人の皆様から、Open Quantum Safeプロジェクトへの関心と利用状況についてお聞かせいただきたいと考えています。アンケートへの回答に数分お時間をいただけると幸いです: https://linuxfoundation.surveymonkey.com/r/oqssurvey
以下の表は、現在liboqsに統合されているすべてのアルゴリズムファミリーをまとめたものです。バリアントごとの詳細(NISTレベル、定数時間ステータス、形式検証、利用可能な最適化を含む)については、ALGORITHMS.mdを参照してください。上流のソースと勧告については、docs/algorithmsの下のアルゴリズムごとのページを参照してください。
NISTによって標準化されたアルゴリズムの名前 — ML-KEM、ML-DSA、およびSLH-DSA — は安定しています。NISTが実装の詳細を変更した場合、liboqsはユーザーがそのような変更から保護されるように調整します。他のすべての名前は変更される可能性があります。どのアルゴリズムをビルドするかは、OQS_ALGS_ENABLEDを介して制御できます。デフォルトでは、liboqsは実験的なものを含む表内のすべてのアルゴリズムをサポートしてビルドされます。
この文書の執筆時点では、このライブラリで使用されている量子安全アルゴリズムのいずれにも既知の脆弱性はありませんが、量子安全アルゴリズムのほとんどは、現在展開されているアルゴリズムと同じ程度の精査を受けていないため、展開する際には注意が必要です。特に、標準化コミュニティ、特にNISTのPost-Quantum Cryptography Standardizationプロジェクトが提供するガイダンスに注意を払う必要があります。研究が進むにつれて、サポートされているアルゴリズムのセキュリティは急速に変化する可能性があり、古典コンピュータと量子コンピュータの両方に対して安全でないことが判明する可能性もあります。さらに、sntrup761は相互運用性テストのためだけに含まれていることに注意してください。
liboqsは「勝者を選ぶ」ことを意図していません。アルゴリズムのサポートはNIST PQC標準化プロジェクトに基づいています。アプリケーションとプロトコルがポスト量子暗号を展開する際には、この取り組みの成果に依存することを強くお勧めします。
NIST PQC標準化プロジェクトの完了前に量子安全暗号を展開したいと考える関係者もいることを認識しています。そのような試みには、量子安全公開鍵アルゴリズムを従来の公開鍵アルゴリズム(RSAや楕円曲線など)と併用する、いわゆるハイブリッド暗号の使用を強くお勧めします。これにより、ソリューションは少なくとも既存の従来暗号と同等以上の安全性を確保できます。
現在、本ライブラリを本番環境で使用したり、機密データを保護するために依存することを推奨しません。 このライブラリは研究とプロトタイピングを支援することを目的としています。セキュリティバグを回避するためにベストエフォートのアプローチを取っていますが、このライブラリは高いセキュリティ用途で依存するために必要なレベルの監査と分析を受けていません。
脆弱性の報告方法とOQSの脆弱性対応プロセスについては、SECURITY.mdを参照してください。
サポート作業を最適化するために、
依存関係をインストールします:
Ubuntuの場合:
sudo apt install astyle cmake gcc ninja-build libssl-dev unzip xsltproc doxygen graphviz valgrind
python3 -m venv .venv
source .venv/bin/activate
pip install --require-hashes -r requirements.txt
macOSの場合、お好みのパッケージマネージャーを使用します(ここではHomebrewを選択):
brew install cmake ninja openssl@3 wget doxygen graphviz astyle valgrind
python3 -m venv .venv
source .venv/bin/activate
pip install --require-hashes -r requirements.txt
Nixを使用する場合:
nix develop
liboqsがさまざまな対称暗号アルゴリズム(AES、SHA-2など)にOpenSSLを使用する場合は、OpenSSLがインストールされている必要があることに注意してください(バージョン3.x推奨、サポート終了のバージョン1.1.1も引き続き使用可能です)。
ソースを取得します:
git clone -b main https://github.com/open-quantum-safe/liboqs.git
cd liboqs
そしてビルドします:
mkdir build && cd build
cmake -GNinja ..
ninja
生成される成果物をカスタマイズするためのさまざまなcmakeビルドオプションが利用可能であり、CONFIGURE.mdに文書化されています。サポートされているすべてのオプションは.CMake/alg-support.cmakeファイルにも一覧表示されており、buildディレクトリでcmake -LAH -N ..を実行して表示できます。
以下の手順では、buildディレクトリにいることを前提としています。
デフォルトでは、メインのビルド結果は静的ライブラリであるlib/liboqs.aです。共有/動的ライブラリをビルドする場合は、上記のcmake -GNinja ..コマンドに-DBUILD_SHARED_LIBS=ONを追加すると、結果はlib/liboqs.so|dylib|dllになります。公開ヘッダーはincludeディレクトリにあります。また、testsディレクトリの下にはさまざまなプログラムがビルドされます:
test_kem: 鍵カプセル化メカニズム用のシンプルなテストハーネスtest_sig: 署名スキーム用のシンプルなテストハーネスtest_sig_stfl: ステートフル署名スキーム用のシンプルなテストハーネスtest_kem_mem: 鍵カプセル化メカニズムのメモリ消費量をチェックするためのシンプルなテストハーネスtest_sig_mem: 署名スキームのメモリ消費量をチェックするためのシンプルなテストハーネスkat_kem: NIST提出要件と同じ手順を使用して鍵カプセル化メカニズムの既知回答テスト(KAT)値を生成し、を使用して提出されたKAT値と照合するプログラムバイナリは、CMake Tools拡張機能がインストールされたVisual Studio 2019を使用して生成できます。上記のLinux/macOSで説明したものと同じオプションを使用でき、ビルド成果物は指定されたbuildフォルダーに生成されます。
Visual Studioビルドファイルを作成する場合(たとえば、ninjaを使用しない場合)、上記の例のようにcmakeコマンドにパラメータ-GNinjaを渡さ_ない_ようにしてください。その後、msbuildを使用してすべてのコンポーネントをビルドできます。例: msbuild ALL_BUILD.vcxproj。また、すべての成果物をインストールするには、たとえば次のコマンドを使用します: msbuild INSTALL.vcxproj。
さまざまなプラットフォーム向けにliboqsをクロスコンパイルできます。詳細情報はWikiにあります。
ビルド、オプションのビルドパラメータ、サンプルアプリケーション、コーディング規約などに関するより詳細な情報は、wikiにあります。
受け入れ基準を満たす貢献は歓迎します。詳細については、Contributing Guideを参照してください。
liboqsはMITライセンスの下でライセンスされています。詳細についてはLICENSE.txtを参照してください。
liboqsには、異なるライセンスで提供されるサードパーティのライブラリまたはモジュールがいくつか含まれています。対応するサブフォルダーには、その場合に適用されるライセンスが含まれています。特に:
.CMake/CMakeDependentOption.cmake: BSD 3-Clause Licensesrc/common/common.c: Apache License v2.0の部分を含むsrc/common/crypto/aes/aes_c.c: パブリックドメインまたはOSI承認済みライセンスsrc/common/crypto/aes/aes*_ni.c: パブリックドメインsrc/common/crypto/sha2/sha2_c.c: パブリックドメインsrc/common/crypto/sha3/xkcp_low : CC0(パブリックドメイン)、ただしbrg_endian.hとKeccakP-1600-AVX2.sを除くsrc/common/crypto/sha3/xkcp_low/.../brg_endian.h : BSD 3-Clause Licensesrc/common/crypto/sha3/xkcp_low/.../KeccakP-1600-AVX2.s : BSD類似のCRYPTOGAMSライセンスsrc/common/rand/rand_nist.c: ファイルを参照OQSプロジェクトは、Linux Foundationの一部としてPost-Quantum Cryptography Allianceによって支援されています。
OQSプロジェクトは、ウォータールー大学のDouglas StebilaとMichele Moscaによって設立されました。liboqsへの貢献者には、個人の貢献者、学者、研究者、およびAmazon Web Services、Cisco Systems、evolutionQ、IBM Research、Microsoft Research、SandboxAQ、softwareQなどのさまざまな企業が含まれます。
Open Quantum Safeの開発に対する資金援助は、Amazon Web Services、カナダサイバーセキュリティセンター、Cisco、Unitary Fund、NGI Assure Fund、およびVeriSign Inc.から提供されています。
OQSの特定のコンポーネントを開発した研究プロジェクトは、カナダ自然科学・工学研究評議会(NSERC)からの資金を含む、さまざまな研究助成金によって支援されています。資金提供の謝辞についてはソース論文を参照してください。
| アルゴリズムファミリー | 標準化ステータス | 主要実装 | 上流メンテナンス | OQSティア |
|---|
| BIKE | NISTによって未選定 | awslabs/bike-kem | TBD | ティア3(コミュニティ) |
| Classic McEliece | ISOで検討中 | PQClean/PQClean@1eacfda | アクティブなメンテナンスなし | ティア3(コミュニティ) |
| FrodoKEM | ISOで検討中 | microsoft/PQCrypto-LWEKE@a2f9dec | ベストエフォート | ティア2(サポート対象) |
| HQC | 今後の標準化に向けてNISTによって選定 | pqc-hqc/hqc@161cd4f | TBD | ティア2(サポート対象) |
| Kyber | ML-KEM(FIPS 203)の基礎としてNISTによって選定 | pq-crystals/kyber@441c051 | アクティブにメンテナンス中 | ティア3(コミュニティ) |
| ML-KEM | NISTによって標準化 | pq-code-package/mlkem-native@0ba906c | アクティブにメンテナンス中 | ティア1(コア) |
| NTRU | NISTによって未選定、NTTによる標準化検討中 | PQClean/PQClean@4c9e5a3 | アクティブにメンテナンス中 | ティア3(コミュニティ) |
| NTRU-Prime | NISTによって未選定 | openssh/openssh-portable | アクティブにメンテナンス中 | ティア3(コミュニティ) |
| アルゴリズムファミリー | 標準化ステータス | 主要実装 | 上流メンテナンス | OQSティア |
|---|
| CROSS | NISTで検討中 | CROSS-signature/CROSS-lib-oqs@179d61b | アクティブにメンテナンス中 | ティア3(コミュニティ) |
| Falcon | 今後の標準化に向けてNISTによって選定 | PQClean/PQClean@1eacfda | TBD | ティア3(コミュニティ) |
| MAYO | NISTで検討中 | PQCMayo/MAYO-C@64e15c6 | アクティブにメンテナンス中 | ティア3(コミュニティ) |
| ML-DSA | NISTによって標準化 | pq-code-package/mldsa-native@9b0ee84 | アクティブにメンテナンス中 | ティア2(サポート対象) |
| MQOM | NISTで検討中 | mqom/mqom-v2@ec6b7fa | アクティブにメンテナンス中 | ティア3(コミュニティ) |
| SLH-DSA | NISTによって標準化 | pq-code-package/slhdsa-c@a0fc1ff | ベストエフォート | ティア3(コミュニティ) |
| SNOVA | NISTで検討中 | vacuas/SNOVA@1c3ca6f | ベストエフォート | ティア3(コミュニティ) |
| UOV | NISTで検討中 | pqov/pqov@33fa527 | ベストエフォート | ティア3(コミュニティ) |
| アルゴリズムファミリー | 標準化ステータス | 主要実装 | 上流メンテナンス | OQSティア |
|---|
| LMS | IRTFによって標準化、NISTによって承認 | cisco/hash-sigs | ベストエフォート | ティア2(サポート対象) |
| XMSS | IRTFによって標準化、NISTによって承認 | XMSS/xmss-reference | アクティブにメンテナンス中 | ティア2(サポート対象) |
tests/test_kat.pykat_sig: NIST提出要件と同じ手順を使用して署名スキームの既知回答テスト(KAT)値を生成し、tests/test_kat.pyを使用して提出されたKAT値と照合するプログラムkat_sig_stfl: tests/test_kat.pyを使用して提出されたKAT値と結果を照合するプログラムspeed_kem: 鍵カプセル化メカニズム用のベンチマークプログラム。使用手順は./speed_kem --helpを参照speed_sig: 署名メカニズム用のベンチマークプログラム。使用手順は./speed_sig --helpを参照speed_sig_stfl: ステートフル署名メカニズム用のベンチマークプログラム。使用手順は./speed_sig_stfl --helpを参照example_kem: KEM APIの使用方法を示す最小限の実行可能な例example_sig: 署名APIの使用方法を示す最小限の実行可能な例example_sig_stfl: ステートフル署名APIの使用方法を示す最小限の実行可能な例test_aes、test_sha3: 暗号サブコンポーネント用のシンプルなテストハーネスtest_portability: クロスCPUコードの移植性をチェックするためのシンプルなテストハーネス。qemuの存在が必要。正しい動作はUbuntuでのみ検証されています完全なテストスイートは以下で実行できます:
ninja run_tests
APIのHTMLドキュメントを生成するには、以下を実行します:
ninja gen_docs
次に、Webブラウザでdocs/html/index.htmlを開きます。
ninja installを実行すると、ビルドされたライブラリとincludeファイルを任意の場所にインストールできます。場所は、構成時にcmakeに-DCMAKE_INSTALL_PREFIX=<dir>オプションを渡すことで指定できます。あるいは、ninja packageを実行してインストールパッケージを作成することもできます。
ninja uninstallを実行すると、すべてのインストールファイルを削除できます。
src/kem/bike/additional: Apache License v2.0src/kem/classic_mceliece/pqclean_*: パブリックドメインsrc/kem/kyber/pqcrystals-*: パブリックドメイン(CC0)またはApache License v2.0src/kem/kyber/pqclean_*: パブリックドメイン(CC0)、およびパブリックドメイン(CC0)またはApache License v2.0、およびパブリックドメイン(CC0)またはMIT、およびMITsrc/kem/kyber/libjade_* パブリックドメイン(CC0)またはApache License v2.0src/kem/ml_kem/mlkem-native_*: MITまたはApache License v2.0またはISC Licensesrc/kem/ntru/pqclean_*: パブリックドメイン(CC0)src/kem/ntruprime/sntrup761_openssh: パブリックドメインsrc/sig/mayo/*: Apache License v2.0src/sig/ml_dsa/pqcrystals-*: パブリックドメイン(CC0)またはApache License v2.0