#signature-scheme #signature #后量子密码学 #后量子 #sphincs #sphincsplus

nightly no-std pqc_sphincsplus

SPHINCS+ 是一种后量子签名方案

1 个不稳定版本

0.2.0 2023年6月25日
0.1.0 2022年9月14日

#2211密码学

MIT/Apache

110KB
2.5K SLoC

SPHINCS+

Build Status Crates License

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