1
$\begingroup$

I am trying to understand the sphincs+ from [1] and have a fair understanding of WOTS+ scheme from [2]

However, in the OTS scheme defined in [1] , it seem to use ADRS for storing chain address, hash address, keypair address etc. I am unable to understand what it is and what value it is bringing.

Is there a simple example to understand this ?

[1]https://sphincs.org/data/sphincs+-r3.1-specification.pdf [2]https://sphere10.com/articles/cryptography/pqc/wots

$\endgroup$

1 Answer 1

2
$\begingroup$

I am unable to understand what it is and what value it is bringing.

Well, it provides the location of where this hash appears in the overall Sphincs+ structure; that along with the public seed means that no two hashes are the same (even ignoring the actual data being hashed).

Why is this important? Consider what happens if that was not there: the F function (that is, the function that is iterated in the WOTS chain) would consist just of a hash of the previous chain element. What an attack could do, then, is obtain the values of lots of F functions (which is easily obtainable by him from viewing various signatures), and then pick random values, hash it, and then see if that hash happens to be any of the values he saw - if it happens to be, he has a preimage of that F function. And, if he has a billion value F function outputs, this effectively reduces the security by 30 bits.

Now, by including the ADRS (and the public seed), this avoids this attack. When the attacker takes his random value and applies the F function to it, he must also include an ADRS and public key - and the attack succeeds only if the output happens to be the same as that specific F function output. It doesn't matter if it happens to be any other F output, because the inputs to the F function is different.

$\endgroup$
1
  • $\begingroup$ Thanks for the answer. I am also curious about different elements in ADRS i.e. tree address, layer address etc. Like 3.4. WOTS+ Public Key Generation (Function wots_PKgen), what is achieved by ADRS.setChainAddress(i); ADRS.setHashAddress(0); $\endgroup$
    – Gappu
    Commented May 20 at 8:47

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.