141613743-brute-force
DESCRIPTION
cvTRANSCRIPT
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.
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.
Pseudo Code Untuk String dalam bahasa C
2
#include <stdio.h>
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.
Pattern Matching Sederhana :
Diberikan satu String yang akan dicari polanya,
#include <stdio.h>
int main()
{
//String
char kata[11];
kata = "ihaveadream";
3
//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<kataLength-cariLength+1;i++)
{
int j=0;
while(j<cariLength && kata[i+j] == cari[j])
{
j++;
if(j >= cariLength)
{
indeks = i;
//posisi pattern ditemukan = i
}
}
}
Cara kerja Algoritma Brute Force pada Pattern Matching :
4
Berikut Pseudo Code (dalam bahasa C) untuk Pattern Matching
Sederhana dengan Brute Force
#include <stdio.h>
#include <string.h>
int main()
{
//String
char kata[100];
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);
5
i h a v e a d 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 mencoba kemungkinan dari
awal hingga akhir secara terurut.
e a d
e a d
e a d
e a d
e a d
e a d
e a d
e a d
e a d
//Mulai Brute Force dalam Pencarian String
int i;
int indeks;
for(i=0;i<kataLength-cariLength+1;i++)
{
int j=0;
while(j<cariLength && kata[i+j] == cari[j])
{
j++;
if(j >= cariLength)
{
indeks = i;
//posisi pattern ditemukan = i
}
}
}
//Akhir Brute Force Pattern Matching
printf("%d",indeks);
return 0;
}
Run Program dari Pseudo Code diatas :
Masukkan :
ihaveadream
ead
Keluaran :
4
Contoh Run Program brute.exe
6
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)
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.
7
Contoh Brute Force Attack :
Password = zcore ,5 karakter. Max pencarian dengan 62 karakter = 625 = 916132832 kombinasi
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 xn
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 Attack1 2 s 1 s2 1 min 1 s3 30 min 1 s4 12 hours 1 s5 14 days 1 s6 1 year 1 s7 10 years 1 s8 19 years 20 s9 26 years 9 min
8
z c o r e Panjang Password = 5
0-z 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 Uji Panjang = 3 Diulang sampai 62x62x62 kombinasi
0-z 0-z 0-z 0-z Uji Panjang = 4 Diulang sampai 62x62x62x62 kombinasi
0-z 0-z 0-z 0-z 0-z Uji Panjang = 5 Diulang sampai 62x62x62x62x62 kombinasi
10 37 years 4 hours11 46 years 4 days12 55 years 4 months13 64 years 4 years14 73 years 13 years15 82 years 22 years16 91 years 31 years17 100 years 40 years
9