sntrup761 key size
Niels Möller <[email protected]> Thu, 09 Apr 2026 17:04:58 +0200
| Newsgroups | gmane.ietf.secsh |
|---|---|
| Message-ID | <[email protected]> |
Hi, I'm looking into implementing sntrup761 (so far, the underlying KEM primitive, not yet the SSH specifics). But I'm confused by the private key size, and I hope people here can help me shed some light. As far as I understand, the main reference is https://ntruprime.cr.yp.to/nist/ntruprime-20201007.pdf. Key generation (2.3.6) outputs the public key _K_ (underlined K in the spec), and private key that consists of _k_, _K_ and rho (these are all octet strings; I'm assuming they are simply concatenated, even though that's not explicitly said). For the sntrup761 parameters, _K_ represents an element of R/q, encoded as 1158 bytes. _k_ represents two elements in R/3, encoded as 191 octets each. And rho is another 191 random octets, for a total of 1731 =3D 1158 + 3*191 octets. But then it seems some implementations instead use a private key size of 1763 bytes, where the last 32 bytes are a hash of the public key _K_ (more precisely, Hash_4(_K_)). Which to me looks like a somewhat weird optimization, since this value is very cheap to recompute whenever needed, compared to the rest of the decapsulation operation. Is there some authoritative spec nailing down the private key size and representation? Regards, /Niels --=20 Niels M=C3=B6ller. PGP key CB4962D070D77D7FCB8BA36271D8F1FF368C6677. Internet email is subject to wholesale government surveillance.