Fungsi Hash Kriptografi (Bagian 1)

Fungsi hash adalah fungsi yang memetakan dari suatu data (bisa string atau apapun) ke sebuah data lain yang ukurannya biasanya lebih kecil. Ada fungsi hash untuk dipakai di struktur data hash table (outputnya adalah integer) dan ada fungsi hash untuk kriptografi outputnya berupa string alfanumerik dengan panjang tertentu.

Hash Table

Sebelum menjelaskan fungsi hash kriptografi, saya jelaskan dulu contoh fungsi hash biasa karena lebih sederhana. Penggunaan fungsi hash dalam kasus ini adalah untuk menyimpan data ke hash table, supaya gampang diakses lagi.

Misalnya kita punya array yang bisa menyimpan 100 elemen. Kita ingin menyimpan sebuah string, lalu ingin bisa menemukan kembali string itu dengan cepat nantinya, tidak memulai membandingkan satu per satu dari elemen pertama. Untuk melakukan ini kita bisa memakan fungsi hash. Sebuah string akan dimasukkan ke sebuah fungsi hash, hasilnya adalah sebuah angka n dari 0-99, lalu kita masukkan string ke array di indeks itu.

Lanjutkan membaca “Fungsi Hash Kriptografi (Bagian 1)”

Kriptografi RSA Praktis

Topik kriptografi RSA sudah dibahas di banyak artikel dan video oleh orang lain, jadi di sini saya hanya ingin memberikan mengenai topik RSA secara praktis. Praktis di sini artinya saya akan memakai tool openssl dan kode Python untuk melakukan enkripsi.

Prinsip RSA adalah: bahwa kita bisa mencari 3 bilangan: n, e, dan d sedemikian hingga relasi ini terpenuhi.

{\displaystyle (m^{e})^{d}\equiv m{\pmod {n}}}

Jika diketahui e dan n, kita tidak bisa dengan mudah mencari tahu nilai d. Dalam RSA: public key adalah n dan e, sedangkan private key adalah d dan n.

Saya tidak akan menjelaskan secara matematis bagaimana menghasilkan key RSA ini. Penjelasannya bisa dibaca di Wikipedia, tapi ada beberapa hal dasar yang perlu diketahui:

  • n adalah perkalian dari dua buah bilangan prima p dan q.
  • Jika kita bisa memfaktorkan n, maka kita bisa mencari nilai private key.
  • Saat ini tidak ada algoritma efisien untuk memfaktorkan n
Lanjutkan membaca “Kriptografi RSA Praktis”

Security dari level bit (Bagian 2: Encoding Teks)

Saat ini masih banyak user dan juga programmer yang masih bingung dengan masalah “encoding” teks (misalnya ASCII, ISO8859-1, UTF-8, UTF-16, UTF32, dsb). Ini merupakan hal dasar yang penting, baik untuk keperluan sehari-hari maupun dalam bidang security. Ada beberapa attack yang berhubungan dengan encoding teks ini.

Encoding teks dan security

Sekilas topik encoding sepertinya hal yang membosankan dari sudut pandang security, tapi ada ada banyak masalah security yang berhubungan dengan encoding teks. Beberapa contohnya:

  • phishing attack memanfaatkan Unicode character yang mirip (character ambiguity)
  • phishing menggunakan karakter khusus untuk marker RTL (right to left) dan LTR (left to right)
  • Encoding alternatif untuk membypass filter
  • Overlong UTF-8 encoding attack
  • Membuat shell code yang bisa lolos encoding tertentu
  • Buffer overflow karena kesalahan penanganan encoding

Berbagai hal di atas sulit dijelaskan jika tidak memiliki pemahaman yang baik mengenai encoding, jadi di tulisan kali ini saya akan membahas mengenai text encoding.

Lanjutkan membaca “Security dari level bit (Bagian 2: Encoding Teks)”

Security dari level bit (Bagian 1: Encoding Base N)

Di masa awal kuliah ilmu komputer, mahasiswa diajari berbagai macam hal dasar mengenai komputer. Hal dasar pertama adalah bahwa data bisa dikonversi menjadi bilangan (data di sini berupa teks, foto, video, suara, dsb). Lalu setiap bilangan bisa dikonversi dalam representasi biner supaya bisa diproses oleh komputer digital. Beberapa pelajaran awal arsitektur komputer akan membahas mengenai gerbang logika, lalu bagaimana gerbang logika ini bisa dipakai untuk menjumlahkan. Setelah kita bisa menjumlahkan maka kita juga bisa mengurangi (di sini akan diajarkan mengenai komplemen 2). Setelah bisa menjumlahkan, kita akan bisa mengalikan.

Biasanya mahasiswa masih mengerti konsep-konsep tersebut ketika diajarkan, walau mungkin belum bisa menyambungkan ilmunya dengan komputer yang ditemui sehari-hari. Di masa-masa akhir kuliah, berbagai topik praktis diajarkan. Di sini mahasiswa akan bisa membuat web atau aplikasi praktis. Tapi biasanya ada gap pengetahuan dari hal yang dasar di tahun pertama dengan hal praktis di tahun terakhir.

Hex editor bukan benda ajaib

Contoh yang sederhana adalah masalah manipulasi bit atau pemahaman bahwa berbagai manipulasi data bisa dipahami dari level biner. Kebanyakan orang akan bingung berhadapan dengan hex editor untuk melihat data sebuah file, dan bahkan menganggap kalau hex editor (saja) cukup untuk menghack apa saja.

Lanjutkan membaca “Security dari level bit (Bagian 1: Encoding Base N)”

Ilmu komputer dan security

Seringkali ketika ingin menuliskan topik security, saya bingung mulai dari mana karena banyak sekali topik security yang butuh dasar ilmu komputer yang baik. Tanpa satu dasar yang baik, penjelasan topik security bisa jauh ke mana-mana. Selain itu saya juga sering dapat pertanyaan yang aneh-aneh.

Contoh pertanyaan konyol yang sering saya dapatkan adalah: saya diberi string dalam base64 dan ditanya apa artinya. Atau bagaimana mendecode string heksa yang adalah sebuah hash. Ini sama saja dengan bertanya: 763748 itu angka apa? bisa berupa apa saja, mungkin nomor Induk mahasiswa, mungkin sisa saldo rekening Anda, 6 digit terakhir nomoer telepon gebetan Anda, PIN iPad kakek Anda, dsb.

Kalau bisa melihat isi gembok, lebih gampang membukanya tanpa kunci
Lanjutkan membaca “Ilmu komputer dan security”

Reverse Engineering APK

Saya sudah menulis beberapa artikel terpisah mengenai reverse engineering APK Android (misalnya di http://yohan.es/security/android/) . Di posting ini saya ingin menggabungkan berbagai tulisan yang pernah saya buat dalam satu posting, supaya lebih gampang dibaca. Topik yang lebih umum mengenai Pengantar Reverse Engineering sudah pernah saya bahas di blog ini (tidak spesifik Android).

 

Tujuan Reversing

Pertama, tentukan tujuannya apa ingin bisa reversing APK. Ini bisa digolongkan jadi dua bagian: apakah ingin mengetahui cara kerjanya? (sekedar membaca kode) atau ingin mengubah aplikasinya? (memodifikasi kode) Yang termasuk dalam kategori pertama: apakah ingin ekstrak API-nya, ingin membaca file yang dibuat oleh aplikasi, ingin tahu protokol aplikasi. Lanjutkan membaca “Reverse Engineering APK”

Pengantar Reverse Engineering

Sudah beberapa kali saya ditanya: kalo ada aplikasi X bagaimana cara membongkarnya? Bahasa kerennya: bagaimana saya melakukan reverse engineering terhadap aplikasi tertentu?. Sayangnya tidak ada jawaban sederhana untuk ini. Bagaimana membongkar sesuatu tergantung pada teknologi yang digunakan untuk membangun dan memproteksi benda itu. Berbagai tools juga bergantung pada sistem operasi yang menjadi target.

Saya sudah menulis secara umum tentang reverse engineering, tapi belum memberikan jawaban praktis, jadi di posting ini saya akan berusaha menuliskan secara praktis langkah-langkah untuk memulai reverse engineering.

label
convert -size 1200×630 -background white -fill black -font Nimbus-Mono-L -pointsize 144 -gravity center -label:”Reverse\nEngineering” -flip label.png

Lanjutkan membaca “Pengantar Reverse Engineering”