Lihat status build untuk setiap komponen di sini
PQClean , singkatnya, adalah upaya untuk mengumpulkan implementasi bersih dari skema pasca-kuantum yang ada dalam proyek pasca-kuantum NIST. Tujuan dari PQClean adalah untuk menyediakan implementasi mandiri yang
Apa yang tidak dituju oleh PQClean adalah
Sebagai target utama pertama, kami mengumpulkan implementasi C yang memenuhi persyaratan yang tercantum di bawah. Kami juga menerima implementasi yang dioptimalkan, namun tetap memerlukan kode berkualitas tinggi dan teruji.
Harap tinjau juga pedoman kami untuk kontributor jika Anda tertarik untuk menambahkan skema ke PQClean.
Untuk ringkasan pembelajaran saat mengerjakan PQClean, silakan merujuk ke:
Matthias J. Kannwischer, Peter Schwabe, Douglas Stebila, dan Thom Wiggers. “Meningkatkan Kualitas Perangkat Lunak dalam Proyek Standardisasi Kriptografi.” Dalam: Riset Standardisasi Keamanan – Lokakarya EuroS&P 2022. 2022.
Temukan makalahnya di https://eprint.iacr.org/2022/337
Silakan kutip karya ini ketika mengacu pada 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 } ,
}
Harap dicatat bahwa banyak implementasi yang disertakan dalam PQClean berasal dari proyek penelitian asli itu sendiri, dan penulisnya juga akan menghargai jika dikutip.
Pengecekan item pada daftar ini masih dikembangkan. Item yang diperiksa seharusnya berfungsi.
api.h
tidak dapat menyertakan file eksternal -Wall -Wextra -Wpedantic -Werror -Wmissing-prototypes
dengan gcc
dan clang
#if
/ #ifdef
s hanya untuk enkapsulasi header const
diberi label sebagai const
fips202.c
, sha2.c
, aes.c
, randombytes.c
0
jika berhasil nmake
) PQCLEAN_SCHEMENAME_
LICENSE
(lihat di bawah) META.yml
yang memberikan rincian tentang versi algoritma, desainer META.yml
. stdint.h
(opsional, disarankan)size_t
(opsional, disarankan)for (size_t i=...
) (opsional, disarankan) Untuk skema berikut kami memiliki implementasi dari satu atau lebih kumpulan parameternya. Untuk semua skema ini kami memiliki kode C yang bersih, tetapi untuk beberapa skema kami juga memiliki kode yang dioptimalkan.
Finalis:
Kandidat pengganti:
Standar calon:
Kandidat pengganti:
Implementasi yang sebelumnya tersedia di PQClean dan dihilangkan di Putaran 3 upaya standardisasi NIST tersedia di tag round2
.
Implementasi yang sebelumnya tersedia di PQClean dan dihilangkan di Putaran 4 upaya standardisasi NIST tersedia di tag round3
.
PQClean pada dasarnya menggunakan API yang sama seperti yang diperlukan untuk implementasi referensi NIST, yang juga digunakan oleh SUPERCOP dan libpqcrypto. Satu-satunya perbedaan pada API tersebut adalah sebagai berikut:
size_t
alih-alih unsigned long long
; Dan 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 );
Seperti disebutkan di atas, PQClean tidak dimaksudkan untuk dibangun sebagai perpustakaan tunggal: ini adalah kumpulan kode sumber yang dapat dengan mudah diintegrasikan ke perpustakaan lain. Repositori PQClean mencakup berbagai program pengujian yang membangun berbagai file, namun Anda tidak boleh menggunakan biner yang dihasilkan.
Daftar dependensi yang diperlukan: gcc or clang, make, python3, python-yaml library, valgrind, astyle (>= 3.0)
.
Setiap direktori implementasi di PQClean (misalnya, crypto_kem/kyber768_clean) dapat diekstraksi untuk digunakan dalam proyek Anda sendiri. Anda perlu:
common/randombytes.h
(penghasil nomor acak kriptografi), dan mungkin common/sha2.h
(keluarga fungsi hash SHA-2), common/aes.h
(implementasi AES), common/fips202.h
(the Keluarga fungsi hash SHA-3) dan common/sp800-185.h
(keluarga cSHAKE). Implementasi dari folder common/
dapat digunakan, namun perhatikan bahwa implementasi tersebut mungkin bukan implementasi yang berkinerja paling baik dan mungkin melakukan hal-hal yang tidak perlu (seperti alokasi heap) untuk tujuan pengujian kami.Mengenai #2, menambahkan file ke sistem pembangunan proyek Anda, setiap implementasi di PQClean disertai dengan contoh dua makefile yang menunjukkan bagaimana seseorang dapat membuat file untuk implementasi tersebut:
Makefile
yang dapat digunakan dengan GNU Make, BSD Make, dan mungkin lainnya.Makefile.Microsoft_nmake
yang dapat digunakan dengan nmake Visual Studio. Proyek-proyek berikut menggunakan implementasi dari PQClean dan menyediakan pembungkusnya sendiri di sekitar implementasi. Strategi integrasi mereka dapat menjadi contoh untuk proyek Anda sendiri.
Setiap subdirektori yang berisi implementasi berisi file LICENSE
yang menyatakan di bawah lisensi apa implementasi spesifik tersebut dirilis. File-file yang common
berisi informasi lisensi di bagian atas file (dan saat ini berada dalam domain publik atau MIT). Semua kode lain dalam repositori ini dirilis di bawah kondisi CC0.
Lihat https://github.com/PQClean/PQClean/wiki/Test-framework untuk detail tentang kerangka pengujian PQClean.
Meskipun kami menjalankan pengujian otomatis ekstensif pada Github Actions ((meniru) build Linux, MacOS, dan Windows) dan Travis CI (build Aarch64), dan sebagian besar pengujian juga dapat dijalankan secara lokal. Untuk melakukannya, pastikan yang berikut ini diinstal:
pytest
untuk python 3. Kami juga merekomendasikan menginstal pytest-xdist
untuk memungkinkan menjalankan pengujian secara paralel.
Anda juga perlu memastikan submodul diinisialisasi dengan menjalankan:
git submodule update --init
Jalankan pengujian berbasis Python dengan masuk ke direktori test
dan menjalankan pytest -v
atau (disarankan) pytest -n=auto
untuk pengujian paralel.
Anda juga dapat menjalankan python3 <testmodule>
di mana <testmodule>
adalah salah satu file yang dimulai dengan test_
di folder test/
.