Translate

Monday, March 26, 2018

Pembahasan Kriptografi RSA Lengkap


  • ·           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 (Rivest—Shamir—Adleman). 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.


·           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)                                                       (rahasia)
7.  Y    (cipherteks)                                                      (tidak rahasia)
·           TEOREMA FERMAT.
Jika p adalah bilangan  prima  dan m adalah  bilangan  bulat  yang tidak  habis  dibagi  dengan p,  yaitu  FPB (a, p)  =  1, maka




·           FUNGSI EULER
Fungsi Euler  mendefinisikan   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

·           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).
Berdasarkan  sifat  persamaan (2) dapat ditulis menjadi

Atau

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

Misalkan SK dan PK dipilih sedemikian sehingga

Dengan mensubtitusikan persamaan (6) ke dalam persamaan (5) diperoleh

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


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

·           PEMBANGKITAN PASANGAN KUNCI
Secara  umum  pasangan  kunci  algoritma  RSA dapat dibangkitkan dengan cara berikut:
·         Pilih dua buah bilangan prima sembarang, p dan q.
·         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.
·         Hitung (r) = (p – 1)(q – 1).
·         Pilih kunci publik, PK, yang relatif prima terhadap (r).
·         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),                                                                                  

Dengan mencoba nilai-nilai m = 1, 2, 3, …, diperoleh nilai SK yang bulat adalah 1019. Ini adalah kunci dekripsi yang harus dirahasiakan.

·                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.
·         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.
·         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.

·           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.                                                                    

·           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.

·           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.

Pengenalan Citra Digital


 A.    Citra
Citra digital adalah gambar dua dimensi yang bisa ditampilkan pada layar komputer sebagai himpunan/ diskrit nilai digital yang disebut pixel/ picture elements. Dalam tinjauan matematis, citra merupakan fungsi kontinu dari intensitas cahaya pada bidang dua dimensi.
Citra digital adalah citra f(x,y) dimana dilakukan diskritisasi koordinat sampling/ spasial dan diskritisasi tingkat kwantisasi (kabuan/ kecemerlangannya). Citra digital merupakan fungsi intensitas cahaya f(x,y), dimana harga x dan harga y adalah koordinat spasial. Harga fungsi tersebut di setiap titik (x,y) merupakan tingkat kecemerlangan citra pada titik tersebut
Saat ini grafik komputer telah digunakan untuk pembuatan film-film animasi. Beberapa manfaat lain dari Grafik Komputer dalam kehidupan sehari-hari ialah :

Bidang Perancangan
Pada bidang ini grafik komputer digunakan untuk membuat berbagai desain dan model objek yang akan dibuat. Misalnya digunakan untuk mendesain suatu arsitektur bangunan,desain kendaraan dan lainnya. Menggunakan software desain grafis seperti auto cad, 3D MAX semuanya akan berlangsung secara mudah dan lebih spesifik dalam perancangan yang akan dibuat. Memperkecil tingkat kesalahan sehingga akan menghasilkan suatu model yang sama seperti aslinya.

Bidang Hiburan
Pada sekarang ini semua acara hiburan di TV banyak menggunakan grafik komputer.Mulai dari film kartun, iklan di TV hingga acara sinetron sekalipun sudah di selipi oleh grafik komputer. Grafik komputer disini berupa efek animasi yang dapat membuat film semakin menarik.
 
Bidang Pendidikan
Grafik komputer pada pendidikan digunakan untuk mempresentasikan objek-objek pada siswa secara nyata, dapat melalui power point ataupun software lainnya. Dengan penggunakan bentuk objek ini diharapkan siswa lebih nyata dalam menerima semua materi yang telah diajarkan. Tidak hanya teori saja tetapi sudah melihat bentuk dan simulasinya. Bentuk ini dapat berupa penggambaran bidang, ruang, grafik, gambar kerangka manusia,susunan tubuh manusia,dan sebagainya.

Aplikasi Permainan
Untuk grafik komputer pada games ini memang sangat dibutuhkan mulai dari pembuatan awal sampai proses manipulasi dimana pada prosesnya dapat diterapkan juga dengan teknik pengolahan citra, seperti dalam pemberian warna pada gambar-gambarnya,agar game tersebut terlihat lebih menarik. Hampir semua aplikasi permainan itu memanfatkan modus grafik. Aplikasi permainan itu sendiri terdiri dari, aplikasi strategi aplikasi tembak dan lari dan masih banyak lagi yang lainnya.
 
B.   Pixel 
Pixel (picture element) adalah sebuah titik yang merupakan elemen paling kecil pada citra satelit. Angka numerik (1 byte) dari pixel disebut digital number (DN). DN bisa ditampilkan dalam warna kelabu, berkisar antara putih dan hitam (gray scale), tergantung level energi yangterdeteksi. Pixel yang disusun dalam order yang benar akan membentuk sebuah citra. Kebanyakan citra satelit yang belum diproses disimpan dalam bentuk gray scale, yang merupakan skala warna dari hitam ke putih dengan derajat keabuan yang bervariasi. Untuk PJ, skala yang dipakai adalah 256 shade gray scale, dimana nilai 0 menggambarkan hitam, nilai 255 putih. Dua gambar di bawah ini menunjukkan derajat keabuan dan hubungan antara DN dan derajat keabuan yang menyusun sebuah citra. Untuk citra multispectral, masing masing pixel mempunyai beberapa DN, sesuai dengan jumlah band yang dimiliki. Sebagai contoh, untuk Landsat 7, masing-masing pixel mempunyai 7 DN dari 7 band yang dimiliki. Citra bisa ditampilkan untuk masing-masing band dalam bentuk hitam dan putih maupun kombinasi 3 band sekaligus, yang disebut color composites. Gambar di bawah ini menunjukkan composite dari beberapa band dari potongan Landat 7 dan pixel yang menyusunnya.
 
x

Sunday, March 25, 2018

Pengenalan - Pembahasan Kriptografi Lengkap


KRIPTOGRAFI

Sebelum melangkah lebih jauh untuk melakukan analisis terhadap beberapa SPI yang ada, diperlukan perangkat-perangkat untuk membantu proses analisis tersebut. Salah satu dasar yang penting adalah penggunaan kriptografi sebagai landasan-landasan teoritis bagaimana sistem-sistem perdagangan di Internet tersebut melakukan pengamanan.
Kriptografi adalah ilmu yang mempelajari bagaimana membuat suatu pesan yang dikirim pengirim dapat disampaikan kepada penerima dengan aman [Schn 96]. Kriptografi dapat memenuhi kebutuhan umum suatu transaksi:
  1. Kerahasiaan (confidentiality) dijamin dengan melakukan enkripsi (penyandian).
  2. Keutuhan (integrity) atas data-data pembayaran dilakukan dengan fungsi hash satu arah.
  3. Jaminan atas identitas dan keabsahan (authenticity) pihak-pihak yang melakukan transaksi dilakukan dengan menggunakan password atau sertifikat digital. Sedangkan keotentikan data transaksi dapat dilakukan dengan tanda tangan digital.
  4. Transaksi dapat dijadikan barang bukti yang tidak bisa disangkal (non-repudiation) dengan memanfaatkan tanda tangan digital dan sertifikat digital.
Pembakuan penulisan pada kriptografi dapat ditulis dalam bahasa matematika. Fungsi-fungsi yang mendasar dalam kriptografi adalah enkripsi dan dekripsi. Enkripsi adalah proses mengubah suatu pesan asli (plaintext) menjadi suatu pesan dalam bahasa sandi (ciphertext).
(M)
dimana
M = pesan asli
E = proses enkripsi
C = 
pesan dalam bahasa sandi (untuk ringkasnya disebut sandi)
Sedangkan dekripsi adalah proses mengubah pesan dalam suatu bahasa sandi menjadi pesan asli kembali.
M = (C)

= proses dekripsi

Umumnya, selain menggunakan fungsi tertentu dalam melakukan enkripsi dan dekripsi, seringkali fungsi itu diberi parameter tambahan yang disebut dengan istilah kunci.
Untuk memudahkan penggambaran suatu skenario komunikasi dalam pembahasan selanjutnya, maka dipergunakan nama-nama orang yang relevan dengan peran yang dilakukannya dalam komunikasi itu.
Kode & nama
Penjelasan
A: Anto
Pihak pertama
B: Badu
Pihak kedua
C: Chandra
Pihak ketiga
E: Edi
Pihak penyadap informasi yang tidak diperuntukkan kepadanya (eavesdropper)
M: Maman
Pihak yang tidak hanya menyadap informasi, namun juga mengubah informasi yang disadap (malacious person)
T: Tari, Tata,
Tania
Pihak yang dipercaya oleh pihak pertama, kedua dan ketiga (trusted person)
Tabel 3.1. Nama-nama ganti untuk mempermudah penjelasan
Bab ini akan menguraikan mengenai beberapa jenis serangan, jenis-jenis kunci kriptografi, berbagai jenis perangkat dan protokol kriptografi, serta masalah panjang kunci kriptografi.

Jenis Serangan
Selain ada pihak yang ingin menjaga agar pesan tetap aman, ada juga ternyata pihak-pihak yang ingin mengetahui pesan rahasia tersebut secara tidak sah. Bahkan ada pihak-pihak yang ingin agar dapat mengubah isi pesan tersebut. Ilmu untuk mendapatkan pesan yang asli dari pesan yang telah disandikan tanpa memiliki kunci untuk membuka pesan rahasia tersebut disebut kriptoanalisis. Sedangkan usaha untuk membongkar suatu pesan sandi tanpa mendapatkan kunci dengan cara yang sah dikenal dengan istilah serangan (attack).
Di bawah ini dijelaskan beberapa macam penyerangan terhadap pesan yang sudah dienkripsi:
  1. Ciphertext only attack, penyerang hanya mendapatkan pesan yang sudah tersandikan saja.
  2. Known plaintext attack, dimana penyerang selain mendapatkan sandi, juga mendapatkan pesan asli. Terkadang disebut pula clear-text attack.
  3. Choosen plaintext attack, sama dengan known plaintext attack, namun penyerang bahkan dapat memilih penggalan mana dari pesan asli yang akan disandikan.
Berdasarkan bagaimana cara dan posisi seseorang mendapatkan pesan-pesan dalam saluran komunikasi, penyerangan dapat dikategorikan menjadi:
  1. Sniffing: secara harafiah berarti mengendus, tentunya dalam hal ini yang diendus adalah pesan (baik yang belum ataupun sudah dienkripsi) dalam suatu saluran komunikasi. Hal ini umum terjadi pada saluran publik yang tidak aman. Sang pengendus dapat merekam pembicaraan yang terjadi.
  2. Replay attack [DHMM 96]: Jika seseorang bisa merekam pesan-pesan handshake(persiapan komunikasi), ia mungkin dapat mengulang pesan-pesan yang telah direkamnya untuk menipu salah satu pihak.
  3. Spoofing [DHMM 96]: Penyerang – misalnya Maman – bisa menyamar menjadi Anto. Semua orang dibuat percaya bahwa Maman adalah Anto. Penyerang berusaha meyakinkan pihak-pihak lain bahwa tak ada salah dengan komunikasi yang dilakukan, padahal komunikasi itu dilakukan dengan sang penipu/penyerang. Contohnya jika orang memasukkan PIN ke dalam mesin ATM palsu – yang benar-benar dibuat seperti ATM asli – tentu sang penipu bisa mendapatkan PIN-nya dan copy pita magentik kartu ATM milik sang nasabah. Pihak bank tidak tahu bahwa telah terjadi kejahatan.
  4. Man-in-the-middle [Schn 96]: Jika spoofing terkadang hanya menipu satu pihak, maka dalam skenario ini, saat Anto hendak berkomunikasi dengan Badu, Maman di mata Anto seolah-olah adalah Badu, dan Maman dapat pula menipu Badu sehingga Maman seolah-olah adalah Anto. Maman dapat berkuasa penuh atas jalur komunikas ini, dan bisa membuat berita fitnah.
Kabel koaksial yang sering dipergunakan pada jaringan sangat rentan terhadap serangan vampire tap [Tane 89], yakni perangkat keras sederhana yang bisa menembus bagian dalam kabel koaksial sehingga dapat mengambil data yang mengalir tanpa perlu memutuskan komunikasi data yang sedang berjalan. Seseorang dengan vampire tap dan komputer jinjing dapat melakukan serangan pada bagian apa saja dari kabel koaksial.
Penyerang juga bisa mendapatkan kunci dengan cara yang lebih tradisional, yakni dengan melakukan penyiksaan, pemerasan, ancaman, atau bisa juga dengan menyogok seseorang yang memiliki kunci itu. Ini adalah cara yang paling ampuh untuk mendapat kunci.

Kunci Simetris
Ini adalah jenis kriptografi yang paling umum dipergunakan. Kunci untuk membuat pesan yang disandikan sama dengan kunci untuk membuka pesan yang disandikan itu. Jadi pembuat pesan dan penerimanya harus memiliki kunci yang sama persis. Siapapun yang memiliki kunci tersebut – termasuk pihak-pihak yang tidak diinginkan – dapat membuat dan membongkar rahasia ciphertext. Problem yang paling jelas disini terkadang bukanlah masalah pengiriman ciphertext-nya, melainkan masalah bagaimana menyampaikan kunci simetris tersebut kepada pihak yang diinginkan. Contoh algoritma kunci simetris yang terkenal adalah DES (Data Encryption Standard) dan RC-4.

Kunci Asimetris
Pada pertengahan tahun 70-an Whitfield Diffie dan Martin Hellman menemukan teknik enkripsi asimetris yang merevolusi dunia kriptografi. Kunci asimetris adalah pasangan kunci-kunci kriptografi yang salah satunya dipergunakan untuk proses enkripsi dan yang satu lagi untuk dekripsi. Semua orang yang mendapatkan kunci publik dapat menggunakannya untuk mengenkripsikan suatu pesan, sedangkan hanya satu orang saja yang memiliki rahasia tertentu – dalam hal ini kunci privat – untuk melakukan pembongkaran terhadap sandi yang dikirim untuknya.
Dengan cara seperti ini, jika Anto mengirim pesan untuk Badu, Anto dapat merasa yakin bahwa pesan tersebut hanya dapat dibaca oleh Badu, karena hanya Badu yang bisa melakukan dekripsi dengan kunci privatnya. Tentunya Anto harus memiliki kunci publik Badu untuk melakukan enkripsi. Anto bisa mendapatkannya dari Badu, ataupun dari pihak ketiga seperti Tari.


Teknik enkripsi asimetris ini jauh lebih lambat ketimbang enkripsi dengan kunci simetris. Oleh karena itu, biasanya bukanlah pesan itu sendiri yang disandikan dengan kunci asimetris, namun hanya kunci simetrislah yang disandikan dengan kunci asimetris. Sedangkan pesannya dikirim setelah disandikan dengan kunci simetris tadi. Contoh algoritma terkenal yang menggunakan kunci asimetris adalah RSA (merupakan singkatan penemunya yakni Rivest, Shamir dan Adleman).

Fungsi Hash Satu Arah
Kini akan dibahas mengenai keutuhan pesan saat dikirimkan. Bagaimana jika Anto mengirimkan surat pembayaran kepada Badu sebesar 1 juta rupiah, namun di tengah jalan Maman (yang ternyata berhasil membobol sandi entah dengan cara apa) membubuhkan angka 0 lagi dibelakangnya sehingga menjadi 10 juta rupiah? Di mata Tari, pesan tersebut harus utuh, tidak diubah-ubah oleh siapapun, bahkan bukan hanya oleh Maman, namun juga termasuk oleh Anto, Badu dan gangguan pada transmisi pesan (noise). Hal ini dapat dilakukan dengan fungsi hash satu arah (one-way hash function), yang terkadang disebut sidik jari (fingerprint), hashmessage integrity check, atau manipulation detection code.
Saat Anto hendak mengirimkan pesannya, dia harus membuat sidik jari dari pesan yang akan dikirim untuk Badu. Pesan (yang besarnya dapat bervariasi) yang akan di-hash disebut pre-image, sedangkan outputnya yang memiliki ukurannya tetap, disebut hash-value (nilai hash)Kemudian, melalui saluran komunikasi yang aman, dia mengirimkan sidik jarinya kepada Badu. Setelah Badu menerima pesan si Anto – tidak peduli lewat saluran komunikasi yang mana – Badu kemudian juga membuat sidik jari dari pesan yang telah diterimanya dari Anto. Kemudian Badu membandingkan sidik jari yang dibuatnya dengan sidik jari yang diterimanya dari Anto. Jika kedua sidik jari itu identik, maka Badu dapat yakin bahwa pesan itu utuh tidak diubah-ubah sejak dibuatkan sidik jari yang diterima Badu. Jika pesan pembayaran 1 juta rupiah itu diubah menjadi 10 juta rupiah, tentunya akan menghasilkan nilai hash yang berbeda.

Fungsi hash untuk membuat sidik jari tersebut dapat diketahui oleh siapapun, tak terkecuali, sehingga siapapun dapat memeriksa keutuhan dokumen atau pesan tertentu. Tak ada algoritma rahasia dan umumnya tak ada pula kunci rahasia.
Jaminan dari keamanan sidik jari berangkat dari kenyataan bahwa hampir tidak ada dua pre-image yang memiliki hash-value yang sama. Inilah yang disebut dengan sifat collision free dari suatu fungsi hash yang baik. Selain itu, sangat sulit untuk membuat suatu pre-image jika hanya diketahui hash-valuenya saja.
Contoh algoritma fungsi hash satu arah adalah MD-5 dan SHA. Message authentication code (MAC) adalah salah satu variasi dari fungsi hash satu arah, hanya saja selain pre-image, sebuah kunci rahasia juga menjadi input bagi fungsi MAC.

Tanda Tangan Digital
Badu memang dapat merasa yakin bahwa sidik jari yang datang bersama pesan yang diterimanya memang berkorelasi. Namun bagaimana Badu dapat merasa yakin bahwa pesan itu berasal dari Anto? Bisa saja saat dikirimkan oleh Anto melalui saluran komunikasi yang tidak aman, pesan tersebut diambil oleh Maman. Maman kemudian mengganti isi pesan tadi, dan membuat lagi sidik jari dari pesan yang baru diubahnya itu. Lalu, Maman mengirimkan lagi pesan beserta sidik jarinya itu kepada Badu, seolah-oleh dari Anto.
Untuk mencegah pemalsuan, Anto membubuhkan tanda tangannya pada pesan tersebut. Dalam dunia elektronik, Anto membubuhkan tanda tangan digitalnya pada pesan yang akan dikirimkan untuk Badu sehingga Badu dapat merasa yakin bahwa pesan itu memang dikirim oleh Anto.
Sifat yang diinginkan dari tanda tangan digital diantaranya adalah:
  1. Tanda tangan itu asli (otentik), tidak mudah ditulis/ditiru oleh orang lain. Pesan dan tanda tangan pesan tersebut juga dapat menjadi barang bukti, sehingga penandatangan tak bisa menyangkal bahwa dulu ia tidak pernah menandatanganinya.
  2. Tanda tangan itu hanya sah untuk dokumen (pesan) itu saja. Tanda tangan itu tidak bisa dipindahkan dari suatu dokumen ke dokumen lainnya. Ini juga berarti bahwa jika dokumen itu diubah, maka tanda tangan digital dari pesan tersebut tidak lagi sah.
  3. Tanda tangan itu dapat diperiksa dengan mudah.
  4. Tanda tangan itu dapat diperiksa oleh pihak-pihak yang belum pernah bertemu dengan penandatangan.
  5. Tanda tangan itu juga sah untuk kopi dari dokumen yang sama persis.
Meskipun ada banyak skenario, ada baiknya kita perhatikan salah satu skenario yang cukup umum dalam penggunaan tanda tangan digital. Tanda tangan digital memanfaatkan fungsi hash satu arah untuk menjamin bahwa tanda tangan itu hanya berlaku untuk dokumen yang bersangkutan saja. Bukan dokumen tersebut secara keseluruhan yang ditandatangani, namun biasanya yang ditandatangani adalah sidik jari dari dokumen itu beserta timestamp-nya dengan menggunakan kunci privat. Timestamp berguna untuk menentukan waktu pengesahan dokumen.


Keabsahan tanda tangan digital itu dapat diperiksa oleh Badu. Pertama-tama Badu membuat lagi sidik jari dari pesan yang diterimanya. Lalu Badu mendekripsi tanda tangan digital Anto untuk mendapatkan sidik jari yang asli. Badu lantas membandingkan kedua sidik jari tersebut. Jka kedua sidik jari tersebut sama, maka dapat diyakini bahwa pesan tersebut ditandatangani oleh Anto.

Masalah Pertukaran Kunci Publik

Anto hendak mengirimkan Badu suatu dokumen rahasia. Jika mereka belum pernah bertemu sebelumnya, tentu Badu harus mengirimkan kunci publiknya kepada Anto agar Anto dapat melakukan enkripsi yang pesannya hanya dapat dibuka oleh Badu. Demikian juga pula sebaliknya, Anto harus mengirimkan kepada Badu kunci publiknya agar Badu dapat memeriksa keaslian tanda tangan Anto pada pesan yang dikirim. Dengan cara ini Anto dapat memastikan pesan itu sampai ke tujuannya, sedangkan Badu dapat merasa yakin bahwa pengirim pesan itu adalah Anto.
Masalah yang muncul adalah bagaimana mereka dapat saling bertukar kunci dengan aman? Bisa saja di tengah pertukaran kunci-kunci publik milik Anto dan Budi itu diganti dengan kunci publik milik Maman. Dengan begitu Maman dengan bebas dapat menyadap dan mengubah seluruh informasi. Inilah suatu contoh dari man-in-the-middle attack.
Anto dan Badu harus sama-sama yakin bahwa kunci-kunci publik yang mereka dapatkan benar-benar otentik. Mereka bisa mendapatkannya dari sesorang yang dipercaya, Tari misalnya. Setiap anggota jaringan diasumsikan telah memiliki saluran komunikasi pribadi yang aman dengan Tari. Saluran inilah yang dimanfaatkan untuk mengirim kunci publik Badu ke Anto (dan sebaliknya). Tari menjadi penjamin keabsahan kunci jika Anto dan Badu sebelumnya tidak pernah bertukar kunci publik. Skenario ini tetap membutuhkan kunci-kunci kriptografi lagi (baik itu kunci simetris ataupun kunci asimetris) untuk pengamanan saluran komunikasi antara Tari dengan Anto atau Badu.

Sertifikat Digital
Masalah di atas dapat dipecahkan dengan penggunaan sertifikat digital. Tari tidak lagi setiap saat menjadi penukar kunci, namun Tari cukup menandatangani kunci publik milik setiap orang di jaringan tersebut. Sebenarnya dalam sertifikat tersebut tak hanya berisi kunci publik, namun dapat berisi pula informasi penting lainnya mengenai jati diri pemilik kunci publik, seperti misalnya nama, alamat, pekerjaan, jabatan, perusahaan dan bahkan hash dari suatu informasi rahasia. Semua orang mempercayai otoritas Tari dalam memberikan tanda tangan, sehingga orang-orang dalam jaringan itu merasa aman menggunakan kunci publik yang telah ditandatangani Tari. 
Jika Maman berhasil mencuri sertifikat digital yang dipertukarkan antara Anto dan Badu, serta menggantinya dengan sertifikat digital milik dirinya sendiri, maka Anto dan Badu dapat segera melihat bahwa sertifikat digital yang diterimanya bukan ‘lawan bicara’ yang semestinya.
Bagaimana jika Chandra – yang berada di luar jaringan Tari – hendak berkomunikasi dengan Anto? Chandra memiliki juga sertifikat, tetapi tidak ditandatangani oleh Tari, melainkan oleh Tata, seseorang yang dipercaya dalam jaringan tempat Chandra berada. Tari dan Tata adalah otoritas sertifikat (certificate authority), yaitu pihak-pihak yang berwenang memberikan sertifikat. Namun Anto tidak mengenal dan tidak mempercayai Tata. Masalah ini dapat diselesaikan jika ada otoritas sertifikat (OS) yang kedudukannya lebih tinggi dari Tata dan Tari – katakanlah Tania. Tania memberikan pengesahan kepada Tata dan Tari. Jadi ada hirarki dari sertifikat digital. Jika Tania berada pada kedudukan hirarki yang paling tinggi, maka Tania disebut otoritas sertifikat utama (root certificate authority).
Anto mempercayai tanda tangan Tari. Namun karena Tari sendiri keberadaannya disahkan oleh Tania, tentunya Anto harus mengakui otoritas Tania. Jika Tania memberikan pengesahan kepada OS lain dibawahnya, seperti Tata, maka dengan merunut struktur hirarki percabangan OS, Anto dapat memeriksa kebenaran sertifikat digital milik Chandra yang disahkan oleh Tata. 
Serangan terhadap sistem yang memiliki pengamanan dengan sertifikat digital sulit dilakukan. Jelas Edi tidak mendapatkan apa-apa kalaupun ia memainkan ulang percakapan antara Anto dan Chandra. Edi membutuhkan kunci privat untuk bisa membuka pesan-pesan yang dipertukarkan, padahal kunci privat itu tidak ada di dalam sertifikat digital.
Penukaran sertifikat digital Chandra dengan sertifikat digital Maman akan segera diketahui, karena sertifikat digital itu pasti berbeda. Sedangkan jika sertifikat yang dipertukarkan antara Chandra dan Anto tidak diganti, tetapi yang diganti oleh Maman adalah pesan yang dipertukarkan, maka tentu ada ketidakcocokan dalam pemeriksaan tanda tangan digital.
Secara teoritis keunggulan dari tanda tangan digital adalah kemampuan untuk melakukan proses otentikasi secara off-line. Pemeriksa cukup memiliki kunci publik dari OS utama untuk mengetahui sah-tidaknya kunci publik dari lawan bicaranya. Selain itu untuk meningkatkan keamanan, kunci publik OS utama bisa saja diintegrasikan dalam program aplikasi. Namun kenyataannya, karena ada kemungkinan sertifikat digital tersebut hilang, tercuri atau identitas pemilik sertifikat berubah (perubahan alamat surat elektronik atau nomor KTP misalnya), maka sertifikat digital perlu diperiksa keabsahannya dengan melihat daftar sertifikat terbatalkan (certificate revocation list) yang disimpan oleh OS.

Tanda Tangan Pesan Ganda
Andaikan Anto membuat perjanjian jual-beli dengan Badu. Untuk masalah pembayaran, Anto menginstruksikan bank untuk memberikan kepada Badu sejumlah uang sesuai dengan perjanjian jual-beli, namun Anto tidak ingin agar bank mengetahui isi perjanjian jual-beli itu.
  1. Anto membuat sidik jari dari SPP (yaitu Hash(SPP)) dan sidik jari SPJB (yakni Hash(SPJB)).
  2. Kemudian, Anto membuat sebuah sidik jari baru dari gabungan kedua sidik jari sebelumnya ( Hash ( (Hash(SPP) + Hash(SPJB) ) ). Hasil hash tersebut dinamakan sidik jari pesan ganda SPP & SPJB.
  3. Anto menyerahkan surat perjanjian jual belinya kepada Badu. Selain itu Anto juga menyerahkan surat perintah pembayaran beserta sidik jari pesan ganda SPP & SPJB kepada bank.
  4. Saat Badu ingin mengambil uang di bank, Badu membuat sidik jari dari surat perjanjian jual beli (SPJB). Badu menyerahkan sidik jari SPJB kepada bank.
  5. Bank membuat sidik jari dari surat perintah pembayaran (SPP).
  6. Bank menggabungkan sidik jari SPP dengan sidik jari SPJB yang diterimanya dari Badu, kemudian meng-hash-nya sehingga dihasilkan sidik jari pesan ganda SPP & SPJB.
  7. Jika sidik jari pesan ganda SPP & SPJB yang baru dibuat itu sama dengan yang telah diberikan oleh Anto, maka bank menjalankan kewajibannya kepada Badu.   
     Jika sidik jari pesan ganda SPP & SPJB dienkripsi dengan kunci privat Anto, maka akan menjadi tanda tangan pesan ganda (dual-signature) Anto untuk kedua perjanjian tersebut [ViMa 97].

Protokol Pembagian Rahasia Jika Anto memiliki rahasia, ia dapat memberikan ‘separuh’ rahasia itu kepada Badu dan ‘separuh’ rahasia itu kepada Chandra. Badu, yang menerima paruh pertama rahasia Anto, tidak bisa mengetahui apa isi rahasia itu. Demikian pula dengan Chandra. Namun, jika Badu dan Chandra menggabungkan potongan-potongan rahasia itu, maka akan tergambar rahasia Anto. Pembagian rahasia (secret splitting) dapat dilakukan dengan cara:Anto membuat seuntai string acak R yang panjangnya sama dengan pesan rahasia M.
    1. Anto melakukan operasi XOR antara M dengan R, sehingga menghasilkan S.
    2. Anto memberikan R kepada Badu dan S kepada Chandra
    3. Jika Badu dengan Chandra bertemu, maka mereka sanggup mendapatkan pesan rahasia M dengan cara melakukan operasi XOR antara S dengan R.
Protokol Komitmen-Bit

Protokol ini bermanfaat kalau misalnya Anto hendak membuat suatu pernyataan atau komitmen (katakanlah suatu string binari 1000), namun Anto tak ingin agar Badu mengetahui isi pernyatan tersebut sebelum saatnya. Badu harus merasa yakin bahwa Anto pada saatnya nanti, benar-benar mengeluarkan isi pernyataan yang sebenarnya saat melakukan komitmen, dan tidak mengeluarkan pernyataan yang sudah diubah (misalnya mengubah string tadi menjadi 1001). Ada beberapa jenis protokol komitmen-bit, namun di bawah ini hanya dijelaskan salah satu diantaranya, yakni dengan fungsi hash satu arah:
  1. Anto membuat dua buah string secara acak, yakni R1 dan R2
  2. Anto menggabungkan kedua string acak itu ke dalam pernyataannya (b) yang akan dikomitmenkan menjadi (R1, R2, b)
  3. Anto menghitung hash dari gabungan string itu, Hash(R1, R2, b).
  4. Anto kemudian mengirimkan hash tersebut beserta R1 kepada Badu. Badu akan menyimpannya untuk pemeriksaan nanti.
  5. Jika sudah tiba saatnya untuk menunjukkan pernyataannya, Anto memberikan seluruh string (R1, R2, b) kepada Badu.
  6. Badu memeriksa fungsi hash dari (R1, R2, b). Jika cocok dengan hash yang diperiksanya dulu, maka pernyataan Anto tidak diubah.
Tanda Tangan Buta
Badu disodori 100 amplop tertutup oleh Anto. Amplop itu berisi secarik pesan dan kertas karbon. Badu membuka 99 amplop secara acak. Jika seluruh amplop yang dibuka ternyata berisi pesan yang mirip, maka Badu dapat merasa bahwa amplop ke-100 juga berisi pesan yang mirip pula. Namun, jika satu saja dari 99 amplop tadi ada yang isi berbeda dari yang lain, maka Badu dapat mencurigai bahwa isi amplop ke-100 bisa saja juga tidak mirip dengan isi ke-98 amplop lainnya.
Dalam kasus dimana ternyata ke-99 amplop yang dibuka secara acak tadi berisi pesan yang mirip, maka dengan keyakinan yang cukup tinggi Badu berani menandatangani amplop terakhir yang belum dibuka. Tanda tangan Badu akan menembus amplop dan kertas karbon, sehingga pesan dalam amplop akan tertandatangani oleh Badu. Badu kurang lebih tahu apa isi pesan di amplop ke-100 itu. Protokol tanda tangan buta (blind signature) bekerja sebagai berikut:
  1. Anto ‘mengalikan’ dokumen (yang akan ditandatangani) dengan sebuah faktor pembuta.
  2. Anto mengirimkan dokumen itu kepada Badu
  3. Badu menandatangani dokumen itu
  4. Badu mengembalikan dokumen yang sudah ditandatangani tadi kepada Anto
  5. Anto membaginya dengan faktor pembuta, sehingga mendapatkan dokumen yang asli sudah tertandatangani oleh Badu. 
Lanjutan Bagian 2...