1 个不稳定版本
0.2.0 | 2023年6月25日 |
---|---|
0.1.0 |
|
#2211 在 密码学 中
110KB
2.5K SLoC
SPHINCS+
SPHINCS+ 是一种无状态基于散列的签名方案,已被纳入NIST的后量子密码学标准。
强烈建议在混合系统中使用 SPHINCS+,同时搭配传统的签名算法,如 RSA 或 Ed25519。
用法
要编译,此库需要从以下三个类别(散列、安全级别、Treehash)中各选择一个启用,使用每个组中超过一个将导致编译错误。
例如在 Cargo.toml 中
[dependencies]
pqc_sphincsplus = {version = "0.1.0", features = ["haraka", "f128", "simple"]}
要生成密钥对并签名一些任意字节
let keys = keypair();
let some_msg = [1u8; 42];
let sig = sign(&some_msg, &keys);
let sig_verify = verify(&sig, &some_msg, &keys);
assert(sig_verify.is_ok());
安全级别目标为128、192和256位的等效值,分别对应NIST的第1、3、5级。它们还被分为 快速(f)和 小(s)子类型,这使签名速度和签名大小的权衡成为可能。
SPHINCS+ 将签名方案分为简单和健壮两种变体,适用于每种散列函数的选择。健壮变体来自NIST PQC第一轮提交的原始方案,并提供了之前给出的所有保守安全性保证。简单变体是纯随机预言机实例。这些实例比健壮对应者快约三倍。这是以纯粹的经验性安全性论据为代价的。
-
散列
haraka
sha2
shake
-
安全级别
f128
f192
f256
s128
s192
s256
-
TreeHash
simple
robust
不同安全级别的比较
位安全 | 公钥字节 | 私钥字节 | 签名字节 | |
---|---|---|---|---|
SPHINCS+-128s | 133 | 32 | 64 | 7,856 |
SPHINCS+-128f | 128 | 32 | 64 | 17,088 |
SPHINCS+-192s | 193 | 48 | 96 | 16,224 |
SPHINCS+-192f | 194 | 48 | 96 | 35,664 |
SPHINCS+-256s | 255 | 64 | 128 | 29,792 |
SPHINCS+-256f | 255 | 64 | 128 | 49,856 |
测试
test_matrix 脚本将遍历所有有效的功能集。
测试向量已预先构建并位于 KAT 文件夹 中。有一个bash脚本来本地生成这些。
有关更全面的信息,请参阅 测试说明。
贡献
对于拉取请求,创建一个功能分支并将其提交到开发分支。通过为这个库做出贡献,您同意其双重许可为MIT/Apache 2.0
更多详细信息请参阅贡献页面
关于
官方网站:https://sphincs.org/
Sphincs+ 团队
- Jean-Philippe Aumasson
- Daniel J. Bernstein
- Ward Beullens
- Christoph Dobraunig
- Maria Eichlseder
- Scott Fluhrer
- Stefan-Lukas Gazdag
- Andreas Hülsing
- Panos Kampanakis
- Stefan Kölbl
- Tanja Lange
- Martin M. Lauridsen
- Florian Mendel
- Ruben Niederhagen
- Christian Rechberger
- Joost Rijneveld
- Peter Schwabe
- Bas Westerbaan
依赖项
约240-600KB