SPHINCS+

(Redirected from SPHINCS)

SPHINCS+ is a post quantum digital signature scheme that is based on cryptographic hash functions. As a part of the NIST Post-Quantum Cryptography Standardization process, a version of the scheme was elected by the NIST to be the basis of the Stateless Hash-based Digital Signature Algorithm (SLH-DSA) and was standardized as FIPS 205.[1]

SPHINCS+
General
DesignersJean-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
First publishedNovember 30, 2017; 8 years ago (2017-11-30)
Derived fromSPHINCS
Detail
Security claims264 signatures before the work needed to forge a signature is less than the required security level
StructureHash-based cryptography

Design

edit

SPHINCS+ is based on a one-time signature scheme called WOTS+ (a modified version of the Winternitz one-time signature scheme), a few-time signature scheme called FORS (Forest of Random Subsets) and Merkle trees.[2]

When signing, the message is signed with a FORS key. The FORS key is signed with a WOTS+ key that is a leaf of a merkle tree. The root of the tree is then signed with another WOTS+ key that is itself a leaf of another tree. That tree's root is again signed with a WOTS+. The number of layers of trees is a parameter that is specified as part of the algorithm. This "tree of trees" is called a hypertree. The root of the top tree is the public key. The signature consists of the FORS key and its signature, the WOTS+ keys with their signatures and inclusion proofs for the merkle tree and a random value called R that was used to generate the path in the hypertree.[2]

In order to verify a signature, the verifier first verifies the first WOTS+ key's inclusion proof against the public key and then verifies the key's signature of the next root. Then, they check the next WOTS+ key's inclusion proof against the new root. This goes on until the last WOTS+ key is reached, which is then used to verify the FORS key. That key is then used to actually verify the message's signature.[2]

All WOTS+ keys and FORS keys are generated deterministically from the private key. During signing, the signer generates a random bit string called R and hashes it together with the message. Parts of the resulting hash are used to select the path through the hypertree while the rest is signed with the FORS key.[2]

Security

edit

SPHINCS+ has been called a "conservative" choice by NIST since its security solely relies on the preimage and collision resistance of the underlying hash function.[3][4]

A theoretical forgery attack for specific SHA256 instances has been described that requires a large amount of legitimate signatures and an infeasible amount of computation. It relies on the Merkle–Damgård structure of SHA256[a] and reduces each security claim by 40 bits. The authors of the attack believe that it doesn't "call the general soundness of the SPHINCS+ design into question" and mitigations have been proposed.[2]

History

edit

SPHINCS+ is based on the SPHINCS scheme, which was presented at EUROCRYPT 2015.[6]

SPHINCS features a larger 1kB public and private key size and a 41kB signature size.[6]

SPHINCS+ was first released in 2017[7] since SPHINCS suffers from a vulnerability called "multi-target attacks in hash-based signatures", which was addressed by a 2016 paper. Furthermore, it doesn't have verifiable index selection (the path through the trees), which enables another kind of multi-target attack. SPHINCS+ was designed to address all these issues and also decrease the key and signature sizes using tree-less WOTS+ key compression, the addition of the R parameter during signing and the replacement of the few-time signature scheme with FORS.[8][9]

SPHINCS+ was standardized as SLH-DSA by NIST in August 2024 in the FIPS 205 standard,[1] making it one of the two NIST standardized post-quantum signature schemes with the other one being ML-DSA.[10][11][12]

Instances

edit

SLH-DSA specifies the following instances based on the hash function (SHA256 or SHAKE256), the type (f for faster signing time and s for shorter signature) and security level (e.g. 128 means that forging signatures is as hard as breaking AES-128):[1][13]

NameSecurity levelTypeHash functionPublic key sizePrivate key sizeSignature size
SPHINCS+-SHA2-128s 1[b] small SHA256 32 64 7856
SPHINCS+-SHAKE-128s SHAKE256
SPHINCS+-SHA2-128f fast SHA256 17088
SPHINCS+-SHAKE-128f SHAKE256
SPHINCS+-SHA2-192s 3[c] small SHA256 48 96 16224
SPHINCS+-SHAKE-192s SHAKE256
SPHINCS+-SHA2-192f fast SHA256 35664
SPHINCS+-SHAKE-192f SHAKE256
SPHINCS+-SHA2-256s 5[d] small SHA256 64 128 29792
SPHINCS+-SHAKE-256s SHAKE256
SPHINCS+-SHA2-256f fast SHA256 49856
SPHINCS+-SHAKE-256f SHAKE256

Implementations

edit
edit

References

edit
  1. SHAKE256 instances are unaffected as they rely on the sponge construction[5]
  2. Signature forgery should be as hard as a successful key search on AES-128 or a SHA256 collision
  3. Signature forgery should be as hard as a successful key search on AES-192 or a SHA384 collision
  4. Signature forgery should be as hard as a successful key search on AES-256
  1. 1 2 3 Stateless hash-based digital signature standard (Report). Washington, D.C.: National Institute of Standards and Technology (U.S.). August 13, 2024. doi:10.6028/nist.fips.205.
  2. 1 2 3 4 5 "Breaking Category Five SPHINCS+ with SHA-256". Retrieved May 12, 2025.
  3. "Recovering the tight security proof of SPHINCS+" (PDF). Retrieved June 29, 2025.
  4. "A Tight Security Proof for SPHINCS+, Formally Verified". PQShield. January 30, 2025. Retrieved June 30, 2025.
  5. "Keccak Team". Keccak Team. Retrieved October 24, 2025.
  6. 1 2 "SPHINCS: Introduction". SPHINCS. July 18, 2013. Retrieved June 29, 2025.
  7. "SPHINCS+ Submission to the NIST post-quantum project" (PDF). Retrieved June 29, 2025.
  8. "SPHINCS+ – The smaller SPHINCS". Andreas Hülsing. December 4, 2017. Retrieved June 29, 2025.
  9. "Mitigating Multi-Target Attacks in Hash-based Signatures" (PDF). Retrieved June 29, 2025.
  10. Valenta, Luke; Gonçalves, Vânia; Westerbaan, Bas; Rosenberg, Michael; Kipp, Kevin; Dincer, Renan; Araya, Felipe Astroza; Galicer, Mari; Meunier, Thibault (August 20, 2024). "NIST's first post-quantum standards". The Cloudflare Blog. Retrieved June 29, 2025.
  11. "SPHINCS+". Open Quantum Safe. June 10, 2022. Retrieved June 29, 2025.
  12. Boutin, Chad (August 13, 2024). "NIST Releases First 3 Finalized Post-Quantum Encryption Standards". NIST. Retrieved June 29, 2025.
  13. "Security (Evaluation Criteria)". CSRC. January 3, 2017. Retrieved June 29, 2025.
  14. "randombit/botan: Cryptography Toolkit". GitHub. March 6, 2013. Retrieved June 29, 2025.
  15. "PQC and Lightweight Cryptography Updates". Bouncycastle. January 24, 2025. Retrieved June 29, 2025.
  16. Hess, Tjaden (August 15, 2024). "We wrote the code, and the code won". The Trail of Bits Blog. Retrieved June 29, 2025.
  17. "open-quantum-safe/liboqs: C library for prototyping and experimenting with quantum-resistant cryptography". GitHub. August 12, 2016. Retrieved June 29, 2025.