# NTRU key size (confused)

I'm evaluating the performance of NTRU; and I got confused. the key size is said to be smaller than RSA but larger than ECC.

Using both the reference implementation when I choose APR2011_439 setting from BC I've thought that 439 would represent the key size in bits. But when I store the public key in byte array its size if 604 bytes (PKCS1Encoding encoding). I'm very consufed. With APR2011_439 I can encrypt blocks of max 54 bytes in size so that would indeed be the key size. But why does the key stored in a byte array take a huge ammount of 604 bytes? It is the same with reference implementation. Please explain I'm very short on time.

I've thourgh that 439 would represent the key size in bits.

No, NTRU doesn't measure things like that. Instead, it's the number of elements in a ring. In addition, with the current parameter sets, each ring element is a value between 0 and 2047 (11 bits), and the public key consists of one ring, and so it takes up $11 \times 439 = 4829$ bits, which compresses to 604 bytes.

• Yes, the NTRU sizes they have listed in table 1 is wrong. Other things in the paper are also bogus; NTRU is fast, but not nearly as fast as a symmetric system. Also, the paper calls NTRU 'new'; it was invented in 1996, and so it was 16 years old when the paper was written. – poncho Apr 21 '17 at 19:16
• For the record, the paper commented by poncho's comment above is there. – fgrieu Apr 21 '17 at 19:19
• @Vega4: there is no standard NTRU parameter set with that low of security (and that's deliberate; Security Innovations does not want to endorse "weak crypto"). If I absolutely had to estimate the size of a parameter set with circa 80 bit security, that'd have circa 430 byte keys; if that's too much, NTRU is not for you... – poncho Apr 21 '17 at 19:34
• @fgrieu Why am I not surprised about the origin of the paper? – Maarten Bodewes Apr 21 '17 at 22:03
• @floorcat: it worked for me – poncho Apr 22 '17 at 3:22

Poncho's explanation is correct: the size is $N \log_2(q)$ rather than just $N$.

A better open-source implementation to use is here: https://github.com/NTRUOpenSourceProject/ntru-crypto -- this is the implementation endorsed by the inventors of NTRU and by Security Innovation, which owns the NTRU patents (and which I work for). It should be preferred to third-party implementations unless you have a particular reason to think the third-party implementation is likely to be better.

The exact parameters, the key sizes, and the motivation for those parameters is in https://github.com/NTRUOpenSourceProject/ntru-crypto/blob/master/doc/NewParameters.pdf.