Mengenal Hashing, Fungsi Satu Arah
Hashing? Hashtag kali maksudnya? Bukan. Oh, hash brown yang bisa dibeli di McD? Bukan juga. Hashing merupakan sebuah nama yang diberikan pada suatu proses yang menarik untuk dibahas. Mau tau apa itu?
Pengertian Hashing
Hashing adalah proses untuk mengubah suatu data menjadi data lain yang memiliki ukuran tertentu.
Pada proses hashing ini terdapat tiga komponen penting yakni: data masukan, hash function, dan hash values / digest.
Mari bahas satu persatu komponen tersebut.
Komponen pada Proses Hashing
Data Masukan
Data masukan untuk hashing bisa berupa apapun. Biasanya, masukan tersebut bisa apa saja asal merupakan data biner. Mau itu file, video, teks, ataupun password, tidak masalah karena semua benda tersebut adalah data biner.
Baca juga: Semua Benda adalah Biner dalam Komputer.
Hash Function
Hash function adalah sebuah fungsi yang dapat mengubah data menjadi data lain yang memiliki ukuran tertentu. Fungsi ini adalah fungsi satu arah, artinya kamu tidak bisa mengetahui apa data masukan fungsi ini jika kamu memiliki data keluarannya.
Contoh hash function paling sederhana adalah sebagai berikut,
Data masukkan: kumpulan angka yakni 57, 9, 28, 24, 88
Hash function: penjumlahan dari semua angka masukkan
Hasil: 57 + 9 + 28 + 24 + 88 = 206
Pada contoh di atas, hash function tersebut akan menghasilkan angka 206 jika data yang kamu masukkan adalah kumpulan angka 57, 9, 28, 24, dan 88.
Fungsi ini juga merupakan satu arah. Bayangkan, jika kamu hanya mengetahui hash function-nya dan data keluarannya yakni angka 206. Kamu tidak bisa tahu apa data masukkannya (walaupun kamu bisa mencoba-coba semua kombinasi angka).
Tentunya, hash function yang ada di luar sana, tidaklah sesederhana contoh di atas. Agar hash function dapat dikatakan baik, fungsi tersebut harus memenuhi 3 kriteria umum ini,
-
Kecepatan
Fungsi hash harus cepat. Kalau tidak, tidak ada yang mau menggunakannya. Tapi, kalau fungsinya terlalu cepat cara menghitungnya, bisa jadi fungsi tersebut tidak aman loh! Jadi harus ada keseimbangan antara kecepatan dan keamanan.
-
Unik
Fungsi tersebut harus sebisa mungkin menghasilkan nilai yang berbeda untuk setiap data masukkan. Namun, memang tidak dipungkiri, data hasil keluaran (digest) jumlahnya terbatas. Karena terbatas, maka tetap ada kemungkinan hasilnya tidak unik. Tapi tetap saja, fungsi harus bisa memastikan keluaran dengan hasil yang sama sangat kecil kemungkinannya.
Pada contoh fungsi hash sederhana di atas, keluaran dengan nilai 206 dapat dihasilkan oleh banyak kombinasi angka. Misalnya 206, 0 atau 20, 150, 36. Tentunya ini merupakan indikator bahwa fungsi hash sederhana di atas merupakan fungsi yang buruk.
-
Peka Terhadap Perubahan
Fungsi harus bisa menghasilkan nilai yang berbeda walaupun data masukan hanya berubah sedikit. Selain itu, perubahan yang sedikit haruslah menghasilkan nilai yang sangat jauh berbeda.
Contoh fungsi hash sederhana sebelumnya memang menghasilkan nilai keluaran yang berbeda dengan masukkan yang sedikit berbeda. Misal 1, 2 dan 1, 3 akan menghasilkan 3 dan 4. Namun sayangnya, hasilnya tidaklah jauh berbeda. Hal ini menandakan bahwa fungsi hash sederhana di atas bukan meruapakan fungsi yang baik dan aman.
Hash Values atau Digest
Digest adalah hasil keluaran dari hash function. Digest pada fungsi hash pada umumnya memiliki ukuran yang tetap. Contohnya pada fungsi hash bernama MD5 memiliki ukuran 128 bit.
Digest inilah yang biasanya digunakan untuk berbagai jenis kebutuhan dalam software engineering dan security.
Jenis-Jenis Hash Function
Ada banyak jenis hash function dan masing-masing memiliki kekurangan, kelebihan, serta penggunaannya masing-masing. Namun diantara banyaknya hash function tersebut, terdapat beberapa jenis yang sering kita gunakan.
MD5
Jangan pernah menggunakan MD5 lagi!
Sejak beberapa tahun lalu, MD5 telah terbukti tidak aman. Telah banyak penelitian yang membuktikan bahwa MD5 memiliki kelemahan dan dapat terjadi collision (digest yang dihasilkan tidak unik). Karenanya, penggunaan MD5 sangat tidak dianjurkan.
Dahulu, MD5 merupakan fungsi hash yang terkenal dan memiliki pengguna yang sangat banyak. Salah satu kegunaannya yang populer adalah untuk membuat hash dari sebuah passowrd. Penggunaan ini sangat tidak dianjurkan untuk saat ini karena mudahnya untuk menemukan nilai data masukkan dari sebuah digest MD5 (MD5 decrypt). Dapat dikatakan bahwa fungsi satu arah MD5 tidak bekerja dengan baik karena dapat dicari nilai data masukkannya.
MD5 menghasilkan ukuran digest sebesar 128 bit.
SHA-1
Sejak tahun 2017, banyak perusahaan besar yang tidak lagi mendukung penggunaan SHA-1.
SHA-1 adalah Secure Hashing Algorithm generasi yang pertama yang dibuat pada tahun 1995. Algoritma ini menghasilkan ukuran digest sebesar 160 bit.
SHA-2
SHA-2 merupakan algoritma hashing yang direkomendasikan saat ini (tahun 2020). Algortima ini memiliki cukup banyak varian yang mecakup: SHA-224, SHA-256, SHA-384, SHA-512.
SHA-2 masih dianggap sebagai algoritma hashing yang aman untuk digunakan dan belum ditemukan kelemahan yang dapat mengurangi keamanannya. Walaupun, sudah terdapat banyak penelitian yang membuktikan bahwa pada algoritma SHA-2 dapat terjadi collision (nilai digest tidak unik).
Untuk saat ini, gunakan algortima hashing ini jika kamu membutuhkan hash untuk data penting seperti password.
Ukuran digest yang dikeluarkan SHA-2 ini bervariatif tergantung varian algoritma yang digunakan. Biasanya dapat berukuran 224 bit, 256 bit, 384 bit, dan 512 bit sesuai dengan penamaan varian tersebut.
Penggunaan Hash Function
Pengunaan hash function tanpa kita sadari sangatlah banyak. Berikut ini adalah contoh penggunaan hash yang bisa kita temui dalam melakukan pemrograman sehari-hari,
-
Mengecek Kesamaan
Karena sifatnya yang unik, hash function dapat digunakan untuk melakukan pengecekan kesamaan antara dua benda. Jika kedua benda tersebut sama, maka seharusnya digest yang dihasilkan juga sama. Begitu pula sebaliknya. Pada penggunaan inilah, masalah collision menjadi berbahaya. Karena, bisa saja dua benda yang tidak sama dikatakan sama jika terjadi collision.
-
Implementasi Struktur Data
Penggunaan hashing function pada struktur data sangatlah variatif. Biasanya digunakan agar akses terhadap suatu data memiliki kompleksitas O(1). Bagimana caranya?
Contohnya, pada struktur data ‘Set’. Hash function pada Set digunakan untuk menentukan di indeks mana suatu benda diletakkan. Sehingga, dengan mengetahui nilai data masukkan, kamu dapat tau dengan cepat apakah data tersebut ada pada suatu ‘Set’ atau tidak.
-
Mengamankan Password
Password tidak boleh disimpan dalam bentuk teks asli (plaintext). Jika terjadi kebocoran data, bisa jadi sangat berbahaya. Hash ini digunakan pada password untuk menyamarkan password tersebut kalau-kalau terjadi kebocoran data. Data yang bocor hanyalah digest dari password tersebut dan jika dilakukan dengan benar, akan sulit untuk mengembalikannya ke bentuk teks asli.
Mengamankan password ini tidak akan berhasil jika kamu menggunakan algoritma hash yang lemah seperti MD5. Penyebabnya adalah sudah banyak alat yang dapat digunakan hacker untuk mengembalikan hash MD5 ke bentuk aslinya. Contohnya dengan menggunakan rainbow table.
-
Validasi Pesan atau Berkas
Hasil dari hash function atau digest dapat digunakan sebagai suatu bentuk ‘tanda-tangan’. Dengan membubuhkan nilai hash pada suatu berkas, penerima berkas dapat mengetahui apakah berkas tersebut sudah diubah atau tidak. Penerima akan melakukan hashing pada berkas tersebut dan melakukan pengecekan apakah nilainya sama dengan nilai hash yang dibubuhkan sebagai tanda-tangan. Jika sama, kemungkinan berkasnya tidaklah diubah.
Namun, masih ada masalah dengan penggunaan-penggunaan yang seperti contoh di atas. Bisakah kamu menemukannya?
Bagikan di
Kolom Diskusi