NTRU » History » Version 4
Andreas Steffen, 21.02.2014 15:51
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 | 4 | Andreas Steffen | * With IKEv2 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> |