여기에서 각 구성요소의 빌드 상태를 확인하세요.
간단히 말해서 PQClean 은 NIST 포스트 퀀텀 프로젝트에 있는 포스트 퀀텀 체계의 깔끔한 구현을 수집하려는 노력입니다. PQClean의 목표는 다음과 같은 독립 실행형 구현을 제공하는 것입니다.
PQClean이 목표로 하지 않는 것은
첫 번째 주요 목표로 아래 나열된 요구 사항을 충족하는 C 구현을 수집하고 있습니다. 또한 최적화된 구현도 허용하지만 여전히 고품질의 테스트된 코드가 필요합니다.
PQClean에 계획을 추가하는 데 관심이 있는 경우 기여자를 위한 지침도 검토하십시오.
PQClean 작업 중에 배운 교훈을 요약하려면 다음을 참조하세요.
Matthias J. Kannwischer, Peter Schwabe, Douglas Stebila 및 Thom Wiggers. “암호화 표준화 프로젝트의 소프트웨어 품질 개선.” In: 보안 표준화 연구 – EuroS&P 워크숍 2022. 2022.
https://eprint.iacr.org/2022/337에서 논문을 찾으세요.
PQClean을 언급할 때 다음 작품을 인용해 주세요.
@inproceedings { SSR:KSSW22 ,
author = { Matthias J. Kannwischer and
Peter Schwabe and
Douglas Stebila and
Thom Wiggers } ,
title = { Improving Software Quality in Cryptography Standardization Projects } ,
booktitle = { {IEEE} European Symposium on Security and Privacy, EuroS{&}P 2022 - Workshops, Genoa, Italy, June 6-10, 2022 } ,
pages = { 19--30 } ,
publisher = { IEEE Computer Society } ,
address = { Los Alamitos, CA, USA } ,
year = { 2022 } ,
url = { https://eprint.iacr.org/2022/337 } ,
doi = { 10.1109/EuroSPW55150.2022.00010 } ,
}
PQClean에 포함된 많은 구현은 독창적인 연구 프로젝트 자체에서 비롯되었으며 해당 작성자도 인용되는 것을 높이 평가할 것입니다.
이 목록의 항목을 확인하는 작업은 아직 개발 중입니다. 확인된 항목이 작동해야 합니다.
api.h
외부 파일을 포함할 수 없습니다. gcc
및 clang
사용하여 -Wall -Wextra -Wpedantic -Werror -Wmissing-prototypes
로 컴파일합니다. #if
/ #ifdef
헤더 캡슐화에만 해당 const
인수는 const
로 표시됩니다. fips202.c
, sha2.c
, aes.c
, randombytes.c
0
반환합니다. nmake
) PQCLEAN_SCHEMENAME_
으로 네임스페이스가 지정됩니다. LICENSE
파일이 함께 제공됩니다(아래 참조). META.yml
파일이 함께 제공됩니다. META.yml
에 지정됩니다. stdint.h
유형을 사용하여 관련 있는 고정 크기입니다(선택 사항, 권장).size_t
입니다(선택 사항, 권장).for (size_t i=...
제외))(선택 사항, 권장) 다음 구성표의 경우 매개변수 세트 중 하나 이상을 구현했습니다. 이러한 모든 구성표에 대해 깨끗한 C 코드가 있지만 일부의 경우 최적화된 코드도 있습니다.
결선 진출자:
대체 후보:
향후 표준:
대체 후보:
이전에 PQClean에서 사용 가능했고 NIST 표준화 노력의 3라운드에서 삭제된 구현을 round2
태그에서 사용할 수 있습니다.
이전에 PQClean에서 사용 가능했고 NIST 표준화 노력의 4라운드에서 삭제된 구현을 round3
태그에서 사용할 수 있습니다.
PQClean은 기본적으로 SUPERCOP 및 libpqcrypto에서도 사용되는 NIST 참조 구현에 필요한 것과 동일한 API를 사용합니다. 해당 API와의 유일한 차이점은 다음과 같습니다.
unsigned long long
대신 size_t
유형으로 전달됩니다. 그리고 int PQCLEAN_SCHEME_IMPL_crypto_sign_signature (
uint8_t * sig , size_t * siglen ,
const uint8_t * m , size_t mlen ,
const uint8_t * sk );
int PQCLEAN_SCHEME_IMPL_crypto_sign_verify (
const uint8_t * sig , size_t siglen ,
const uint8_t * m , size_t mlen ,
const uint8_t * pk );
위에서 언급했듯이 PQClean은 단일 라이브러리로 구축하기 위한 것이 아닙니다 . 이는 다른 라이브러리에 쉽게 통합될 수 있는 소스 코드 모음입니다. PQClean 저장소에는 다양한 파일을 빌드하는 다양한 테스트 프로그램이 포함되어 있지만 결과 바이너리를 사용하면 안 됩니다.
필수 종속성 목록: gcc or clang, make, python3, python-yaml library, valgrind, astyle (>= 3.0)
.
PQClean의 각 구현 디렉터리(예: crypto_kem/kyber768_clean)를 추출하여 자신의 프로젝트에 사용할 수 있습니다. 다음을 수행해야 합니다.
common/randombytes.h
(암호화 난수 생성기) 및 common/sha2.h
(SHA-2 해시 함수 제품군), common/aes.h
(AES 구현), common/fips202.h
( SHA-3 해시 함수 제품군) 및 common/sp800-185.h
(cSHAKE 제품군). common/
폴더의 구현을 사용할 수 있지만 가장 성능이 뛰어난 구현은 아닐 수 있으며 테스트 목적으로 불필요한 작업(예: 힙 할당)을 수행할 수 있습니다.#2와 관련하여 프로젝트의 빌드 시스템에 파일을 추가하면 PQClean의 각 구현에는 해당 구현을 위한 파일을 빌드하는 방법을 보여주는 두 개의 makefile 예제가 함께 제공됩니다.
Makefile
파일입니다.Makefile.Microsoft_nmake
파일. 다음 프로젝트는 PQClean의 구현을 사용하고 구현 주위에 자체 래퍼를 제공합니다. 그들의 통합 전략은 귀하의 프로젝트에 대한 예가 될 수 있습니다.
구현을 포함하는 각 하위 디렉터리에는 특정 구현이 릴리스되는 라이센스를 나타내는 LICENSE
파일이 포함되어 있습니다. common
파일에는 파일 상단에 라이센스 정보가 포함되어 있으며 현재는 공개 도메인이거나 MIT입니다. 이 저장소의 다른 모든 코드는 CC0 조건에 따라 릴리스됩니다.
PQClean 테스트 프레임워크에 대한 자세한 내용은 https://github.com/PQClean/PQClean/wiki/Test-framework를 참조하세요.
Github Actions((에뮬레이션된) Linux 빌드, MacOS 및 Windows 빌드) 및 Travis CI(Aarch64 빌드)에 대해 광범위한 자동 테스트를 실행하며 대부분의 테스트는 로컬에서도 실행할 수 있습니다. 이렇게 하려면 다음이 설치되어 있는지 확인하세요.
pytest
. 또한 테스트를 병렬로 실행할 수 있도록 pytest-xdist
설치하는 것이 좋습니다.
또한 다음을 실행하여 하위 모듈이 초기화되었는지 확인해야 합니다.
git submodule update --init
test
디렉터리로 이동하고 병렬 테스트를 위해 pytest -v
또는 (권장) pytest -n=auto
실행하여 Python 기반 테스트를 실행합니다.
python3 <testmodule>
실행할 수도 있습니다. 여기서 <testmodule>
은 test/
폴더에서 test_
로 시작하는 파일 중 하나입니다.