여기에서 각 구성요소의 빌드 상태를 확인하세요.
간단히 말해서 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_ 로 시작하는 파일 중 하나입니다.