ここで各コンポーネントのビルドステータスを確認してください
つまり、 PQCleanは、NIST ポスト量子プロジェクトにあるポスト量子スキームのクリーンな実装を収集する取り組みです。 PQClean の目標は、次のようなスタンドアロン実装を提供することです。
PQClean が目指していないのは
最初の主なターゲットとして、以下に挙げる要件を満たす C 実装を収集します。最適化された実装も受け付けますが、それでも高品質でテストされたコードが必要です。
PQClean へのスキームの追加に興味がある場合は、貢献者向けのガイドラインも確認してください。
PQClean の作業中に学んだ教訓の概要については、以下を参照してください。
マティアス・J・カンウィッシャー、ピーター・シュワーベ、ダグラス・ステビラ、トム・ウィガーズ。 「暗号標準化プロジェクトにおけるソフトウェア品質の向上」参加: セキュリティ標準化研究 – 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=...
) を除く) (オプション、推奨) 以下のスキームについては、1 つ以上のパラメーター セットの実装があります。これらすべてのスキームにはクリーンな C コードがありますが、一部のスキームについては最適化されたコードもあります。
ファイナリスト:
代替候補者:
目指すべき基準:
代替候補者:
以前に PQClean で利用可能で、NIST 標準化作業のラウンド 3 でドロップされた実装は、 round2
タグで利用できます。
以前に PQClean で利用可能で、NIST 標準化作業のラウンド 4 でドロップされた実装は、 round3
タグで利用できます。
PQClean は基本的に、NIST リファレンス実装に必要な API と同じ API を使用します。この API は、SUPERCOP および libpqcrypto でも使用されます。この 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 は、他のライブラリに簡単に統合できるソース コードのコレクションです。 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 の各実装には、その実装用のファイルをビルドする方法を示す 2 つの 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
Python ベースのテストを実行するには、 test
ディレクトリに移動し、並列テストの場合はpytest -v
または (推奨) pytest -n=auto
実行します。
python3 <testmodule>
を実行することもできます。 <testmodule>
は、 test/
フォルダー内のtest_
で始まるファイルのいずれかです。