
C-библиотека для прототипирования и экспериментов с квантово-устойчивой криптографией
liboqs — это библиотека на языке C с открытым исходным кодом для квантово-устойчивых криптографических алгоритмов.
liboqs предоставляет:
liboqs является частью проекта Open Quantum Safe (OQS), целью которого является разработка и интеграция квантово-устойчивой криптографии в приложения для упрощения развертывания и тестирования в реальных условиях. В частности, OQS предоставляет прототипные интеграции liboqs в такие протоколы, как TLS, X.509 и S/MIME, через наш OpenSSL 3 Provider, а также множество других демонстраций с поддержкой постквантовой криптографии.
Проект OQS поддерживается Альянсом постквантовой криптографии в рамках Linux Foundation. Дополнительная информация о проекте 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. По мере развития исследований поддерживаемые алгоритмы могут быстро меняться в отношении их безопасности и даже могут оказаться небезопасными как для классических, так и для квантовых компьютеров. Кроме того, обратите внимание, что sntrup761 включен только для тестирования совместимости.
liboqs не намерен «выбирать победителей»: поддержка алгоритмов определяется проектом стандартизации постквантовой криптографии NIST. Мы настоятельно рекомендуем приложениям и протоколам полагаться на результаты этой работы при развертывании постквантовой криптографии.
Мы понимаем, что некоторые стороны могут захотеть развернуть квантово-устойчивую криптографию до завершения проекта стандартизации постквантовой криптографии NIST. Мы настоятельно рекомендуем таким попыткам использовать так называемую гибридную криптографию, в которой квантово-устойчивые алгоритмы с открытым ключом используются наряду с традиционными алгоритмами с открытым ключом (такими как RSA или эллиптические кривые), чтобы решение было по крайней мере не менее безопасным, чем существующая традиционная криптография.
В НАСТОЯЩЕЕ ВРЕМЯ МЫ НЕ РЕКОМЕНДУЕМ ПОЛАГАТЬСЯ НА ЭТУ БИБЛИОТЕКУ В ПРОИЗВОДСТВЕННОЙ СРЕДЕ ИЛИ ДЛЯ ЗАЩИТЫ ЛЮБЫХ КОНФИДЕНЦИАЛЬНЫХ ДАННЫХ. Эта библиотека предназначена для помощи в исследованиях и прототипировании. Хотя мы прилагаем все усилия, чтобы избежать ошибок безопасности, эта библиотека не прошла тот уровень аудита и анализа, который необходим для того, чтобы полагаться на нее в сценариях с высокими требованиями к безопасности.
Пожалуйста, обратитесь к SECURITY.md за подробностями о том, как сообщить об уязвимости, и о процессе реагирования на уязвимости OQS.
Чтобы оптимизировать усилия по поддержке,
Установите зависимости:
На 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 использовал OpenSSL для различных симметричных криптографических алгоритмов (AES, SHA-2 и т. д.), у вас должен быть установлен 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, и их можно просмотреть, выполнив cmake -LAH -N .. в каталоге build.
Следующие инструкции предполагают, что мы находимся в build.
По умолчанию основным результатом сборки является lib/liboqs.a — статическая библиотека. Если вы хотите собрать разделяемую/динамическую библиотеку, добавьте -DBUILD_SHARED_LIBS=ON к команде cmake -GNinja .. выше, и результатом будет lib/liboqs.so|dylib|dll. Публичные заголовочные файлы находятся в каталоге include. Также в каталоге tests собирается множество программ:
test_kem: Простой тестовый стенд для механизмов инкапсуляции ключейtest_sig: Простой тестовый стенд для схем подписиtest_sig_stfl: Простой тестовый стенд для схем подписи с состояниемtest_kem_mem: Простой тестовый стенд для проверки потребления памяти механизмами инкапсуляции ключейtest_sig_mem: Простой тестовый стенд для проверки потребления памяти схемами подписиБинарные файлы можно создать с помощью Visual Studio 2019 с установленным расширением CMake Tools. Можно использовать те же параметры, что описаны выше для Linux/macOS, а артефакты сборки создаются в указанных папках build.
Если вы хотите создать файлы сборки Visual Studio, например, если вы не используете ninja, обязательно не передавайте параметр -GNinja команде cmake, как показано в примере выше. Затем вы можете собрать все компоненты с помощью msbuild, например, так: msbuild ALL_BUILD.vcxproj, и установить все артефакты, например, с помощью этой команды: msbuild INSTALL.vcxproj.
Вы можете кросс-компилировать liboqs для различных платформ. Подробная информация доступна в Wiki.
Более подробную информацию о сборке, необязательных параметрах сборки, примерах приложений, соглашениях о кодировании и многом другом можно найти в вики.
Приветствуются вклады, соответствующие критериям приемлемости. Подробнее см. в нашем Руководстве по участию.
liboqs распространяется под лицензией MIT; подробности см. в LICENSE.txt.
liboqs включает некоторые сторонние библиотеки или модули, которые распространяются под другими лицензиями; соответствующая подпапка содержит лицензию, применимую в этом случае. В частности:
.CMake/CMakeDependentOption.cmake: лицензия BSD 3-Clausesrc/common/common.c: включает части под лицензией Apache License v2.0src/common/crypto/aes/aes_c.c: общественное достояние или любая лицензия, одобренная OSIsrc/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.ssrc/common/crypto/sha3/xkcp_low/.../brg_endian.h : лицензия BSD 3-Clausesrc/common/crypto/sha3/xkcp_low/.../KeccakP-1600-AVX2.s : лицензия CRYPTOGAMS в стиле BSDsrc/common/rand/rand_nist.c: см. файлПроект OQS поддерживается Альянсом постквантовой криптографии в рамках Linux Foundation.
Проект OQS был основан Дугласом Стебилой и Микеле Моской в Университете Ватерлоо. Участники liboqs включают отдельных участников, академиков и исследователей, а также различные компании, включая Amazon Web Services, Cisco Systems, evolutionQ, IBM Research, Microsoft Research, SandboxAQ и softwareQ.
Финансовая поддержка разработки Open Quantum Safe была предоставлена Amazon Web Services, Канадским центром кибербезопасности, Cisco, Unitary Fund, фондом NGI Assure и 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 | Выбран NIST как основа для ML-KEM (FIPS 203) | 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 (Поддерживаемый) |
kat_kem: Программа, генерирующая значения тестов известных ответов (KAT) для механизмов инкапсуляции ключей с использованием той же процедуры, что и требования NIST к представлению, для проверки представленных значений KAT с помощью tests/test_kat.pykat_sig: Программа, генерирующая значения тестов известных ответов (KAT) для схем подписи с использованием той же процедуры, что и требования NIST к представлению, для проверки представленных значений KAT с помощью tests/test_kat.pykat_sig_stfl: Программа для проверки результатов на соответствие представленным значениям KAT с помощью tests/test_kat.pyspeed_kem: Программа бенчмаркинга для механизмов инкапсуляции ключей; см. ./speed_kem --help для инструкций по использованиюspeed_sig: Программа бенчмаркинга для механизмов подписи; см. ./speed_sig --help для инструкций по использованиюspeed_sig_stfl: Программа бенчмаркинга для механизмов подписи с состоянием; см. ./speed_sig_stfl --help для инструкций по использованиюexample_kem: Минимальный запускаемый пример, демонстрирующий использование API KEMexample_sig: Минимальный запускаемый пример, демонстрирующий использование API подписиexample_sig_stfl: Минимальный запускаемый пример, демонстрирующий использование API подписи с состояниемtest_aes, test_sha3: Простые тестовые стенды для криптографических подкомпонентовtest_portability: Простые тестовые стенды для проверки переносимости кода между процессорами; требует наличия qemu; корректная работа проверена только на UbuntuПолный набор тестов можно запустить с помощью
ninja run_tests
Чтобы сгенерировать HTML-документацию по API, выполните:
ninja gen_docs
Затем откройте docs/html/index.html в вашем веб-браузере.
ninja install можно выполнить для установки собранной библиотеки и файлов include в выбранное место, которое можно указать, передав параметр -DCMAKE_INSTALL_PREFIX=<dir> команде cmake на этапе настройки. Кроме того, 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.src/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