在此處查看每個組件的建置狀態
簡而言之, PQClean致力於收集 NIST 後量子專案中後量子方案的乾淨實作。 PQClean 的目標是提供獨立的實現
PQCclean 的目的不是
作為第一個主要目標,我們正在收集滿足下列要求的 C 實作。我們也接受優化的實現,但仍然需要高品質、經過測試的程式碼。
如果您有興趣為 PQClean 新增方案,請同時查看我們的貢獻者指南。
有關 PQClean 工作中的經驗教訓總結,請參閱:
馬蒂亞斯·J·坎維舍爾 (Matthias J. Kannwischer)、彼得·施瓦貝 (Peter Schwabe)、道格拉斯·斯特比拉 (Douglas Stebila) 和湯姆·威格斯 (Thom Wiggers)。 “提高密碼學標準化項目的軟體品質。”請參閱:安全標準化研究 – 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
僅用於標頭封裝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 本質上使用與 NIST 參考實作所需的相同 API,SUPERCOP 和 libpqcrypto 也使用該 API。與該 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
可以與 Visual Studio 的 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_
開頭的任何檔案。