Teori Dasar dan Algoritma RSA
Algoritma kriptografi RSA ditemukan oleh tiga orang yang kemudian nama-nama mereka
disingkat menjadi RSA. Ketiga penemu itu adalah Ron Riverst, Adi Shamir, dan Leonard
Adleman. RSA dibuat di MIT pada tahun 1977 dan dip atenkan oleh MIT (Massachussets
Institute of Technology) pada tahun 1983. Sejak 21 September 2000, paten tersebut berakhir,
sehingga saat ini semua orang dapatmenggunakannya dengan bebas (Brian, 2000).
RSA merupakan algoritma kriptografi asimetris yang paling mudah untuk
diimplementasikan dan dimengerti. (Ariyus,2008) Algoritma kriptografi RSA merupakan
algoritma yang termasuk dalam kategori algoritma asimetri atau algoritma kunci publik.
Algoritma kriptografi RSA Universitas Sumatera Utara 15 didesain sesuai fungsinya sehingga
kunci yang digunakan untuk enkripsi berbeda dari kunci yang digunakan untuk dekripsi.
Algoritma RSA disebut kunci publik karena kunci enkripsi dapat dibuat publik yang
berarti semua orang boleh mengetahuinya, namun hanya orang tertentu (si penerima pesan
sekaligus pemilik kunci dekripsi yang merupakan pasangan kunci publik) yang dapat melakukan
dekripsi terhadap pesan tersebut. Keamanan algoritma RSA didasarkan pada sulitnya
memfaktorkan bilangan besar menjadi faktor-faktor primanya (Sulistyanto, 2004).
Secara umum ada beberapa besaran-besaran yang harus diperhatikan dalam algoritma RSA,
yaitu:
p dan q adalah bilangan prima
(rahasia)
n = p.q
(tidak rahasia)
φ
(n) = (p-1)(q-1)
(rahasia)
e (kunci enkripsi)
(tidak rahasia)
d (kunci dekripsi)
(rahasia)
m (plaintext)
(tidak rahasia)
c (chipertext)
(rahasia)
Konsep Dasar Perhitungan Matematis
Dalam setiap proses pada algoritma RSA terdapat perhitungan matematis. Pada proses
pembangkitan kunci dibutuhkan perhitungan untuk menentukan nilai Totient n dan perhitungan
dengan algoritma Euclidean untuk menentukan nilai dua buah bilangan yang relatif prima.
Sedangkan pada proses enkripsi dan dekripsi dilakukan perhitungan menggunakan metode Fast
Exponentiation.
Menghitung FPB menggunakan algoritma Euclidean
A = 80
B = 12
80 = 6 * 12 + 8
12 = 1 * 8 + 4
8 = 1 * 4 + 0
Langkah-langkah mencari gcd(80,12) dengan algoritma Euclidean yaitu :
1. 80 dibagi 12 = 6, sisa 8 ( atau 80 = 6 * 12 + 8 )
2. 12 dibagi 8 = 1, sisa 4 ( atau 12 = 1 * 8 + 4 )
3. 8 dibagi 4 = 2, sisa 0 (atau 8 = 2 * 4 + 0)
Pembagian terakhir menghasilkan 0, maka sisa pembagian terakhir sebelum 0, yaitu 4. Jadi gcd
(80,12) = 4
Algorimakriptografi
RSA
terdiridarialgoritmaenkripsi
RSA
danalgoritmadekripsi RSA. Algoritma RSA adalahsebagaiberikut :
Pembangkitan sepasang kunci
o
Pilih dua bilangan prima sembarang,
p
dan
q
o
Hitung
n
=
p
×
q
o
Hitung
(
n
) = (
p
– 1)(
q
– 1)
o
Pilih kunci public
e
, yang relative prima terhadap ϕ(n).
o
Bangkitkan kunci privat dengan rumus :
e
d
1 (mod
(n))
atau
d
=
1
+(
k
×
φ
(
n
))
e
dengan k = 1,2,3,4,5 …
n
Hasil dari algoritma diatas adalah
1. Kunci
public
(e,n)
2. Kunci
private
(d,n)
o
Ambil kunci
public
(e dan n).
o
Pecah plainteks menjadi blok-blok m
1, m
2, m
3…, sehingga setiap blok
merepresentasikan nilai di dalam selang [0, n-1].
o
Setiap blok m
idi enkripsi menjadi blok c
idengan rumus
c
i= m
iemod n
e
=kunci publik
Deskripsi
o
Gunakankunci
private
(d dan n)
o
Untukmendapatkanplaintekskembali,
blokcipherteks
ci
didekripsimenjadiblok m
idenganrumus
m
i= c
idmod n
d
=kunci private
Contoh :
Karakter :TAMAN
Penyelesaian :
Yang dilakukan untuk mendapatkan Public key dan privat key :
Pilih 2 bilangan prima
p dan q, misalnya 13 dan17
Cari
n = p*q = 13 * 17 = 221
Hitung ø(
n)=(p-1)(q-1)
= (13-1)(17-1)= 192
Pilih
e yang relatif prima terhadap ø(n) = 192 maksudnya pilih angka prima
sampai batasakhirnya 192
2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59
61 67 71 73 79 83 89 97 10 1
10 3
10 7
10 9
11 3
12 7
13 1
13 7
13 9 14
9 15 1
15 7
16 3
16 7
17 3
17 9
18 1
Dengan Tabel bilangan prima dari 0–192kitacari GCD
Gcd(2,192)=2 Gcd(3,192)=3 Gcd(5,192)=1 Gcd(7,192)=1
Gcd(11,192)=1 Gcd(13,192)=1 Gcd(17,192)=1 Gcd(19,192)=1
Gcd(23,192)=1 Gcd(29,192)=1 Gcd(31,192)=1 Gcd(37,192)=1
Gcd(41,192)=1 Gcd(43,192)=1 Gcd(47,192)=1 Gcd(53,192)=1
Gcd(59,192)=1 Gcd(61,192)=1 Gcd(67,192)=1 Gcd(71,192)=1
Gcd(73,192)=1 Gcd(79,192)=1 Gcd(83,192)=1 Gcd(89,192)=1
Gcd(97,192)=1 Gcd(101,192)=1 Gcd(103,192)=1 Gcd(107,192)=1
Gcd(109,192)=1 Gcd(113,192)=1 Gcd(127,192)=1 Gcd(131,192)=1
Gcd(137,192)=1 Gcd(139,192)=1 Gcd(149,192)=1 Gcd(151,192)=1
Gcd(157,192)=1 Gcd(163,192)=1 Gcd(167,192)=1 Gcd(173,192)=1
Gcd(179,192)=1 Gcd(181,192)=1 Gcd(191,192)=1
Cara mencari gcd menggunakan algoritma Euclidean :
192 = 96 *2 + 0 192 = 64*3+0
192 = 38*5+2 5 = 2*2+1 2 = 2*1+0
192 = 17*11+5 11 = 2*5+1
5 = 5*1+0
192 = 14*13+10 13 = 1*10+3
10 = 3*3+1 3 =3*1+0
192 = 11*17+5 17 = 3*5+2
5 = 2*2+1 2 =2*1+0
192 = 14*19+10 13 = 1*10+3
10 = 3*3+1 3 =3*1+0
192 = 8*23+8 23 = 2*8+7
8 = 1*7+1 1=1*1+0
192 = 6*29+18 29 = 1*18+11
18 = 1*11+7 11 =1*7+4
7 = 1*4+3 4 = 1*3+1 1 = 1*1+0
192 = 6*31+6 31 = 5*6+1
6 = 6*1+0
192 = 5*37+7 37 = 5*7+2
7 = 3*2+1 2 = 2*1+0
192 = 4*41+28 41 = 1*28+13
28 = 2*13+2 13 = 6*2+1
2 = 2*1+0
192 = 4*43+20 43 = 2*20+3
20 = 6*3+2 3 = 1*2+1 2 = 2*1+0
192 = 4*47+4 47 = 11*4+3
4 = 1*3+1 3 =3*1+0
192 = 3*53+33 53 = 1*33+20 33 = 1*20+13 20 =1*13+7
13 = 1*7+6 7 = 1*6+1 6 = 6*1+0
192 = 3*59+15 59 = 3*15+14
15 = 1*14+1 14 = 14*1+0
192 = 3*61+9 61 = 6*9+7
9 = 1*7+2 7 = 3*2+1 2 = 2*1+0
192 = 2*67+58 67 = 1*58+9
58 = 6*9+4 9 = 2*4+1 1 = 1*1+0
192 = 3*61+9 61 = 6*9+7
9 = 1*7+2 7 = 3*2+1 2 = 2*1+0 192 = 2*73+46
73 = 1*46+27 46 = 1*27+19 27 = 1*19+8
19 = 2*8+3 8 = 2*3+2 3 = 1*2+1 2 = 2*1+0
192 = 2*79+34 79 = 2*34+11
34 = 3*11+1 11 = 11*1+0
192 = 2*83+26 83 = 3*26+5
26 = 5*5+1 5 = 5*1+0
192 = 2*89+14 89 = 6*14+5
14 = 2*5+4 5 = 1*4+1 4 = 4*1+0
192 = 1*97+95 97 = 1*95+2 95 = 47*2+1 2 = 2*1+0
192 = 1*101+91 101 = 1*91+10
91 = 9*10+1 10 = 10*1+0
192 = 1*103+89 103 = 1*89+14
89 = 6*14+5 14 = 2*5+4
5 = 1*4+1 4 = 4*1+0
192 = 1*107+85 107 = 1*85+22
85 = 3*22+19 22 = 1*19+3
19 = 6*3+1 3 = 3*1+0 192 = 1*107+85
107 = 1*85+22 85 = 3*22+19
22 = 1*19+3
192 = 1*113+79 113 = 1*79+34
79 = 2*34+11 34 = 3*11+1
192 = 1*127+65 127 = 1*65+62
65 = 1*62+3 62 = 20*3+2
192 = 1*131+61 131 = 2*61+9
19 = 6*3+1
3 = 3*1+0 11 = 11*1+0
3 = 1*2+1 2 = 2*1+0
7 = 3*2+1 2 = 2*1+0 192 = 1*137+55
137 = 2*55+27 55 = 2*27+1 27 = 27*1+0
192 = 1*139+53 139 = 2*53+33
53 = 1*33+20 33 = 1*20+13 20 = 1*13+7
13 = 1*7+6 7 = 1*6+1 6 = 6*1+0
192 = 1*149+43 149 = 3*43+20
43 = 2*20+3 20 = 6*3+2
3 = 1*2+1 2 = 2*1+0
192 = 1*151+41 151 = 3*41+28
41 = 1*28+13 28 = 2*13+2
13 = 6*2+1 2 = 2*1+0
192 = 1*157+35 157 = 4*35+17
35 = 2*17+1 17 = 17*1+0
192 = 1*163+29 163 = 5*29+18
29 = 1*18+11 18 = 1*11+7
11 = 1*7+4 7 = 1*4+3 4 = 1*3+1 3 = 3*1+0
192 = 1*167+25 167 = 6*25+17
25 = 1*17+8 17 = 2*8+1
8 = 8*1+0
192 = 1*173+19 173 = 9*19+2
19 = 9*2+1 2 = 2*1+0
192 = 1*179+13 179 = 13*13+10
13 = 1*10+1 10 = 10*1+0
192 = 1*181+11 181 = 16*11+5
11 = 2*5+1 5 = 5*1+0
192 = 1*191+1 191 = 191*1+0
Dari hasil gcd diatas, sesuai dengan syarat
gcd(e,ø(n))=1,
maka kita memilih
gcd(5,192)=1 dengan nilai e=5.
Tentukannilai
d
,dihitungdenganrumus e*d mod
ø
(
n
)
= 1 atau
d
=
1
+(
k
×
ø
(
n
))
e
dengan mencoba memasukkan nilai k = 1,2,3,4,5,....
sampai diperoleh nilai d merupakan bilangan bulat.
Kami mencoba beberapa nilai k = 1, 2, 3 dan 4
k = 1
d
=
1
+(
k
×
ø
(
n
))
e
=
1
+(
1
∗
192
)
5
=
38
,
6
k = 2
d
=
1
+(
k
×
ø
(
n
))
e
=
1
+(
2
∗
192
)
k = 3
d
=
1
+(
k
×
ø
(
n
))
e
=
1
+(
3
∗
192
)
5
=
115
,
4
k = 4
d
=
1
+(
k
×
ø
(
n
))
e
=
1
+(
4
∗
192
)
5
=
153
,
8
Yang dilakukan untukmengenkripsi :
Didapatkuncipublik(e,n) adalah (5,221)dankunciprivate(d,n) adalah(77,221)
Selanjutnya kitamengenkripsi pesan tersebut menggunakan tabel ASCII
(
lampiran
):
T
a
m
a
n
84
97
109
97
110
Enkripsi berdasarkan tabel ASCII : 84 97 109 97 110
Nilai n = 221 sehingga selang blok-bloknya menjadi 0 sampain-1 = 220
Pecah chipper diatas menjadi blok-blok m
1, m
2, m
3... m
im
1 =84
m
2 =97
m
3 =109
m
4 =97
Enkripsikan setiap blok menggunakan rumus
c
i= m
iemod
n
dangunakankuncipublik(e,n) adalah (5,221)
C
1 =84
5mod 221 = 67
C
2 =97
5mod 221 = 54
C
3 =109
5mod 221 =96
C
4 =97
5mod 221 =54
C
5 =110
5mod 221 =145
Chippertext : 67549654145
Yang dilakukan untukmendekripsikan :
Chippertext : 67549654145
Ambilkuncikunciprivate(d,n) adalah(77,221)untukmendeskripsikan.
Selanjutnya tentukan selang dengan n = 221 maka selang menjadi [0 , n-1]
yaitu dari 0 sampai 220.
Diblok-blok menjadi
C
1 =67
C
4 =54
C
2 =54
C
5 =145
C
3 =96
Lalu
dekripsikan
menggunakan
m
i= c
idmod
n
denganmenggunakankunciprivate(d,n) adalah(77,221)
m
1 =67
77mod 221 = 84
m
3 =96
77mod 221 = 109
m
4 =54
77mod 221 = 97
m
5 =145
77mod 221 = 110
Untuk melihathasilnya kita dapat melihat tabel ASCII
84 97 109 97 110
T
a
m
a
n