• Tidak ada hasil yang ditemukan

TINJAUAN PUSTAKA

2.4. Algoritma NTRUEncrypt

NTRUEncrypt ditemukan oleh Jeffrey Hoffstein, Jill Pipher dan Joseph Silverman. Algoritma ini pertama kali diperkenalkan oleh Hoffstein pada CRYPTO’96 dan dipublikasikan pada tahun 1998. Algoritma ini telah dimodifikasi sejak pertama kali diperkenalkan, NTRU telah berganti nama menjadi NTRUEncrypt (Rosenberg, 2004).

Polynomial ring (ℤ/pZ)[x]/(xN-1), merupakan bagian penting dalam algoritma NTRUEncrypt, di mana modulo p akan mereduksi koefisien pada polinomial. Aritmetika pada polynomial ring yaitu penjumlahan, perkalian dan invers merupakan bagian penting dalam algoritma NTRUEncrypt. Ring ini memiliki irreducible polynomial XN-1. Karakter irreducible polynomial mirip dengan bilangan prima, yaitu tidak bisa difaktorkan ke dalam bentuk polinomial lain, tidak bisa habis dibagi kecuali dengan dirinya dan satu.

Contoh

Irreducible polynomial pada perkalian polynomial dengan N=3 pada ℤ/3ℤ[X]/(XN-1). a × b = (1 + 2x + 2x2) × ( 2x + x2)

= 2x + 5x2 + 6x3 + 2x4

Polynomial hasil perkalian terdapat 6x3 dan 2x4 (melebihi nilai N-1=3-1=2), maka diperlukan reduksi terhadap hasil perkalian. Irreducible polynomial adalah xN-1, maka xN-1 = 0, sehingga x3 = 1. 6x3 dan 2x4 akan direduksi menjadi:

6x3 = 6 × x3 = 6 × 1 = 6, dan 2x4 = 2x × x3 = 2x × 1 = 2x, Sehingga hasil a × b, menjadi: a × b = (1 + 2x + 2x2) × ( 2x + x2) = 2x + 5x2 + 6x3 + 2x4

= 2x + 5x2 + 6 + 2x = (6 + 4x + 5x2 ) mod 3 = x + 2x2

Ada empat parameter yang digunakan untuk membangkitkan kunci yaitu bilangan integer N, p, q dan df, dimana N dan p merupakan bilangan prima, gcd(p,q) = gcd(N,q) = 1.

N : dimensi dari polynomial yang digunakan (polinom akan memiliki derajat N–1), N merupakan bilangan prima.

p : small modulus, koefisien dari polynomial akan direduksi dengan modulo p, p adalah bilangan prima.

q : large modulus, koefisien dari polynomial akan direduksi dengan modulo q, q merupakan bilangan kelipatan 2.

df: nilai yang akan digunakan untuk membangkitkan polynomial f pada proses pembangkitan kunci privat.

Menyangkut masalah keamanan, NTRU Cryptosystems, Inc

merekomendasikan penggunaan parameter standar EES (Escrowed Encryption Standard) pada implementasi algoritma NTRUEncrypt sesuai dengan data pada tabel 2.1 berikut.

Tabel 2.1 Standar Parameter pada Algoritma NTRUEncrypt

Parameter set Security level N q p df

ees401ep1 112 401 211 3 113 ees541ep1 112 541 211 3 49 ees659ep1 112 659 211 3 38 ees449ep1 128 449 211 3 134 ees613ep1 128 613 211 3 55 ees761ep1 128 761 211 3 42 ees677ep1 192 677 211 3 157 ees887ep1 192 887 211 3 81 ees1087ep1 192 1087 211 3 63 ees1087ep2 256 1087 211 3 120 ees1171ep1 256 1171 211 3 106 ees1499ep1 256 1499 211 3 79

Parameter set merupakan nama parameternya. Escrowed Encryption Standard merupakan singkatan dari EES. Angka setelah ees pada ees401ep1, ees541ep1 dan yang lainnya menunjukkan derajat polynomial-nya atau nilai N. Ep2 digunakan jika terdapat dua parameter dengan N yang sama tetapi dengan tingkat keamanan yang lebih tinggi. Kolom security level merupakan tingkat keamanan kunci dalam satuan bit.

2.4.1. Pembangkitan Kunci

Algoritma NTRUEncrypt merupakan algorima kriptografi kunci publik atu algoritma asimetri, maka dibutuhkan dua kunci, yaitu kunci publik dan kunci privat. Pembangkitan kunci NTRUEncrypt antara lain:

1. Tentukan parameter N, p, q dan df. Tabel 1 dapat digunakan untuk menentukan parameter yang digunakan berdasarkan level keamanan yang bersesuaian.

2. Bangkitkan dua polinom kecil secara acak, yaitu f dan g dari ring (ℤ/pℤ)[x]/(xN-1). Isi dari polinom f dan g bersifat rahasia karena jika salah satunya diketahui oleh pihak lain, maka orang dapat mendekripsikan pesan. Metode yang dapat digunakan untuk membangkitkan polynomial acak f adalah dengan mendistribusikan secara acak nilai 1 sebanyak df, nilai -1 sebanyak df-1, selebihnya nilai 0 ke dalam koefisien polynomial. Polinomial g dapat dibangkitkan dengan cara yang sama menggunakan parameter dg yang dihasilkan dari nilai N/3. Polynomial g akan memiliki koefisien bernilai -1 dan 1 sebanyak dg, dan sisanya adalah 0.

3. Hitung invers dari f modulus p (fp) dan invers diri f modulus q (fq), f*fp = 1 (modulus p) dan f*fq = 1(modulus q). Tidak semua polynomial mempunyai invers. Jika ternyata nilai invers tidak ditemukan, maka harus dicari lagi nilai f yang lain.

4. hitung kunci publik (polinom H) dengan rumus H = (p × fq× g) mod q dan kunci privatnya adalah f.

Contoh:

Langkah-langkah menentukan kunci privat dan kunci publik pada NTRUEncrypt 1. Menentukan nilai N, p, q, df yaitu N=7, p=3, q=32, df =2.

2. Bangkitkan polinomial acak f pada ring (ℤ/3ℤ)[x]/(xN-1) yang mempunyai nilai df=4.

f = x - x2 + x3

3. Bangkitkan polynomial acak g pada ring (ℤ/3ℤ)[x]/(xN-1) yang mempunyai nilai df=2.

g = -1 + x2 - x3 + x4

4. Invers polynomial f modulo p (fp) dan f modulo q (fq) adalah:

Tabel 2.2 Nilai Invers f Modulo p (fp)

k A B Q R t1 t2 t Init x7 - 1 x3 - x2 + x - - 0 1 - 1 x7 - 1 x3 - x2 + x x4 + x3 + 2x + 2 x + 2 0 1 2x4 + 2x3 + x + 1 2 x3 - x2 + x x + 2 x2 + 1 1 1 2x4 + 2x3 + x + 1 x6 + x5 + x4 + 2x2 + 2x 3 x + 2 1 x + 2 0 2x4 + 2x3 + x + 1 x6 + x5 + x4 + 2x2 + 2x x7 - 1 4 1 0 - - x6 + x5 + x4 + 2x2 + 2x x7 - 1 -

Tabel 2.2 merupakan tabel untuk mencari nilai invers f modulo p (fp), dimana Q = (A : B) dan R = A mod B, sedangkan nilai t = t1 - (Q x t2). Nilai fp merupakan nilai t1 pada proses terakhir. Sedangkan, untuk mencari nilai invers f modulo q (fq), prosesnya sama dengan proses mencari fp. Nilai invers fp terdapat pada tabel 2.3

Tabel 2.3 Nilai Invers f Modulo q (fq) k A B Q R t1 t2 T Init x7 - 1 x3 - x2 + x - - 0 1 - 1 x7 - 1 x3 - x2 + x x4 + x3 + 31x + 31 x + 31 0 1 31x4 + 31x3 + x + 1 2 x3 + 31x2 + x x + 31 x2 + 1 1 1 31x4 + 31x3 + x + 1 x6 + x5 + x4 + 31x2 + 31x 3 x + 31 1 x + 31 0 31x4 + 31x3 + x + 1 x6 + x5 + x4 + 31x2 + 31x x7 - 1 4 1 0 - - x6 + x5 + x4 + 31x2 + 31x x7 - 1 -

Berdasarkan tabel 2.2 dan tabel 2.3, maka nilai fp = 2x + 2x2 + x4 + x5 + x6 dan nilai fq = 31x + 31x2 + x4 + x5 + x6

5. Kunci publik polinom H H = (p × fq× g) mod q

H = (3 × (31x + 31x2 + x4 + x5 + x6) × (-1 + x2 - x3 + x4)) mod 32 = 6x + 3x2 + 29x4 + 29x5 + 29x6

Maka diperoleh kunci privat f = x - x2 + x3, dan kunci publik H = 6x + 3x2 + 29x4 + 29x5 + 29x6.

2.4.2. Enkripsi Pesan

Setelah melakukan pembangkitan kunci, langkah selanjutnya adalah mengenkripsi pesan. proses enkripsi antara lain:

1. m merupakan plaintext yang diubah dalam bentuk polynomial pada ring (ℤ/pℤ)[X]/(XN-1). Polinom m akan memiliki koefisien pada range (-1, 0, 1).

2. Bangkitkan polinom kecil r secara acak pada ring (ℤ/pℤ)[X]/(XN-1). Polinom ini adalah blinding value yang berfungsi untuk menyamarkan pesan.

3. Enkripsi polynomial m dengan rumus berikut: e = (r × H + m) mod q

Polinom e adalah pesan terenkripsi yang akan dikirimkan.

Contoh:

Langkah-langkah mengenkripsi pesan string “d” dengan menggunakan kunci publik H = 6x + 3x2 + 29x4 + 29x5 + 29x6 adalah sebagai berikut:

1. Pesan string “d” diubah ke dalam bentuk polynomial m menjadi: m = - x + x2 - x3 - x5 - x6

Langkah-langkah mengubah string “d” menjadi polynomial: Nilai ASCII string “d” adalah 100

100 : 3 = 33 sisa bagi 1 33 : 3 = 11 sisa bagi 0 11 : 3 = 3 sisa bagi 2 3 : 3 = 1 sisa bagi 0

Maka dihasilkan array dengan m = [1 0 2 0 1], karena N = 7 maka nilai m = [1 0 2 0 1 0 0] koefisien polynomial m harus diantara -1,0,1 maka nilai m dikurangi 1, maka nilai m = [0 -1 1 -1 0 -1 -1]

Maka polynomial m = - x + x2 - x3 - x5 - x6 2. Bangkitkan polinom r sebagai blinding value:

r = 1 + x - x2

3. e merupakan polinom hasil enkripsi: e = (r × H + m) mod q

e = ((1 + x - x2) × (6x + 3x2 + 29x4 + 29x5 + 29x6) + (- x + x2– x3 - x5 - x6)) mod 32

= 8x + 10x2 + 28x3 + 26x4 + 25x5 + 28x6

Maka dihasilkan polynomial baru hasil enkripsi adalah 8x + 10x2 + 28x3 + 26x4 + 25x5 + 28x6.

2.4.3. Dekripsi Pesan

Langkah-langkah pada proses dekripsi adalah sebagai berikut:

1. Hitung nilai polinom a dengan rumus berikut: a = (f × e) mod q, dimana koefisien polinom a berada pada interval –q/2 dan q/2.

2. Hitung nilai polinom b dengan rumus berikut: b = a mod p, koefisien polinom b berada pada interval -1 dan 1.

3. Hitung nilai polinom c dengan rumus berikut: c = (fp × b) mod p, koefisien polinom b berada pada interval -1 dan 1.

Polinom c merupakan polinom hasil dekripsi pesan.

Contoh:

Langkah-langkah mendekripsi pesan e = 8x + 10x2 + 28x3 + 26x4 + 25x5 + 28x6 dengan nilai

f = x - x2 + x3

fp = 2x + 2x2 + x4 + x5 + x6 fq = 31x + 31x2 + x4 + x5 + x6

Proses dekripsi polinom e adalah sebagai berikut: 1. Polinom a = (f × e) mod q a = (f × e) mod q a = ((x - x2 + x3) × ( 8x + 10x2 + 28x3 + 26x4 + 25x5 + 28x6)) mod 32 = (-3 - 3x + 4x2 + 2x3 - 6x4 + 8x5 - 5x6 ) mod 32 2. Polinom b = a mod p b = a mod p b = (-3 - 3x + 4x2 - 2x3 - 6x4 + 8x5 - 5x6) mod 3 = (x2 - x3 - x5 + x6 ) mod 3 3. Polinom c = (fp × b) mod p c = (fp × b) mod p c = ((2x + 2x2 + x4 + x5 + x6) × (-x2 - x3 - x5 + x6)) mod 3 c = - x + x2– x3 - x5 - x6

Polinom m= - x + x2 - x3 + x5 - x6, maka array m = [0 -1 1 -1 0 -1 -1], untuk mengubah kembali dalam bilangan ASCII maka m ditambahkan dengan 1, maka nilai m = [1 0 2 0 1 0 0], m diubah kembali ke nilai ASCII

1  (1 x 3) + 0 = 3 0  (3 x 3) + 2 = 11 2  (11 x 3) + 0 = 33 0  (33 x 3) + 1 = 100 1  100

Maka dihasilkan nilai m = 100, 100 merupakan nilai ASCII dari string “d”.

Dokumen terkait