
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(Known Answer Test) 값을 생성하고, 를 사용하여 제출된 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에서 확인할 수 있습니다.
수용 기준을 충족하는 기여는 감사히 환영합니다. 자세한 내용은 기여 가이드를 참조하십시오.
liboqs는 MIT 라이선스에 따라 라이선스가 부여됩니다. 자세한 내용은 LICENSE.txt를 참조하십시오.
liboqs에는 다르게 라이선스가 부여된 일부 타사 라이브러리 또는 모듈이 포함되어 있습니다. 해당 하위 폴더에는 해당 경우에 적용되는 라이선스가 포함되어 있습니다. 특히:
.CMake/CMakeDependentOption.cmake: BSD 3-Clause 라이선스src/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 라이선스src/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 프로젝트는 University of Waterloo의 Douglas Stebila와 Michele Mosca에 의해 설립되었습니다. liboqs 기여자에는 개인 기여자, 학계 및 연구자, 그리고 Amazon Web Services, Cisco Systems, evolutionQ, IBM Research, Microsoft Research, SandboxAQ, softwareQ를 포함한 다양한 기업이 포함됩니다.
Open Quantum Safe 개발에 대한 재정적 지원은 Amazon Web Services, Canadian Centre for Cyber Security, Cisco, Unitary Fund, NGI Assure Fund, VeriSign Inc.에서 제공되었습니다.
OQS의 특정 구성 요소를 개발한 연구 프로젝트는 Natural Sciences and Engineering Research Council of Canada(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 (지원) |
tests/test_kat.pykat_sig: NIST 제출 요구 사항과 동일한 절차를 사용하여 서명 체계에 대한 KAT(Known Answer Test) 값을 생성하고, 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
그런 다음 웹 브라우저에서 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 라이선스src/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