当前位置: 首页 > 工具软件 > NTRU > 使用案例 >

2021SC@SDUSC 后量子密码NTRU的参考实现

慕兴平
2023-12-01

2021SC@SDUSC

PQ Crypto Catalog

https://github.com/kriskwiatkowski/pqc
提交给 NIST PQC 标准化流程的量子安全签名和 KEM 方案。

该项目目标是在 C 和 Rust 中提供易于使用的 API 以支持实验。 该代码源自提交给 NIST 后量子加密标准化的 PQClean 项目 。
用户不应期望此代码提供任何级别的安全性。 该库不打算用于实时生产系统。

支持

NameNIST Roundx86 optimized
Kyber3x
NTRU3x
SABER3x
FrodoKEM3
NTRU Prime3x
HQC-RMRS3x
Dilithium3x
Falcon3
Rainbow3
SPHINCS+ SHA256/SHAKE2563x
SIKE/p4343x

构建

CMake 用于构建库:

mkdir build
cd build
cmake -DCMAKE_BUILD_TYPE=Release ..
make

构建输出两个库,一个静态 libpqc_s.a和动态 libpqc.so,可与项目链接。
API

库提供了简单的 API,包装了 PQClean。 例如,要使用 KEM,应按以下方式调用库:

#include <pqc/pqc.h>

const params_t *p = pqc_kem_alg_by_id(KYBER512);
std::vector<uint8_t> ct(ciphertext_bsz(p));
std::vector<uint8_t> ss1(shared_secret_bsz(p));
std::vector<uint8_t> ss2(shared_secret_bsz(p));
std::vector<uint8_t> sk(private_key_bsz(p));
std::vector<uint8_t> pk(public_key_bsz(p));

pqc_keygen(p, pk.data(), sk.data());
pqc_kem_encapsulate(p, ct.data(), ss1.data(), pk.data());
pqc_kem_decapsulate(p, ss2.data(), ct.data(), sk.data());

p = pqc_sig_alg_by_id(DILITHIUM2);
size_t sigsz = sig.capacity();
pqc_keygen(p, pk.data(), sk.data());
pqc_sig_create(p, sig.data(), &sigsz, msg.data(), msg.size(), sk.data());
pqc_sig_verify(p, sig.data(), sig.size(), msg.data(), msg.size(), pk.data());

Rust 构建

cd test/katrunner
curl http://amongbytes.com/~flowher/permalinks/kat.zip --output kat.zip
unzip kat.zip
cargo run -- --katdir KAT
 类似资料: