Algoritma dan Struktur Data

Kali ini kita akan bahas tentang hubungan algoritma dan struktur data. Pada saat algoritma dijalankan, maka data (input/output) akan disimpan dalam suatu tempat (struktur data) untuk kemudian diproses. Kita sudah mengenal beberapa struktur data seperti struktur data linear misalnya linked list, queue (antrian), stack (tumpukan), dan struktur data non-linear misalnya tree yang bersifat hirarki. Struktur data adalah cara merepresentasikan atau menyimpan data dalam memori komputer. Data ini harus direpresentasikan sedemikian rupa sehingga mudah diproses. Di sinilah peran struktur data dan alasan kenapa penting untuk memahami topik ini.

Sebagai bahan penyegaran, kita akan mereview beberapa jenis struktur data yang umum digunakan

  • Linked List
    Linked list merupakan sebuah struktur data list yang saling terhubung melalui suatu link. Dalam sebuah linked list terdapat node dan link. Node pertama disebut head. Ada beberapa tipe linked list misalnya single linked list, double linked list, dan circular linked list. Suatu node pada linked list terdiri dari data item dan pointer ke node lainnya. Single linked list hanya memiliki 1 pointer yang mengarah ke node selanjutnya sehingga hanya bisa melakukan proses penelusuran ke depan (forward). Double linked list terdiri dari data item dan dua pointer yang menunjuk ke node sebelum dan sesudahnya. Jadi double linked link bisa melakukan proses penelusuran ke depan (forward) dan belakang (backward). Circular linked list mirip dengan single linked list, namun pointer node terakhir menunjuk ke alamat head.

    Single Linked List
    single linked list
    Double Linked List
    Double Linked List
    Circular Linked List
    Circular Linked List

    Pada linked list dapat dilakukan operasi seperti insert menambahkan node baru baik di depan (head), di tengah, ataupun di belakang (tail). Operasi remove menghapus salah satu node. Update untuk memperbaharui nilai suatu node. Retrieve untuk mendapatkan informasi tentang isi dari suatu node tertentu.

  • Array
    Array merupakan salah satu tipe list yang memiliki suatu key atau yang lebih dikenal dengan index untuk menandai setiap elemen array tersebut. Pada beberapa bahasa pemrograman ukuran suatu array harus dideklarasikan terlebih dahulu sehingga memiliki lokasi yang fix dalam memori. Array biasanya diberi nama untuk membedakannya dengan array yang lain. Salah satu karakteristik array adalah bahwa semua elemen yang tersimpan di dalamnya memiliki tipe data yang sama. Jadi, data float tidak bisa ditampung dalam sebuah array yang memiliki tipe data integer. Array diakses dengan menggunakan indexnya. Index adalah suatu nilai yang menunjukkan urutan elemen dalam array, adapun elemen adalah data yang tersimpan dalam index tertentu. Misalkan Integer Array A[10]=12 maka bisa diartikan sebuah array A bertipe integer pada inde

    Array
    Array
  • Queue
    Queue juga merupakan salah satu jenis list namun memiliki sifat yang khas. Queue biasa dalam bahasa Indonesia disebut sebagai antrian. Queue bisa diimplementasikan dengan array ataupun linkedl list. Pada queue operasi penambahan (insertion) hanya bisa dilakukan di bagian belakang queue. Adapun penghapusan (deletion) hanya bisa dilakukan di bagian depan queue. Oleh karena itu, queue menerapkan prinsip First In First Out (FIFO). Salah satu variasi dari queue adalah Priority Queue. Pada Priority Queue setiap elemen queue memiliki suatu nilai (key) yang menunjukkan tingkat prioritasnya. Biasanya nilai yang lebih kecil menunjukkan prioritas lebih besar. Adanya nilai ini menyebabkan prinsip FIFO bisa diabaikan. Suatu elemen yang datang belakangan bisa dieksekusi terlebih dahulu karena memiliki prioritas lebih tinggi dari elemen yang sudah ada sebelumnya. Oleh karena itu, priority queue memiliki operasi tambahan yaitu mampu menentukan elemen dengan prioritas terbesar MAX (A), menaikkan prioritas suatu elemen ke nilai tertentu INCREASE-KEY (A, key, k), menentukan elemen terbesar dan menghapusnya/ekstrak REMOVE-MAX(A).

    Queue
    Queue
  • Stack
    Stack juga termasuk salah satu jenis list. Dalam bahasa indonesia stack biasa disebut juga sebagai tumpukan. Sama seperti queue, stack juga memiliki sifat atau operasi tertentu yang membedakannya dari list secara umum. Ukuran stack dapat ditentukan pada saat deklarasi. Jadi stack tersebut hanya mampu menampung sekian elemen sesuai dengan yang dideklarasikan di awal. Hal ini menyebabkan adanya operasi pada stack untuk mengetahui kondisi stack apakah kosong  (isEmpty) atau penuh (isFull). Selain itu, ada dua operasi pada stack yaitu menambahkan tumpukan (Push) atau mengambil tumpukan (Pop). Perintah Push akan menambah jumlah elemen dalam tumpukan dan harus didahului dengan perintah isFull. Hal ini dilakukan untuk menjamin bahwa masih ada ruang yang kosong untuk menambahkan elemen baru pada stack. Adapun perintah Pop akan mengambil elemen paling atas pada tumpukan sehingga jumlah elemen berkurang dan harus didahului dengan perintah isEmpty. Mengapa? karena sebelum mengambil sebuah elemen pada stack harus dipastikan dulu bahwa stack tersebut tidak kosong. Berbeda dengan Queue, Stack menganut prinsip Last In First Out (LIFO). Elemen yang terakhir masuk ke dalam stack akan pertama kali dikeluarkan karena sifat stack yang membatasi operasi hanya bisa dilakukan pada salah satu sisinya saja (bagian atas tumpukan)

Continue reading “Algoritma dan Struktur Data”

Advertisements

Desain dan Analisis Algoritma; Sebuah Pengantar


Hallo semua, kali ini saya akan mencoba menulis sebuah artikel tentang Desain dan Analisis Algoritma. Anak ilmu komputer, teknik informatika, matematika tentu sudah sangat familiar dengan tema ini. Namun tak ada salahnya kita coba ulas kembali untuk menyegarkan ingatan kita. Sippps?! Namun, sebelum kita bahas terlalu dalam, alangkah baiknya kita mengulang beberapa hal.

Secara umum, algoritma adalah sebuah prosedur atau langkah-langkah komputasi yang terdifinisikan dengan baik yang membutuhkan nilai/kumpulan nilai sebagai inputnya dan menghasilkan nilai/kumpulan nilai sebagai outputnya. Dari definisi ini maka bisa kita ambil kata kunci bahwa algoritma itu terdiri dari 3 elemen, ada input, proses, dan output. Algoritma ini digunakan untuk menyelesaikan permasalahan komputasi yang jelas (masalahnya harus jelas ya hehe). Biasanya, dalam sebuah permasalahan komputasi akan tergambarkan bagaiamana hubungan antara input dan output. Contoh sederhananya misalkan Continue reading “Desain dan Analisis Algoritma; Sebuah Pengantar”

Ujian? Siapa Takut (Tips Menghadapi Ujian)

Bagi mahasiswa ujian kadang menjadi sebuah momok yang menakutkan di setiap tengah ataupun akhir semester. Materi kuliah yang sekian banyak terasa tak mungkin bisa dikuasai hanya dalam hitungan hari apalagi dengan sistem SKS yang harus dikebut dalam semalam. Namun anehnya mahasiswa masih setia dengan sistem tersebut. Bisa jadi mereka telah membaca buku The Power of Kepepet 😀

Banyak yang bilang biar ujian mudah belajar jangan hanya menjelang ujian. Pernyataan ini betul. Ada yang bilang biar ujian mudah rajin masuk kelas. Pernyataan ini juga betul. Namun terkadang dua hal ini tak cukup memberikan amunisi di medan perang 5×6 meter persegi itu (baca ruang ujian). Nah, jika kalian beranggapan ujian adalah perang maka percayalah setiap perang membutuhkan strategi. Jadi, ujian itu butuh strategi Sob. Kali ini ini saya ingin berbagi strategi yang mungkin tidak akan berhasil pada semua orang namun bisa berhasil pada orang tertentu.

Ada banyak hal yang harus dipersiapkan untuk menghadapi ujian di antaranya :
Continue reading “Ujian? Siapa Takut (Tips Menghadapi Ujian)”

Bahaya Besar di Balik Kesederhanaan SNMP

Simple Network Management Protocol (SNMP) adalah sebuah protokol yang digunakan untuk memonitor berbagai macam perangkat yang terkoneksi ke jaringan seperti router, switch, server, printer, dan sebagainya. SNMP terdiri dari 3 bagian yaitu Network Management Station (NMS), Agent, dan Management Information Base (MIB). NMS berfungsi sebagai pusat kendali aktivitas SNMP. Agent merupakan software yang berjalan pada perangkat yang dimonitor sedangkan MIB berisi informasi tentang perangkat yang dimonitor. Proses kerja SNMP diwakili oleh 3 aktivitas yaitu get request untuk menerima manajemen data dari perangkat, set request memodifikasi konfigurasi perangkat, dan trap message yang memungkinkan perangkat mengirimkan notifikasi asynchronous dan sinyal ketika terjadi perubahan kondisi pada perangkat seperti suhu melewati batas yang ditetapkan. Komunikasi data SNMP menggunakan protokol UDP, agent menerima permintaan dari NMS pada port 161 sedangkan NMS menerima sinyal trap pada port 162.
SNMP digunakan secara masif karena sederhana. Hampir semua perangkat jaringan mendukung protokol ini. Namun berdasarkan data Common Vulnerability and Exposure (CVE) ditemukan banyak kerentanan pada SNMP. Kerentanan ini terutama pada SNMP v1 dan v2 yang tidak mengenkripsi datanya seperti SNMPv3. Kenyataannya, banyak perangkat yang beroperasi saat ini masih menggunakan SNMPv1 atau v2 dengan alasan perangkat tidak kompatibel dengan v3 atau admin yang malas mengupgrade SNMP-nya. Beberapa kerentanan yang ditemukan yaitu kesalahan NMS dalam men-decode dan memproses trap message dan kesalahan agent dalam men-decode dan memproses get request message. Selain itu terdapat pengaturan yang tidak aman seperti tidak dibutuhkannya pesan SNMP untuk menggunakan community name (password) yang tepat dalam berkomunikasi. Penggunaan UDP yang connectionless menyebabkan NMS atau agent bisa menerima request atau trap dari agent atau NMS di luar jaringan lokal (spoofing). Community name yang tidak terenkripsi pada SNMPv1 dan v2 menyebabkan penyerang dapat melakukan sniffing pada paket dan mendapatkan community name untuk dieksploitasi. Kerentanan ini bisa berakibat DDOS attack, format string vulnerability, ataupun buffer overflow.
Salah satu contoh kerentanan terbaru SNMP menurut CVE yaitu fungsi snmp_pdu_parse di snmp_api.c (net-snmp 5.7.2 dan versi sebelumnya) tidak menghapus variabel varBind pada netsnmp_variable_list ketika memparsing SNMP PDU fails, yang memungkinkan penyerang melakukan serangan DDOS dan mengeksekusi sembarang kode melalui sebuah crafted packet (CVE-2015-5621).  Kerentanan ini diumumkan pada April 2015 dan menginfeksi Ubuntu 12.04 (32 dan 64bit), Red Hat Enterprise 6, Oracle Enterprise Linux 6, IBM Tivoli Netcool/OMNIbus 7.3, dan Centos 6. Kerentanan ini dapat dieksploitasi tanpa akses ke jaringan lokal, tidak membutuhkan kondisi khusus atau tahap yang kompleks untuk dieksploitasi serta tidak membutuhkan otentikasi. Pengaruh yang ditimbulkan yaitu penyerang dapat mengakses dan memodifikasi file system pada area tertentu (akses terbatas). Selain itu, penyerang bisa melakukan interupsi dan menurunkan kinerja sistem. Beragam vendor telah mengeluarkan patch untuk memperbaiki kerentanan tersebut.
Beberapa solusi untuk mengurangi kerentanan pada SNMP sebagai berikut :
Gunakan SNMPv1 scanner untuk mengidentifikasi perangkat yang SNMP-nya sedang aktif
Pasang patch yang disediakan oleh vendor
Matikan service SNMP pada perangkat yang tidak membutuhkannya
Terapkan ingress dan egress filtering pada firewall untuk protokol UDP port 161 dan 162 untuk paket yang masuk dan keluar untuk mencegah serangan dari luar atau inisiasi dari dalam sistem.
Ganti community string default pada perangkat sehingga tidak mudah ditebak oleh penyerang.
SNMP adalah sebuah protokol yang sangat bermanfaat untuk mengelola sistem. Namun perlu diketahui bahwa SNMP memiliki banyak kerentanan sehingga perlu diperhatikan untuk menjaga keamanan sistem.

Social Engineering, Ancaman Keamanan Sistem Informasi

image

Social engineering adalah sebuah metode untuk masuk ke sebuah sistem tanpa menerobosnya secara langsung atau mengeksploitasi kerentanannya (vulnerability). Akan tetapi, metode ini mengeksploitasi kerentanan pada manusia yang berada di sekitar sistem. Cara ini banyak digunakan karena lebih mudah dan efektif. Penyerang tidak perlu bersusah payah menembus keamanan sistem untuk menanamkan malware. Cukup memanfaatkan kelemahan manusia seperti kelalaian, keingintahuan, kecerobohan, ketidaktahuan, ketidakwaspadaan, dan sebagainya. Jika diibaratkan 1 manusia 1 celah, maka dengan metode social engineering jumlah celah keamanan sistem sama dengan jumlah manusia yang ada dalam organisasi tersebut.
Social engineering selalu dimulai dengan mengumpulkan informasi awal terkait target serangan. Informasi dapat berupa data pejabat eksekutif, struktur organisasi, nomor telepon, laporan organisasi, dan sebagainya. Berbagai informasi ini bisa didapatkan melalui internet. Selain itu, penyerang dapat mengumpulkan latar belakang, aktivitas, dan kebiasaan orang tertentu yang berada di dalam organisasi tersebut dengan memanfaatkan media sosial dan jejaring lainnya.
Selanjutnya, penyerang dapat melakukan impersonate terhadap karyawan sistem informasi untuk mendapatkan berbagai informasi dari karyawan lainnya.
Continue reading “Social Engineering, Ancaman Keamanan Sistem Informasi”

Fujiwara Sai; Arti Sebuah Eksistensi

Fujiwara Sai (Sai) adalah seorang pemain catur Go yang 1000 tahun lalu bekerja sebagai instruktur Raja. Namun, suatu hari seorang instruktur lainnya menantang Sai dan posisinya saat ini menjadi taruhan. Pada pertandingan itu, Sai dicurangi dan akhirnya kehilangan posisinya saat itu. Sai keluar kerajaan, tanpa keinginan untuk hidup lagi sehingga ia memutuskan menenggalamkan dirinya di sebuah danau. Meskipun demikian, keinginannya untuk terus bermain Go yang tidak padam dan mencapai “The Divine Move” kemudian membawanya menjadi hantu yang terjebak dalam sebuah papan catur Go.

1000 tahun kemudian, seorang bocah SD bernama Shindou Hikaru  (Hikaru) tanpa sengaja membebaskan Sai dari papan tersebut. Sai pun seolah menempel pada diri Hikaru. Hanya hikaru yang mampu melihat dan mendengarkan Sai. Sai yang masih membawa keinginan untuk mencapai “The Divine Move” kemudian mengajak Hikaru bermain Go. Hikaru tidak mengerti sama sekali tentang Go sehingga ia hanya mengikuti apa yang diperintahkan oleh Sai. Namun Sai mengatakan padanya untuk memahami setiap langkah yang ia perintahkan.

Hikaru yang kemudian berkembang akhirnya mulai memahami Go dan menjadi pemain Profesional. Ia mulai memainkan Go-nya sendiri dan tak melibatkan Sai dalam pertandingan. Keinginan Sai untuk melawan pemain Go terkuat (Touya Koyo)  pun mulai tampak sirna.
Continue reading “Fujiwara Sai; Arti Sebuah Eksistensi”