Apa itu Encoding, Obfuscation, Hashing dan Encryption

Soeleman 15 Maret 2017

Apa itu Encoding, Obfuscation, Hashing dan Encryption

Mendengar orang berbicara tentang Cryptography, kadang banyak istilah yang suka tercampur-baur dan itu jadi perdebatan tersendiri. Itupun tergantung dari sudut mana melihatnya. Secara umum memang terhubung satu sama lainnya dalam konteknya sendiri.

Pada kesempatan kali ini kita akan coba mengupas tentang Encoding, Obfuscation, Hashing dan Encryption.

Encoding

Tujuan Encoding adalah mengubah data yang dapat digunakan oleh berbagai macam sistim secara tepat dan aman. Seperti mengirimkan data yang berbentuk biner lewat email (seperti attachment), menyimpan data biner ke dalam database atau menampilkan karakter-karakter special pada halaman web atau media lainnya. Biasanya data itu diterjemahkan kedalam karakter sesuai dengan tipe yang digunakan.

Fokusnya pada bagaimana mengubah data dari satu sistem ke sistem lain secara benar. Datanya sendiri tidak disandikan, jadi datanya seperti apa adanya hanya bentuknya berbeda. Pada saat proses melakukan Encoding biasanya akan digunakan cara yang sudah tersedia secara umum. Jadi data diubah oleh algoritma yang sama, baik untuk merubah atau mengembalikan lagi data itu seperti semula. Semua itu dilakukan tanpa perlu adanya kunci, asal tahu algoritma mana yang digunakan. Data yang sudah di-Encoding akan bisa di-Decoding.

alt text

Ada banyak algoritma Encoding, seperti ASCII, Unicode, URL Encoding, Base64 dan lainnya. Yang paling sering kita lihat adalah Base64. Dari email, http sampai dalam database banyak menggunakan ini.

Obfuscation

Arti kata Obfuscation sendiri berarti membingungkan, yang dimaksud membuat sesuatu tidak mudah dimengerti. Ia bukan mengacak tanpa aturan. Ia akan membuat sebuah pesan menjadi sulit dibaca dan mengerti. Tujuannya ketika pesan itu berada di orang yang tidak mengerti cara membacanya maka pesan itu hanyalah pesan sampah.

Another person junk is another person gold.

Dalam pemograman cara ini juga banyak dipakai dalam source-code maupun yang berbentuk biner. Ini dilakukan agar orang lain tidak mudah mereplika ke dalam bentuk yang lain. Bukan berarti tidak bisa hanya lebih sulit dan butuh waktu lebih, Reverse-Engineering sekarang banyak tool yang mempercepat proses itu.

Biasanya cara ini dibuat agar manusia akan kesulitan memahami pesan yang sudah di-Obfuscation tapi tidak dengan mesin. Seperti pada kode C dibawah.

char*M,A,Z,E=40,J[40],T[40];main(C){for(*J=A=scanf(M="%d",&C); -- E; J[ E] =T [E ]= E) printf("._"); for(;(A-=Z=!Z) || (printf("\n|" ) , A = 39 ,C -- ) ; Z || printf (M ))M[Z]=Z[A-(E =A[J-Z])&&!C & A == T[ A] |6<<27<rand()||!C&!Z?J[T[E]=T[A]]=E,J[T[A]=A-Z]=A,"_.":" |"];}

Kompiler tetap dapat membaca dan melaksanakan tugasnya, sedangkan kita jadi malas bacanya. Banyak aplikasi untuk melakukan ini, seperti JSFuck, Jscrambler, Dotfuscator, ionCube dan lainnya.

Kalau ini dianggap lebih aman, pikirkan lagi. Obfuscation ini mirip Encoding tapi tidak atau melakukannya secara manual untuk me-DeObfuscation. Ia menyulitkan manusianya saja tapi tidak mesin.

Hashing

Tugas utama Hashing adalah untuk memastikan integritas (keutuhan). Maksudnya seperti apa ya? Contohnya, kita ada sebuah file. Dengan di-Hashing kita akan memdapatkan nilai tertentu sebagai bagian integritas file tersebut. Apabila file itu dirubah, maka nilainya tidak akan sama lagi dengan Hashing pertama. Jadi kita bisa tahu ini bukan file yang sama, ini yang kita sebuat integritas dari sebuah file. Kita bisa lihat cara ini digunakan oleh Git.

Penerapan umum dari Hashing ini terlihat pada saat kita melakukan Authentication. Pada saat kita login, yang dikirim ke server adalah hash yang akan dibandingkan dengan hash yang sudah ada di server. Jadi kita tidak pernah mengirim user-name dan password lewat jaringan, yang ada kemungkinan disadap.

Dan cara yang sama ketika kita mengirim pesan yang sudah sudah di-Encryption dengan private-key. Kita kirim pesan itu disertai private-key yang di-hash. Di sisi server hash itu dicocokan dengan yang ada di-server. Kalau valid maka paket itu akan bisa dibuka.

alt text

Banyak algoritma untuk melakukan Hashing, seperti SHA, MD5, bycrpt dan lainnya. Dengan kemajuan hardware dan trik baru dalam math banyak dari algoritma ini sudah bisa di akali. Tetap waspada juga.

Encryption

Encryption adalah cara megubah data menjadi data tidak dapat dibaca tanpa potongan kode (baca: key)-nya. Dengan begitu pesan tersebut hanya bisa dibaca oleh orang yang memiliki pesan yang integritasnya valid dan memiliki key-nya.

Prosesnya terlihat sederhana. Sebuah pesan dikonjugsikan dengan algoritma dan key yang akan menghasilkan pecahan karakter yang cukup rumit. Untuk membaca pesan itu, akan sama kita perlu key, algoritma dan pesan yang ter-Encryption. Mirip seperti Encoding alurnya, tapi key diperlukan dan memainkan peranan penting.

Dalam beberapa algoritma, biasanya juga ditambahkan Hashing sebagai bagian prosesnya. Pilihannya juga banyak, dari AES, Blowfish, RSA dan lainnya.

alt text

Penutup

Dalam Cryptography baik secara teori dan prakteknya adalah tentang keamanan berkomunikasi. Yang melibatkan bagaimana cara melakukan itu dan memastikan tidak ada siapapun dapat membaca pesan pribadi tersebut. Dari aspek keamanan data, integritasnya, siapa penggunanya dan teknik yang bersangkutan (dari math, computer-science dan electrical-engineering). Dan untuk sekarang ini adalah luas sekali penggunaan Cryptography ini, terutama yang berhubungan dengan dunia bisnis.

Setelah melihat penjabaran diatas yang berhubungan langsung dengan Cryptography adalah Hashing dan Encryption. Bukan berarti Encoding dan Obfuscation tidak penting disini. Dalam beberapa kesempatan ke empat yang kita bahas tadi bekerja sama sesuai dengan kebutuhannya.

Referensi