We are going to implement NTRU as our Minor 1 project.
Sender | Reciever |
---|---|
Request for an HTTP Handshake Sent | Request for an HTTP Handshake Recieved |
Generate Parameters | |
Generating Keys | |
Public Key and Parameters Recieved | Public Key and Parameters Sent |
Encryption done | |
Encrypted Cipher Text Sent | Cipher Text Recieved |
Decryption done |
We operate on Polynomial Ring with Coefficient over (Z mod p) where p is prime.
Z[x] // notation to write a Polynomial Ring over Z (Integer Ring)
Euclidean algorithm allows us to find inverses of any element in a Quotient Ring. Hence the Polynomial Quotient Ring we will use is:
we have:
Note
This is what a polynomial would look like in Z[ x ]
We need to generate:
N
- large prime number which will be the highest degree for our Polynomials.
Note
We operate on a Quotient polynomial Ring defined as Polynomial ring over the ideal of
-
p & q
- co-prime Numbers where$q>>p$ .
Note
Generation of polynomial inverses of f with Integer coefficients modulo p and q
We need to generate 2 Polynomials
Use Bézout's Identity to generate the inverse: if in the Bézout's identity:
we place
such that the GCD is 1: hence we get,
here we have
where
thus meaning
Note
To find inverse of the polynomial we have to use the Bézout's identity.
Where the Euclidean algorithm will be used on
We have
- 2 polynomials( f(x) and g(x) ) with degree < N-1
- p, q are 2 public prime numbers.
we find inverse if
The private keys =>
The public keys =>
Go to NTRU's Wikipedia Page for more Note.
TBC