KRIPTOGRAFI KUNCI PUBLIK:
SANDI RSA
Oleh:
Muhamad Zaki Riyanto (zakimath@gmail.com) Ardhi Ardhian (ardhi_emre@yahoo.com)
1. Sandi RSA
Sandi RSA merupakan algoritma kriptografi kunci publik (asimetris). Ditemukan pertama kali pada tahun 1977 oleh R. Rivest, A. Shamir, dan L. Adleman. Nama RSA sendiri diambil dari ketiga penemunya tersebut.
Sebagai algoritma kunci publik, RSA mempunyai dua kunci, yaitu kunci publik dan kunci rahasia. Kunci publik boleh diketahui oleh siapa saja, dan digunakan untuk proses enkripsi. Sedangkan kunci rahasia hanya pihak-pihak tertentu saja yang boleh mengetahuinya, dan digunakan untuk proses dekripsi. Keamanan sandi RSA terletak pada sulitnya memfaktorkan bilangan yang besar. Sampai saat ini RSA masih dipercaya dan digunakan secara luas di internet.
Gambar 1. Skema algoritma kunci publik Sandi RSA terdiri dari tiga proses, yaitu proses pembentukan kunci, proses enkripsi dan proses dekripsi. Sebelumnya diberikan terlebih dahulu beberapa konsep perhitungan matematis yang digunakan RSA.
2. Konsep Dasar Perhitungan Matematis
2.1. Fungsi Phi-Euler
Fungsi Phi-Euler ϕ( )n merupakan fungsi terhadap bilangan bulat positif n yang menyatakan banyaknya elemen ℤn yang mempunyai invers terhadap operasi pergandaan. Ingat bahwa ℤn belum tentu merupakan grup terhadap operai pergandaan. Dengan kata lain, ϕ( )n adalah banyaknya elemen
{
x, 0≤ <x n| gcd( , )x n =1}
. Jika n= pq dengan p dan q adalah bilangan prima, maka( )n (p 1)(q 1)
ϕ = − − . Jika n adalah bilangan prima, maka ( )n n 1
ϕ = − . Bukti pernyataan di atas dapat dilihat di (Fraleigh, 2000), (Buchmann, 2000), dan (Stinson, 2006).
2.2. Algoritma Euclide
Algoritma ini digunakan untuk mencari nilai pembagi persekutuan terbesar dari dua bilangan bulat. Algoritma ini didasarkan pada pernyataan berikut ini. Diberikan bilangan bulat r0 dan r1, dengan r0 ≥r1, kemudian dihitung menggunakan algoritma pembagian:
0 1 1 2 r =q r +r , 0< <r2 r1 1 2 2 3 r =q r +r, 0< <r3 r2 ... 2 1 1 n n n n r− =q−r− +r ,0< <rn rn−1 1 n n n r− =q r
Dari pernyataan di atas, dapat ditunjukkan bahwa
0 1 1 2 1
gcd( , )r r =gcd( , )r r = =... gcd(rn−, )rn =gcd( , 0)rn =rn. Bukti lihat di (Buchmann, 2000)
Contoh 1. Akan dihitung gcd(40,24). Jawab: 40 = 1.24 + 16
24 = 1.16 + 8 16 = 2.8 Jadi, gcd(40,24)=8.
2.3. Algoritma Euclide Diperluas
Algoritma ini merupakan perluasan dari algoritma Euclide (Extended Euclidean Algorithm), digunakan untuk mencari invers terhadap operasi pergandaan. Algoritma ini didasarkan pada pernyataan berikut. Diberikan bilangan bulat positif r0 dan r1, r0 >r1. Jika
(
0 1)
gcd r r, =1, maka 1 1 mod 0 r− r ada. Jika gcd(
r r0,1)
≠1, maka 1 1 mod 0r− r tidak ada. Gunakan rumus rekurensi berikut ini. 0 0 t = , t1=1 2 1 1 j j j j t =t − −q−t− , j≥2 ... (1) Ket: q diperoleh dari perhitungan j gcd
(
r r0, 1)
menggunakan algoritma Euclide. Jika gcd(
r r0,1)
=1, berarti r1−1=tn. Sehingga rn =t rn1 atau 1=t rn1. Buktibisa dilihat di (Stinson, 2006).
A enkripsi dekripsi B
Plainteks cipherteks Plainteks
Contoh 2. Akan dihitung 28 mod 75−1 .
Diketahui r0=75 dan r1=28. Hitung gcd(75, 28) menggunakan algoritma Euclide, yaitu:
75 = 2.28 + 19 n = 1, r1=28, q1=2 28 = 2.19 + 9 n = 2, r2 =19, q2 =2 19 = 2.9 + 1 n = 3, r3 =9, q3 =2 9 = 9.1 n = 4, r4 =1, q4 =9
Jadi, gcd(75, 28)= 1, dengan kata lain 28 mod 75−1 ada.
Dari penyelesaian algoritma Euclide di atas diperoleh diperoleh n = 4. Selanjutnya, menggunakan rumus rekurensi (1) di atas, diperoleh: (semua perhitungan dilakukan dalam mod 75)
2 0 1 1 0 2.1 2 73 t = −t q t = − = − = 3 1 2 2 1 1.( 2) 3 t = −t q t = − − = 4 2 3 3 2 2.3 8 67 t = −t q t = − − = − = 1 4 4 1 67.28 1 67 28 r =t r = = ⇔ = −
Dari hasil terakhir di atas, diperoleh 28 mod 75−1 =67. 2.4. Metode Fast Exponentiation
Metode ini digunakan untuk menghitung operasi pemangkatan besar bilangan bulat modulo dengan cepat. Metode ini memanfaatkan ekspansi biner dari eksponennya dan didasarkan pada pernyataan berikut ini:
( )
1 2
2i 2i
g + = g .
Untuk lebih jelasnya mengenai langkah-langkah metode fast exponentiation, perhatikan contoh berikut ini.
Contoh 3. Akan dihitung 6 mod100 . 73
Jawab.
6 3 0
73=1.2 +1.2 +1.2 atau 73 =
(
)
2
1001001 . (semua perhitungan dilakukan dalam mod 100)
0 2 6 =6, 621 =36, 622 =362=96, 623 =16, 4 2 2 6 =16 =56, 625 =562 =36, 26 2 6 =56 =96. Sehingga diperoleh: 3 6 73 2 2 6 =6.6 .6 =6.16.96 16= . Jadi, 6 mod100 = 16. 73
Setelah mempelajari konsep-konsep dasar perhitungan matematis, berikut ini diberikan proses-proses yang digunakan RSA.
3. Pembentukan Kunci
Berikut ini adalah proses pembentukan kunci. Proses ini dilakukan oleh pihak penerima, dalam hal ini adalah B.
(1) Pilih bilangan prima p dan q. (2) Hitung n= pq.
(3) Hitung ϕ( )n =(p−1)(q−1).
(4) Pilih sebarang bilangan b, 1< <b ϕ( )n , dengan gcd( , ( ))bϕ n =1.
(5) Hitung invers dari b, yaitu a=b−1mod ( )ϕ n .
(6) Kunci publik: (n, b) dan kunci rahasia: a. Agar mempermudah dalam memahami sandi RSA, khusus pada tulisan ini, plainteks yang digunakan hanya berupa bilangan 0 s/d 25 yang berkorespondensi dengan huruf a s/d z. Akan tetapi pada penggunaan yang sebenarnya, digunakan korespondensi khusus seperti kode ASCII, serta bilangan-bilangan yang sangat besar.
Perhatikan, dalam pemilihan p dan q harus memenuhi n= pq lebih dari atau sama dengan nilai plainteks yang mungkin. Dalam hal ini n= pq≥25.
Tabel 1. Tabel Korespondensi
a b c d e f g h i j k l m
0 1 2 3 4 5 6 7 8 9 10 11 12
n o p q r s t u v w x y z
13 14 15 16 17 18 19 20 21 22 23 24 25
Contoh 4. B memilih p=5 dan q=11, maka n=55 dan ϕ(55)= −(5 1)(11 1)− =4.10=40. Selanjutnya dapat dipilih b=13, sebab gcd(13, 40)=1. Menggunakan algoritma Euclide diperluas diperoleh bahwa
1
13 mod 40 37
a= − = . Jadi, kunci publiknya adalah ( , )n b =(55,13) dan kunci rahasianya adalah a=37. Selanjutnya B mengirimkan kunci publik kepada A.
4. Enkripsi
Berikut ini adalah proses enkripsi RSA. Dilakukan oleh pihak pengirim, dalam hal ini adalah A. Seluruh perhitungan pemangkatan bilangan modulo dilakukan menggunakan metode fast exponentiation.
(1) Ambil kunci publik (n,b).
(2) Pilih plainteks m, dengan 0≤ ≤ −m n 1. (3) Hitung c=mbmodn.
Contoh 5. A menerima kunci publik ( , )n b =(55,13) dari B. Misalkan plainteksnya adalah “kripto”, menggunakan Tabel 1 diperoleh m1=10, m2 =17, m3=8, m4=15,
5 19
m = , dan m6 =14. Selanjutnya, dihitung:
13 1 1 mod 10 mod 55 b c =m n= =10 13 2 2 mod 17 mod 55 b c =m n= =7 13 3 3 mod 8 mod 55 b c =m n= =28 13 4 4 mod 15 mod 55 b c =m n= =20 13 5 5 mod 19 mod 55 b c =m n= =39 13 6 6 mod 14 mod 55 b c =m n= =49
Jadi, cipherteksnya adalah 10-7-28-20-39-49. Selanjutnya A mengirimkan cipherteks ini kepada B.
5. Dekripsi
Berikut ini adalah proses dekripsi RSA. Dilakukan oleh pihak penerima cipherteks, yaitu B.
(1) Ambil kunci publik (n,b) dan kunci rahasia a. (2) Hitung m=camodn.
Contoh 6. Setelah B memperoleh cipherteks dari A, yaitu 10-7-28-20-39-49, maka diambil kunci rahasia
37
a= , dan dilakukan perhitungan berikut.
37 1 1 mod 10 mod 55 a m =c n= =10 37 2 2 mod 7 mod 55 a m =c n= =17 37 3 3 mod 28 mod 55 a m =c n= =8 37 4 4 mod 20 mod 55 a m =c n= =15 37 5 5 mod 39 mod 55 a m =c n= =19 37 6 6 mod 49 mod 55 a m =c n= =14
Diperoleh plainteks 10-17-8-15-19-14, jika dikorespon-densikan sesuai Tabel 1, diperoleh pesan asli yang dikirimkan oleh A, yaitu “kripto”.
6. Kesimpulan dan Saran
Algoritma kunci publik seperti sandi RSA, baik digunakan untuk mengatasi masalah distribusi kunci, dan apabila jalur komunikasi yang digunakan tidak aman.
Untuk menembus keamanan RSA, pihak penyerang cukup hanya dengan memfaktorkan nilai n menjadi p dan q yang sesuai dengan kunci publik. Untuk memperkuat tingkat keamanan, sebaiknya digunakan bilangan prima p dan q yang besar, oleh Stinson (2006) dianjutran sebesar >80 digit, sehingga pihak penyerang akan kesulitan dan membutuhkan waktu yang sangat lama untuk memfaktorkan n, tidak sepadan dengan nilai informasi yang dicari.
Daftar Pustaka
Buchmann, Johannes A., 2000, Introduction to Cryptography, Springer-Verlag New York, USA.
Fraleigh. 2000, A First Course in Abstract Algebra, Sixth Edition, Addison-Wisley, USA.
Stinson, D.R., 2006, Cryptography Theory and Practice, Third Edition, Chapman & Hall/CRC, USA.
Soal Latihan 1:
A ingin mengirimkan sebuah pesan rahasia “helo” kepada B. Karena jalur komunikasi tidak aman, maka keduanya sepakat untuk menggunakan sistem kriptografi kunci publik, dan dipilih sandi RSA. Proses pertama, B membuat pasangan kunci terlebih dahulu. B memilih bilangan prima p=3 dan q=17.
1. Pembentukan Kunci (dilakukan oleh B) a) Hitung n= pq=... b) Hitung ϕ( )n =...
c) Misalkan B akan memilih b=6 atau b=9. Nilai b manakah yang bisa digunakan sebagai kunci? Cek kedua nilai b menggunakan algoritma Euclide. Gunakan nilai b yang memenuhi gcd( ( ), )ϕ n b =1. Jawab: Untuk b = 6. ... ... ... ... ... Untuk b = 9. ... ... ... ... ... Jadi, nilai b yang digunakan adalah b = ...
d) Tentukan nilai a=b−1mod ( )ϕ n =...mod ( )ϕ n .
menggunakan Extended Euclidian Algorithm. Jawab: ... ... ... ... ... ... ... ... e) Diperoleh pasangan kunci dari B, yaitu:
Kunci publik: ( , )n b =(... , ...) Kunci rahasia: a = ...
2. Proses Enkripsi (dilakukan oleh A)
a) Ubah pesan “helo” ke dalam bilangan (Tabel 1).
“h” m = ... 1 “e” m = ... 2 “l” m = ... 3 “o” m = ... 4 b) Hitung: 1 1 mod b c =m n = ... ... ... ... ... ... ... ... ... 2 2 mod b c =m n = ... ... ... ... ... ... ... ... ... 3 3 mod b c =m n = ... ... ... ... ... ... ... ... ... 4 4 mod b c =m n = ... ... ... ... ... ... ... ... ... Diperoleh cipherteks: 1 2 3 4 c − − −c c c = ... - ... - ... - ...
3. Proses Dekripsi (dilakukan oleh B) a) Diketahui kunci rahasia a = ...
1 1 mod a m =c n = ... ... ... ... ... ... ... ... ... ... 2 2 mod a m =c n = ... ... ... ... ... ... ... ... ... ... 3 3 mod a m =c n = ... ... ... ... ... ... ... ... ... ... 4 4 mod a m =c n = ... ... ... ... ... ... ... ... ... ... b) Konversi ke dalam huruf sesuai Tabel 1.
1
m = ..., m = ..., 2 m = ..., 3 m = ... 4 Jadi, pesan yang dikirimkan A adalah ...
Soal Latihan 2:
1) Hitung nilai pembagi persekutuan terbesar berikut ini menggunakan algoritma Euclide.
a. gcd(87, 36) b. gcd(188, 72) c. gcd(435,125)
2) Tentukan nilai invers berikut ini menggunakan Extended Euclidean Algorithm.
a. 17 mod101−1
b. 23 mod151−1 c. 357 mod1234−1
3) Hitung hasil dari pemangkatan besar modulo berikut ini menggunakan metode Fast Exponentation. a. 2 mod 25 25
b. 4 mod 30 34
c. 10 mod 75 43
4) Jika dipilih bilangan prima p=23 dan q=37, apakah b=143 bisa digunakan sebagai kunci? 5) Diberikan bilangan prima p dan q seperti soal 4) di
atas, dipilih b=67. Apakah nilai p, q, dan b di atas dapat digunakan untuk proses pembentukan kunci? Jika ya, tentukan kunci publik dan kunci rahasianya. 6) Diberikan kunci publik ( , )n b =(253, 3). Tentukan
hasil enkripsi plainteks m = 165.
7) Menggunakan kunci publik soal 6) di atas dan kunci rahasia a = 147, tentukan hasil dekripsi cipherteks
78
c= . (hint. hasilnya adalah plainteks m, dimana m adalah hasil kuadrat suatu bilangan genap)
8) Buktikan bahwa plainteks m dapat diperoleh dari perhitungan camodn .
9) Hitunglah nilai fungsi Phi-Euler ϕ( )n untuk n = 9, 26, 29, dan 50.
10) Buktikan bahwa jika n adalah bilangan prima, maka ( )n n 1