Anda di halaman 1dari 7

I.

Sejarah RSA
Algortima RSA dijabarkan pada tahun 1977 oleh tiga orang : Ron Rivest, Adi
Shamir dan Len Adleman dari Massachusetts Institute of Technology. Huruf RSA itu sendiri
berasal dari inisial nama mereka (RivestShamirAdleman).
Clifford Cocks, seorang matematikawan Inggris yang bekerja untuk GCHQ,
menjabarkan tentang sistem equivalen pada dokumen internal di tahun 1973. Penemuan
Clifford Cocks tidak terungkap hingga tahun 1997 karena alasan top-secret classification.
Algoritma tersebut dipatenkan oleh Massachusetts Institute of Technology pada
tahun 1983 di Amerika Serikat sebagai U.S. Patent 4.405.829. Paten tersebut berlaku
hingga 21 September 2000. Semenjak Algoritma RSA dipublikasikan sebagai aplikasi paten,
regulasi di sebagian besar negara-negara lain tidak memungkinkan penggunaan paten. Hal ini
menyebabkan hasil temuan Clifford Cocks di kenal secara umum, paten di Amerika Serikat
tidak dapat mematenkannya.

II. Pengertian RSA


RSA di bidang kriptografi adalah sebuah algoritma pada enkripsi public key. RSA
merupakan algoritma pertama yang cocok untuk digital signature seperti halnya ekripsi, dan
salah satu yang paling maju dalam bidang kriptografi public key. RSA masih digunakan
secara luas dalam protokol electronic commerce, dan dipercaya dalam mengamnkan dengan
menggunakan kunci yang cukup panjang.
Dari sekian banyak algoritma kriptografi kunci-publik yang pernah dibuat, algoritma
yang paling populer adalah algoritma RSA. Algoritma RSA dibuat oleh 3 orang peneliti dari
MIT (Massachussets Institute of Technology) pada tahun 1976, yaitu: Ron (R)ivest, Adi
(S)hamir, dan Leonard (A)dleman. Keamanan algoritma RSA terletak pada sulitnya
memfaktorkan bilangan yang besar menjadi faktor-faktor prima. Pemfaktoran dilakukan
untuk memperoleh kunci pribadi. Selama pemfaktoran bilangan besar menjadi faktor-faktor
prima belum ditemukan algoritma yang mangkus, maka selama itu pula keamanan algoritma
RSA tetap terjamin.
Besaran-besaran yang digunakan pada algoritma RSA:
1. p dan q bilangan prima
(rahasia)
2. r = p q
(tidak rahasia)
3. (r) = (p 1)(q 1)
(rahasia)
4. PK (kunci enkripsi)
(tidak rahasia)
5. SK (kunci dekripsi)
(rahasia)

6. X

(plainteks)

7. Y

(cipherteks)

(rahasia)
(tidak rahasia)

II.1

Teorema Fermat.
Jika p adalah bilangan prima dan m adalah bilangan bulat yang tidak habis dibagi
dengan p, yaitu FPB (a, p) = 1, maka
a p1 1 ( mod p )(1)

II.2

Fungsi Euler
Fungsi Euler

mendefinisikan

(r )

untuk r 1 menyatakan jumlah bilangan

bulat positif yang lebih kecil dari r dan relatif prima terhadap r. Dengan
memperhatikan Teorema Fermat dan definisi dari Fungsi Euler, dapat diturunkan
sebuah bentuk umum dari Teorema Fermat yaitu jika FPB(a, r) = 1, maka
(n)
a 1 ( mod r )(2)
II.3

Algoritma RSA
Algoritma ini diturunkan dari Fungsi Euler dan Teorema Fermat serta
memanfaatkan sifat-sifat dari aritmatika modulo. Berikut adalah proses penurunan
algoritma dimulai dari persamaan (2).
m
m
Berdasarkan sifat a b (mod r ) persamaan (2) dapat ditulis menjadi
a

m (r)

m
1 ( mod r ) (3)

Atau
am (r) 1 ( mod r ) ( 4)
Bila a diganti dengan X, maka persamaan (4) menjadi
Xm(r) 1 (mod r)
Berdasarkan sifat ac bc (mod r) jika a b (mod r), maka perkalian persamaan (4)
dengan X akan menghasilkan
X m ( r )+1 X ( mod r )(5)
Misalkan SK dan PK dipilih sedemikian sehingga
SK PK =m(r )+1(6)
Dengan mensubtitusikan persamaan (6) ke dalam persamaan (5) diperoleh
SK PK
X
X ( mod r)( 7)
yang artinya perpangkatan X dengan SK diikuti dengan perpangkatan dengan PK
dan dilakukan operasi modulo terhadap r akan menghasilkan X semula. Sehingga
enkripsi dan dekripsi dapat dirumuskan sebagai berikut
E PK ( X )=Y X PK mod r(8)

D SK ( Y )= X Y

SK

mod r(9)

Karena SK PK = PK SK, maka enkripsi diikuti dekripsi ekivalen dengan dekripsi


diikuti enkripsi
ESK ( DSK ( X ))=D SK ( EPK ( X )) X PK mod r(10)
Oleh karena

PK

PK

mod r ( X +mr ) mod r

untuk sembarang bilangan bulat m,

maka transformasi yang dihasilkan dapat bersifat banyak ke satu. Agar transformasi
dapat bersifat satu ke satu sehingga enkripsi dan dekripsi dapat berjalan sesuai
dengan persamaan (8) dan (9) maka X harus berada pada himpunan bilangan bulat
positif yang lebih kecil dari r.
II.4

Pembangkitan Pasangan Kunci


Secara umum pasangan kunci algoritma RSA dapat dibangkitkan dengan cara berikut:
1. Pilih dua buah bilangan prima sembarang, p dan q.
2. Hitung r = p q. Sebaiknya p q, sebab jika p = q maka r = p2 sehingga p dapat
diperoleh dengan menarik akar pangkat dua dari r.
3. Hitung (r) = (p 1)(q 1).
4. Pilih kunci publik, PK, yang relatif prima terhadap (r).
5. Bangkitkan kunci rahasia dengan menggunakan persamaan (6), yaitu SK PK 1
(mod (r)).

Contoh 1.
Misalkan p = 47 dan q = 71 (keduanya prima). Selanjutnya, hitung nilai
r = p q = 3337
dan
(r)= (p 1)(q 1) = 3220.
Pilih kunci publik SK = 79, karena 79 relatif prima dengan 3220. PK dan r dapat
dipublikasikan ke umum.
Selanjutnya akan dihitung kunci dekripsi SK seperti yang dituliskan pada langkah instruksi 5
dengan menggunakan persamaan (11),
1 ( m 3220)
SK
79
Dengan mencoba nilai-nilai m = 1, 2, 3, , diperoleh nilai SK yang bulat adalah 1019. Ini
adalah kunci dekripsi yang harus dirahasiakan.
III.

Pembangkit Bilangan Prima


Ada berbagai metode yang dapat digunakan untuk menghasilkan sebuah bilangan
prima. Untuk menghasilkan bilangan prima yang besar dengan menggunakan ruang memori
dan waktu. Secara umum pembangkitan bilangan prima dapat dikelompokkan menjadi dua,
yaitu dengan membangkitkan bilangan prima dari bilangan prima terkecil dengan pengujian

yang menghasilkan 100% bilangan prima atau dengan membangkitkan bilangan acak dan
menguji kemungkinan bilangan tersebut prima.

III.1

Alternatif Satu
Secara umum alternatif ini akan membangkitkan tabel bilangan prima sehingga
untuk mengambil sebuah bilangan prima cukup diambil satu dari beberapa bilangan yang
terdapat pada tabel. Pada alternatif ini, dapat digunakan beberapa metode yang memiliki
kelebihan dan kekurangan tersendiri.
Pertama, digunakan teknik yang akan membagi sebuah bilangan yang akan diuji
dengan semua bilangan bulat positif yang lebih kecil dari akar bilangan tersebut. Cara ini
dapat disebut brute force karena mencoba setiap kemungkinan yang ada yang tentunya
semakin besar nilai bilangan yang akan diuji maka semakin besar pula waktu yang
dibutuhkan untuk menguji dikarenakan semakin banyak bilangan bulat yang akan
digunakan sebagai pembagi. Namun cara ini dapat dibilang tidak memakan ruang
memori karena hanya membagi dengan bilangan bulat positif yang lebih kecil dari akar
bilangan tersebut.
Cara kedua tidak jauh dengan cara pertama namun digunakan pembagi yang jauh
lebih sedikit. Cara ini hanya menggunakan bilangan prima yang telah dibuktikan
sebelumnya sebagai pembagi untuk bilangan baru yang lebih besar yang akan diuji. Cara
ini bergantung pada media penyimpanan bilangan prima yang pernah dihasilkan yang
mungkin saja ditempatkan pada memori atau pada file eksternal. Dari sisi kandidat,
kandidat yang akan diuji hanya angka 2 dan bilangan ganjil. Cara ini memangkas waktu
lebih jauh jika menggunakan memori sebagai tempat penyimpanan.
Cara lain yang dapat dipertimbangkan adalah mengunakan pendekatan Teori
Sieve yang membuat sebuah array sepanjang kandidat prima terbesar ditambah satu yang
diberi tanda prima. Kemudian untuk setiap prima yang ditemukan, setiap sel array pada
index kelipatan dari bilangan tersebut akan ditandai sebagai bukan prima. Pada akhir
proses, jika suatu index masih memiliki penanda prima pada sel array yang ditunjuk
berarti index tersebut bilangan prima. Cara ini jelas membutuhkan ruang memori untuk
mewakili setiap sel array yang dimaksud, namun cara ini akan memangkas tes modulo
yang sangat memakan kinerja hardware.

III.2

Alternatif Dua
Berbeda dengan alternatif sebelumnya, secara umum alternatif ini hanya akan
membangkitkan bilangan acak dan menguji sifat primanya dan berhenti apabila bilangan
tersebut diyakini prima. Alternatif ini tidak menjamin 100% bilangan tersebut adalah
bilangan prima, tetapi menjamin dengan tingkat kesalahan yang relatif kecil sesuai
dengan banyaknya proses tes yang dilakukan.
Metode yang cukup sering dipakai dalam pengujian adalah algoritma Lehman
yang membagi suatu bilangan yang akan diuji (misal p) dengan bilangan prima kurang
dari 256 pengujian dengan cara membangkitkan bilangan acak a yang lebih kecil dari p
dan dihitung a(p - 1)/2 mod p yang apabila bernilai 1 atau -1 berarti p berpeluang prima

sebesar 50% yang apabila langkah ini diulang dan lolos sebanyak t kali maka akan
menghasilkan sebuah bilangan prima p yang mempunyai kesalahan tidak lebih dari 1/2t.
Selain dengan metode Lehmann, masih banyak metode lain yang sejenis seperti
algoritma Rabin-Miller.
IV.

Pentingnya Sifat Prima pada RSA


Bila pembangkitan pasangan kunci algoritma RSA diikuti, bilangan prima menjadi
penentu jalan tidaknya algoritma RSA tersebut. Penggantian peubah prima p dan q pada
proses ini meskipun pada akhirnya dapat menghasilkan peubah r, PK, dan SK, tetap saja
peubah tersebut tidak dapat memenuhi persamaan (10).
Sementara pada proses pembangkitan pasangan kunci algoritma RSA secara umum
diawali dengan memilih dua buah bilangan prima. Bila persamaan-persamaan sebelumnya
yaitu persamaan (1) hingga (10) diperhatikan kembali, tampak sama sekali tidak terpengaruh
oleh dua buah bilangan prima.
Persamaan (5) dan (6) yang menentukan pasangan kunci enkripsi/dekripsi algoritma
RSA tidak bergantung pada bilangan prima.

Enkripsi
Plainteks disusun menjadi blok-blok x1, x2, , sedemikian sehingga setiap blok
merepresentasikan nilai di dalam rentang 0 sampai r 1.
Setiap blok xi dienkripsi menjadi blok yi dengan rumus
yi = xi PK mod r
Dekripsi
Setiap blok cipherteks yi didekripsi kembali menjadi blok xi dengan rumus
xi = yi SK mod r
Contoh 2.
Misalkan plainteks yang akan dienkripsikan adalah
X = HARI INI
atau dalam sistem desimal (pengkodean ASCII) adalah
7265827332737873
Pecah X menjadi blok yang lebih kecil, misalnya X dipecah menjadi enam blok yang
berukuran 3 digit:
x1 = 726
x4 = 273
x2 = 582
x5 = 787
x3 = 733
x6 = 003
Nilai-nilai xi ini masih terletak di dalam rentang 0 sampai 3337 1 (agar transformasi
menjadi satu-ke-satu).
Blok-blok plainteks dienkripsikan sebagai berikut:
72679 mod 3337 = 215 = y1
58279 mod 3337 = 776 = y2

73379 mod 3337 = 1743 = y3


27379 mod 3337 = 933 = y4
78779 mod 3337 = 1731 = y5
00379 mod 3337 = 158 = y6
Jadi, cipherteks yang dihasilkan adalah
Y = 215 776 1743 933 1731 158.
Dekripsi dilakukan dengan menggunakan kunci rahasia
SK = 1019
Blok-blok cipherteks didekripsikan sebagai berikut:
2151019 mod 3337 = 726 = x1
7761019 mod 3337 = 582 = x2
17431019 mod 3337 = 733 = x3

Blok plainteks yang lain dikembalikan dengan cara yang serupa. Akhirnya kita memperoleh
kembali plainteks semula
P = 7265827332737873
yang dalam karakter ASCII adalah
P = HARI INI.
V. Kekuatan dan Keamanan RSA
Keamanan algoritma RSA terletak pada tingkat kesulitan dalam memfaktorkan bilangan non
prima menjadi faktor primanya, yang dalam hal ini r = p q. Sekali r berhasil difaktorkan
menjadi p dan q, maka (r) = (p 1) (q 1) dapat dihitung. Selanjutnya, karena kunci
enkrispi PK diumumkan (tidak rahasia), maka kunci dekripsi SK dapat dihitung dari
persamaan PK SK 1 (mod (r)). Penemu algoritma RSA menyarankan nilai p dan q
panjangnya lebih dari 100 digit. Dengan demikian hasil kali r = p q akan berukuran lebih
dari 200 digit. Menurut Rivest dan kawan-kawan, uasaha untuk mencari faktor bilangan 200
digit membutuhkan waktu komputasi selama 4 milyar tahun! (dengan asumsi bahwa
algoritma pemfaktoran yang digunakan adalah algoritma yang tercepat saat ini dan komputer
yang dipakai mempunyai kecepatan 1 milidetik). Untunglah algoritma yang paling mangkus
untuk memfaktorkan bilangan yang besar belum ditemukan. Inilah yang membuat algoritma
RSA tetap dipakai hingga saat ini. Selagi belum ditemukan algoritma yang mangkus untuk
memfaktorkan bilangan bulat menjadi faktor primanya, maka algoritma RSA tetap
direkomendasikan untuk menyandikan pesan.
VI.

KESIMPULAN
Melihat bagaimana algoritma RSA diturunkan, dapat disimpulkan pada dasarnya
bilangan prima tidak mutlak harus digunakan, namun penggunaan bilangan prima jauh sangat
mempermudah pembangkitan kunci untuk algoritma RSA.
Meskipun terkesan sederhana dan tidak menghabiskan ruang memori dan waktu
eksekusi, pembangkitan bilangan prima dengan cara yang tidak menjamin kepastian sifat
bilangan prima sebaiknya dihindari bila akan digunakan untuk membangkitkan pasangan
kunci enkripsi/dekripsi algoritma RSA. Namun, cara ini tetap dapat dipakai dengan cara

memastikan terlebih dahulu pasangan kunci yang dihasilkan apakah memenuhi persamaan
(10) atau tidak.
Tidak ada salahnya menunggu lama dan menggunakan sumber daya yang besar untuk
menghasilkan bilangan prima sebagai pembangkit pasangan kunci algoritma RSA yang kuat,
mengingat sebenarnya pasangan kunci ini tidak terlalu diperlukan banyak pada satu personal
atau afiliasi.

Anda mungkin juga menyukai