keamanan cyber 2
berarti “secret” (rahasia) dan “graphy” berarti
“writing” (tulisan) [3]. Para pelaku atau praktisi kriptografi disebut
cryptographers. Sebuah algoritma kriptografik (cryptographic algorithm),
disebut cipher, merupakan persamaan matematik yang dipakai untuk
proses enkripsi dan dekripsi. Biasanya kedua persamaan matematik (untuk
enkripsi dan dekripsi) tersebut memiliki hubungan matematis yang cukup
erat.
Proses yang dilakukan untuk mengamankan sebuah pesan (yang disebut
plaintext) menjadi pesan yang tersembunyi (disebut ciphertext) yaitu
enkripsi (encryption). Ciphertext yaitu pesan yang sudah tidak dapat
dibaca dengan mudah. Menurut ISO 7498-2, terminologi yang lebih tepat
dipakai yaitu “encipher”.
Proses sebaliknya, untuk mengubah ciphertext menjadi plaintext, disebut
dekripsi (decryption). Menurut ISO 7498-2, terminologi yang lebih tepat
untuk proses ini yaitu “decipher”.
Cryptanalysis yaitu seni dan ilmu untuk memecahkan ciphertext tanpa
bantuan kunci. Cryptanalyst yaitu pelaku atau praktisi yang menjalankan
cryptanalysis. Cryptology merupakan gabungan dari cryptography dan
cryptanalysis.
Enkripsi
Enkripsi dipakai untuk menyandikan data-data atau informasi sehingga
tidak dapat dibaca oleh orang yang tidak berhak. Dengan enkripsi data anda
disandikan (encrypted) dengan memakai sebuah kunci (key). Untuk
membuka (decrypt) data tersebut dipakai juga sebuah kunci yang dapat
sama dengan kunci untuk mengenkripsi (untuk kasus private key
cryptography) atau dengan kunci yang berbeda (untuk kasus public key
cryptography). Gambar 2.1 pada halaman 36 menunjukkan contoh proses
enkripsi dan dekripsi dengan dua kunci yang berbeda.
Secara matematis, proses atau fungsi enkripsi (E) dapat dituliskan sebagai:
(1)
dimana: M yaitu plaintext (message) dan C yaitu ciphertext.
Proses atau fungsi dekripsi (D) dapat dituliskan sebagai:
(2)
Elemen dari Enkripsi
Ada beberapa elemen dari enkripsi yang akan dijabarkan dalam beberapa
paragraf di bawah ini.
Algoritma dari Enkripsi dan Dekripsi. Algoritma dari enkripsi yaitu
fungsi-fungsi yang dipakai untuk melakukan fungsi enkripsi dan
dekripsi. Algoritma yang dipakai menentukan kekuatan dari enkripsi,
dan ini biasanya dibuktikan dengan basis matematika.
Berdasarkan cara memproses teks (plaintext), cipher dapat dikategorikan
menjadi dua jenis: block cipher and stream cipher. Block cipher bekerja
dengan memproses data secara blok, dimana beberapa karakter / data
digabungkan menjadi satu blok. Setiap proses satu blok menghasilkan
keluaran satu blok juga. Sementara itu stream cipher bekerja memproses
masukan (karakter atau data) secara terus menerus dan menghasilkan data
pada saat yang bersamaan.
Kunci yang dipakai dan panjangnya kunci. Kekuatan dari penyandian
bergantung kepada kunci yang dipakai . Beberapa algoritma enkripsi
memiliki kelemahan pada kunci yang dipakai . Untuk itu, kunci yang
lemah tersebut tidak boleh dipakai . Selain itu, panjangnya kunci, yang
biasanya dalam ukuran bit, juga menentukan kekuatan dari enkripsi. Kunci
yang lebih panjang biasanya lebih aman dari kunci yang pendek. Jadi
enkripsi dengan memakai kunci 128-bit lebih sukar dipecahkan dengan
algoritma enkripsi yang sama tetapi dengan kunci 56-bit. Semakin panjang
sebuah kunci, semakin besar keyspace yang harus dijalani untuk mencari
kunci dengan cara brute force attack atau coba-coba karena keyspace yang
harus dilihat merupakan pangkat dari bilangan 2. Jadi kunci 128-bit
memiliki keyspace 2128, sedangkan kunci 56-bit memiliki keyspace 256
.
Artinya semakin lama kunci baru bisa ketahuan.
Plaintext. Plaintext yaitu pesan atau informasi yang akan dikirimkan
dalam format yang mudah dibaca atau dalam bentuk aslinya.
Ciphertext. Ciphertext yaitu informasi yang sudah dienkripsi.
Kembali ke masalah algoritma, keamanan sebuah algoritma yang
dipakai dalam enkripsi atau dekripsi bergantung kepada beberapa aspek.
Salah satu aspek yang cukup penting yaitu sifat algoritma yang dipakai .
Apabila kekuatan dari sebuah algoritma sangat tergantung kepada
pengetahuan (tahu atau tidaknya) orang terhadap algoritma yang dipakai ,
maka algoritma tersebut disebut “restricted algorithm”. Apabila algoritma
tersebut bocor atau ketahuan oleh orang banyak, maka pesan-pesan dapat
terbaca. Tentunya hal ini masih bergantung kepada adanya kriptografer
yang baik. Jika tidak ada yang tahu, maka sistem tersebut dapat dianggap
aman (meskipun semu).
Meskipun kurang aman, metoda pengamanan dengan restricted algorithm
ini cukup banyak dipakai karena mudah implementasinya dan tidak perlu
diuji secara mendalam. Contoh penakai an metoda ini yaitu enkripsi
yang menggantikan huruf yang dipakai untuk mengirim pesan dengan
huruf lain. Ini disebut dengan “substitution cipher”.
Substitution Cipher dengan Caesar Cipher
Salah satu contoh dari “substitution cipher” yaitu Caesar Cipher yang
dipakai oleh Julius Caesar. Pada prinsipnya, setiap huruf digantikan
dengan huruf yang berada tiga (3) posisi dalam urutan alfabet. Sebagai
contoh huruf “a” digantikan dengan huruf “D” dan seterusnya.
Transformasi yang dipakai yaitu :
plain : a b c d e f g h i j k l m n o p q r s t u v w x y z
cipher: D E F G H I J K L M N O P Q R S T U V W X Y Z A B C
Latihan 1. Buat ciphertext dari kalimat di bawah ini.
PESAN SANGAT RAHASIA
Latihan 2. Cari plaintext dari kalimat ini
PHHW PH DIWHU WKH WRJD SDUWB
penakai an dari Caesar cipher ini dapat dimodifikasi dengan mengubah
jumlah gesaran (bukan hanya 3) dan juga arah geseran. Jadi kita dapat
memakai Caesar cipher dengan geser 7 ke kiri, misalnya. Hal ini
dilakukan untuk lebih menyulitkan orang yang ingin menyadap pesan sebab
dia harus mencoba semua kombinasi (26 kemungkinan geser).
ROT13
Substitution cipher yang masih umum dipakai di sistem UNIX yaitu
ROT13. Pada sistem ini sebuah huruf digantikan dengan huruf yang
letaknya 13 posisi darinya. Sebagai contoh, huruf “A” digantikan dengan
huruf “N”, huruf “B” digantikan dengan huruf “O”, dan seterusnya. Secara
matematis, hal ini dapat dituliskan sebagai:
(3)
Untuk mengembalikan kembali ke bentuk semulanya dilakukan proses
enkripsi ROT13 dua kali [42].
(4)
ROT13 memang tidak didisain untuk keamanan tingkat tinggi. ROT13,
misalnya dipakai untuk menyelubungi isi dari artikel (posting) di Usenet
news yang berbau ofensif. Sehingga hanya orang yang betul-betul ingin
membaca dapat melihat isinya. Contoh penakai an lain yaitu untuk
menutupi jawaban dari sebuah teka teki (puzzle) atau jika kita ingin marahmarah (memaki) akan tetapi ingin agar orang lain tidak tersinggung. (Orang
yang ingin membaca makian kita harus melakukan konversi ROT13
sendiri.)
Program dalam bahasa Perl untuk melakukan ROT13 dapat dilihat dalam
listing di bawah ini.
#! /usr/bin/perl
# rot13: rotate 13
# usageL rot13 < filename.txt
# bugs: only works with lower case
#
# Copyright 1998, Budi Rahardjo
# <rahard@paume.itb.ac.id>, <budi@vlsi.itb.ac.id>
# Electrical Engineering
# Institut Teknologi Bandung (ITB), Indonesia
#
while (<>) {
# read a line into $_
for ($i=0 ; $i < length($_) ; $i++) {
$ch = substr($_,$i,1);
# only process if it’s within a-z
# otherwise skip
if ( (ord($ch)>=97) and (ord($ch)<=122) ) {
$newch = &rot13($ch); # rotate it
printf(“%c”, $newch);
} else {
# just print character that was not processed
print $ch;
}
} # end for loop
} # done...
sub rot13 {
local($ch) = @_;
$asch = ord($ch) - 97; # get the ascii value and normalize it
$rotasch = $asch + 13; # rotate 13 it
# send it back to ascii
$rotasch = $rotasch % 26;
$rotasch = $rotasch + 97;
return($rotasch);
}
Latihan 3. Gunakan program di atas atau buat program sendiri untuk
meng-ROT13-kan kalimat di bawah ini:
“kalau mau aman, pakai enkripsi bung”
Catatan: lupakan spasi dan tanda koma.
Setelah itu, jalankan ROT13 kembali untuk mengembalikan
teks menjadi kalimat semula.
Beberapa editor, seperti vi dan emacs, memiliki fungsi rot13 agar mudah
dipakai . Tahukah anda kunci / cara mengaktifkan rot13 pada kedua
editor tersebut?
Caesar cipher dan ROT13 disebut juga “monoalphabetic ciphers” karena
setiap huruf digantikan dengan sebuah huruf. Huruf yang sama akan
memikili pengganti yang sama. Misalnya huruf “a” digantikan dengan
huruf “e”, maka setiap huruf “a” akan digantikan dengan huruf “e”.
Mono alphabetic cipher ini agak mudah dipecahkan dengan menganalisa
ciphertext apabila beberapa informasi lain (seperti bahasa yang dipakai )
dapat diketahui. Salah satu cara penyerangan (attack) yang dapat dilakukan
yaitu dengan menganalisa statistik dari frekuensi huruf yang muncul. Cara
ini disebut frequency analysis [44] dan dimotori oleh Al-Kindi sebagai
salah seorang jagoan statistik. Stallings dalam bukunya [45] menunjukkan
statistik kemunculan huruf untuk tulisan dalam bahasa Inggris, dimana
huruf “e” yang paling banyak muncul. Cara yang sama dapat dilakukan
untuk mencari distribusi penakai an huruf dalam teks berbahasa Indonesia.
#! /usr/bin/perl
# statistik munculnya jumlah huruf
# statchar.pl < filename.txt
# bugs: only works with lower case
#
# Copyright 1998, Budi Rahardjo
# <rahard@paume.itb.ac.id>, <budi@vlsi.itb.ac.id>
# Electrical Engineering
# Institut Teknologi Bandung (ITB), Indonesia
#
while (<>) {
# read a line into $_
for ($i=0 ; $i < length($_) ; $i++) {
$ch = substr($_,$i,1);
# only process if it’s within a-z
# otherwise skip
if ( (ord($ch)>=97) and (ord($ch)<=122) ) {
$ordch= ord($ch);
$cumulative{$ordch}++;
$total++;
}
} # end for loop
} # done...
for ($i=97 ; $i <=122 ; $i++) {
$muncul = $cumulative{$i};
$persenmuncul = $muncul / $total * 100;
printf(“%c = %d (%.2g\%)\n”, $i, $muncul, $persenmuncul);
}
Latihan 4. Cari frekuensi munculnya huruf “a” sampai dengan “z”
dalam teks yang memakai bahasa Indonesia. Peragakan
grafik distribusinya. Sebutkan lima huruf yang paling sering
dan paling jarang dipakai dalam bahasa Indonesia.1
Buat
program sendiri atau gunakan perl script di atas untuk
mencari distribusinya.
Frequency analysis bermanfaat jika teks yang tersedia cukup panjang. Teks
yang pendek, dengan jumlah huruf yang lebih sedikit, biasanya memiliki
deviasi dari data-data statistik munculnya huruf. Selain itu ada beberapa
kasus dimana sengaja dibuat teks yang “merusak” struktur frekuensi
tersebut. Sebagai contoh, pengarang Perancis yang bernama Georges Perec
di tahun 1969 menulis “La Disparition” (sebuah novel dengan 200
halaman) tanpa kata yang memakai huruf “e”. Karya ini kemudian
diterjemahkan oleh ke dalam bahasa Inggris oleh seorang pengarang Inggris
yang bernama Gilbert Adair dengan tetap tanpa memakai huruf “e”.
Judul terjemahannya yaitu “A Void”. Cerita ini diulas dalam buku [44].
Meskipun banyak usaha dilakukan untuk mempersulit frequency analysis,
monoalphabetic cipher relatif tetap mudah dipecahkan. Salah satu cara
untuk mempersulit yaitu dengan memakai polyalphabetic cipher.
Contoh implementasinya dari Caesar cipher yaitu dengan memakai
dua tabel, dimana yang satu digeser 3 dan satunya lagi digeser 7, misalnya.
Huruf pertama dari plain text akan digantikan dengan memakai tabel
pertama (yang digeser 3), huruf kedua digantikan dengan memakai
tabel kedua (yang digeser 7), huruf selanjutnya memakai tabel pertama
kembali dan seterusnya. Dengan mekanisme ini, huruf “b” ada
kemungkinan dipetakan ke huruf lain, tidak sama. Hal ini mengacaukan
analisis yang memakai statistik. Kita juga dapat mempersulit lebih
lanjut dengan memakai lebih dari dua tabel konversi.
Multiple-letter encryption
Untuk meningkatkan keamanan, enkripsi dapat dilakukan dengan
mengelompokkan beberapa huruf menjadi sebuah kesatuan (unit) yang
kemudian dienkripsi. Ini disebut multiple-letter encryption. Salah satu
contoh multiple-letter encryption yaitu “Playfair”.
Enigma Rotor Machine
Enigma rotor machine merupakan sebuah alat enkripsi dan dekripsi
mekanik yang dipakai dalam perang dunia ke dua oleh Jerman. Dia
terdiri atas beberapa rotor dan kabel yang silang menyilang menyebabkan
substitusi alfabet yang selalu berubah sehingga Enigma
mengimplementasikan polyalphabetic chiper. Setiap huruf diketikkan, rotor
berputar untuk mengubah tabel konversi. Susunan dari rotor dan kondisi
awalnya merupakan kunci dari enkripsinya. Perubahan ini sangat
menyulitkan analisis biasa dan statistik. Buku “Code Book” [44] banyak
membahas tentang Enigma ini.
Penyandian yang memakai Enigma ini akhirnya berhasil dipecahkan
oleh Alan Turing dan kawan-kawannya di Inggris dengan memakai
komputer. Jadi aplikasi komputer yang pertama yaitu untuk melakukan
cracking terhadap Enigma. Banyak orang yang percaya bahwa perang dunia
kedua menjadi lebih singkat dikarenakan Sekutu berhasil memecahkan
sandi Jerman yang menentukan posisi U-boat nya.
penakai an Kunci
Salah satu cara untuk menambah tingkat keamanan sebuah algoritma
enkripsi dan dekripsi yaitu dengan memakai sebuah kunci (key) yang
biasanya disebut K. Kunci K ini dapat memiliki rentang (range) yang cukup
lebar. Rentang dari kemungkinan angka (harga) dari kunci K ini disebut
keyspace. Kunci K ini dipakai dalam proses enkripsi dan dekripsi
sehingga persamaan matematisnya menjadi:
(5)
(6)
Keamanan sistem yang dipakai kemudian tidak bergantung kepada
pengetahuan algoritma yang dipakai , melainkan bergantung kepada
kunci yang dipakai . Artinya, algoritma dapat diketahui oleh umum atau
dipublikasikan. Usaha untuk memecahkan keamanan sistem menjadi usaha
untuk memecahkan atau mencari kunci yang dipakai .
Usaha mencari kunci sangat bergantung kepada keyspace dari kunci K.
Apabila keyspace ini cukup kecil, maka cara brute force atau mencoba
semua kunci dapat dilakukan. Akan tetapi apabila keyspace dari kunci yang
dipakai cukup besar, maka usaha untuk mencoba semua kombinasi kunci
menjadi tidak realistis. Keyspace dari DES, misalnya, memiliki 56-bit.
Untuk mencoba semua kombinasi yang ada diperlukan kombinasi.
(Cerita tentang kelemahan DES akan diutarakan di bagian lain.)
Latihan 5. Jika sebuah komputer dapat mencoba 1000 kombinasi
dalam 1 detik, berapa waktu yang dibutuhkan untuk
mencoba semua kombinasi DES yang memakai 56 bit?
Aplikasi dari Enkripsi
Contoh penakai an enkripsi yaitu program Pretty Good Privacy (PGP)
[17], dan secure shell (SSH). Program PGP dipakai untuk mengenkripsi
dan menambahkan digital siganture dalam e-mail yang dikirim. Program
SSH dipakai untuk mengenkripsi sesion telnet ke sebuah host. Hal ini
akan dibahas lebih lanjut pada bagian lain
Permasalahan Kriptografi Kunci Privat
Pada penjelasan sebelumnya kita lihat bahwa proses enkripsi memakai
kunci dalam proses penyandiannya. Pada mulanya semua proses kriptografi
memakai satu kunci yang sama untuk mengunci data dan membuka
data. Jadi, kerahasiaan kunci ini sangat esensial. Jika kunci ini jatuh ke
tangan pihak yang tidak berwenang, maka terbukalah rahasia.
penakai an satu kunci ini membuat sistem pengamanan data tadi disebut
private-key cryptosystem, atau sistem kriptografi berbasis kunci privat.
Penekanan ada pada kata “privat”, dimana kunci ini harus dirahasiakan,
privat.
Selain itu sistem ini juga disebut symmetric cryptosystem, atau sistem
kriptografi simetris karena kunci yang dipakai untuk proses enkripsi sama
dengan kunci yang dipakai pada proses dekripsi. Simetris.
Dalam aplikasinya, sistem kripto kunci privat ini memiliki beberapa
masalah. Masalah pertama yaitu kesulitan dalam distribusi kunci. (Key
Distribution Problem.) Jika Anwar (A) ingin berkomunikasi melalui email
dengan Broto (B) dengan mengenkripsi datanya (karena tidak yakin jalur
data mereka aman dari penyadapan), apa kunci yang mereka gunakan?
Bagaimana cara mereka untuk membuat kesepakatan kunci yang akan
dipakai ? Jika kunci tersebut dikirimkan melalui jalur komunikasi yang
dianggap tidak aman tersebut, maka ada kemungkinan disadap orang.
Ada beberapa solusi terhadap masalah ini, misalnya Anwar dan Broto
bertemu dahulu secara fisik kemudian mendiskusikan kunci rahasia mereka.
Atau mereka memakai media lain (misalnya telepon, fax, handphone,
SMS) untuk mengirimkan kunci rahasia mereka. Pendekatan ini disebut
dengan out of band communication. Tapi masalahnya tidak semua orang
memiliki cara komunikasi lain, atau kemungkinannya cara lain menjadi
mahal dan tidak nyaman. Bayangkan jika anda harus mengkomunikasikan
password ini, “s%Xy7&*!ih198907@1”, kepada lawan bicara anda melalui
telepon. Sangat tidak nyaman dan sulit.
Kesulitan akan semakin bertambah jika kedua belah pihak belum pernah
kenal satu sama lainnya. Misalnya kita membuat sebuah situs web untuk
melakukan transaksi online. Kita belum kenal dengan (calon) pembeli yang
mengunjungi situs web kita. Bagaimana memilih kunci rahasia antara kita
dengan sang pembeli tersebut? (Ini permasalahan key exchange.)
Permasalahan kedua yaitu peningkatan jumlah kunci yang
eksponensial terhadap jumlah penakai . Pada contoh sebelumnya, jika
Anwar ingin berkomunikasi dengan Broto, mereka harus punya satu kunci
rahasia. Bagaimana jika Anwar ingin berkomunikasi dengan Dodi?
Tentunya mereka tidak bisa memakai kunci yang sama dengan kunci
Anwar-Broto. Anwar dan Dodi harus sepakat untuk memakai satu
kunci yang lain, kunci Anwar-Dodi. Bagaimana jika Broto ingin
berkomunikasi dengan Dodi? Maka akan ada kunci Broto-Dodi yang
berbeda dengan kunci yang sudah-sudah. Jika skenario ini kita teruskan
dengan menambahkan penakai lain, maka dapat kita lihat peningkatan
jumlah kunci secara eksponensial.
Jika n merupakan jumlah penakai yang akan saling berkomunikasi, maka
jumlah kunci yang ada yaitu :
jumlah kunci = (n) (n-1) / 2
Mari kita coba tabel jumlah kunci yang dipakai dengan jumlah
penakai .
Dapat kita lihat pada tabel di atas bahwa peningkatan jumlah kunci meledak
secara eksponensial. (Dari rumus pun dapat dilihat bahwa jumlah kunci
merupakan hasil kuadrat dari n.) Dengan hanya seratus ribu penakai saja,
sudah ada lima (5) milyar kunci. Padahal jumlah penakai Internet sangat
jauh lebih besar dari seratus ribu orang. Jika satu kunci membutuhkan
penyimpanan sebesar 1 kByte, maka dibutuhkan 5 TerraBytes untuk
menyimpan kunci 100.000 orang.
Jika kita berbicara tentang transaksi di Internet, e-commerce, maka bisa kita
lihat dua kesulitan di atas sudah membuat kriptografi kunci privat menjadi
tidak cocok. Jumlah penakai e-commerce lebih dari 100.000 orang.
Sementara itu key distribution juga sulit. Harus dicari sistem lain yang lebih
baik.
Kriptografi Kunci Publik
Kesulitan dalam penakai an kriptografi kunci privat membuat banyak
orang berpikir keras untuk mencari solusinya. Salah satu ide yang muncul
yaitu bagaimana jika kita membuat sebuah sistem penyadian dengan dua
kunci, dimana satu kunci dipakai untuk proses enkripsi dan satu kunci
lain dipakai untuk proses dekripsi.
Ide ini muncul dari Ralph Merkle ketika dia menjadi mahasiswa di sebuah
perguruan tinggi. Ide tersebut dikemukakannya kepada dosennya. Namun
ditolak mentah-mentah. Ide dua kunci tersebut tidak akan dapat
dilaksanakan. Itu ide gila. Ralph Merkle kemudian menulis sebuah artikel
yang dikirimkan ke journal, tapi artikel ini juga ditolak.
Bagaimana ide itu bermula? Saya ambil sebuah cerita. (Cerita ini bukan
contoh yang dipakai oleh Ralph Merkle.) Ceritanya yaitu sebagai
berikut.
Anwar dan Broto ingin bertukar pesan atau benda melalui pos. Mereka
tidak ingin orang lain, termasuk pak Pos, mengetahui isi kirimannya. Anwar
punya ide yang brilian. Anwar bertemu dengan Broto dan memberikan
sebuah gembok yang terbuka, belum terkunci. Sementara itu Anwar tetap
memegang kunci gemboknya tersebut. Kita sebut gembok ini yaitu
gembok-A. Ketika Broto ingin mengirimkan pesan (atau benda) kepada
Anwar, dia letakkan pesan tersebut di dalam sebuah peti. Beserta pesan
tersebut Broto juga memasukkan gembok dia (kita sebut gembok-B) yang
terbuka juga. Kemudian pesan dan gembok-B ini dimasukkan di peti dan
peti dikunci dengan gembok-A. Dalam kondisi seperti ini, tidak ada
seorangpun yang dapat membuka peti itu kecuali Anwar, karena hanya
Anwar yang memiliki kunci gembok-A. Broto pun setelah mengunci peti
tersebut tidak bisa membukanya kembali.
Di sisi penerima, Anwar, dia menerima peti yang sudah terkunci dengan
gembok-A. Tentu saja dia dengan mudah dapat membuka peti tersebut
karena dia memiliki kunci gembok-A. Setelah dia buka, maka dia dapat
melihat pesan yang dikirimkan oleh Broto beserta gembok-B milik Broto
yang terbuka.
Jika kemudian Anwar ingin mengirimkan jawaban atau pesan kepada
Broto, maka dia dapat memasukkan jawabannya ke dalam peti dan tidak
lupa mengikutsertakan gembok-A lagi yang terbuka ke dalamnya. Peti
tersebut kemudian dikunci dengan gembok-B lagi, yang hanya dapat dibuka
oleh Broto. Proses ini dapat berlangsung terus menerus.
Contoh cerita di atas tentu saja masih belum sempurna. Inti yang ingin
disampaikan yaitu bahwa ada kemungkinan untuk melakukan
pengamanan dengan tidak memakai enkripsi kunci privat. Penerima
dan pengirim pesan dapat memakai kunci yang berbeda untuk
pengamanan datanya.
Di tempat lain, ada seorang yang bernama Whitfield Diffie, juga memiliki
ide yang mirip. Setelah mengembara kesana kemari, akhirnya Diffie
bertemu dengan Martin Hellman yang menjadi profesor di Stanford
University. Keduanya kemudian merumuskan ide public-key cryptography
dalam sebuah makalah yang berjudul “New Directions in Cryptography”
[10] di tahun 1976. Lucunya Diffie dan Hellman tidak kenal Ralph Merkle
dan tidak tahu bahwa ada ide yang mirip. Pasalnya, artikel Merkle ditolak
oleh berbagai publikasi.
Ide utama pada public-key cryptography yaitu kunci yang dipakai
untuk melakukan proses enkripsi berbeda dengan proses dekripsi. Hal ini
dimungkinkan dengan penakai an rumus matematik yang indah. Namun
pencarian rumus matematik yang mana merupakan persoalan tersendiri.
Setelah keluarnya makalah tersebut, banyak orang yang mulai menaruh
perhatian pada kriptografi kunci publik. Ternyata ide Ralph Merkle benar
juga. Bahkan akhirnya Ralph Merkle mendapat penghargaan Kanellakis
Award dari ACM dan Kobayashi Award dari IEEE.
Salah satu kelompok yang tertarik kepada ide kriptografi kunci publik
tersebut yaitu kelompok di MIT yang terdiri atas Ron Rivest, Adi Shamir,
dan Len Adleman. Mereka mencoba mencari rumus matematik yang dapat
mengimplementasikan ide kunci publik tersebut. Akhirnya setelah sekian
lama berusaha, mereka menemukan algoritmanya yang kemudian dikenal
dengan nama RSA (yang merupakan singkatan dari nama keluarga ketiga
orang tersebut)1
. Algoritma ini kemudian mereka patenkan. Saat ini banyak
aplikasi di Internet yang memakai algoritma RSA ini.
Pada kriptografi kunci publik, seorang penakai memiliki dua buah kunci
yang saling berhubungan (secara matematik yang akan dijelaskan
kemudian). Kunci pertama disebut kunci publik. Kunci ini boleh diketahui
oleh umum. Bahkan kunci ini harus diketahui oleh pihak yang ingin
mengirimkan informasi rahasia ke penakai . Umumnya kunci publik ini
disimpan di sebuah database.
Kunci kedua disebut kunci privat. Kunci ini tidak boleh diketahui oleh
siapa pun kecuali oleh penakai itu sendiri. Itulah sebabnya dia disebut
privat.
Mari kita ambil contoh pengamanan data dengan memakai kriptografi
kunci publik ini. Sebelum dimulai, Anwar dan Broto masing-masing sudah
memiliki sepasang kunci. Anwar memiliki Kpublik-A dan Kprivat-A
sebagai pasangan kunci publik dan privatnya. Sementara itu Broto memiliki
Kpublik-B dan Kprivat-B sebagai pasangan kunci publik dan privatnya.
Kunci publik milik Anwar dan Broto keduanya disimpan di database
(website) umum sehingga dapat diakses oleh siapa saja.
Misalkan Anwar ingin mengirimkan sebuah pesan kepada Broto. Anwar
mencari kunci publik Broto. Setelah dicek di database Anwar
menemukannya, Kpublik-B. Maka Anwar kemudian mengenkripsi
pesannya dengan sebuah algoritma kunci publik (yang akan dijelaskan
kemudian) dengan kunci Kpublik-B.
Algoritma kunci publik (seperti misalnya RSA, ECC) memiliki sifat bahwa
jika dia dikunci oleh sebuah kunci publik, maka dia hanya dapat dibuka
dengan memakai kunci privat pasangannya. Dalam contoh di atas,
pesan dikunci dengan memakai Kpublik-B. Maka pesan di atas hanya
dapat dibuka dengan Kprivat-B. Satu-satunya orang yang memiliki akses
terhadap Kprivat-B yaitu Broto. Dengan kata lain, pesan di atas hanya
dapat dibuka oleh Broto. Anwar pun sebagai pengirim, setelah mengunci
pesan tersebut dengan Kpublik-B, tidak dapat membuka pesan itu kembali.
Demikianlah proses enkripsi yang terjadi pada kriptografi kunci publik.
Karena kunci yang dipakai untuk melakukan enkripsi berbeda dengan
kunci yang dipakai untuk proses dekripsi, maka sistem ini sering juga
disebut dengan asymetric cryptosystem, kriptografi kunci asimetrik.
Kriptografi Gabungan
Sejak dikembangkannya kriptografi kunci publik, selalu timbul pertanyaan
mana yang lebih baik antara kripto kunci publik dengan kripto kunci privat.
Para pakar kriptografi mengatakan bahwa keduanya tidak dapat
dibandingkan karena mereka memecahkan masalah dalam domain yang
berbeda. Kriptografi kunci privat (simetrik) merupakan hal yang terbaik
untuk mengenkripsi data. Kecepatannya dan keamanan akan choosenciphertext attack merupakan kelebihannya. Sementara itu kriptografi
dengan memakai kunci publik dapat melakukan hal-hal lain lebih baik,
misalnya dalam hal key management. (Diskusi lebih jauh dapat dilihat di
referensi [42].)
Karena masing-masing jenis kriptografi tersebut memiliki keuntungan
tersendiri, maka aplikasi sekarang banyak yang menggabungkan keduanya
(hybrid system). Kriptografi kunci publik dipakai untuk melakukan
pertukaran kunci (key exchange) dimana kunci yang dipertukarkan ini
(session key) akan dipakai untuk enkripsi dengan kunci privat.
Aplikasi yang memakai mekanisme seperti di atas antara lain; SSL,
dan PGP.
Data Encryption Standard (DES)
DES, atau juga dikenal sebagai Data Encryption Algorithm (DEA) oleh
ANSI dan DEA-1 oleh ISO, merupakan algoritma kriptografi simetris yang
paling umum dipakai saat ini. Sejarahnya DES dimulai dari permintaan
pemerintah Amerika Serikat untuk memasukkan proposal enskripsi. DES
memiliki sejarah dari Lucifer1
, enkripsi yang dikembangan di IBM kala itu.
Horst Feistel merupakan salah satu periset yang mula-mula
mengembangkan DES ketika bekerja di IBM Watson Laboratory di
Yorktown Heights, New York. DES baru secara resmi dipakai oleh
pemerintah Amerika Serikat (diadopsi oleh National Bureau of Standards)
di tahun 1977. Ia dikenal sebagai Federal Information Processing Standard
46 (FIPS PUB46).
Aplikasi yang memakai DES antara lain:
• enkripsi dari password di sistem UNIX
• berbagai aplikasi di bidang perbanka
Memecahkan DES
DES merupakan block chiper yang beroperasi dengan memakai blok
berukuran 64-bit dan kunci berukuran 56-bit. Brute force attack dengan
mencoba segala kombinasi membutuhkan 256 kombinasi atau sekitar 7x
1017 atau 70 juta milyar kombinasi.
DES dengan penakai an yang biasa (cookbook mode) dengan panjang
kunci 56 bit saat ini sudah dapat dianggap tidak aman karena sudah berhasil
dipecahkan dengan metoda coba-coba (brute force attack).
Ada berbagai group yang mencoba memecahkan DES dengan berbagai
cara. Salah satu group yang bernama distributed.net memakai
teknologi Internet untuk memecahkan problem ini menjadi sub-problem
yang kecil (dalam ukuran blok). penakai dapat menjalankan sebuah
program yang khusus dikembangkan oleh tim ini untuk mengambil
beberapa blok, via Internet, kemudian memecahkannya di komputer
pribadinya. Program yang disediakan meliputi berbagai operating system
seperti Windows, DOS, berbagai variasi Unix, Macintosh. Blok yang sudah
diproses dikembalikan ke distributed.net via Internet. Dengan cara ini
puluhan ribu orang, termasuk penulis, membantu memecahkan DES.
Mekanisme ini dapat memecahkan DES dalam waktu 30 hari.
Sebuah group lain yang disebut Electronic Frontier Foundation (EFF)
membuat sebuah komputer yang dilengkapi dengan Integrated Circuit chip
DES cracker. Dengan mesin seharga US$50.000 ini mereka dapat
memecahkan DES 56-bit dalam waktu rata-rata empat (4) sampai lima (5)
hari. DES cracker yang mereka kembangkan dapat melakukan eksplorasi
keseluruhan dari 56-bit keyspace dalam waktu sembilan (9) hari.
Dikarenakan 56-bit memiliki 216 (atau 65536) keyspace dibandingkan DES
dengan 40-bit, maka untuk memecahkan DES 40-bit hanya dibutuhkan
waktu sekitar 12 detik1
. Dikarenakan hukum average, waktu rata-rata untuk
memecahkan DES 40-bit yaitu 6 detik.
Perlu diingat bahwa group seperti EFF merupakan group kecil dengan
budget yang terbatas. Dapat dibayangkan sistem yang dimiliki oleh
National Security Agency (NSA) dari pemerintah Amerika Serikat1
.
Tentunya mereka dapat memecahkan DES dengan lebih cepat.
Bahan bacaan DES
Banyak sudah buku, artikel yang memuat informasi tentang DES. Bagi anda
yang berminat untuk mempelajari DES lebih lanjut, silahkan mengunakan
referensi [13, 15, 27, 30, 42 - Chapter 12].
Untuk DES cracker dari EFF, silahkan kunjungi web sitenya di
http://www.eff.org/descracker.html
Hash function - integrity checking
Salah satu cara untuk menguji integritas sebuah data yaitu dengan
memberikan “checksum” atau tanda bahwa data tersebut tidak berubah.
Cara yang paling mudah dilakukan yaitu dengan menjumlahkan karakterkarakter atau data-data yang ada sehingga apabila terjadi perubahan, hasil
penjumlahan menjadi berbeda. Cara ini tentunya mudah dipecahkan dengan
memakai kombinasi data yang berbeda akan tetapi menghasilkan hasil
penjumlahan yang sama.
Pada sistem digital biasanya ada beberapa mekanisme pengujian integritas
seperti antara lain:
• parity checking
• checksum
• hash function
Fungsi Hash (hash function) merupakan fungsi yang bersifat satu arah
dimana jika kita masukkan data, maka dia akan menghasilkan sebuah
“checksum” atau “fingerprint” dari data tersebut. Sebuah pesan yang
dilewatkan ke fungsi hash akan menghasilkan keluaran yang disebut
Message Authenticated Code (MAC). Dilihat dari sisi matematik, hash
function memetakan satu set data ke dalam sebuah set yang lebih kecil dan
terbatas ukurannya.
Mari kita ambil sebuah contoh sederhana, yaitu fungsi matematik modulus
(atau dalam pemrograman memakai mod). Hasil dari operasi mod
yaitu sisa pembagian bilangan bulat (integer). Sebagai contoh, “11 mod 7”
menghasilkan nilai 4, karena 11 dibagi 7 menghasilkan nilai 1 dan sisanya
yaitu 4. Contoh lain “17 mod 7” menghasilkan bilangan 3, karena 17
dibagi 7 menghasilkan 2 dan sisanya yaitu 3. Demikian pula “18 mod 7”
akan menghasilkan 4. Dalam sehari-hari, operasi modulus kita gunakan
dalam penunjukkan jam, yaitu modulus 12.
Kalau kita perhatikan contoh di atas. Hasil dari opreasi mod tidak akan lebih
besar dari angka pembaginya. Dalam contoh di atas, hasil “mod 7” berkisar
dari 0 ke 6. Bilangan berapapun yang akan di-mod-kan akan menghasilkan
bilangan dalam rentang itu. Tentu saja angka 7 bisa kita ganti dengan angka
lain, misalnya sebuah bilangan prima yang cukup besar sehingga rentang
bilangan yang dihasilkan bisa lebih besar.
Hal kedua yang perlu mendapat perhatian yaitu bahwa diketahui hasil
operasi modulus, kita tidak tahu bilangan asalnya. Jadi kalau diberitahu
bahwa hasil operasi modulus yaitu 4, bilangan awalnya bisa 11, 18, 25,
dan seterusnya. Ada banyak sekali. Jadi, dalam aplikasinya nanti agak sukar
mengkonstruksi sebuah pesan asli jika kita hanya tahu hasil dari fungsi
hashnya saja.
Tentu saja operator mod sendirian tidak dapat dipakai sebagai fungsi
hash yang baik. Ada beberapa persyaratan agar fungsi hasil baru dapat
dipakai secara praktis. Misalnya, rentang dari hasil fungsi hash harus
cukup sehingga probabilitas dua pesan yang berbeda akan menghasilkan
keluaran fungsi hash yang sama. Perlu ditekankan kata “probabilitas”,
karena secara teori pasti akan ada dua buah data yang dapat menghasilkan
keluaran fungsi hash yang sama1
. Hal ini disebabkan rentang fungsi hash
yang sangat jauh lebih kecil dibandingkan space dari inputnya. Tapi hal ini
masih tidak terlalu masalah karena untuk membuat dua pesan yang samasama terbaca (intelligible) dan memiliki keluaran fungsi hash yang sama
tidaklah mudah. Hal yang terjadi yaitu pesan (data) yang sama itu dalam
bentuk sampah (garbage).
Syarat lain dari bagusnya sebuah fungsi hash yaitu perubahan satu
karakter (dalam berkas teks) atau satu bit saja dalam data lainnya harus
menghasilkan keluaran yang jauh berbeda, tidak hanya berbeda satu bit
saja. Sifat ini disebut avalanche effect.
Ada beberapa fungsi hash yang umum dipakai saat ini, antara lain:
• MD5
• SHA (Secure Hash Algorithm)
Latihan 6. Gunakan MD5 untuk menghasilkan fingerprint dari
kalimat berikut: “Saya pesan 10 buah komputer.” (tanpa
tanda petik). Kemudian bandingkan hasil MD5 tersebut
dengan hasil MD5 dari kalimat: “Saya pesan 11 buah
komputer.”
Contoh latihan di atas dapat dijalankan pada sistem UNIX yang memiliki
program “md5” (atau program “md5sum”1
) seperti di bawah ini.
unix% echo ‘Saya pesan 10 buah komputer.’ | md5
5F736F18556E3B8D90E50299C7345035
unix% echo ‘Saya pesan 11 buah komputer.’ | md5
9CB9AD1A369512C96C74236B959780D3
Contoh di atas menunjukkan bahwa perbedaan satu karakter saja sudah
menghasilkan keluaran hash yang sangat berbeda. Hasil yang serupa dapat
dilakukan dengan memakai SHA atau algoritma dan program lainnya.
Fungsi hash ini biasanya digabungkan dengan enkripsi untuk menjaga
integritas. Sebagai contoh, dalam pengiriman email yang tidak rahasia
(dapat dibaca orang) akan tetapi ingin dijaga integritasnya, isi (body) dari
email dapat dilewatkan ke fungsi hash sehingga menghasilkan fingerprint
dari isi email tersebut. Keluaran dari hash ini dapat disertakan dalam email.
Ketika email diterima, penerima juga menjalankan fungsi hash terhadap isi
email dan kemudian membandingkannya dengan hash yang dikirim. Jika
email diubah di tengah jalan, maka kedua hash tersebut berbeda. Untuk
lebih meningkatkan keamanan, hasil dari hash juga dapat dienkripsi
sehingga hanya penerima saja yang dapat membuka hasil dari hash tersebut.
Atau dapat juga hasil hash dienkripsi dengan kunci privat pengirim
sehingga oleh penerima dapat dibuka dengan kunci publik pengirim dan
diyakinkan bahwa integritas dari isi terjamin serta pengirim betul-betul
berasal dari pemilik kunci publik tersebut. Inilah yang sering disebut digital
signature dalam email.
MD5
MD5 (Message-Digest Algorithm 5), sebuah algoritma yang dibuat oleh
Ron Rivest di tahun 1991, melakukan fungsi hash dengan memakai
algoritma yang dijabarkan di RFC1321, “The MD5 Message-Digest
Algorithm” [38]. Algoritma MD5 ini merupakan pengganti algoritma MD4
yang juga dibuat oleh Rivest. Hasil keluaran dari MD5 yaitu sebuah nilai
hash dalam 128-bit.
Salah satu aplikasi yang lazim memakai MD5 yaitu pengamanan
berkas password (/etc/passwd atau /etc/shadow) di sistem UNIX. Berkas
password menyimpan data password dalam bentuk yang sudah terenkripsi
dengan memakai DES. Implementasi awal dari sistem UNIX yaitu
menyimpan data password yang sudah terenkripsi tersebut langsung pada
salah satu field di berkas password.
Meskipun sudah terenkripsi, penyimpanan data password yang sudah
terenkripsi tersebut masih menimbulkan potensi lubang keamanan karena
DES merupakan enkripsi yang reversible. Panjang data yang dihasilkan
oleh proses enkripsi juga bergantung kepada panjang data yang
dimasukkan. Sehingga ada sedikit info tambahan mengenai kemungkinan
panjangnya password. Apabila seseorang berhasil mendapatkan berkas
password tersebut, dia bisa mencoba proses dekripsi yaitu dengan
melakukan brute force attack dengan mencoba melakukan proses dekripsi.
MD5 menambahkan satu tingkat keamanan lagi. Kali ini data password
yang disimpan bukanlah password yang terenkripsi saja, melainkan data
yang terenkripsi yang sudah dilewatkan oleh MD5. Karena sifatnya yang
satu arah, sangat sulit untuk mencari data password terenkripsi dengan basis
data hasil fungsi MD5. Jadi skema penyimpanan data tersebut kira-kira
seperti ini:
password > DES > password terenkripsi > MD5 > hashed encrypted
password
Dengan cara ini, potensi untuk melakukan serangan brute force terhadap
encrypted password menjadi lebih sukar. Satu-satunya cara untuk
melakukan serangan brute force yaitu dengan melakukan enkripsi juga
dengan melalui jalan maju seperti di atas dan kemudian membandingkan
hasil hashed encrypted passwordnya. Jika sama persis, maka kata yang
dipilih sebagai percobaan sama dengan password yang ingin dipecahkan
tersebut.
MD5 juga dipakai dalam autentikasi dengan memakai protokol
CHAP (RFC 1994). Masih ada banyak aplikasi lain yang memakai
MD5 ini.
Di tahun 1996 ditemukan kelemahan dari MD5 sehingga disarankan untuk
menggantinya dengan memakai SHA-1. Di tahun 2004, ditemukan lagi
kelemahan yang lebih serius sehingga penakai an MD5 lebih
dipertanyakan lagi. Xiaoyun Wang dan kawan-kawan menemukan
kelemahan ini dan membuat makalah yang dipresentasikan di Crypto 2004
[49]. Mereka menunjukkan bahwa ada tabrakan (collions) dimana dua buah
data menghasilkan keluaran hash MD5 yang sama. Selain collision di MD5,
mereka juga menemukan hal yang sama di MD5, HAVAL-128, dan
RIPEMD.
Apabila anda telah memiliki sebuah sistem informasi, bab ini akan
membantu anda untuk mengevaluasi keamanan sistem informasi yang anda
miliki.
Meski sebuah sistem informasi sudah dirancang memiliki perangkat
pengamanan, dalam operasi masalah keamanan harus selalu dimonitor. Hal
ini disebabkan oleh beberapa hal, antara lain:
• Ditemukannya lubang keamanan (security hole) yang baru. Perangkat
lunak dan perangkat keras biasanya sangat kompleks sehingga tidak
mungkin untuk diuji seratus persen. Kadang-kadang ada lubang
keamanan yang ditimbulkan oleh kecerobohan implementasi.
• Kesalahan konfigurasi. Kadang-kadang karena lalai atau alpa,
konfigurasi sebuah sistem kurang benar sehingga menimbulkan lubang
keamanan. Misalnya mode (permission atau kepemilikan) dari berkas
yang menyimpan password (/etc/passwd di sistem UNIX) secara tidak
sengaja diubah sehingga dapat diubah atau ditulis oleh orang-orang yang
tidak berhak.
• Penambahan perangkat baru (hardware dan/atau software) yang
menyebabkan menurunnya tingkat security atau berubahnya metoda
untuk mengoperasikan sistem. Operator dan administrator harus belajar
lagi. Dalam masa belajar ini banyak hal yang jauh dari sempurna,
misalnya server atau software masih memakai konfigurasi awal dari
vendor (dengan password yang sama).
Sumber lubang keamanan
Lubang keamanan (security hole) dapat terjadi karena beberapa hal; salah
disain (design flaw), salah implementasi, salah konfigurasi, dan salah
penakai an.
Salah Disain
Lubang keamanan yang ditimbulkan oleh salah disain umumnya jarang
terjadi. Akan tetapi apabila terjadi sangat sulit untuk diperbaiki. Akibat
disain yang salah, maka biarpun dia diimplementasikan dengan baik,
kelemahan dari sistem akan tetap ada.
Contoh sistem yang lemah disainnya yaitu algoritma enkripsi ROT13 atau
Caesar cipher, dimana karakter digeser 13 huruf atau 3 huruf. Meskipun
diimplementasikan dengan programming yang sangat teliti, siapapun yang
mengetahui algoritmanya dapat memecahkan enkripsi tersebut.
Contoh lain lubang keamanan yang dapat dikategorikan kedalam kesalahan
disain yaitu disain urutan nomor (sequence numbering) dari paket TCP/IP.
Kesalahan ini dapat dieksploitasi sehingga timbul masalah yang dikenal
dengan nama “IP spoofing”, yaitu sebuah host memalsukan diri seolah-olah
menjadi host lain dengan membuat paket palsu setelah mengamati urutan
paket dari host yang hendak diserang. Bahkan dengan mengamati cara
mengurutkan nomor packet bisa dikenali sistem yang dipakai .
Mekanisme ini dipakai oleh program nmap dan queso untuk mendeteksi
operating system (OS) dari sebuah sistem, yang disebut fingerprinting.
Contoh dan informasi yang lebih lengkap mengenai masalah kelemahan
protokol TCP/IP dapat dilihat pada referensi [2].
Implementasi kurang baik
Lubang keamanan yang disebabkan oleh kesalahan implementasi sering
terjadi. Banyak program yang diimplementasikan secara terburu-buru
sehingga kurang cermat dalam pengkodean. Akibatnya cek atau testing
yang harus dilakukan menjadi tidak dilakukan. Sebagai contoh, seringkali
batas (“bound”) dari sebuah “array” tidak dicek sehingga terjadi yang
disebut out-of-bound array atau buffer overflow yang dapat dieksploitasi
(misalnya overwrite ke variable berikutnya). Lubang keamanan yang terjadi
karena masalah ini sudah sangat banyak, dan yang mengherankan terus
terjadi, seolah-olah para programmer tidak belajar dari pengalaman1
.
Contoh lain sumber lubang keamanan yang disebabkan oleh kurang baiknya
implementasi yaitu kealpaan memfilter karakter-karakter yang aneh-aneh
yang dimasukkan sebagai input dari sebuah program (misalnya input dari
CGI-script2
) sehingga sang program dapat mengakses berkas atau informasi
yang semestinya tidak boleh diakses.
Salah konfigurasi
Meskipun program sudah diimplementasikan dengan baik, masih dapat
terjadi lubang keamanan karena salah konfigurasi. Contoh masalah yang
disebabkan oleh salah konfigurasi yaitu berkas yang semestinya tidak
dapat diubah oleh pemakai secara tidak sengaja menjadi “writeable”.
Apabila berkas tersebut merupakan berkas yang penting, seperti berkas
yang dipakai untuk menyimpan password, maka efeknya menjadi lubang
keamanan. Kadangkala sebuah komputer dijual dengan konfigurasi yang
sangat lemah. Ada masanya workstation Unix di perguruan tinggi
didistribusikan dengan berkas /etc/aliases (berguna untuk mengarahkan email), /etc/utmp (berguna untuk mencatat siapa saja yang sedang
memakai sistem) yang dapat diubah oleh siapa saja. Contoh lain dari
salah konfigurasi yaitu adanya program yang secara tidak sengaja diset
menjadi “setuid root” sehingga ketika dijalankan pemakai memiliki akses
seperti super user (root) yang dapat melakukan apa saja.
Salah memakai program atau sistem
Salah penakai an program dapat juga mengakibatkan terjadinya lubang
keamanan. Kesalahan memakai program yang dijalankan dengan
memakai account root (super user) dapat berakibat fatal. Sering terjadi
cerita horor dari sistem administrator baru yang teledor dalam menjalankan
perintah “rm -rf” di sistem UNIX (yang menghapus berkas atau direktori
beserta sub direktori di dalamnya). Akibatnya seluruh berkas di sistem
menjadi hilang mengakibatkan Denial of Service (DoS). Apabila sistem
yang dipakai ini dipakai bersama-sama, maka akibatnya dapat lebih
fatal lagi. Untuk itu perlu berhati-hati dalam menjalan program, terutama
apabila dilakukan dengan memakai account administrator seperti root
tersebut.
Kesalahan yang sama juga sering terjadi di sistem yang berbasis MS-DOS.
Karena sudah mengantuk, misalnya, ingin melihat daftar berkas di sebuah
direktori dengan memberikan perintah “dir *.*” ternyata salah memberikan
perintah menjadi “del *.*” (yang juga menghapus seluruh file di direktori
tersebut).
Penguji keamanan sistem
Dikarenakan banyaknya hal yang harus dimonitor, administrator dari sistem
informasi membutuhkan “automated tools”, perangkat pembantu otomatis,
yang dapat membantu menguji atau meng-evaluasi keamanan sistem yang
dikelola. Untuk sistem yang berbasis UNIX ada beberapa tools yang dapat
dipakai , antara lain:
• Cops
• Tripwire
• Satan/Saint
• SBScan: localhost security scanner
Untuk sistem yang berbasis Windows NT ada juga program semacam,
misalnya program Ballista yang dapat diperoleh dari: <http://
www.secnet.com>
Selain program-program (tools) yang terpadu (integrated) seperti yang
terdapat pada daftar di atas, ada banyak program yang dibuat oleh hackers
untuk melakukan “coba-coba”. Program-program seperti ini, yang cepat
sekali bermunculuan, biasanya dapat diperoleh (download) dari Internet
melalui tempat-tempat yang berhubungan dengan keamanan, seperti
misalnya “Rootshell”. (Lihat “Sumber informasi dan organisasi yang
berhubungan dengan keamanan sistem informasi” on page 153.) Contoh
program coba-coba ini antara lain:
• crack: program untuk menduga atau memecahkan password dengan
memakai sebuah atau beberapa kamus (dictionary). Program crack
ini melakukan brute force cracking dengan mencoba mengenkripsikan
sebuah kata yang diambil dari kamus, dan kemudian membandingkan
hasil enkripsi dengan password yang ingin dipecahkan. Bila belum
sesuai, maka ia akan mengambil kata selanjutnya, mengenkripsikan, dan
membandingkan kembali. Hal ini dijalankan terus menerus sampai
semua kata di kamus dicoba. Selain memakai kata langsung dari
kamus, crack juga memiliki program heuristic dimana bolak balik kata
(dan beberapa modifikasi lain) juga dicoba. Jadi, jangan sekali-kali
memakai password yang terdapat dalam kamus (bahasa apapun).
• land dan latierra: program yang dapat membuat sistem Windows 95/NT
menjadi macet (hang, lock up). Program ini mengirimkan sebuah paket
yang sudah di”spoofed” sehingga seolah-olah paket tersebut berasal dari
mesin yang sama dengan memakai port yang terbuka (misalnya port
113 atau 139).
• ping-o-death: sebuah program (ping) yang dapat meng-crash-kan
Windows 95/NT dan beberapa versi Unix.
• winuke: program untuk memacetkan sistem berbasis Windows
Probing Services
Servis di Internet umumnya dilakukan dengan memakai protokol TCP
atau UDP. Setiap servis dijalankan dengan memakai port yang berbeda,
misalnya:
• SMTP, untuk mengirim dan menerima e-mail, TCP, port 25
• DNS, untuk domain, UDP dan TCP, port 53
• HTTP, web server, TCP, port 80
• POP3, untuk mengambil e-mail, TCP, port 110
Contoh di atas hanya sebagian dari servis yang tersedia. Di sistem UNIX,
lihat berkas /etc/services dan /etc/inetd.conf untuk melihat servis
apa saja yang dijalankan oleh server atau komputer yang bersangkutan.
Berkas /etc/services berisi daftar servis dan portnya, sementara berkas /etc/
inetd.conf berisi servis-servis yang di jalan di server UNIX tersebut. Jadi
tidak semua servis dijalankan, hanya servis yang dibuka di /etc/inetd.conf
saja yang dijalankan. Selain itu ada juga servis yang dijalankan tidak
melalui inetd.conf melainkan dijalankan sebagai daemon yang berjalan di
belakang layar.
unix% more /etc/services
echo 7/tcp
echo 7/udp
discard 9/tcp sink null
discard 9/udp sink null
systat 11/tcp users
daytime 13/tcp
daytime 13/udp
netstat 15/tcp
qotd 17/tcp quote
msp 18/tcp # message send
protocol
msp 18/udp # message send
protocol
chargen 19/tcp ttytst source
chargen 19/udp ttytst source
ftp-data 20/tcp
ftp 21/tcp
fsp 21/udp fspd
ssh 22/tcp # SSH Remote
Login Protocol
ssh 22/udp # SSH Remote
Login Protocol
telnet 23/tcp
# 24 - private
smtp 25/tcp mail
# 26 - unassigned
time 37/tcp timserver
time 37/udp timserver
rlp 39/udp resource # resource
location
nameserver 42/tcp name # IEN 116
whois 43/tcp nicname
re-mail-ck 50/tcp # Remote Mail
Checking Protocol
re-mail-ck 50/udp # Remote Mail
Checking Protocol
domain 53/tcp nameserver # name-domain
server
domain 53/udp nameserver
mtp 57/tcp # deprecated
bootps 67/tcp # BOOTP server
bootps 67/udp
bootpc 68/tcp # BOOTP client
bootpc 68/udp
tftp 69/udp
gopher 70/tcp # Internet Gopher
gopher 70/udp
rje 77/tcp netrjs
finger 79/tcp
www 80/tcp http # WorldWideWeb
HTTP
www 80/udp # HyperText
Transfer Protocol
link 87/tcp ttylink
kerberos 88/tcp kerberos5 krb5 # Kerberos v5
kerberos 88/udp kerberos5 krb5 # Kerberos v5
supdup 95/tcp
# 100 - reserved
hostnames 101/tcp hostname # usually from
sri-nic
iso-tsap 102/tcp tsap # part of ISODE.
csnet-ns 105/tcp cso-ns # also used by
CSO name server
csnet-ns 105/udp cso-ns
rtelnet 107/tcp # Remote Telnet
rtelnet 107/udp
pop-2 109/tcp postoffice # POP version 2
pop-2 109/udp
pop-3 110/tcp # POP version 3
pop-3 110/udp
sunrpc 111/tcp portmapper # RPC 4.0
portmapper TCP
sunrpc 111/udp portmapper # RPC 4.0
portmapper UDP
...
unix% more /etc/inetd.conf
# /etc/inetd.conf: see inetd(8) for further informations.
#
# Internet server configuration database
#
# Lines starting with "#:LABEL:" or "#<off>#" should not
# be changed unless you know what you are doing!
#
# Packages should modify this file by using update-inetd(8)
#
# <service_name> <sock_type> <proto> <flags> <user>
<server_path> <args>
#
#:INTERNAL: Internal services
#echo stream tcp nowait root internal
#echo dgram udp wait root internal
#chargen stream tcp nowait root internal
#chargen dgram udp wait root internal
discard stream tcp nowait root internal
discard dgram udp wait root internal
daytime stream tcp nowait root internal
daytime dgram udp wait root internal
time stream tcp nowait root internal
time dgram udp wait root internal
#:STANDARD: These are standard services.
## ftp stream tcp nowait root /usr/sbin/tcpd
/usr/sbin/in.ftpd
ftp stream tcp nowait root /usr/sbin/tcpd
/usr/local/sbin/proftpd
telnet stream tcp nowait root /usr/sbin/tcpd
/usr/sbin/in.telnetd
#:BSD: Shell, login, exec and talk are BSD protocols.
shell stream tcp nowait root /usr/sbin/tcpd
/usr/sbin/in.rshd
login stream tcp nowait root /usr/sbin/tcpd
/usr/sbin/in.rlogind
exec stream tcp nowait root /usr/sbin/tcpd
/usr/sbin/in.rexecd
talk dgram udp wait root /usr/sbin/tcpd
/usr/sbin/in.talkd
ntalk dgram udp wait root /usr/sbin/tcpd
/usr/sbin/in.ntalkd
pop-3 stream tcp nowait root /usr/sbin/tcpd
/usr/sbin/ipop3d
Pemilihan servis apa saja tergantung kepada kebutuhan dan tingkat
keamanan yang diinginkan. Sayangnya seringkali sistem yang dibeli atau
dirakit menjalankan beberapa servis utama sebagai “default”. Kadangkadang beberapa servis harus dimatikan karena ada kemungkinan dapat
dieksploitasi oleh cracker. Untuk itu ada beberapa program yang dapat
dipakai untuk melakukan “probe” (meraba) servis apa saja yang tersedia.
Program ini juga dapat dipakai oleh kriminal untuk melihat servis apa
saja yang tersedia di sistem yang akan diserang dan berdasarkan data-data
yang diperoleh dapat melancarkan serangan.
Untuk beberapa servis yang berbasis TCP/IP, proses probe dapat dilakukan
dengan memakai program telnet. Misalnya untuk melihat apakah ada
servis e-mail dengan memakai SMTP dipakai telnet ke port 25.
unix% telnet target.host.com 25
Trying 127.0.0.1...
Connected to target.host.com.
Escape character is '^]'.
220 dma-baru ESMTP Sendmail 8.9.0/8.8.5; Mon, 22 Jun 1998 10:18:54 +0700
Dalam contoh di atas terlihat bahwa ada servis SMTP di server tersebut
dengan memakai program Sendmail versi 8.9.0. Adanya informasi
tentang sistem yang dipakai ini sebetulnya sangat tidak disarankan
karena dengan mudah orang dapat mengetahui kebocoran sistem (jika
software dengan versi tersebut memiliki lubang keamanan)
Untuk servis lain, seperti POP atau POP3 dapat dilakukan dengan cara yang
sama dengan memakai nomor “port” yang sesuai dengan servis yang
diamati.
unix% telnet localhost 110
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
+OK QPOP (version 2.2) at dma-baru.paume.itb.ac.id starting.
+<20651.898485542@dma-baru.paume.itb.ac.id>
quit
+OK Pop server at dma-baru.paume.itb.ac.id signing off.
Connection closed by foreign host.
Latihan 7. Lakukan probing ke sebuah POP server. Gunakan POP
server yang dipersiapkan khusus untuk latihan ini. Jangan
lakukan probing ke server milik orang lain tanpa ijin.
Proses probing tersebut dapat dilakukan secara otomatis, sehinga menguji
semua port yang ada, dengan memakai beberapa program paket seperti
didaftarkan di bawah ini.
Paket probe untuk sistem UNIX
• nmap
• strobe
• tcpprobe
Latihan 8. Gunakan nmap, strobe, atau tcpprobe untuk melakukan
probe terhadap sebuah server yang sudah dipersiapkan
untuk latihan ini. Jangan melakukan probe ke server milik
orang lain tanpa ijin.
Untuk melakukan probing ke sistem dengan nomor IP
192.168.1.1 dengan memakai program strobe:
unix% strobe 192.168.1.1
unix% strobe 192.168.1.1 -b 1 -e 80
Untuk melakukan probing apakah komputer dengan range
nomor IP 192.168.1.1 sampai dengan 192.168.1.10 memiliki
FTP server (port 21) dapat dilakukan dengan memakai
nmap dengan perintah di bawah ini:
unix% nmap 192.168.1.1-10 -p 21
Probe untuk sistem Window 95/98/NT
• NetLab
• Cyberkit
• Ogre
Mendeteksi Probling
Apabila anda seorang sistem administrator, anda dapat memasang program
yang memonitor adanya probing ke sistem yang anda kelola. Probing
biasanya meninggalkan jejak di berkas log di sistem anda. Dengan
mengamati entry di dalam berkas log dapat diketahui adanya probing.
root# tail /var/log/syslog
May 16 15:40:42 epson tcplogd: "Syn probe"
notebook[192.168.1.4]:[8422]->epson[192.168.1.2]:[635]
May 16 15:40:42 epson tcplogd: "Syn probe"
notebook[192.168.1.4]:[8423]->epson[192.168.1.2]:ssl-ldap
May 16 15:40:42 epson tcplogd: "Syn probe"
notebook[192.168.1.4]:[8426]->epson[192.168.1.2]:[637]
May 16 15:40:42 epson tcplogd: "Syn probe"
notebook[192.168.1.4]:[8429]->epson[192.168.1.2]:[638]
May 16 15:40:43 epson tcplogd: "Syn probe"
notebook[192.168.1.4]:[8430]->epson[192.168.1.2]:[639]
May 16 15:40:43 epson tcplogd: "Syn probe"
notebook[192.168.1.4]:[8437]->epson[192.168.1.2]:[640]
May 16 15:40:43 epson tcplogd: "Syn probe"
notebook[192.168.1.4]:[8441]->epson[192.168.1.2]:[641]
May 16 15:40:43 epson tcplogd: "Syn probe"
notebook[192.168.1.4]:[8445]->epson[192.168.1.2]:[642]
May 16 15:40:43 epson tcplogd: "Syn probe"
notebook[192.168.1.4]:[8454]->epson[192.168.1.2]:[643
Contoh di atas menunjukkan entry di berkas syslog dimana terjadi probing
dari komputer yang di beri nama notebook dengan nomor IP 192.168.1.4.
Selain itu, ada juga program untuk memonitor probe seperti paket program
courtney, portsentry dan tcplogd.
OS fingerprinting
Mengetahui operating system (OS) dari target yang akan diserang
merupakan salah satu pekerjaan yang dilakukan oleh seorang cracker.
Setelah mengetahui OS yang dituju, dia dapat melihat database kelemahan
sistem yang dituju. Fingerprinting merupakan istilah yang umum
dipakai untuk menganalisa OS sistem yang dituju [16].
Fingerprinting dapat dilakukan dengan berbagai cara. Cara yang paling
konvensional yaitu melakukan telnet ke server yang dituju. Jika server
tersebut kebetulan menyediakan servis telnet, seringkali ada banner yang
menunjukkan nama OS beserta versinya.
unix% telnet 192.168.1.4
Trying 192.168.1.4...
Connected to 192.168.1.4.
Escape character is '^]'.
Linux 2.0.33 (rock.pau-mikro.org) (ttyp0)
login:
Apabila sistem tersebut tidak menyediakan servis telnet akan tetapi
menyediakan servis FTP, maka informasi juga sering tersedia. Servis FTP
tersedia di port 21. Dengan melakukan telnet ke port tersebut dan
memberikan perintah “SYST” anda dapat mengetahui versi dari OS yang
dipakai seperti contoh di bawah ini.
unix% telnet ftp.netscape.com 21
Trying 207.200.74.26...
Connected to ftp.netscape.com.
Escape character is '^]'.
220 ftp29 FTP server (UNIX(r) System V Release 4.0) ready.
SYST
215 UNIX Type: L8 Version: SUNOS
Jika server tersebut tidak memiliki FTP server akan tetapi menjalankan Web
server, masih ada cara untuk mengetahui OS yang dipakai dengan
memakai program netcat (nc) seperti contoh di bawah ini (dimana
terlihat OS yang dipakai yaitu Debian GNU):
$ echo -e "GET / HTTP/1.0\n\n" | nc localhost 80 | \
grep "^Server:"
Server: Apache/1.3.3 (Unix) Debian/GNU
Cara fingerprinting yang lebih canggih yaitu dengan menganalisa respon
sistem terhadap permintaan (request) tertentu. Misalnya dengan
menganalisa nomor urut packet TCP/IP yang dikeluarkan oleh server
tersebut dapat dipersempit ruang jenis dari OS yang dipakai .
Ada beberapa tools untuk melakukan deteksi OS ini antara lain:
• nmap
• queso
Berikut ini yaitu contoh penakai an program queso untuk mendeteksi OS
dari sistem yang memakai nomor IP 192.168.1.1. Kebetulan sistem ini
yaitu sistem Windows 95.
unix# queso 192.168.1.1
192.168.1.1:80 * Not Listen, Windoze 95/98/NT
penakai an program penyerang
Salah satu cara untuk mengetahui kelemahan sistem informasi anda yaitu
dengan menyerang diri sendiri dengan paket-paket program penyerang
(attack) yang dapat diperoleh di Internet. Dengan memakai program
ini anda dapat mengetahui apakah sistem anda rentan dan dapat
dieksploitasi oleh orang lain. Perlu diingat bahwa jangan memakai
program-program tersebut untuk menyerang sistem lain (sistem yang
tidak anda kelola). Ini tidak etis dan anda dapat diseret ke pengadilan.
Beberapa program penyerangan dicontohkan di Bab “Eksploitasi
Keamananan” on page 113.
Selain program penyerang yang sifatnya agresif melumpuhkan sistem yang
dituju, ada juga program penyerang yang sifatnya melakukan pencurian
atau penyadapan data. Untuk penyadapan data, biasanya dikenal dengan
istilah “sniffer”. Meskipun data tidak dicuri secara fisik (dalam artian
menjadi hilang), sniffer ini sangat berbahaya karena dia dapat dipakai
untuk menyadap password dan informasi yang sensitif. Ini merupakan
serangan terhadap aspek privacy.
Contoh program penyadap (sniffer) antara lain:
• pcapture (Unix)
• sniffit (Unix)
• tcpdump (Unix)
• WebXRay (Windows)
penakai an sistem pemantau jaringan
Sistem pemantau jaringan (network monitoring) dapat dipakai untuk
mengetahui adanya lubang keamaman. Misalnya apabila anda memiliki
sebuah server yang semetinya hanya dapat diakses oleh orang dari dalam,
akan tetapi dari pemantau jaringan dapat terlihat bahwa ada yang mencoba
mengakses melalui tempat lain. Selain itu dengan pemantau jaringan dapat
juga dilihat usaha-usaha untuk melumpuhkan sistem dengan melalui denial
of service attack (DoS) dengan mengirimkan packet yang jumlahnya
berlebihan.
Network monitoring biasanya dilakukan dengan memakai protokol
SNMP (Simple Network Management Protocol) [13]. Pada saat buku ini
ditulis, SNMP versi 1 yang paling banyak dipakai meskipun SNMP versi
2 sudah keluar. Sayangnya, tingkat keamanan dari SMNP versi 1 sangat
rendah sehingga memungkinkan penyadapan oleh orang yang tidak berhak
Contoh-contoh program network monitoring / management antara lain:
• Etherboy (Windows), Etherman (Unix)
• HP Openview (Windows)
• Packetboy (Windows), Packetman (Unix)
• SNMP Collector (Windows)
• Webboy (Windows)
Contoh program pemanatu jaringan yang tidak memakai SNMP antara
lain:
• iplog, icmplog, updlog, yang merupakan bagian dari paket iplog untuk
memantau paket IP, ICMP, UDP.
• iptraf, sudah termasuk dalam paket Linux Debian netdiag
• netwatch, sudah termasuk dalam paket Linux Debian netdiag
• ntop, memantau jaringan seperti program top yang memantau proses di
sistem Unix (lihat contoh gambar tampilannya)
• trafshow, menunjukkan traffic antar hosts dalam bentuk text-mode
Contoh peragaan trafshow di sebuah komputer yang bernama epson,
dimana ditunjukkan sesi ssh (dari komputer compaq) dan ftp (dari komputer
notebook).
Dalam bab sebelumnya telah dibahas cara-cara untuk mengevaluasi sistem
anda. Maka bab ini akan membahas cara-cara untuk mengamankan sistem
informasi anda.
Pada umunya, pengamanan dapat di