1-Muharram 1429
entry-quote
: "Belajarlah untuk melakukan banyak pekerjaan saat kau sedang
tidak ada kerjaan, agar jika tiba saat untukmu bekerja segala
sesuatunya akan jadi lebih Mudah"
entry-vocab :
- inevitable collide deprive the
discord juxtaposition of myriad luminous vertex.
- the envoy akin the poet, shatter retrospective proponent and
exponent into bewilder situation in 57-th commemorate of John
parlor.
Hari pertama di 1429…perut gw
sakit…dah 3 hari ini gw begadang terus…lidah kerasa pahit…kayak
gejala tifus…
tapi sekarang dah mendingan..
Wah…Persipura menang lagi lawan
D’jak….gw salut sama semangat anak2 Mutiara Hitam ini…biar maen
di kawasan orang lain tapi tetep yahud..
gw tunggu aksi elo2 lagi di final
copa…
RSA(1)
Sejarahnya sih udah lama,30 tahun-an yg
lalu Rivest, Shamir dan Adleman bikin suatu algoritma enkripsi dengan
manfaatin sifat operasi modulus dan sifat bilangan prima yang
dipelopori oleh Teorema Fermat. Berbeda dengan punyanya Diffie dan
Hellman yang lebih diperuntukkan untuk pertukaran kunci maka RSA ini
bisa buat enkripsi sekaligus juga bisa buat tanda-tangan.
Berikut langkah-langkah dalam algoritma
RSA (gw translate bebas dari bukunya
Simon Singh : The Code Book tahun 2002)
-
Pertama-tama, Ivan harus memilih 2
bilangan prima, sebut saja p dan q. Seharusnya agar lebih aman
dipilih bilangan prima besar (bilangan prima lebih dari 1 juta
misalnya) namun untuk contoh ini dimisalkan p =17 dan q = 11. Kedua
bilangan prima ini harus dijaga kerahasiaannya oleh Ivan. -
Kemudian Ivan mengalikan kedua
bilangan prima tersebut, sebut saja hasilnya dengan N, dalam hal ini
N = 187. Lalu Ivan memilih lagi sebuah bilangan, sebut saja e. Nilai
e tersebut haruslah relatif prima terhadap nilai euler dari N.
euler(N) = (p-1) * (q-1)
Untuk mudahnya
pilih saja bilangan prima yang lebih kecil dari N.
Dalam contoh ini
dimisalkan Ivan memilih e = 7
-
Kemudian Ivan mempublish nilai e
dan N di suatu tempat penyimpanan umum, kalau di internet misalnya
di website milik Ivan atau di friendsternya Ivan juga boleh. Hal ini
supaya semua orang dapat melihat nilai e dan N yang berguna saat
melakukan enkripsi nantinya. Nilai e dan N disebut kunci publik.
Catatan : Nilai e
tiap-tiap orang bisa saja sama, yang penting adalah nilai N-nya
berbeda.
-
Untuk mengenkripsi sebuah pesan
pertama-tama pesan tersebut mesti diubah menjadi sebuah bilangan.
Sebagai contoh, sebuah kata atau huruf dapat diubah menjadi nilai
ASCII-nya. Kemudian nilai (bit-bit) ASCII tersebut dapat diubah
menjadi nilai decimal.
Pesan dienkripsi
menggunakan rumus :
C = M^e (mod N)
Cat : tanda ^
adalah symbol dari operasi pangkat.
-
Misal Ruben ingin mengirimkan
sebuah pesan sederhana, hanya sebuah huruf X misalnya. Nilai ASCII
dari X adalah 1011000 yang sama dengan nilai decimal 88. Maka M = 88 -
Untuk mengenkripsi pesan, Ruben
perlu melihat kunci publik Ivan. Dengan e = 7, N = 187 dan M = 88
maka
C = 88^7 (mod 187)
-
Kalau dihitung menggunakan
kalkulator biasa maka nilai yang dihasilkan akan tidak mencukupi
untuk ditampilkan di layer kakulator. Oleh karena itu kita akan
menggunakan sedikit trik. Kita tahu bahwa 7 = 4 + 2 + 1.
88^7 (mod 187) = [88^4 (mod 187)
* 88^2 (mod 187) * 88^1 (mod 187)] (mod 187)
88^1 = 88 = 88
(mod 187)
88^2 = 7744 = 77 (mod 187)
88^1 = 59.969.536 = 132 (mod 187)
88^7 = 88 * 77 * 132 = 894.432 = 11 (mod 187)
Maka cipher teks
yang dikirim Ruben ke Ivan adalah 11.
-
Sebagaimana kita tahu, operasi
eksponensial dalam aritmatika modular adalah salah satu fungsi satu
arah (one-way function), sehingga sangat sulit untuk menemukan
kembali pesan M jika diberikan C. Oleh karena itu Eko (pengganggu)
tidak dapat mendekripsi cipher teks tersebut.
-
Namun, Ivan dapat mendekripsi
cipher teks karena Ivan memiliki informasi tambahan yaitu mengetahui
nilai p dan q. Ivan perlu menghitung sebuah nilai, sebut saja dengan
d, yang merupakan kunci dekripsi atau lazim disebut kunci pribadi.
Nilai dihitung dengan rumus
e * d = 1 (mod
(p-1) * (q-1))
7 * d = 1 (mod 16 *
10)
7 * d = 1 (mod 160)
d = 23
Karena nilai d
diperoleh dengan cara menebak (iterasi atau trial-error) maka cara
ini sebenarnya tidak bisa dilakukan dengan efektif jika nilai p dan q
sangat besar. Cara yang lebih efektif dapat menggunakan algoritma
Euclid.
-
Untuk mendekripsi cipher teks,
Ivan menggunakan rumus
M = C^d (mod N)
M = 11^23 (mod 187)
M = [11^1 (mod 187) * 11^2 (mod 187) * 11^4 (mod 187) *
11^16 (mod 187) ] (mod 187)
M = 11 * 121 * 55 * 154 (mod 187)
M = 88 = X dalam ASCII
Selesai deh langkah2nya.
Menerapkan RSA secara huruf-per huruf seperti diatas bukanlah hal
yang baik karena akan membuat RSA menjadi seperti sistem
substitusi-monoalfabetik yang dapat dipecahkan dengan
analisis-frekuensi. Dalam praktiknya (lihat pkcs 1) enkripsi RSA
dilakukan pada blok dari bit yang lebih besar sehingga akan
menyulitkan (impossible) analisis frekuensi.
Serangan terhadap
algoritma RSA secara normal dilakukan dengan faktorisasi. Berhasil
tidaknya faktorisasi amat bergantung pada pemilihan nilai p dan q.
Semakin besar nilai p dan q maka faktorisasi semakin memakan waktu.
Kelemahan yang biasanya mengakibatkan RSA bisa di-crack adalah pada
keteledoran user ataupun pembuat aplikasi RSA (engineer) dalam
menerapkan algoritma RSA. Serangan pada RSA juga biasanya dilakukan
pada level protokol dimana celah tidak hanya muncul dari RSA namun
dapat berawal dari skema lain dalam protokol tersebut.
Sementara ini,
setelah usianya mencapai paruh baya, algoritma RSA tetap Simple But
Powerfull.