Anda di halaman 1dari 9

Mengenal Algoritma Enkripsi RSA

Oleh: Iwan Ariawan (2097200608) Sebagai tugas mata kuliah Sistem Keamanan Komputer

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 ('''R'''ivest'''S'''hamir'''A'''dleman). [[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 {{US patent|4405829}}. 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. Introduction RSA adalah sebuah algoritma berdasarkan skema public-key cryptography. Diberi nama RSA sebagai inisial para penemunya: Ron Rivest, Adi Shamir, dan Leonard Adleman. SA dibuat di MIT pada tahun 1977 dan dipatenkan oleh MIT pada tahun 1983. Setelah bulan September tahun 2000, paten tersebut berakhir, sehingga saat ini semua orang dapat menggunakannya dengan bebas. Lebih jauh, RSA adalah algoritma yang mudah untuk diimplementasikan dan dimengerti. algoritma RSA adalah sebuah aplikasi dari sekian banyak teori seperti extended Euclid algorithm, euler's function sampai fermat theorem. Artikel ini menjelaskan algoritma RSA dari dasar. Saya akan menggunakan nilai-nilai yang kecil untuk menjelaskan bagaimana cara kerja algoritma RSA. Public-Key Cryptography Konsep fundamental dari Public-Key Cryptography ditemukan oleh Whitfield Diffie dan Martin Hellman, dan secara terpisah oleh Ralph Merkle. Sedangkan konsep dasar Public-Key Cryptography terletak pada pemahaman bahwa keys selalu berpasangan: encryption key dan decryption key. Juga perlu diingat bahwa sebuah key tidak dapat digenerate dari key lainnya. Pemahaman encryption dan decryption key sering disebut sebagai public dan private key.

Seseorang harus memberikan public key-nya agar pihak lain dapat meng-encrypt sebuah pesan. Decryption hanya terjadi jika seseorang mempunyai private key. Scenario Bagian ini menjelaskan skenario bagaimana public-key cryptosystem bekerja. Saya akan menggunakan partisipan klasik Alice dan Bob sebagai orang-orang yang melakukan pertukaran informasi. 1. Alice dan Bob setuju untuk menggunakan public-key cryptosystem. 2. Bob mengirimkan public key-nya kepada Alice. 3. Alice meng-encrypt pesan yang dibuatkan dengan menggunakan public key milik Bob dan mengirimkan pesan yang sudah di-encrypt kepada Bob. 4. Bob men-decrypt pesan dari Alice menggunakan private key miliknya. Mathematical Notation Untuk memahami algoritma RSA, seseorang harus memahami beberapa notasi matematika dasar, teori dan formula. Hal tersebut dibutuhkan untuk mendukung semua kalkulasi yang dilakukan dalam algoritma RSA. 1. Modulo (didenotasikan dengan 'x mod m' atau 'x % m' dalam beberapa bahasa komputer) - x % m = x mod m = pembagian x dengan m dan mengambil sisanya. - Contoh: 25 mod 5 = 0 karena 5 habis membagi 25 25 mod 4 = 1 karena 25 / ( 4 * 6 ) menyisakan 1 x mod m = x jika dan hanya jika x < m 2. Z/mZ - Z/7Z : { 0,1,2,3,4,5,6 } dimana [7]=[0], [8]=[1], [9]=[2] dan seterusnya. - Operasi yang didukung dalam Z/mZ aalah penjumlahan, pengurangan, pembagian dan perkalian. - Inverse: Sebuah elemen dalam Z/mZ seperti A, memiliki sebuah inverse B jika dan hanya jika [A]x[B] = [1] - Units: Setiap elemen dalam Z/mZ yang memiliki inverse adalah sebuah unit. - Contoh: Z/7Z Penjumlahan: [2]+[3] = [5] Pembagian : [6]/[2] = [3] Soal: [6]/[4] a. Tempatkan dalam formula [6] = [X][4] b. Cari inverse dari [4], yaitu [2] ... [4]x[2] = [8] = [1] c. Kali inverse dengan [6] ... [2]x[6] = [12] = [5] ; [5]+[5] = [10] ... [10-7] = [3] ; [6]/[4] = [5] ([4]x[5] = [20] = [6]) Pengurangan: [2]-[3] = [-1] = [6] ; [6]-[4] = [2] Perkalian : [2]x[6] = [12] = [5] ;

d. Sehingga [4]x[5] = [20] = [13] = [6] 3. GCD(A,B) GCD = greatest common divisor. GCD(A,B) = D GCD(78,32) = 2, karena tidak ada bilangan yang lebih besar dari dua yang membagi 78 dan 32. GCD(A,B) dapat ditemukan dengan menggunakan algoritma extended euclid. Jika GCD(A,B) = 1 maka A and B dalah coprime satu sama lainnya (dengan kata lain, A dan B adalah relatively prime). 4. Memecahkan 8x mod 13 = 1, dimana x adalah bilangan yang belum diketahui. - Cari gcd(8,13) yang berarti 1 ... yang berarti persamaan dapat diselesaikan. - Membuat sebuah matriks dan menggunakan operasi gaussian dalam matriks. 8 | 1 0 r2=r2-r1 8 | 1 0 r1=r1-r2

13 | 0 1 ---------> 5 | -1 1 --------->

3 | 2 -1 r2=r2-r1

3 | 2 -1

5 | -1 1 ---------> 2 |-3 2 lakukan sampai kita mendapatkan format : 1 | s t 0 | s' t' s, t, s', t' dapat berupa bilangan apa saja. Jika hasil akhir yang di dapat sbb: 0 | s' t' , kita harus 1|s t rotasi atas-bawah hasil nya menjadi format: 1 | s t 0 | s' t' sehingga sekarang kita mendapatkan d = 1, s = 5, t = -3, sehingga x = s = 5. 5. Euler's phi function (jangan sampai keliru dengan phi = 3.14) - Euler's phi function adalah sebuah total bilangan unit dalam Z/mZ - Theorem a. Jika p adalah sebuah bilangan prima, maka phi(p) = p - 1 p dan phi(p) adalah (contoh: gcd(p,phi(p)) = 1) ii): phi(m*n) = phi(m) * phi (n) phi(p^a) = (p^a) - p^(a-1)

b. Contoh: -- phi(7) = 6 -- phi(840) = phi(8) * phi(105) = phi(2^3) * phi(3*5*7) = [(2^3) - (2^2)] * phi(3) * phi(5) * phi(7) 6. Pangkat. pow(a,b) Saya akan menggunakan notasi '^' seperti pada a^b Key Generation Misalkan Alice ingin Bob mengirimnya sebuah pesan melalui jalur yang aman. Alice akan memberikan public keynya kepada Bob dan menyimpan private key untuk dirinya. a. Pilih 2 bilangan prima besar seperti p,q dimana p tidak sama dengan q. b. Hitung M = p x q c. Hitung phi(M) = phi(p) * phi(q) d. Pilih sebuah integer 'e' dimana 1 < e < phi(M) dan 'e' serta phi(M) adalah coprime. e. Hitung 'd' integer sehingga (d * e) mod M = 1 f. (M,e) adalah public key dimana M adalah modulo dan e adalah eksponen encryption. g. (M,d) adalah private key dimana M adalah modulo dan d adalah eksponen decryption. Encrypting Message Misalkan Bob ingin mengirim sebuah pesan 'H' kepada Alice. a. Alice harus membuat keynya; sehingga ia memiliki private dan public keys. private key = (M,d) public key = (M,e) b. Mengubah 'H' menjadi sebuah bilangan yang menggunakan alphabet yang valid dengan tabel bilangan. Sebuah contoh mudah adalah mapping A = 1, B = 2 ... Z = 26. sehingga H = 8 c. C = 8^e (mod M) C adalah sebuah bilangan ter-encrypt. d. Bob mengirimkan bilangan tersebut kepada Alice sehingga Alice dapat melakukan decode ulang menggunakan private keynya. Decrypting Message Misalkan Alice menerima sebuah pesan ter-encrypt, ia akan men-decrypt-nya menggunakan tahapan-tahapan berikut: a. Alice mempunyai private key dari langkah-langkah di atas (M,d) b. N = C^d (mod M) c. N adalah bilangan. Gunakan konversi table alphabet untuk mengubah N menjadi karakter yang direpresentasikannya.

Example a. Generate Key (kita dapat melewati langkah ini untuk menemukan p dan q) 1. M = 101 , sebuah bilangan prima --> phi(M) = 100 2) a] Misalkan e = 13 b] Cari d (e*d) mod M = 1 Gunakan persamaan (a*x) mod M = 1 d = 77 b. Kata "HELLO" digunakan sebagai pesan, dan diubah menurut numerical representationnya. HELLO = 08 05 12 12 15 c. Encoding pesan. 8^13 mod 101 = 18 5^13 mod 101 = 56 12^13 mod 101 = 53 15^13 mod 101 = 7 Sehingga pesan ter-encrypt atau ciphertext adalah 18,56,53,53,07. d. Decoding pesan. 18^77 mod 101 = x1 56^77 mod 101 = x2 53^77 mod 101 = x3 = x4 07^77 mod 101 = x5 Closure RSA merupakan contoh yang powerful dan cukup aman dari Public-Key Cryptography. Berdasarkan matematika, proses yang digunakan berdasarkan fungsi-fungsi trap-door satu arah. Sehingga melakukan encryption dengan menggunakan public key sangat mudah bagi semua orang, namun proses decryption menjadi sangat sulit. Proses decryption sengaja dibuat sulit agar seseorang, walaupun menggunakan Cray supercomputers dan ribuan tahun, tidak dapat men-decrypt pesan tanpa mempunyai private key. Perlu diingat juga bahwa pemilihan p*q = M haruslah sebuah bilangan yang sangat besar sehingga sulit dicari eksponen decoding-nya karena sulit melakukan pemfaktoran bilangan prima. ''Padding schemes'' ''[[Padding Scheme]]'' harus dibangun secara hati-hati sehingga tidak ada nilai dari ''m'' yang menyebabkan masalah keamanan. Sebagai contoh, jika kita ambil contoh sederhana dari penampilan [[ASCII]] dari ''m'' dan menggabungkan [[bit|bit-bit]] secara bersama-sama akan menghasilkan ''n'', kemudian pessan yang berisi ASCII tunggal karakter <code>NUL</code> (nilai numeris 0) akan menghasilkan ''n''= 0, yang akan menghasilkan ''ciphertext'' 0 apapun itu

nilai dari ''e'' dan ''N'' yang digunakan. Sama halnya dengan karakter ASCII tunggal <code>SOH</code> (nilai numeris 1) akan selalu menghasilkan ''chiphertext'' 1. Pada kenyataannya, untuk sistem yang menggunakan nilai ''e'' yang kecil, seperti 3, seluruh karakter tunggal ASCII pada pesan akan disandikan menggunakan skema yang tidak aman, dikarenakan nilai terbesar ''n'' adalah nilai 255, dan 255<sup>3</sup> menghasilkan nilai yang lebih kecil dari modulus yang sewajarnya, maka proses dekripsi akan menjadi masalah sederhana untuk mengambil pola dasar dari ''ciphertext'' tanpa perlu menggunakan modulus ''N''. Sebagai konsekuensinya, standar seperti [[PKCS]] didesain dengan sangat hati-hati sehingga membuat pesan asal-asalan dapat terenkripsi secara aman. Dan juga berdasar pada bagian [[#Kecepatan| Kecepatan]], akan dijelaskan kenapa ''m'' hampir bukanlah pesan itu sendiri tetapi lebih pada ''message key'' yang dipilh secara acak. Pengesahan pesan RSA dapat juga digunakan untuk mengesahkan sebuah pesan. Misalkan Alice ingin mengirim pesan kepada Bob. Alice membuat sebuah ''[[hash value]]'' dari pesan tersebut, di pangkatkan dengan bilangan ''d'' dibagi ''N'' (seperti halnya pada deskripsi pesan), dan melampirkannya sebagai "tanda tangan" pada pesan tersebut. Saat Bob menerima pesan yang telah "ditandatangani", Bob memangkatkan "tanda tangan" tersebut dengan bilangan ''e'' dibagi ''N'' (seperti halnya pada enkripsi pesan), dan membandingkannya dengan nilai hasil dari ''hash value'' dengan ''hash value'' pada pesan tersebut. Jika kedua cocok, maka Bob dapat mengetahui bahwa pemilik dari pesan tersebut adalah Alice, dan pesan pun tidak pernah diubah sepanjang pengiriman. Harap dicatat bahwa ''padding scheme'' merupakan hal yang esensial untuk mengamankan pengesahan pesan seperti halnya pada enkripsi pesan, oleh karena itu kunci yang sama tidak digunakan pada proses enkripsi dan pengesahan.

Keamanan Penyerangan yang paling umum pada RSA ialah pada penanganan masalah faktorisasi pada bilangan yang sangat besar. Apabila terdapat faktorisasi metode yang baru dan cepat telah dikembangkan, maka ada kemungkinan untuk membongkar RSA. Pada tahun [[2005]], bilangan faktorisasi terbesar yang digunakan secara umum ialah sepanjang 663 bit, menggunakan metode distribusi mutakhir. Kunci RSA pada umumnya sepanjang 1024 2048 bit. Beberapa pakar meyakini bahwa kunci 1024-bit ada kemungkinan dipecahkan pada waktu dekat (hal ini masih dalam perdebatan), tetapi tidak ada seorangpun yang berpendapat kunci 2048-bit akan pecah pada masa depan yang terprediksi. Semisal Eve, seorang ''eavesdropper'' (pencuri dengarpenguping), mendapatkan ''public key'' ''N'' dan ''e'', dan ciphertext ''c''. Bagimanapun juga, Eve tidak mampu untuk secara langsung

memperoleh ''d'' yang dijaga kerahasiannya oleh Alice. Masalah untuk menemukan ''n'' seperti pada ''n<sup>e</sup>=c'' mod N di kenal sebagai permasalahan RSA. Cara paling efektif yang ditempuh oleh Eve untuk memperoleh ''n'' dari ''c'' ialah dengan melakukan faktorisasi ''N'' kedalam ''p'' dan ''q'', dengan tujuan untuk menghitung (''p''-1)(''q''-1) yang dapat menghasilkan ''d'' dari ''e''. Tidak ada metode waktu polinomial untuk melakukan faktorisasi pada bilangan bulat berukuran besar di komputer saat ini, tapi hal tersebut pun masih belum terbukti. Masih belum ada bukti pula bahwa melakukan faktorisasi ''N'' adalah satu-satunya cara untuk memperoleh ''n'' dari ''c'', tetapi tidak ditemukan adanya metode yang lebih mudah (setidaknya dari sepengatahuan publik). Bagaimanapun juga, secara umum dianggap bahwa Eve telah kalah jika ''N'' berukuran sangat besar. Jika ''N'' sepanjang 256-bit atau lebih pendek, ''N'' akan dapat difaktorisasi dalam beberapa jam pada [[Personal Computer]], dengan menggunakan [[perangkat lunak]] yang tersedia secara bebas. Jika ''N'' sepanjang 512-bit atau lebih pendek, ''N'' akan dapat difaktorisasi dalam hitungan ratusan jam seperti pada tahun [[1999]]. Secara teori, [[perangkat keras]] bernama [[TWIRL]] dan penjelasan dari Shamir dan Tromer pada tahun [[2003]] mengundang berbagai pertanyaan akan keamanan dari kunci 1024-bit. Santa disarankan bahwa ''N'' setidaknya sepanjang 2048bit. Pada thaun [[1993]], [[Peter Shor]] menerbitkan [[Algoritma Shor]], menunjukkan bahwa sebuah [[komputer quantum]] secara prinsip dapat melakukan faktorisasi dalam waktu polinomial, mengurai RSA dan algoritma lainnya. Bagaimanapun juga, masih terdapat pedebatan dalam pembangunan komputer quantum secara prinsip. Pertimbangan praktis Pembangkitan kunci Menemukan bilangan prima besar ''p'' dan ''q'' pada biasanya didapat dengan mencoba serangkaian bilangan acak dengan ukuran yang tepat menggunakan probabilitas bilangan prima yang dapat dengan cepat menghapus hampir semua bilangan bukan prima. ''p'' dan ''q'' seharusnya tidak "saling-berdekatan", agar [[faktorisasi fermat]] pada ''N'' berhasil. Selain itu pula, jika ''p''-1 atau ''q''-1 memeiliki faktorisasi bilangan prima yang kecil, ''N'' dapat difaktorkan secara mudah dan nilai-nilai dari ''p'' atau ''q'' dapat diacuhkan. Seseorang seharusnya tidak melakukan metoda pencarian bilangan prima yang hanya akan memberikan informasi penting tentang bilangan prima tersebut kepada penyerang. Biasanya, pembangkit bilangan acak yang baik akan memulai nilai bilangan yang digunakan. Harap diingat, bahwa kebutuhan disini ialah "acak" '''''dan''''' "tidak-terduga". Berikut ini mungkin

tidak memenuhi kriteria, sebuah bilangan mungkin dapat dipilah dari proses acak (misal, tidak dari pola apapun), tetapi jika bilangan itu mudah untuk ditebak atau diduga (atau mirip dengan bilangan yang mudah ditebak), maka metode tersebut akan kehilangan kemampuan keamanannya. Misalnya, tabel bilangan acak yang diterbitkan oleh [[Rand Corp]] pada tahun [[1950-an]] mungkin memang benar-benar teracak, tetapi dikarenakan diterbitkan secara umum, hal ini akan mempermudah para penyerang dalam mendapatkan bilangan tersebut. Jika penyerang dapat menebak separuh dari digit ''p'' atau ''q'', para penyerang dapat dengan cepat menghitung separuh yang lainnya (ditunjukkan oleh [[Donald Coppersmith]] pada tahun [[1997]]). Sangatlah penting bahwa kunci rahasia ''d'' bernilai cukup besar, Wiener menunjukkan pada tahun [[1990]] bahwa jika ''p'' diantara ''q'' dan 2''q'' (yang sangat mirip) dan ''d'' lebih kecil daripada ''N''<sup>1/4</sup>/3, maka ''d'' akan dapat dihitung secara effisien dari ''N'' dan ''e''. Kunci enkripsi ''e'' = 2 sebaiknya tidak digunakan. Kecepatan RSA memiliki kecepatan yang lebih lambat dibandingkan dengan [[DES]] dan [[algoritma simetrik]] lainnya. Pada prakteknya, Bob menyandikan pesan rahasia menggunakan algoritma simetrik, menyandikan kunci simetrik menggunakan RSA, dan mengirimkan kunci simetrik yang dienkripsi menggunakan RSA dan juga mengirimkan pesan yang dienkripasi secara simetrik kepada Alice. Prosedur ini menambah permasalahan akan keamanan. Singkatnya, Sangatlah penting untuk menggunakan pembangkit bilangan acak yang kuat untuk kunci simetrik yang digunakan, karena Eve dapat melakukan ''bypass'' terhadap RSA dengan menebak kunci simterik yang digunakan. Distribusi kunci Sebagaimana halnya ''cipher'', bagaimana ''public key'' RSA didistribusi menjadi hal penting dalam keamanan. Distribusi kunci harus aman dari ''[[man-in-the-middle attack]]'' (''penghadang-ditengah-jalan''). Anggap Eve dengan suatu cara mampu memberikan kunci arbitari kepada Bob dan membuat Bob percaya bahwa kunci tersebut milik Alice. Anggap Eve dapan "menghadang" sepenuhnya transmisi antara Alice dan Bob. Eve mengirim Bob ''public key'' milik Eve, dimana Bob percaya bahwa ''public key'' tersebut milik Alice. Eve dapat menghadap seluruh ''ciphertext'' yang dikirim oleh Bob, melakukan dekripsi dengan kunci rahasia milik Eve sendiri, menyimpan salinan dari pesan tersebut, melakukan enkripsi menggunakan ''public key'' milik Alice, dan mengirimkan ''ciphertext'' yang baru kepada Alice. Secara prinsip, baik Alice atau Bob tidak menyadari kehadiran Eve diantara transmisi mereka. Pengamanan terhadap serangan semacam ini yaitu menggunakan [[sertifikat digital]] atau komponen lain dari infrastuktur ''public key''.

Penyerangan waktu Kocher menjelaskan sebuah serangan baru yang cerdas pada RSA di tahun [[1995]]: jika penyerang, Eve, mengetahui perangkat keras yang dimiliki oleh Alice secara terperinci dan mampu untuk mengukur waktu yang dibutuhkan untuk melakukan dekripsi untuk beberapa ''ciphertext'', Eve dapat menyimpulkan kunci dekripsi ''d'' secara cepat. Penyerangan ini dapat juga diaplikasikan pada skema "tanda tangan" RSA. SAlah satu cara untuk mencegah penyerangan ini yaitu dengan memastikan bahwa operasi dekripsi menggunakan waktu yang konstan untuk setiap ''ciphertext'' yang diproses. Cara yang lainnya, yaitu dengan menggunakan properti multipikatif dari RSA. Sebagai ganti dari menghitung ''c<sup>d</sup> mod N'', Alice pertama-tama memilih nilai bilangan acak ''r'' dan menghitung ''(r<sup>e</sup>c)<sup>d</sup> mod N''. Hasil dari penghitungan tersebut ialah ''rm mod N'' kemudian efek dari ''r'' dapat dihilangkan dengan perkalian dengan inversenya. Nilai baru dari ''r'' dipilih pada tiap ''ciphertext''. Dengan teknik ini, dikenal sebagai ''message blinding'' (pembutaan pesan), waktu yang diperlukan untuk proses dekripsi tidak lagi berhubungan dengan nilai dari ''ciphertext'' sehingga penyerangan waktu akan gagal. Penyerangan ''ciphertext'' adaptive Pada tahun [[1998]], [[Daniel Bleichenbacher]] menjelaskan penggunaan penyerangan ''ciphertext'' adaptive, terhadap pesan yang terenkripsi menggunakan RSA dan menggunakan PKCS #1 v1 ''padding scheme''. Dikarenakan kecacatan pada skema PKCS #1, Bleichenbacher mampu untuk melakukan serangkaian serangan terhadap implementasi RSA pada [[protokol]] [[Secure Socket Layer]], dan secara potensial mengungkap kunci-kunci yang digunakan. Sebagai hasilnya, para pengguna kriptografi menganjurkan untuk menggunakan ''padding scheme'' yang relatif terbukti aman seperti ''[[Optimal Asymmetric Encryption Padding]]'', dan Laboratorium RSA telah merilis versi terbaru dari PKCS #1 yang tidak lemah terdapat serangan ini.

Anda mungkin juga menyukai