ดูสถานะการสร้างสำหรับแต่ละส่วนประกอบที่นี่
กล่าวโดยย่อคือ PQClean คือความพยายามที่จะรวบรวมการใช้งาน ที่สะอาด ของแผนงานหลังควอนตัมที่อยู่ในโครงการหลังควอนตัมของ NIST เป้าหมายของ PQClean คือการจัดให้มี การใช้งานแบบสแตนด์อโลน
สิ่งที่ PQClean ไม่ได้ มุ่งหมายคือ
ในฐานะเป้าหมายหลักอันดับแรก เรากำลังรวบรวมการใช้งาน C ที่ตรงตามข้อกำหนดที่แสดงด้านล่าง นอกจากนี้เรายังยอมรับการใช้งานที่ได้รับการปรับปรุงประสิทธิภาพ แต่ยังคงต้องการโค้ดคุณภาพสูงที่ผ่านการทดสอบแล้ว
โปรดตรวจสอบหลักเกณฑ์ของเราสำหรับผู้มีส่วนร่วม หากคุณสนใจที่จะเพิ่มแผนงานให้กับ PQClean
สำหรับบทสรุปของบทเรียนที่ได้รับขณะทำงานกับ PQClean โปรดดูที่:
แมทเธียส เจ. คันวิเชอร์, ปีเตอร์ ชวาเบ, ดักลาส สเตบิลา และทอม วิกเกอร์ส “การปรับปรุงคุณภาพซอฟต์แวร์ในโครงการมาตรฐานการเข้ารหัส” ใน: การวิจัยมาตรฐานความปลอดภัย – การประชุมเชิงปฏิบัติการ 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
ไม่สามารถรวมไฟล์ภายนอกได้ -Wall -Wextra -Wpedantic -Werror -Wmissing-prototypes
ด้วย gcc
และ clang
#if
/ #ifdef
s สำหรับการห่อหุ้มส่วนหัวเท่านั้น 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 และลดลงในรอบที่ 3 ของความพยายามในการมาตรฐาน NIST มีอยู่ในแท็ก round2
การใช้งานก่อนหน้านี้พร้อมใช้งานใน PQClean และลดลงในรอบที่ 4 ของความพยายามในการมาตรฐาน NIST มีอยู่ในแท็ก round3
โดยพื้นฐานแล้ว PQClean ใช้ API เดียวกันกับที่จำเป็นสำหรับการใช้งานอ้างอิง NIST ซึ่งใช้โดย SUPERCOP และโดย libpqcrypto เช่นกัน ข้อแตกต่างเพียงอย่างเดียวกับ API นั้นมีดังต่อไปนี้:
size_t
แทนที่จะเป็น unsigned long long
; และ 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
ที่สามารถใช้ได้กับ GNU Make, BSD Make และอาจเป็นไฟล์อื่น ๆMakefile.Microsoft_nmake
ซึ่งสามารถใช้ได้กับ nmake ของ Visual Studio โปรเจ็กต์ต่อไปนี้ใช้การนำไปใช้งานจาก PQClean และจัดเตรียม wrappers ของตัวเองสำหรับการนำไปใช้งาน กลยุทธ์บูรณาการอาจใช้เป็นตัวอย่างสำหรับโครงการของคุณเอง
แต่ละไดเร็กทอรีย่อยที่มีการนำไปใช้งานจะมีไฟล์ LICENSE
ที่ระบุภายใต้ใบอนุญาตใดที่มีการเผยแพร่การใช้งานเฉพาะ ไฟล์ common
มีข้อมูลใบอนุญาตที่ด้านบนของไฟล์ (และปัจจุบันเป็นสาธารณสมบัติหรือ MIT) โค้ดอื่นๆ ทั้งหมดในที่เก็บนี้จะเผยแพร่ภายใต้เงื่อนไขของ CC0
ดู https://github.com/PQClean/PQClean/wiki/Test-framework สำหรับรายละเอียดเกี่ยวกับกรอบงานการทดสอบ PQClean
ในขณะที่เราทำการทดสอบอัตโนมัติอย่างกว้างขวางบน Github Actions ((จำลอง) บิลด์ Linux, MacOS และ Windows บิลด์) และ Travis CI (บิลด์ Aarch64) และการทดสอบส่วนใหญ่ก็สามารถดำเนินการในเครื่องได้เช่นกัน เมื่อต้องการทำเช่นนี้ ตรวจสอบให้แน่ใจว่าได้ติดตั้งสิ่งต่อไปนี้:
pytest
สำหรับหลาม 3 นอกจากนี้เรายังแนะนำให้ติดตั้ง pytest-xdist
เพื่อให้ทำการทดสอบแบบขนานได้
คุณจะต้องตรวจสอบให้แน่ใจว่าโมดูลย่อยได้รับการเริ่มต้นโดยการรัน:
git submodule update --init
รันการทดสอบแบบ Python โดยไปที่ไดเร็กทอรี test
และรัน pytest -v
หรือ (แนะนำ) pytest -n=auto
สำหรับการทดสอบแบบขนาน
คุณยังสามารถรัน python3 <testmodule>
โดยที่ <testmodule>
คือไฟล์ใดๆ ที่ขึ้นต้นด้วย test_
ในโฟลเดอร์ test/