Hi NIST PQC community,
I'm working on a protocol which will be using SLH-DSA with a bespoke parameter set targeting a signature budget of 2^40 (the 2^24 budget from NIST SP 800-230 is too small). We are still assessing different options for parameter sets, but we notice the performance/compactness gap between w=16 and w=256 param sets is very wide.
- w=16 uses hash chains of length 16, which are very fast to sign and verify, but require many chains, thus lead to larger signatures.
- w=256 uses hash chains of length 256, which are very slow to sign/verify but produce much smaller signatures.
We started to consider using parameter sets with w=32 or w=64 to bridge this gap, but upon closer inspection of FIPS-205 I believe this would not work with existing algorithms.
The first incompatibility is encountered when encoding a message as chain indexes in base `w` (e.g. page 20, algorithm 7 (`wots_sign`), line 2). In compliant implementations this would fail because `log2(w)` doesn't evenly divide `8n`, so the `base_2^b` (algorithm 1) function expects a longer message (n+1 bytes for w=32 or w=64), and will either throw a validation error or panic/abort because of an out-of-bounds access at Algorithm 1 Line 6.
On the implementation side, this is easy to fix. Either:
1. modify Algorithms 7 and 8 to append a couple of zero-bytes at the end of message M before encoding to base w. Two bytes would be sufficient to support up to w=2^20. Or
2. modify `base_2^b` (algorithm 1) to assume zero bits if available input is exhausted.
These modifications would not affect parameter sets with w = 2^(2^x) (i.e. 2, 4, 16, 256, 65536, ...). The extra bytes appended by option (1) would not be read at all, while the conditional branch introduced by option (2) would never be triggered. They should also not affect security because (1) is constant time and (2) branches only based on constant inputs.
I have not finished surveying FIPS-205 so I may have missed other incompatibilities. However, to my eye this presently seems like the only issue preventing use of w=32/64/128 parameter sets with FIPS-205 compliant code.
Is there any appetite in NIST to rectify this issue in the spec?
I'm not suggesting to add any new parameter sets - only to tweak the algorithms so that compliant implementations will be drop-in compatible with `w` parameters which are not 2^(2^x). This would benefit bespoke use-cases like mine, and would permit new parameter sets to be standardized later if desired.
regards,
conduition