Project

General

Profile

NTRU » History » Version 5

Andreas Steffen, 21.02.2014 15:52

1 1 Andreas Steffen
h1. NTRU
2 1 Andreas Steffen
3 3 Andreas Steffen
NTRU is a lattice-based post-quantum encryption algorithm owned by "Security Innovation":https://www.securityinnovation.com/products/encryption-libraries/ntru-cryptography.html. Our implementation of the ntru plugin has been derived from the "ntru-crypto":https://github.com/NTRUOpenSourceProject/ntru-crypto C source code made available by Security Innovations under the GNU GPLv2 open source license.
4 3 Andreas Steffen
5 3 Andreas Steffen
NTRU has been standardized by *IEEE Std 1363.1-2008* and *ANSI X9.98-2010*. NTRU parameter sets are defined for security strengths of 112, 128, 192 and 256 bits. The strongSwan ntru plugin uses NTRU encryption as an IKEv1|IKEv2 key exchange algorithm in the following way:
6 3 Andreas Steffen
7 3 Andreas Steffen
 * The IKE initiator generates a random NTRU public/private key pair for the specified security strength.
8 3 Andreas Steffen
9 3 Andreas Steffen
 * The IKE initiator sends the NTRU public key in the KEi payload to the IKE responder.
10 3 Andreas Steffen
11 4 Andreas Steffen
 * The IKE responder generates a random secret _s_ with a size of twice the security strength and encrypts it with the NTRU public key.
12 3 Andreas Steffen
13 3 Andreas Steffen
 * The IKE responder sends the encrypted secret in the KEr payload to the IKE initiator
14 3 Andreas Steffen
15 4 Andreas Steffen
 * The IKE initiator decrypts the KEr payload using the NTRU private key and extracts the secret _s_.
16 1 Andreas Steffen
17 4 Andreas Steffen
 * With IKEv2 both initiator and responder use the secret _s_ to compute
18 4 Andreas Steffen
<pre>
19 4 Andreas Steffen
SKEYSEED = prf(Ni | Nr, s)
20 4 Andreas Steffen
</pre>
21 4 Andreas Steffen
22 5 Andreas Steffen
 * With IKEv1 both initiator and responder use the secret _s_ to compute
23 4 Andreas Steffen
<pre>
24 4 Andreas Steffen
SKEYID = prf(Ni_b | Nr_b, s)               # for authby=pubkey i.e. public key signatures
25 4 Andreas Steffen
SKEYID = prf(pre-shared-key, Ni_b | Nr_b)  # for authby=psk, i.e. pre-shared keys
26 4 Andreas Steffen
27 4 Andreas Steffen
SKEYID_d = prf(SKEYID, s | CKY-I | CKY-R | 0)
28 4 Andreas Steffen
SKEYID_a = prf(SKEYID, SKEYID_d | s | CKY-I | CKY-R | 1)
29 4 Andreas Steffen
SKEYID_e = prf(SKEYID, SKEYID_a | s | CKY-I | CKY-R | 2)
30 4 Andreas Steffen
</pre>