• No results found

Implementation of the Number Theoretic Transform

N/A
N/A
Protected

Academic year: 2022

Share "Implementation of the Number Theoretic Transform"

Copied!
73
0
0

Laster.... (Se fulltekst nå)

Fulltekst

(1)

NTNU Norwegian University of Science and Technology Faculty of Information Technology and Electrical Engineering Department of Mathematical Sciences

Master ’s thesis

Anna Bakkebø

Implementation of the Number Theoretic Transform

for Faster Lattice-Based Cryptography

Master’s thesis in Natural Schience with Teacher Education Supervisor: Kristian Gjøsteen

December 2020

(2)
(3)

Anna Bakkebø

Implementation of the Number Theoretic Transform

for Faster Lattice-Based Cryptography

Master’s thesis in Natural Schience with Teacher Education Supervisor: Kristian Gjøsteen

December 2020

Norwegian University of Science and Technology

Faculty of Information Technology and Electrical Engineering Department of Mathematical Sciences

(4)
(5)

Acknowledgements

First of all I want to thank my supervisor Professor Kristian Gjøsteen. I have always had a feeling that you want to help me do the best I can. You have had a good mix between coming with suggestions on what I can do next, but also let me be in control of the thesis. I have also felt that you both care about my thesis, but also about me as a person.

Secondly I want to thank me good friend Elisabeth Enerhaug. You have been a great support for me this year, and to be able to talk about the process that it is to write a master thesis with you have been such a gift to me. You have also been a great source of joy to me this semester, and have made the semester into a semester that I am thankful for.

I would also like to thank my friends Anna Karina Kristianslund, Thomas Schjem and Endre Sørmo Rundsveen for giving me fun breaks from writing the thesis, and for being great friends during the course of my study. I would also like to thank Thale Lund Ness and Marthe Fjellberg for good conversations in the lunch breaks leading up to the due date. There are also many other friends outside of school, that I have not mentioned, that I am also so thankful for in the process of writing this thesis, thank you all. Finally I would also like to thank my family, Mom, Dad, Andreas and Sara Alida, for being supporters during the whole course of my study.

(6)

Abstract

This thesis is about implementation of the Number Theoretic Transform, NTT. NTT is an algorithm for multiplying polynomials faster, and through this paper we look at how it is able to do this, and to what extent it computes multiplication faster. Our motivation is to use this for faster lattice-based cryptography. In this paper we have implemented NTT for polynomials inRq=Zq[X]/hXN + 1i, and discovered that it does multiply faster, especially whenN gets bigger. We have looked at how it would affect the running time of NTRU, which uses multiplication of polynomials in the key generation, encryption and decryption. We have also looked at how it affects the running time of a commitment scheme that uses multiplication of a matrix times a vector where all the inputs are polynomials inRq. The result showed us that multiplication was much faster, both in NTRU and in the commitment scheme.

(7)

Contents

1 Introduction 1

2 Why NTT 2

2.1 Preliminaries . . . 2

2.1.1 Notation . . . 2

2.2 NTRU . . . 3

2.2.1 Key generation, encryption and decryption . . . 4

2.3 Multiplication of polynomials . . . 5

3 Number theoretic transform 7 3.1 Chinese remainders theorem . . . 7

3.1.1 The algorithm . . . 11

4 Running time 14 4.1 Multiplication overZq[X]/hf(X)i . . . 14

4.2 Multiplication using NTT . . . 15

4.3 Improvements . . . 16

4.3.1 Deliver polynomials in NTT version . . . 16

4.3.2 WhenN is a power of two . . . 17

5 Implementation of NTT 26 5.1 Choice of ring . . . 26

5.2 Setting of testing . . . 26

5.3 Forward NTT to factors of degree2 . . . 27

5.4 The code . . . 30

5.5 How fast was it . . . 31

6 Commitment scheme 34 6.1 Commitment schemes . . . 34

6.2 Hiding and binding . . . 35

6.3 The commitment scheme . . . 35

(8)

CONTENTS Masters thesis |MA3950

6.3.1 Key generation, commit and open . . . 36

6.4 Hiding and binding property . . . 38

6.4.1 Module-LWE . . . 38

6.4.2 Module-SIS . . . 39

6.5 Implementation . . . 40

6.5.1 Parameters used . . . 41

6.5.2 Code for the commit algorithm . . . 42

6.6 Results of implementation . . . 42

7 Conclusion 45

References 46

Appendices 47

A Normal multiplication 48

B NTT forward and inverse 50

C NTT multiplication 56

D Commit using normal multiplication 58

E Commit using NTT multiplication 61

(9)

Chapter 1

Introduction

Lattice-based cryptography is gaining more popularity nowadays, as it is believed to be resistant against quantum computers. Many of these lattice-based cryptosystems use multiplications of polynomials as part of encryption and decryption. Being able to compute these multiplications fast would help make these cryptosystems more efficient. In this paper we look at one method for multiplying polynomials faster, namely the Number Theoretic Transform, or NTT for short. We look at how it works, whether it is faster or not, in theory, and have also implemented it in c-code1and looked at the difference in runtime with NTT multiplication and normal multiplication.

We have specifically looked at how it is able to make the cryptosystem, NTRU, and a commitment scheme faster. Both NTRU and the commitment scheme use multiplication of polynomials inRq =Zq[X]/hXN + 1ias part of the arithmetic.

We have based our work with the Number Theoretic Transform, and NTRU, on the paper "NTTRU: Truly Fast NTRU Using NTT" by Vadim Lyubashecsky and Gregor Seiler (2019). The commitment scheme we have looked at is based on the paper

"More Efficient Commitments from Structured Lattice Assumptions" by Baum, Damgård, Lyubashevsky, Oechsner and Peikert (2016).

1Source code can be found at https://github.com/annabakkebo/Master_NTT.

(10)

Chapter 2

Why NTT

2.1 Preliminaries

2.1.1 Notation

Notation Description

f(X) Polynomial that is reducible to factors of small degree inZq[X].

In this thesis we usef(X) =XN + 1

Rq The ringZq[X]/hf(X)i.

q Prime numberqused as modulus in the ringRq

N The degree off(X). In this paper we wantN to be on the form N = 2k·afor somek, a∈Z

β2 Binomial distribution

Generatea0, a1, a2, a3 $

←− {0,1}

Outputa0+a1+a2+a3 mod ±3

β2N Generate polynomial inRqwhere the coefficients are generated as inβ2 mod ±q Function for modular reduction moduloqmapping onto

the space[−(q−1)/2,(q−1)/2]

Table 2.1: Notation

Definition 1: A public-key cryptosystem consist of three different algorithms; Key generation (K), encrypt (E) and decrypt (D).

• The key generation (K) does not take anything as input and outputs a secret keyskand a public keypk.

(11)

CHAPTER 2. WHY NTT Masters thesis |MA3950

• The encrypt algorithm takes in the messagemand the public keypk, and outputs the ciphertextc.

• The decrypt algorithm takes in the ciphertextcand the secret keysk, and outputs the messagem.

For a public-key cryptosystem to be valid we needD(E(m, pk), sk) =m, for any messagemand any pair of keys (sk,pk) output by the key generation.

2.2 NTRU

To give context to why we would want to look at the Number Theoretic Transform, we will look at a cryptosystem called NTRU. NTRU is a lattice-based public- key cryptosystem, which means that it is a public-key cryptosystem that uses lattice-based arithmetic in encryption and decryption. NTRU specifically uses multiplication of polynomials in the ringRq=Zq[X]/hf(X)i. The key generation produces a secret key,a, and a public key,h. The secret key is produced by:

1. first picking a polynomial who’s coefficients are in{−1,0,1}, 2. then multiplying this polynomial with a small prime,p,

3. and adding1. We add1to make it easier to retrieve the message in decryption.

This result is set to the secret key if it is invertible inRq. The public key,h, is the inverse of the secret key,a, multiplied by a small prime,p, and a polynomial with small coefficients. All of the coefficients in the secret key is at mostp, and the coefficients in the public key looks random.

Encryption looks like multiplying the public key with a randomness, and then adding the message. Decryption looks like multiplying the cipher text with the secret key.

(12)

CHAPTER 2. WHY NTT Masters thesis |MA3950

2.2.1 Key generation, encryption and decryption

Algorithm 1:Key generation

Output: Secret keya, Public keyh

1 a0 ←−$ β2N

2 a:=pa0+ 1

3 ifais not invertible inRqthen

4 Restart

5 g←−$ β2N

6 h:=pg/a

7 return(a, h)

Algorithm 2:Encryption

Input:Messagem, public keyh Output: Ciphertextc

1 r ←−$ β2N

2 c:=hr+m

3 returnc

Algorithm 3:Decryption

Input:Ciphertextc, Secret keya Output: Messagem

1 m:= (ca mod ±q) mod ±p

2 returnm

Theorem 1: Let key generation, encryption and decryption be as stated in Algo- rithm 7, 3 and 2. Letf(X) = XN + 1withN < (q−1)/4p. If we encrypt a messagemand decrypt the ciphertext produced by the encryption, we end up with m. (i.eD(E(m, h), a) =m).

Proof. Let the secret key and public key be as in the description of the key generation algorithm. The key generation algorithm will then return the secret keyaand the

(13)

CHAPTER 2. WHY NTT Masters thesis |MA3950

public keyh. Encrypting the message will returnc=hr+m. Decryption looks like multiplying the ciphertext with the secret keya mod ±q mod ±p.

D(c, a) = (c·a mod ±q) mod ±p

= ((hr+m)·a mod ±q) mod ±p

= ((pg/a·r+m)·a mod ±q) mod ±p

= (pgr+ma mod ±q) mod ±p

= ((pgr+m(pa0+ 1) mod ±q) mod ±p

= ((p(gr+ma0) +m) mod ±q) mod ±p For us to not have a decryption error we want

(p(gr+ma0) +m) mod ±q = (p(gr+ma0) +m)∈R (2.1) For this to be true we need|(p(gr+ma0) +m)| ≤(q−1)/2. The coefficients inm has absolute value less than or equal to1. This gives that we need|p(gr+ma0)|<

(q−1)/2. Which leads to|gr+ma0|<(q−1)/2p. We know that all coefficients ing,r,a0andmhave absolute value at most1. This leads to the coefficients ofgr andma0 are at mostN.

|gr+ma0| ≤2N <(q−1)/2p Which confirms that the Equation (2.1) holds.

D(c, a) = ((p(gr+ma0) +m) mod ±p

= m mod ±p

= m

2.3 Multiplication of polynomials

In the NTRU cryptosystem a crucial step of both encryption and decryption, is multiplication of polynomials. When decrypting we multiply the cipher text poly- nomial,c, which looks like a random polynomial of degree less thanN, with the secret key polynomial,a, of degree less thanN. Being able to do multiplications of

(14)

CHAPTER 2. WHY NTT Masters thesis |MA3950

polynomials fast overRqwill therefore be advantageous when computing NTRU fast.

(15)

Chapter 3

Number theoretic transform

3.1 Chinese remainders theorem

The Number Theoretic Transform is heavily based on the Chinese Remainders Theorem. Let{m1, m2, ..., mk}be pairwise coprime integers such thatQk

i=1mi = M. Then the system of equations

x=a1 mod m1 x=a2 mod m2

. . .

x=ak mod mk

has a unique x ∈ ZM that solves the equations. This version of the Chinese Remainders Theorem is related to coprime integers. We will look more specifically on this theorem in relation to polynomial rings that we will use for our Number Theoretic Transform.

Theorem 2: Letf(X)∈Zq[X]be so thatf(X) =Qk

i=1fi(X)wherehfi(X)i+ hfj(X)i = Zq[X] ∀i 6= j ∈ {1, ..., k} (i.e. fi(X) and fj(X) are coprime, relatively prime, for alli6=j). Then

Zq[X]/hf(X)i ∼=

k

Y

i=1

Zq[X]/hfi(X)i

Proof. We will give a proof by induction. First we check that the base case holds.

Ifk= 1we have:

f(X) =f1(X)

(16)

CHAPTER 3. NTT Masters thesis |MA3950

BecauseZq[X]/hf(X)i=Zq[X]/hf1(X)iwe definitely have thatZq[X]/hf(X)i ∼= Zq[X]/hf1(X)i. So the Theorem holds fork= 1.

We will now assume that it holds fork=nand want to show that it will then hold fork=n+ 1. Our assumption is:

1. f(X) =Qn+1 i=1 fi(X)

2. hfi(X)i+hfj(X)i=Zq[X] ∀i6=j ∈ {1,2, ..., n+ 1}

3. Zq[X]/hQn

i=1fi(X)i ∼=Qn

i=1Zq[X]/hfi(X)i What we want to show is that this leads toZq[X]/hQn+1

i=1 fi(X)i ∼=Qn+1

i=1 Zq[X]/hfi(X)i.

If we can show that Zq[X]/h

n+1

Y

i=1

fi(X)i ∼=Zq[X]/hfn+1(X)i ×Zq[X]/h

n

Y

i=1

fi(X)i (3.1) we have by assumption 3 that

Zq[X]/h

n+1

Y

i=1

fi(X)i ∼=

n+1

Y

i=1

Zq[X]/hfi(X)i

First we start by defining a ring homomorphism:

h:Zq[X]/hf(X)i −→ Zq[X]/hfn+1(X)i ×Zq[X]/hQn

i=1fi(X)i p(X) +hf(X)i 7→ (p(X) +hfn+1(X)i, p(X) +hQn

i=1fi(X)i) InZq[X]/hfn+1(X)i ×Zq[X]/hQn

i=1fi(X)iwe have component wise multipli- cation and addition. First we check that it is a ring homomorphism. For allp,sin Zq[X]/hf(X)iwe have the following properties:

1. h(p) +h(s) = (p+hfn+1(X)i, p+hQn

i=1fi(X)i) + (s+hfn+1(X)i, s+hQn

i=1fi(X)i)

= (p+s+hfn+1(X)i, p+s+hQn

i=1fi(X)i)

= h(p+s)

⇒h(p+s) =h(p) +h(s)

(17)

CHAPTER 3. NTT Masters thesis |MA3950

2. h(p)h(s) = (p+hfn+1(X)i, p+hQn

i=1fi(X)i)·(s+hfn+1(X)i, s+hQn

i=1fi(X)i)

= (ps+hfn+1(X)i, ps+hQn

i=1fi(X)i)

= h(ps)

⇒h(ps) =h(p)h(s)

3. h(1) = (1 +hfn+1(X)i,1 +hQn

i=1fi(X)i)

⇒h(1Zq[X]/hf(X)i) = 1Zq[X]/hfn+1(X)i×Zq[X]/hQn i=1fi(X)i

This shows that it is a ring homomorphism. We would now like to prove that this is an isomorphism. The Fundamental Theorem of Isomorphisms (Bhattacharya, Jain,

& Nagpaul, 1994, p. 190) states that the image of a homomorphism,φfromR, is isomorphic toRmodulus the kernel. In our instance the image ofhis isomorphic toZq[X]/hQn

i=1fi(X)imodulus the kernel ofh.

Imh∼= (Zq[X]/h

n

Y

i=1

fi(X)i)/kerh

To show thathis an isomorphism we want the kernal ofhto beh0iand the image to beZq[X]/hfn+1(X)i ×Zq[X]/hQn

i=1fi(X)i.

First we start by showing that the image ofhisZq[X]/hfn+1(X)i×Zq[X]/hQn

i=1fi(X)i.

To do this we want to show

∀(p, s)∈Zq[X]/hfn+1(X)i ×Zq[X]/h

n

Y

i=1

fi(X)i

∃t∈Zq[X]/hf(X)i, such thath(t) = (p, s)

By assumption we have hfn+1(X)i+hfi(X)i = Zq[X] for all i ∈ {1, ..., n}.

We therefore have that there exist anai ∈ fn+1(X) and abi ∈ fi(X)such that ai+bi = 1. This leads to

1 =

n

Y

i=1

(ai+bi) whereai ∈ hfn+1(X)iandbi ∈ hfi(X)i (3.2)

=a1a2...an+a1a2a3...bn+...+a1...bi...an+...

| {z }

=a∈hfn+1i

+ b1b2...bn

| {z }

=b∈hQn

i=1fi(X)i

(3.3)

1 =a+b (3.4)

(18)

CHAPTER 3. NTT Masters thesis |MA3950

Now we can chooset=bp+as. We then have

h(bp+as) = (bp+as+hfn+1(X)i, bp+as+hQn

i=1fi(X)i)

= (bp+hfn+1(X)i, as+hQn

i=1fi(X)i)

= ((1−a)p+hfn+1(X)i,(1−b)s+hQn

i=1fi(X)i)

= (p+hfn+1(X)i, s+hQn

i=1fi(X)i) This holds for all(p, s)inZq[X]/hfn+1(X)i ×Zq[X]/hQn

i=1fi(X)i, and shows that the image ofhis in factZq[X]/hfn+1(X)i ×Zq[X]/hQn

i=1fi(X)i.

To finish the proof that it is an isomorphism, we want to show that the kernel to hish0i. The definition of the kernel is the elements inZq[X]/hf(X)ithat sends to(0,0). We have that if an element,p, sends to(0,0)thenp ∈ hfn+1(X)iand p ∈ hQn

i=1fi(X)i. This leads topbeing in the intersection, p ∈ hfn+1(X)i ∩ hQn

i=1fi(X)i.

By (3.4) we have that1 = a+b, wherea ∈ hfn+1(X)i andb ∈ hQn

i=1fi(X)i.

Using this we can rewritepto bep=pa+pb.

pa∈ h

n

Y

i=1

(f(X))·fn+1(X)i=hf(X)i

pb∈ hfn+1(X)·

n

Y

i=1

(f(X))i=hf(X)i

Which results inpbeing an element inhf(X)ias it is a sum of two elements in hf(X)i. Becausep is an element inhf(X)i, we have that p = 0 +hf(X)i in Zq[X]/hf(X)i. So the kernel ofhish0i.

We have now shown thathis an isomorphism. ShowingZq[X]/hQn+1

i=1 fi(X)i ∼= Zq[X]/hfn+1(X)i ×Zq[X]/hQn

i=1fi(X)i. By assumption 3 we have that this again is isomorphic toQn+1

i=1 Zq[X]/hfi(X)i. Proving that if the statement holds fork=n, it also holds fork=n+ 1, thus completing the proof.

(19)

CHAPTER 3. NTT Masters thesis |MA3950

3.1.1 The algorithm

The goal of the Number Theoretic Transform in this paper is to perform multipli- cation of polynomials fast overRq. The idea is to splitf(X)into coprime factors of small degree, and use the isomorphism that then exists because of Theorem 2.

Assumef(X) = Qk

i=1fi(X)where all the differentfi(X)are relatively prime.

The algorithm takes in two polynomialsa,binZq[X]/hf(X)iand computes the product. The steps are as follows:

1. Computeai ≡a mod fi(X)andbi ≡b mod fi(X)

Through this stepai andbiend up being polynomials of small degree.

2. Computeci≡aibi mod fi(X)

This goes fairly fast as bothaiandbiare polynomials of small degree.

3. Use the inverse function of the isomorphism to computec mod f(X)from all the(c1, c2, ...cn)

To see how the Number Theoretic Transform works we will give an example.

Example 1: For the arithmetic to be simple, we will work on the ringZ5[X]/hX2+ 1i. InZ5[X]we haveX2+1 = (X−2)(X−3)andh(X−2)i+h(X−3)i=Z5[X].

In bothZ5[X]/hX2+1iand inZ5[X]/hX−2iandZ5[X]/hX−3ithe computations are fairly simple.

WhenZ5[X]/hX2+1iwe have thataX2 ≡ −a mod (X2+1). InZ5[X]/hX−3i we have aX ≡ 3a mod (X −3), and in Z5[X]/hX −2i we have aX ≡ 2a mod (X−2).

First we define the isomorphism and it’s inverse:

h:Z5[X]/hx2+ 1i −→ Z5[X]/hX−2i ×Z5[X]/hX−3i p(X) +hf(X)i 7→ (p(X) +hX−2i, p(X) +hX−3i) a(X)(3−X) +b(X)(X−2) ←[ (a(X) +hX−2i, b(X) +hX−3i)

(20)

CHAPTER 3. NTT Masters thesis |MA3950

In the ringZ5[X]/hX2 + 1i all polynomials are on the form a0 +a1X where a0, a1 ∈Z5. We will use the steps in the number theoretic transform to compute the multiplication of two polynomials. We will also compute the multiplication directly inZ5[X]/hX2+ 1ito check that NTT indeed computes the multiplication correctly.

First we pick two random polynomialsa(X)andb(X)inZ5[X]/hX2+ 1i. Which will be on the forma(X) =a0+a1Xandb(X) =b0+b1X. We then go through the steps of NTT:

1. a0+a1X ≡a0+ 2a1 mod (X−2) a0+a1X ≡a0+ 3a1 mod (X−3) b0+b1X≡b0+ 2b1 mod (X−2) b0+b1X≡b0+ 3b1 mod (X−3)

2. (a0+ 2a1)·(b0+ 2b1) =a0b0+ 2(a0b1+a1b0) + 4a1b1

(a0+ 3a1)·(b0+ 3b1) =a0b0+ 3(a0b1+a1b0) + 9a1b1

≡a0b0+ 3(a0b1+a1b0) + 4a1b1

3. h−1(a0b0+ 2(a0b1+a1b0) + 4a1b1, a0b0+ 3(a0b1+a1b0) + 4a1b1)

=(3−X)(a0b0+ 2(a0b1+a1b0) + 4a1b1) + (X−2)(a0b0+ 3(a0b1+a1b0) + 4a1b1)

=3(a0b0+

((2(a0((b1+((a1b(0) + 4a1b1)−X(

a0b0+ 2(a0b1+a1b0) +4a1b1)

−2(a0b0+

((3(a0((b1+((a1b(0) + 4a1b1) +X(

a0b0+ 3(a0b1+a1b0) +4a1b1)

=a0b0+ 4a1b1+ (a0b1+a1b0)X

To see that it indeed isa(X)b(X), we will compute it directly overZ5[X]/hX2+ 1i as well:

(a0+a1X)(b0+b1X) =a0b0+a0b1X+a1b0X+a1b1X2

≡a0b0−a1b1+a0b1X+a1b0X

≡a0b0+ 4a1b1+ (a0b1+a1b0)X

(21)

CHAPTER 3. NTT Masters thesis |MA3950

This result is the same as when we multiplied using NTT.

(22)

Chapter 4

Running time

We have now seen that the NTT algorithm works. It computes the multiplication of two polynomials correctly. Now we will look at how fast it computes the multiplication, and whether there is reason to believe it is faster or not. First we will look at how fast just normal multiplication is, and then how fast multiplication using the NTT algorithm is.

4.1 Multiplication over Z

q

[X ]/hf (X )i

Letf(X) =PN

k=0fkXk. Polynomials inZq[X]/hf(X)iare then polynomials of degree less than or equal toN −1, where we have the relation

XN =−

N−1

X

k=0

fkXk (4.1)

Normal, not NTT, multiplication of two polynomialsa(X)andb(X)inZq[X]/hf(X)i can be divided into two steps. First multiplying inZq[X], and then using the relation (4.1) so that the result ends up having degree less thanN. Multiplication ofa(X) andb(X)inZq[X]/hf(X)iis computed like this

a(X)·b(X) =

N−1

X

k=0 N−1

X

j=0

akbjXk+j

The number of multiplications performed in this step isN2. Then we use the relation (4.1) so that the result have degree less thanN. The number of multiplications here is dependent on this relation. In the case wheref(X) =XN+ 1, which we will use in this paper, this step does not use any additional multiplication, only additional subtractions. For the general case of multiplication, without a specific modulus

(23)

CHAPTER 4. RUNNING TIME Masters thesis |MA3950

polynomialf(X), we can look at multiplication inZq[X]/hf(X)ias usingO(N2) multiplications.

4.2 Multiplication using NTT

Letf(X) =Qn

i=0fi(X). We want to determine how many multiplications that are performed when multiplying two polynomialsaandbinZq[X]/hf(X)i. Multipli- cation using NTT is divided into three steps.

1. Computeai ≡a mod fi(X)andbi ≡b mod fi(X) 2. Computeci≡aibi mod fi(X)

3. Use the inverse function of the isomorphism to computec mod f(X)from all the(c1, c2, ...cn)

To see the running time of the whole NTT process we can look at the three steps and then add the running time of each step together. When we now describe the running time we compare the polynomials to a vector. Here the vector corresponding to the polynomial,a(X), are a vector of lengthdega(X), where the inputs in the vector are the coefficients in the polynomial.

The first step of NTT is a reduction modulo all the fi(X). This reduction is linear, and can be compared to using adegfi(X)·degf(X)matrix multiplied by the vector corresponding to each of the polynomialsaandb. For each of the polynomials we then end up withO(degfi(X)·degf(X))multiplications for each of thefi(X). This will be performed for all the differentfi(X), so we get O(Pn

i=1degf(X)·degfi(X))multiplications. This step is performed on both polynomials, so all together this step costs O(2·Pn

i=1degf(X)·degfi(X)) multiplications.

(24)

CHAPTER 4. RUNNING TIME Masters thesis |MA3950

Step 2 of the NTT algorithm multiplies each of thennew polynomials. For each of the polynomials the amount of multiplications areO((degfi(X))2). All together this step hasO(Pn

i=1(degfi(X))2)multiplications.

The last step uses the inverse function. This step is very similar to the first step just the other way around. Where the first step can be compared to adegfi(X)· degf(X)matrix multiplied with the vector corresponding to the two polynomials, for each of thei∈ {1, ..., n}. This step can be compared to adegf(X)·degfi(X) matrix multiplied with each of theci. So the amount of multiplications performed in this step will beO(Pn

i=1degfi(X)·degf(X)).

The number of multiplications performed all together is thenO(3·Pn

i=1degfi(X)·

degf(X) +Pn

i=1(degfi(X))2). The general case of multiplying, stated in Sec- tion 4.1, usesO((degf(X))2)multiplications. We have thatPn

i=1degfi(X) = degf(X). So the number of multiplications performed in the NTT version is

O(3·degf(X)·degf(X) +

n

X

i=1

(degfi(X))2) =O((degf(X))2)

which is the same as just normal multiplication. All of these estimates are not very specific or accurate, but give us an idea that the general case of NTT is not necessarily much faster than just normal multiplication. As seen in this section, the most costly part of the NTT algorithm is the first and last step, the forward and inverse NTT. So in order for NTT to be advantageous, we need the first and last step to be more efficient. We will therefore now look at some improvements that can help make the NTT algorithm faster.

4.3 Improvements

4.3.1 Deliver polynomials in NTT version

The most costly part of the general case of NTT is the forward and invers NTT, first and last step. Computing the multiplication in NTT version is not as costly. One

(25)

CHAPTER 4. RUNNING TIME Masters thesis |MA3950

improvement that can be done to the NTT algorithm, when implementing it to the NTRU cryptosystem, is to send the polynomials in NTT version. When computing the secret and public key in Algorithm 7, we can send it in NTT version. The same can be done when sending the ciphertext after decrypting the message in Algorithm 2.

4.3.2 WhenN is a power of two

WhenN is a power of two we can use a trick in the forward and inverse NTT. We will now look at this. First we need a definition.

Definition 2: Letnbe a positive integer. An elementωis a primitiven-th root of unity ifωn= 1andωk 6= 1fork < n.

Forward NTT

Zq[X]/hXN −ω2i

Zq[X]/hXN/2−ωi Zq[X]/hXN/2+ωi Figure 4.1: NTT first splitting

A modification of the forward NTT is dividing it into different levels and per- forming a divide and conquer algorithm. Instead of performing forward NTT into polynomials of low degree in one step, we can split it into different levels.

Assume there exist an elementω ∈ Zq that is a primitive4-th root of unity, i.e.

ω4= 1andωk6= 0whenk <4. From this we know thatω2 is the primitive2-nd root of unity, i.e.ω2 =−1. We can then rewrite our ring using our primitive4-th root of unity,ω,Zq[X]/hXN + 1i=Zq[X]/hXN −ω2i. By Theorem 2 we have Zq[X]/hXN −ω2i ∼=Zq[X]/hXN/2−ωi ×Zq[X]/hXN/2+ωi.

(26)

CHAPTER 4. RUNNING TIME Masters thesis |MA3950

InZq[X]/hXN/2−ωiwe have the relationaXN/2 =ω·a, and inZq[X]/hXN/2+ ωiwe haveaXN/2 = −ω·a. When computing forward NTT of a polynomial, a(X) =PN−1

i=0 ai(X), this step looks like:

1. multiplying the second half of the coefficients withω

2. In Zq[X]/hXN/2 + ωi we subtract these coefficients to the first half of coefficients, inZq[X]/hXN/2−ωiwe add these coefficients to the first half of coefficients.

a(X) mod (X2r−1 −ω) = (a0+ωa2r−1) + (a1+ωa2r−1+1)X+...

+(a2r−1−1+ωa2r−1)X2r−1−1

a(X) mod (X2r−1 +ω) = (a0−ωa2r−1) + (a1−ωa2r−1+1)X+...

+(a2r−1−1−ωa2r−1X)2r−1−1

This step ends up with computingN/2multiplications,N/2subtractions andN/2 additions.

Example 2: Let our ring beZ17[X]/hX4+ 1i. InZ174is a primitive4-th root of of unity. We can then use this to perform the first splitting, as shown in Figure 4.2.

Z17[X]/hX4−42i

Z17[X]/hX2−4i Z17[X]/hX2+ 4i Figure 4.2: NTT using primitive4-th root of unity

Leta(X)∈Z17[X]/hX4+ 1i. First we multiply the second half of the coefficients with4.

a2·4, a3·4

(27)

CHAPTER 4. RUNNING TIME Masters thesis |MA3950

Then we subtract or add these to the first coefficients resulting in

a(X) mod (X2−4) = (a0+4a2) + (a1+4a3)X (4.2a) a(X) mod (X2+ 4) = (a0−4a2) + (a1−4a3)X (4.2b) All together performing N/2 = 2 multiplications, additions and subtractions (marked with red).

If we further have primitive8-th roots of unity,ω1, we can perform another level of splittings. ω12 would be a primitive 4-th root of unity, which would be used in the first level of splitting. The second level would use different powers of the primitive8-th root of unity, shown in Figure 4.3. Each of these two new splittings would performN/4multiplications, additions and subtractions. Since there are two splittings, the number of arithmetic performed in this level is2·N/4 =N/2 multiplications, additions and subtractions.

Z[X]/hXN −ω14i

Z[X]/hXN/2−ω21i Z[X]/hXN/212i

Z[X]/hXN/4−ω1i Z[X]/hXN/41i Z[X]/hXN/4−ω31i Z[X]/hXN/431i Figure 4.3: NTT with two levels of splittings

Example 3: We can continue on our previous example, Example 2. InZ17we have primitive8-th roots of unity. In this example we can use2, since22 = 4which is the primitive4-th root of unity used in the previous example. The first splitting is already computed, we will now perform the two splitting in the next level.

First we will compute the splitting marked with blue in Figure 4.4. First we will do the multiplication with2of the second half of the coefficients in the polynomial.

(a1+ 4a3)·2

(28)

CHAPTER 4. RUNNING TIME Masters thesis |MA3950

Z[X]/hX4−24i

Z[X]/hX2−22i Z[X]/hX2+ 22i

Z[X]/hX−2i Z[X]/hX+ 2i Z[X]/hX−23i Z[X]/hX+ 23i

Figure 4.4: NTT with two levels of splittings

Then we subtract or add these to the first half of the coefficients resulting in a(X) mod (X−2) = (a0+4a2)+(a1+4a3)·2 a(X) mod (X+ 2) = (a0+4a2)−(a1+4a3)·2

Then we use the same steps to perform the splitting marked with red in Figure 4.4.

(a1−4a3)·8

a(X) mod (X−8) = (a0−4a2)+(a1−4a3)·8 a(X) mod (X+ 8) = (a0−4a2)−(a1−4a3)·8

Both splittings performedN/4 = 1multiplication, addition and subtraction, to- gether resulting in2multiplication, addition and subtraction.

If we further would have primitive16-th roots of unity we could do an additional level of splittings. Each of the4new splittings would performN/8multiplications, additions and subtractions. All together resulting inN/2multiplications, additions and subtractions. If we would have primitive2N-th roots of unity, we could perform splittings into linear factors. For every level of splitting using this method, we would performN/2multiplications, additions and subtractions.

Multiplication in NTT version

The multiplication when the polynomials are in NTT version does not necessarily need to be any faster. We will therefore not write about any improvements of

(29)

CHAPTER 4. RUNNING TIME Masters thesis |MA3950

the multiplication, but will write more specifically how many multiplications and additions or subtractions that will be performed in the multiplication part of the NTT algorithm. Letkbe the number of levels we use in the forward NTT. The polynomials in NTT version are all over a ring on the formZq[X]/hXN/2k−ωli, whereωlare different powers of a primitive2k+1-th root of unity. Multiplication looks like normal multiplication inZq[X], and then using the relation

XN/2kl (4.3)

Multiplying two polynomials, aand b in Zq[X]/hXN/2k −ωli looks like first multiplying all of the coefficients:

a·b=

N/2k−1

X

i=0

N/2k−1

X

j=0

aibjXi+j (4.4)

This step performs(N/2k)2multiplications. Then we use the relation (4.3) so that the degree of the result is less thanN/2k.

aibjXi+jlaibjXi+j−N/2k, wheni+j≥N/2k

To see how many extra multiplications that are performed during the implementation of this relation, we need to know in how many instancesi+j ≥ N/2k. When i = 0, then i+j N/2k. When i > 0, then i+j ≥ N/2k in half of the instances. Resulting in((N/2k)2−N/2k)/2extra multiplications. The number of multiplications performed all together then ends up being(N/2k)2+ ((N/2k)2− N/2k)/2.

The number of additions performed in Equation (4.4) is(N/2k)2. When we use the relation, we do not necessarily add any extra additions or subtractions. When we are implementing this we can perform these two steps simultaneously, and therefore the addition or subtraction would just be performed in front of a different power ofX.

For instance assumea(X)·b(X) =c1X+c2X1+N/2k. Using the relation we would end up witha(X)·b(X) = (c1lc2)X. The addition is then just moved in front ofXinstead ofX1+N/2k. The number of additions or subtractions performed all together for each of the polynomials is(N/2k)2.

(30)

CHAPTER 4. RUNNING TIME Masters thesis |MA3950

All of the multiplications and additions will be performed for all the2kpolynomials.

So the number of multiplications performed for all polynomials will be N2/2k+N2/2k+1−N/2

The number of additions performed for all the polynomials will be N2/2k

Inverse NTT

When computing the inverse NTT, we also divide it into the same levels as in forward NTT, shown in Figure 4.1 and 4.3. To give a picture of how this works we need to define how a merging works.

First we define how NTT works when we have just one level of forward and inverse NTT. Letωbe the primitive4-th root of unity, and the splitting for forward NTT be as shown in Figure 4.1. Leta−ω∈Zq[X]/hXN/2−ωianda ∈Zq[X]/hXN/2+ωi.

Merging the two polynomials for inverse NTT looks like 1. Add the two polynomials

2. Subtract the two polynomials,a−a−ω and multiply by−ω−1, which is ωwhenωis primitive4-th root of unity. In the end we multiply byXN/2. (The multiplication byXN/2is just placing the result as the coefficients of the last half of the new polynomial, and does not count as a multiplication when computing the running time. )

All together we end up withN/2additions, subtractions and multiplications. This merging results with a superfluous factor of2. In the end we will therefore need to multiply by2−1.

Example 4: We will use the same polynomial as in Example 2, resulting with (4.2a) and (4.2b). That way we can observe that we actually end up with twice polynomial that we started the forward NTT with.

(31)

CHAPTER 4. RUNNING TIME Masters thesis |MA3950

First we add the two polynomials

((a0+4a2)+(a0−4a2)) + ((a1+4a3)+(a1−4a3))X= 2a0+ 2a1X Then we subtract the two polynomials

((a0−4a2)−(a0+4a2)) + ((a1−4a3)−(a1+4a3))X =−8a2−8a3X Then multiplying by−4−1= 4andX2

4·(−8)a2X2+ 4·(−8)a3X·X2 = 2a2X2+ 2a3X3

All together the result of this merging ends up being2a0+ 2a1X+ 2a2X2+ 2a3X3, which is twice the polynomial used in the forward NTT. To finish the merging we will then multiply by2−1 = 9

9·2a0+ 9·2a1X+ 9·2a2X2+ 9·2a3X3=a0+a1X+a2X2+a3X3 During this merging we have performedN/2 = 2 additions, subtractions and multiplications andN = 4multiplication for the finishing part.

If we have performed several levels of splittings in the forward NTT, we will also have several levels of mergings in the inverse NTT. In the instance where we have two levels of forward NTT using a primitive8-th root of unity, illustrated in Figure 4.3, we will then have two levels of mergings in the inverse NTT. Whenω1is the primitive8-th root of unity used in the splitting, we will multiply by−ω1−113 in the merging. The two mergings in the first level of inverse NTT would perform N/4additions, subtractions and multiplications. This would be performed for both mergings, resulting in a total ofN/2additions, subtractions and multiplications.

For every merging we would end up with a superfluous factor of2. In the end of inverse NTT we would therefore need to multiply by2−2.

Example 5: We will now use the same example as in Example 3. We compute the blue merging first. First we add the polynomials

((a0+4a2) + (a1+4a3)·2)+((a0+4a2)−(a1+4a3)·2) = 2·(a0+4a2)

(32)

CHAPTER 4. RUNNING TIME Masters thesis |MA3950

Then we subtract the polynomials

((a0+4a2)−(a1+4a3)·2)−((a0+4a2) + (a1+4a3)·2) =−4·(a0+4a2) Then multiply by−2−1= 23 = 8andX

8·(−4·(a0+4a2))X= 2·(a0+4a2)X

resulting in2·(a0+4a2) + 2·(a0+4a2)X which is twice (4.2a). This merging performed one addition, one subtraction and one multiplication. The merging marked with red in Figure 4.4 will similarly perform one addition, subtraction and multiplication, and end up being (4.2b) times two. All together this level will performN/2 = 2additions, subtractions and multiplication.

After the two mergings in the first level, we would perform the merging in the second level, which is shown in Example 4. The only difference is that we now start by merging two times (4.2a) and (4.2b), resulting in four times the polynomial in forward NTT. We will then have to multiply by2−2 = 13.

13·4a0+ 13·4a1X+ 13·4a2X2+ 13·4a3X3 =a0+a1X+a2X2+a3X3 We end up withN/2·2 = 4additions, subtractions and multiplications, plus an additionalN = 4multiplications to finish the inverse NTT.

If we performed three levels of splittings in forward NTT, we would then have three levels of mergings. The first level of merging would then be four mergings that all useN/8additions, subtractions and multiplications, all together performing N/2 additions, subtractions and multiplications. The second and third level of merging would also performN/2additions, subtractions and multiplications. In the end we would get an additionalN multiplications to finish the inverse NTT. This would be similar if we would have several mergings. Each level would perform N/2additions, subtractions and multiplications, and in the end we would need an additionalN multiplications to finish the inverse NTT.

(33)

CHAPTER 4. RUNNING TIME Masters thesis |MA3950

Summary

The running time of multiplication with the NTT algorithm is dependent on the running time of NTT forward, multiplication in NTT version and inverse NTT.

Forward and inverse NTT is dependent on how many levels we perform the splitting and merging. Letkbe the number of levels of splitting and merging. The number of multiplications, additions and subtractions performed in the forward NTT algorithm would then beN/2·k, for each polynomial. The multiplication would beN2/2k+ N2/2k+1−N/2multiplications andN2/2kadditions or subtractions. The inverse NTT would performN/2·kmultiplications, additions and subtraction, plus an additionalN multiplications.

(34)

Chapter 5

Implementation of NTT

5.1 Choice of ring

When we have implemented the algorithm, we have implemented for several values ofqandN. In order to get a good impression of how much faster the NTT algorithm can be, compared to normal multiplication, we want to use a primeq such that q−1 = 2r·a, for somer ∈N. This is because inZqwe would then have primitive 2r-th roots of unity. We could then use one of these primitive2r-th roots of unity to performr−1levels of splittings (mergings) in the forward (inverse) NTT. In the results written about in this paper, we have used aqso thatq−1 = 212·3. When using thisq, we could see how much faster NTT could be asN got very large.

5.2 Setting of testing

The code1was tested on a2,3GHz8-Core Intel Core i9 processor. We chose to do the multiplication over random polynomials of lengthN. The code is tested on different sizes ofN so that we could see the difference in runtime asN got bigger. For all the differentN that were tested, we performed multiplication40 times over random polynomials, and divided the runtime by40. In that way we could get an estimate of runtime that were closer to what would be expected. We also implemented code for normal multiplication.

When testing the NTT version, we also multiplied the polynomials with normal multiplication. For every multiplication, we computed the runtime as well as

1Source code at https://github.com/annabakkebo/Master_NTT. We ran the main function from main.c from the branch "master".

(35)

CHAPTER 5. IMPLEMENTATION OF NTT Masters thesis |MA3950

checking that the result of the multiplication was the same using both NTT and normal multiplication. It was the same random polynomials that were tested in both the normal multiplication and the NTT multiplication.

5.3 Forward NTT to factors of degree 2

Theorem 3: Leta(X) andb(X) be random polynomials inZq[X]/hXN + 1i.

LetN = 2r. Using the NTT algorithm for multiplication, as described in section 4.3.2, multiplication would be most optimal if the polynomials at the lowest level are polynomials of degree2.

Proof. The number of multiplications, subtractions and additions performed all together are equal to:

• the number performed in NTT forward of both polynomials

• +the number of arithmetic performed when multiplying at the lowest level

• +the number of arithmetic performed at NTT inverse for the solution poly- nomial

We then want the sum of these to be as small as possible.

As stated in section 4.3.2 we can compute forward and inverse NTT using2r−1 multiplications and2radditions or subtractions at each level.

The number of multiplications at the lowest level is(deg(fi(X)))2+ (deg(f2i(X))2 times the number of polynomials at the lowest level if and only ifdeg(fi(X))>1.

Ifdeg(fi(X)) = 1, the number of multiplications at the lowest level isN.

Letkbe the number of levels performed. We then have the relationdeg(fi(X)) =

deg(f(X) 2k

(36)

CHAPTER 5. IMPLEMENTATION OF NTT Masters thesis |MA3950

Forward NTT ends up being:

2·2r−1·k Multiplication will be

(2r−k)2+ ((2r−k)2−2r−k)/2)·2k= (2r−k+1+ 2r−k−1) ˙2r−1 Inverse NTT ends up being:

2r−1·k+ 2r Multiplications performed all together ends up being:

(3k+ 2r−k+1+ 2r−k+ 1)·2r−1

If k = r, i.e. we perform NTT into linear factors, we get that the number of multiplications performed all together is

(3r+ 4)·2r−1

Ifk=r−1, i.e. the polynomials at the lowest level has degree 2, we get that the number of multiplications performed all together is

(3r+ 4)2r−1

Which is the same number of multiplications as whenk=r. Ifk=r−2we get that the amount of multiplications performed all together is

(3r+ 7)2r−1

Ifk=r−3we get that the amount of multiplications performed all together is (3r+ 16)2r−1

We get the lowest number of multiplications ifk=rork=r−1.

The number of additions or subtractions are:

Forward NTT:

2·2·2r−1·k= 2·2r·k

(37)

CHAPTER 5. IMPLEMENTATION OF NTT Masters thesis |MA3950

Additions or subtractions at the lowest level:

(2r

2k)2·2k= 22r−k Inverse NTT:

2·2r−1·k= 2r·k

Additions or subtractions performed all together ends up being:

3k·2r·k+ 22r−k = (3k+ 2r−k)2r

If k = r, i.e. we perform NTT into linear factors, we get that the number of multiplications performed all together is

(3r+ 2r−r)2r = (3r+ 1)·2r

Ifk=r−1the number of additions or subtractions performed all together is (3r−3 + 2r−r+1)2r= (3r−1)2r

Ifk=r−2the number of additions or subtractions performed all together is (3r−6 + 2r−r+2)2r= (3r−2)2r

Ifk=r−3the number of additions or subtractions performed all together is (3r−9 + 23)2r= (3r−1)2r

Which is the same as whenk = r−1. Ifk =r−4the number of additions or subtractions performed all together is

(3r−12 + 24)2r= (3r+ 4)2r

We perform the lowest number of additions or subtractions ifk=r−2. So now we need to see how many multiplications and additions or subtractions are performed whenk=r−1andk=r−2to see at what level we perform the lowest number of multiplications, additions and subtractions. Whenk = r−1 the number of multiplications and additions or subtractions are:

(3r+ 4)2r−1+ (3r−1)2r= (9r+ 2)2r−1

(38)

CHAPTER 5. IMPLEMENTATION OF NTT Masters thesis |MA3950

Whenk=r−2the number of multiplications and additions or subtractions are:

(3r+ 7)2r−1+ (3r−2)2r= (9r+ 3)2r−1

Which gives that the lowest number of multiplications, additions and subtractions is whenk=r−1, i.e. the polynomials at the lowest level are2.

Theorem 3 gives us that the NTT algorithm is fastest when the degree at the lowest level is2. When we tested the code, we therefore decided that the polynomials at the lowest level were of degree2, if possible.

5.4 The code

We have implemented the multiplication in c-code. It is all posted on github and we have devided the method into different files. We have one file called params.h where we can change the variable for the prime modulus,q, and can change the different values forN through the functionvoid set_N(long power). Further we have a file called NTT.h and NTT.c which contains the function for forward and inverse NTT. These functions are also added in Appendix B. They take in pointers to the polynomials that we want to perform forward and inverse NTT on, and changes the polynomials so that they are in NTT version. The reason why we use pointers instead of the actual polynomials, is that in doing so we use less memory for these functions. We use precomputed roots of unity for forward and inverse NTT, which are precomputed through the functionvoid initiate(long power, long level). Thelong powerrefers to the power of 2 we wantN to be, and the long levelrefers to how many levels of NTT forward and inverse we want. In this function we also precompute what2−levelsis.

The functions for multiplications are all stored in the file multiplication.h and multiplication.c. The functions for normal multiplications is given in Appendix A.

The function takes in a pointer to the two polynomials that will be multiplied, and a

(39)

CHAPTER 5. IMPLEMENTATION OF NTT Masters thesis |MA3950

pointer to the polynomial where the result will be stored. The functions for NTT multiplication, given in Appendix C, takes in:

• pointer to the two polynomials in NTT version

• pointer to the polynomial where the result will be stored

• an array of the roots of unity that will be used in the multiplication

• the size of the polynomials in the lowest level

• how many polynomials there are at the lowest level

The function updates the polynomial where the result will be stored to be the product in NTT version.

5.5 How fast was it

When testing this code we have used the measurementclock_t, which is a mea- surement that counts the number of clock ticks elapsed since the program was launched. We have taken samples ofclock_tbefore and after each multiplication, and subtracted them to see how many clock ticks elapsed during the multiplications.

The numbers in Table 5.1 and in the plot in Figure 5.1 are both measured in clock ticks.

Figure 5.1 shows the running time, measured in clock ticks, of the NTT algorithm compared to normal multiplication. The plot is given as a logarithmic graph. This is so that we can get a better overview of how fast the two algorithm where. The x-axis shows the value ofN and the y-axis shows how long time was used to compute the multiplication. We can see that asN got bigger the runtime grew much more for the normal multiplication than the NTT multiplication.

The graph shows N from 23 = 8 to216 = 65 536. When N is 216 the NTT algorithm computes the multiplication roughly1 000times faster than the normal

(40)

CHAPTER 5. IMPLEMENTATION OF NTT Masters thesis |MA3950

N Normal multiplication NTT multiplication

23 ≈20.38 ≈20.26

24 ≈21.72 ≈21.17

25 ≈23.51 ≈22.30

26 ≈25.45 ≈23.43

27 ≈27.46 ≈24.48

28 ≈29.47 ≈25.58

29 ≈211.51 ≈26.66

210 ≈213.48 ≈27.78

211 ≈215.46 ≈28.95

212 ≈217.48 ≈210.08

213 ≈219.44 ≈211.09

214 ≈221.48 ≈212.30

215 ≈223.47 ≈213.70

216 ≈225.47 ≈215.22

Table 5.1: Running time using normal multiplication and NTT

multiplication. While whenN is23the NTT multiplication is not noticeably faster than normal multiplication. The graph and table just shows how there is a difference in running time asN grows. It is probably not preferred to have anN as high as 216= 65 536. The normal multiplications would then spend roughly1.5minutes, while the NTT multiplication would still be under a second. The reason why we have decided to use anN that large in our testing, is that it gives a picture of how much faster the NTT multiplication is asN grows.

(41)

CHAPTER 5. IMPLEMENTATION OF NTT Masters thesis |MA3950

Figure 5.1: Plot for running time given in logarithmic values

Referanser

RELATERTE DOKUMENTER

The combined effect of these measures may well be a decline in jihadi activity in the short run, i.e., in the next two to five years. There are already signs that this is

The difference is illustrated in 4.23, and as we see, it is not that large. The effect of applying various wall treatments is of course most apparent in the proximity of the wall.

This report presented effects of cultural differences in individualism/collectivism, power distance, uncertainty avoidance, masculinity/femininity, and long term/short

3 The definition of total defence reads: “The modernised total defence concept encompasses mutual support and cooperation between the Norwegian Armed Forces and civil society in

As part of enhancing the EU’s role in both civilian and military crisis management operations, the EU therefore elaborated on the CMCO concept as an internal measure for

In April 2016, Ukraine’s President Petro Poroshenko, summing up the war experience thus far, said that the volunteer battalions had taken part in approximately 600 military

Based on the above-mentioned tensions, a recommendation for further research is to examine whether young people who have participated in the TP influence their parents and peers in

However, a shift in research and policy focus on the European Arctic from state security to human and regional security, as well as an increased attention towards non-military