IMPLEMENTASI ALGORITMA BRUTE FORCE DALAM PENCOCOKAN POLA STRING (IMPLEMENTATION OF THE BRUTE FORCE ALGORITHM : STRING PATTERN MATCHING)
Ahmad Rivaldi 163112706440023
PROGRAM STUDI TEKNIK INFORMATIKA FAKULTAS TEKNOLOGI KOMUNIKASI DAN INFORMATIKA
UNIVERSITAS NASIONAL 2018
PENDAHULUAN
Latar Belakang Masalah
Pencocokan Pola String kini semakin sering digunakan oleh para pembuat/pengembang perangkat lunak baik dalam skala kecil maupun skala besar (enterprise). Pencocokan pola string dalam hal ini bukanlah pencocokan pola dengan hanya menggunakan satu kondisi ( if conditional melibatkan 2 data tetap) melainkan menggunakan perulangan ( looping) dengan menggunakan semua peluang/kemungkinan yang ada untuk mendapatkan hasil yang sesuai. Di dalam (Data Base Management System) DBMS pola pencocokan ini digunakan untuk pengambilan ( fetching) data ( SELECT, INSERT, UPDATE ). Di dalam dunia peretasan biasanya pola pencocokan ini digunakan untuk mengambil data yang tersimpan/tersembunyi, misalkan data rahasia/ PIN/ password . Dalam kasus ini, pencocokan pola string menggunakan Algoritma Brute Force yang dianggap sederhana dan menjamin atas keberhasilan pencarian hasil
yang diinginkan. Karena Brute Force secara tidak cerdas mencoba semua peluang yang ‘mungkin’, sebelum hasil yang diinginkan sesuai dengan hasil dari proses pencocokan.
2
PEMBAHASAN Pengenalan Algoritma
Algoritma atau dapat diartikan sebagai susunan/langkah/urutan yang logis dilakukan untuk memecahkan suatu masalah dan mendapatkan hasil yang diinginkan. Algoritma tidak hanya dikaitkan dengan dunia komputer melainkan tindakan dan kegiatan yang kita lakukan sehari-hari dalam menyelesaikan masalah. Algoritma berbeda dengan Logaritma yang merupakan fungsi Matematika. Contoh Algoritma dalam kehidupan sehari-hari, Langkah membuat Nasi Goreng :
-
Siapkan alat dan bahan dalam pembuatan nasi goring, misalkan nasi, bumbu, alat untuk memasak, telur, dan lainnya
-
Nyalakan api dalam keadaan sedang, panaskan wajan dan masukkan minyak goreng secukupnya
-
Masukkan telur dan bumbu nasi goreng ke dalam wajan
-
Masukkan nasi ke dalam wajan
-
Aduk secara merata sampai nasi goreng benar-benar matang
-
Matikan api dan hidangkan nasi goreng ke atas piring
-
Nasi Goreng siap dinikmati
Algoritma Brute Force
Algoritma Brute Force adalah salah satu cara penyelesaian masalah khususnya di dalam dunia komputer. Brute Force adalah sebuah pendekatan yang lempang (straightforward ) untuk memecahkan suatu masalah, biasanya didasarkan pada pernyataan masalah ( problem statement ) dan definisi konsep yang dilibatkan.
3
Algoritma brute force memecahkan masalah dengan sangat sederhana, langsung dan dengan cara yang jelas ( obvious way ). Algoritma yang secara jelas langsung ke pusat permasalahan. Algoritma ini biasanya tidak memerlukan teori khusus untuk mengimplementasikannya. Algoritma ini sering juga disebut Algoritma sapu jagad karena hampir semua persoalan pemrograman bisa diselesaikan dengan algoritma ini. Algoritma Brute Force sering disebut Algoritma tidak cerdas karena tidak memerlukan pemikiran secara kompleks, hanya dengan beberapa baris semua permasalahan dapat dipecahkan dengan mudahnya. Kelemahan Algoritma Brute Force yaitu lemah dalam sisi penggunaan memori pada komputer jika data yang diinginkan berada dalam titik tengah ke atas (> n/2). Apa yang dimaksud dengan titik tengah ke atas? Yaitu titik dimana ketika data yang akan dicari berjumlah 10.000 dan brute force melakukan perulangan pencarian data lebih dari 10.000/2 = 5.000 kali. Brute Force menjadi sangat efektif ketika data yang akan dicari berada pada titik tengah ke bawah ( < n/2 ).
String
String
dalam
pemrograman
komputer
adalah
sebuah
deret
simbol/karakter. String digunakan sebagai tipe data pada pemrograman komputer. Tipe data string adalah tipe data yang digunakan untuk menyimpan barisan karakter dengan indeks terurut. Contoh : ‘AKU’ adalah kumpulan dari tiga karakter dengan ‘A’ pada indeks 0, ‘K’ pada indeks 1, dan ‘U’ pada indeks 2.
Umumnya indeks dimulai dari angka 0.
Banyak sekali algoritma dalam
pengolahan String, misalkan penghitungan jumlah karakter pada String (strlen pada bahasa C dengan menggunakan library string.h), penyalinan String (strcpy pada library string.h), dan berbagai pemrosesan String lainnya.
4
Pseudo Code Untuk String dalam bahasa C
#include int main() { char string[100]; string = "Hello world"; return 0; }
Implementasi Algoritma Brute Force dalam Pencocokan Pola String Implementasi pada Pattern Matching Sederhana
Algoritma Brute Force dalam pencocokan Pola String sederhana tidaklah serumit dengan menggunakan Algoritma Cerdas misalnya Knutt-Morris-Pratt Algorithm , Algoritma Brute Force berperan memeriksa dan membandingkan
Pattern yang dicari dengan Pattern yang ada di String. Bila hasil cocok, maka program melakukan keluaran sesuai dengan perintah. Bila hasil belum ditemukan maka program akan melakukan perulangan hingga jumlah peluang yang mungkin terjadi.
5
Pattern Matching Sederhana :
Diberikan satu String yang akan dicari polanya, #include int main() { //String char kata[11]; kata = "ihaveadream";
//Pola yang dicari char cari[3]; cari = “ead”;
return 0; }
Data yang disimpan di variabel : Char
i
h
a
v
e
a
d
r
e
a
m
Indeks
0
1
2
3
4
5
6
7
8
9
10
Char
e
a
d
Indeks
0
1
2
Algoritma Brute Force Pattern Matching (dalam bahasa C) : int i; int indeks;
for(i=0;i= cariLength)
6
{ indeks = i; //posisi pattern ditemukan = i } } }
Cara kerja Algoritma Brute Force pada Pattern Matching :
i
h
a
v
e
a
d
e
a
d
e
a
d
e
a
d
e
a
d
e
a
d
e
a
r
e
a
m
Panjang String = 11 Panjang Pattern = 3 Jumlah perulangan = Panjang String – Panjang Pattern (ditambah 1 jika indeks dimulai dari 0)
Algoritma ini menyelesaikan masalah dengan
d
mencoba
kemungkinan
dari
awal hingga akhir secara terurut.
e
a
d
e
a
d
e
a
d
Berikut Pseudo Code (dalam bahasa C) untuk Pattern Matching Sederhana dengan Brute Force #include #include < string .h>
int main() { //String char kata[100];
7
scanf("%s",&kata);
//Pola yang dicari char cari[10]; scanf("%s",&cari);
//strlen = fungsi untuk mendapatkan panjang string int cariLength = strlen(cari); int kataLength = strlen(kata);
//Mulai Brute Force dalam Pencarian String int i; int indeks;
for(i=0;i= cariLength) { indeks = i; //posisi pattern ditemukan = i } } } //Akhir Brute Force Pattern Matching printf("%d",indeks); return 0;
}
8
Run Program dari Pseudo Code diatas : Masukkan : ihaveadream ead
Keluaran : 4 Contoh Run Program brute.exe
Kompleksitas dari Program ini adalah O((n-m+1)m) dimana n sebagai jumlah panjang karakter dari String Utama (dalam kasus ini adalah kataLength), m adalah panjang karakter dari Pattern yang dicari (dalam kasus ini adalah cariLength). Kompleksitas dari Sample Program pada makalah ini adalah = O ( ( 11 - 3 + 1 ) * 3 ) = 27 (bisa juga diartikan maksimal 27 pemrosesan yang terjadi pada potongan algoritma pseudo code di atas)
9
Implementasi pada Pattern Matching Kompleks (brute force attack password generating)
Kasus kehilangan password dikarenakan lupa adalah hal yang sangat sering terjadi di era teknologi dengan high security seperti sekarang. Tercatat bahwa pengguna Yahoo ditemukan 2.149 dari 50.100 pengguna (4,28%) pernah mengalami kasus lupa password dalam tiga bulannya (Florencio & Herley, 2007) Tetapi disamping itu, para pengembang perangkat lunak kini menciptakan cara bagaimana password tersebut dapat didapatkan kembali. Dengan Algoritma Brute Force, Password dapat didapatkan dengan Pattern Matching kombinasi
dari simbol dan karakter yang tersupport oleh program. Misalnya dictionary attack , yaitu penyerangan Pattern Matching dengan mencocokkan Password
dengan kata-kata pada bahasa inggris. Brute Force Attack yaitu perulangan dari 1 karakter/simbol hingga batasan dari program atau bahkan tak terhingga sampai password tersebut didapatkan.
Cara kerja yang dilakukan oleh Brute Force Attack Mengadaptasi Cara kerja dasar Algoritma Brute Force yaitu dengan tidak cerdasnya mencoba satu persatu kombinasi karakter dengan cara rekursif dari 1 sampai tak terhingga atau batas yang ditentukan. Contoh Brute Force Attack : Password = zcore ,5 karakter. Max pencarian dengan 62 karakter = 625 = 916132832 kombinasi
z
c
o
r
e
0-z
Panjang Password = 5 Uji Panjang = 1 Diulang sampai 62 karakter (a-z, A-Z, 0-9)
0-z
0-z
Uji Panjang = 2 Diulang sampai 62x62 kombinasi
0-z
0-z
0-z
0-z
0-z
0-z
0-z
0-z
0-z
0-z
0-z
Uji Panjang = 3 Diulang sampai 62x62x62 kombinasi Uji Panjang = 4 Diulang sampai 62x62x62x62 kombinasi 0-z
Uji Panjang = 5 Diulang sampai 62x62x62x62x62 kombinasi
10
Kelemahan Brute Force Attack adalah waktu yang dibutuhkan relatif sangat lama. Untuk Password 1 karakter menggunakan 62 Karakter (26 Huruf kecil, 26 Huruf Besar, dan 10 angka) terdapat 62 kali looping dari 0 hingga z. Untuk Password 2 Karakter menggunakan 62 x 62 kombinasi karakter dari 00 hingga zz. Itupun belum termasuk karakter khusus seperti ! (tanda seru), (/), garis miring, dan karakter lainnya hingga menambah waktu pemrosesan. Didapat x n dimana x adalah jumlah karakter yang di support oleh program dan n adalah jumlah panjang password yang dicari. Waktu pemrosesan pada program bergantung pada memori komputer yang digunakan dan panjang password yang dicari. Data dari 7-zip tentang waktu peretasan password : Panjang Password Single User Attack Organization Attack
1
2s
1s
2
1 min
1s
3
30 min
1s
4
12 hours
1s
5
14 days
1s
6
1 year
1s
7
10 years
1s
8
19 years
20 s
9
26 years
9 min
10
37 years
4 hours
11
46 years
4 days
12
55 years
4 months
13
64 years
4 years
14
73 years
13 years
15
82 years
22 years
16
91 years
31 years
17
100 years
40 years
11