Fungsi
Hash merupakan sebuah algoritma yang mengubah text atau message menjadi
sederetan karakter acak yang memiliki jumlah karakter yang sama. Hash juga
termasuk salah satu bentuk teknik kriptografi dan dikategorikan sebagai
kriptografi tanpa key (unkeyed cryptosystem)
. Selain itu hash memiliki
nama lain yang juga dikenal luas yaitu “one-way function”.
Kita
sering sekali menjumpai hash di website-website yang menyediakan layanan untuk
download file ataupun program secara resmi. Hash memang umumnya digunakan untuk
mengecek integritas dari sebuah pesan atau file. File atau pesan yang sudah
berubah akan memiliki nilai hash yang berbeda. Sebagai contoh, dengan sebuah
algoritma hash, pesan'hello' akan memberikan nilai hash 12345 sedangkan
pesan 'hallo' memiliki nilai hash83746. Dengan kata lain output hash
dari kata 'hello' tidak akan sama dengan 'hallo'. Bahkan
sekalipun dalam kacamata kita kedua pesan tersebut terlihat hanya memiliki
perbedaan sedikit saja, namun nilai hash yang dimiliki oleh kedua pesan
tersebut sangat jauh berbeda.
Berbeda
dengan teknik enkripsi dalam kriptografi, tujuan hash memang mengubah sebuah
pesan yang dapat dibaca (readable text) menjadi pesan acak (unreadable text)
sama seperti enkripsi, namun hal mendasar yang menjadi perbedaan dari hash
adalah pesan yang telah acak tadi tidak dapat diubah kembali menjadi pesan yang
seharusnya. Inilah mengapa hash disebut juga sebagai “one-way function“.
Ketika
pertama kali belajar konsep hash, enkripsi, dan dekripsi, saya mencoba bersikap
kritis dengan mengambil hipotesis bahwa dengan algoritma yang tepat, hash pasti
dapat dibalikkan (reverse). Dengan kata lain keyakinan saya terhadap dekripsi
sebuah fungsi hash sangat besar. Namun, jreng-jreng… keyakinan saya tidak
terbukti setelah Lecture Security Technology saya menjelaskan
hal ini dengan baik sekali. Penjelasannya seperti ini:
Misalkan
ada pesan ‘Hello’, pesan ini akan kita hash dengan algortima yang sederhana,
yaitu pertama-tama huruf-huruf tersebut akan kita ubah kedalam bilangan angka.
- a menjadi 1
- b menjadi 2
- c menjadi 3
- dst…
Sehingga
pesan 'hello' akan menjadi '8.5.12.12.15'. Kemudian kita
jumlahkan bilangan-bilangan tersebut sehingga kata 'hello' akan
menghasilkan jumlah 52.
h
|
e
|
l
|
l
|
o
|
||||||
8
|
+
|
5
|
+
|
12
|
+
|
12
|
+
|
15
|
=
|
52
|
Kemudian
langkah terakhir adalah kita ambil satu digit yang paling belakang sebagai
nilai hashnya, yaitu 2. Nah nilai hash 2 ini bukankah bisa dibuat dari banyak
kombinasi huruf? jumlah huruf pun juga bisa bervariasi, tidak harus 5
seperti 'hello'. Berikut beberapa text yang memiliki hash 2.
Text
|
Integer
|
Sum
|
Hash
|
bye
|
2.25.5
|
32
|
2
|
confidential
|
3.15.14.6.9.4.5.14.20.9.1.12
|
112
|
2
|
enemy
|
5.14.5.13.25
|
62
|
2
|
dlsb…
|
Perlu
dicatat disini, bahwa tabulasi diatas adalah ilustrasi bagaimana hash dikatakan
sebagai sebuah fungsi yang tidak dapat di dekripsi. Dalam contoh diatas hasil
hash sudah sangat acak sehingga kita tidak dapat mengetahui lagi apakah sebuah
hash yang ingin kita dekripsi memiliki kandungan huruf e atau z atau m atau
lainnya.
Kegunaan
Menurut
Kaufman et. al. (2002), Fungsi hash dapat digunakan sebagai:
- Menyimpan Password
- Sebagai Message Integrity
- Sebagai Message Fingerprint
Menyimpan Password
Password
didalam sebuah sistem dianjurkan untuk disimpan dengan menggunakan fungsi hash.
Dengan demikian administrator sistem tersebut sekalipun tidak akan dapat
melihat atau menggunakan password user yang telah menjadi membernya. Hal ini
akan memberikan impact yang baik kepada user bahwa baik sistem maupun
administrator sangat menghargai privasi dari anggotanya.
Selain
itu pula, jika database password pengguna,
dengan cara tertentu dapat diakses oleh publik, maka siapapun tetap tidak
langsung dapat menggunakan password tersebut. Untuk menggunakan password yang
telah publicly accessible terlebih dahulu seorang hacker harus
melakukan buteforce terhadap kumpulan password-password teresbut.
Message Integrity
Andaikata
Alice ingin mengirimkan pesan kepada Bob. Untuk mencegah ada seseorang ditengah
perjalanan yang ingin mengganti pesan tersebut, Alice melakukan hash terhadap
pesannya sendiri yang kemudian dikirim bersama dengan pesannya yang asli.
Namun, ternyata apa yang Alice lakukan tidak menjamin integritas keamanan pesan
miliknya. Seseorang tetap dapat mengubahnya dan menyediakan fungsi hash dari
pesan tersebut
Alice
bermaksud mengirimkan pesan ‘Hello Bob’ kepada Bob. Alice kemudian mengirimkan
pesan tersebut bersama dengan fungsi hash MD5 dari pesannya, yaitu
b4c9c3086946666f7ec8014629e105f7. Alice mengirimkan pesan dan hash MD5 nya
melalui jasa pengantar barang, TIKI. Ditengah perjalanan, Eve berhasil mencuri
pesan Alice untuk Bob dari sang kurir TIKI. Eve membuat pesan baru yang
berbunyi ‘Hello Honey’, membuat hash MD5 dari pesannya tersebut, dan
mengembalikannya kedalam tas sang Kurir tanpa sepengetahuan sang Kurir.
Kurir
yang baik hati tersebut memberikan pesan Alice tadi kepada Bob. Ketika Bob
membacanya, Bob merasakan ada yang aneh terhadap pesan tersebut. Bob mengecek
hash MD5 dari pesan yang dibacanya, namun pengecekan MD5 pesan yang diterima
Bob dengan MD5 yang dikirim bersama paket tersebut cocok. Tapi apakah Bob tahu
pesan yang bertuliskan ‘Hello Honey’ tersebut memang berasal dari Alice?
Dalam
kasus ini tentu saja Bob tidak memiliki cara untuk mengetahui keabsahan pesan
tersebut hanya dari paket yang berisi pesan dan MD5 yang katanya dikirim oleh
Alice. Hal ini tidak akan terjadi jika Alice dan Bob menggunakan sejumlah
karakter rahasia yang hanya diketahui oleh kedua orang tersebut.
Karakter-karakter rahasia ini disebut juga dengan nama keyed hash.
Penggunan karakter ini disebut sebagai message integrity, dimana cara
pengunaannya adalah sebelum dilakukannya hash, Alice terlebih dahulu
menggabungkan pesannya dengan karakter rahasia tersebut.
Jika
pesan Alice adalah ‘Hello Bob’ dan karakter rahasia Alice dan
Bob adalah 1234, maka hasil hash yang dibuat oleh Alice akan bernilai
508e1ae04417ccb03953aa2a320d1714. Jika Eve berhasil mencuri pesan Alice
tersebut dan menggantinya dengan pesan miliknya sendiri, dan karena Eve tidak
mengetahui karakter rahasia milik Alice dan Bob, Eve berasumsi bahwa MD5 yang
dikirim oleh Alice tidak mengikutsertakan keyed hash sehingga ia hanya
melakukan MD5 terhadap pesannya ‘Hello honey’ tersebut. Bob
yang kemudian menerima pesan yang kata sang kurir berasal dari Alice mengecek
integritas dari pesan yang katanya dari Alice tersebut dengan cara menambahkan
keyed hash miliknya kedalam pesan yang diterima tersebut. Setelah dilakukan
hash terhadap pesan 'Hello Honey1234' Bob dengan yakin dapat
mengatakan bahwa pesan tersebut bukan berasal dari Alice.
Pesan
|
Keyed
Hash
|
MD5
|
‘Hello Bob’
|
b4c9c3086946666f7ec8014629e105f7
|
|
‘Hello Honey’
|
e42afb241fceefa05e3e897fa0686f14
|
|
‘Hello Bob’
|
1234
|
508e1ae04417ccb03953aa2a320d1714
|
‘Hello Honey’
|
1234
|
7dc14667a10ce5116b50f4d8a7e1ad9c
|
Message Fingerprint
Penggunaan
Hash sebagai sidik jari pesan (message fingerprint) digunakan untuk
mengecek apakah file yang kita simpan masih sesuai dengan file asli ketika hash
file tersebut dibuat dan belum berubah. Jika terdeteksi adanya file yang tidak
memiliki hash yang sama dengan yang telah dibuat sebelumnya, maka dapat
dipastikan bahwa file tersebut telah berubah. Contoh: Pada bulan Januari 2008
Alice memiliki file Bob.txt yang berisi profil mengenai Bob. Alice
mengkomputasi hash dari file tersebut sehingga diperoleh:
MD5(Bob.txt) -->
f06defdef28e15706f974f6d080b57fe
Dua
tahun kemudian Alice membuka kembali file Bob.txt tersebut dan mencurigai ada
yang tidak lazim dari isi file tersebut. Alice kemudian membuat hash dari file
Bob.txt tersebut dan mendapatkan nilai hashnya.
MD5(Bob.txt) -->
5f3b147ae863e541701d7011e597e98b
Alice
kemudian menyadari bahwa hash file Bob.txt pada Januari 2010 berbeda dengan
hash pada bulan Januari 2008. Dengan demikian, dapat dipastikan bahwa seseorang
telah mengubah file tersebut antara Bulan Januari 2008 hingga Januari 2010.
Ketidak
cocokan message fingerprint tidak selama disebabkan karena ada manusia yang
mengubah file ataupun pesan tersebut. Terkadang message fingerprint tidak cocok
antara 2 waktu dapat disebabkan oleh transfer file yang gagal, sektor pada
hardisk dimana sebuah file disimpan rusak, dan lain sebagainya. Jadi, tidak
selamanya manusia dapat disalahkan juga..
Karakteristik
Dobbertin
(1996) dalam artikelnya menyebutkan bahwa dalam membuat fungsi hash harus
memenuhi beberapa kriteria berikut:
- Relative cepat dalam melakukan komputasi
- 2 buah pesan yang berbeda tidak boleh memiliki nilai hash yang sama
- Bebas dari serangan Birthday Attack (dari sebanyak 264 atau ~18 446 744 073 709 551 616 pesan kemungkinan besar didapat 2 pesan yang memiliki nilai hash yang sama)
- 2 Pesan yang memiliki sangat sedikit perbedaan harus memiliki nilai hash yang sangat berbeda (Kaufman et. al., 2002).
Algortima
Hash
umumnya disajikan dalam bentuk bilangan hexadecimal, yaitu kombinasi antara
angka 0-9 dengan huruf a hingga f. Beberapa algoritma hash yang terkenal dan
masih sering digunakan hingga saat ini yaitu:
- md5 (Message Digest 5)
- SHA-1 (Secure Hash Algortihm 1)
- SHA-2 (Secure Hash Algorithm 2), yang meliputi 4 fungsi hash:
- SHA-224
- SHA-256
- SHA-384
- SHA-512
Algoritma
MD5 dikembangkan oleh seorang Professor MIT yang bernama Ronald L. Rivest.
Istilah “MD” yang digunakan merupakan abrieviation dari Message Digest.
Perkembangan MD5 telah melalui 5 kali revisi, dimana MD generasi pertama dan
kedua di desain untuk membantu algoritma RSA dalam melakukan
komputasi signature dari pesan rahasia yang akan dikirim dan
dienkripsi oleh RSA. Generasi ke tiga dan empat MD hadir karena
adanya persaingan dari algortima hash lain yang bernama SNEFRU, yang memiliki
keunggulan kecepatan pada proses komputasinya dibandingkan MD2. Ketika
ditemukan adanya celah keamanan dari SNEFRU pada tahun 1992, ditahun yang sama
ditemukan pula kelemahan MD4, yang kemudian Profesor Rivest segera menambal
kelemahan tersebut dan menggantinya menjadi generasi ke lima Message Digest,
yaitu MD5. Dari kelima generasi ini, MD generasi pertama dan ketiga merupakan
algoritma yang tidak dipublikasikan. Sementara spesifikasi algoritma MD2, MD4,
dan MD5 terdapat dalam RFC1319, RFC1320, dan RFC1321.
Secure
Hash Algoritm (SHA) dikembangkan oleh National Institute and Standard
Technology (NIST) pertama kali pada tahun 1993. Generasi pertama SHA diberi
nama SHA-0. Kemudian pada tahun 1995, generasi kedua SHA, SHA-1,
muncul dan dipublikasikan oleh NIST dengan kode publikasi FIPS PUB 180-1.
Generasi kedua SHA ini muncul dalam waktu 12 jam dari setelah dilaporkannya
terdapat kelemahan dalam algoritma SHA-0. Generasi ketiga algortima SHA, SHA-2,
dipublikasikan pada tahun 2001 dengan berbagai pilihan jumlah bit yang
digunakan, yaitu: 224, 256, 384, dan 512. Baik SHA-1 dan SHA-2 pada dasarnya
memiliki algortima yang serupa, hanya berbeda di jumlah karakter outputnya
saja. SHA-1, SHA-256, dan SHA-516 memiliki jumlah karakter output masing-masing
secara berurutan adalah 40, 32, dan 64.
Sumber:
- Dobbertin, H., 1996, The Status of MD5 After a Recent Attack, Cryptobytes: Volume 2, Number 2.
- Kaufman, C., Perlman, R., and Speciner, M., 2002, Network Security: Private Communication in a Public World (2nd Edition), Prentice Hall: USA.
- Menezes, A., Oorschot, P.V., and Vanstone, S., 1997, Handbook of Applied Cryptography, CRC Press: USA.
- Oppliger, R., 2005, Contemporary Cryptography, Artech House, Inc., Norwood, Massachusetts.
- Pandurangi, S.C., 2009, Javascript: Convert Strings to Binary (and representing in a nerdy way!), Retrieved on 10 December 2010, Accessible athttp://blog.sarathonline.com/2009/02/javascript-convert-strings-to-binary.html
- Rivest, R., 1992, The MD5 Message Digest Algorithm, Retrieved on 10 December 2010, Accessible at: http://tools.ietf.org/html/rfc1321
- Stevens, M., Sotirov, A., Applebaum, J., Lenstra, A., Molnar, D., Osvik, D.A., and Weger, B.D., 2009, Short Chosen-Prefix Collisions for MD5 and the Creation of a Rogue CA Certificate, Crypto 2009, LNCS 5667: pp 55-69.
- Wang, X. and Yu, H., 2005, How to break MD5 and other hash functions, EUROCRYPT.
Tidak ada komentar:
Posting Komentar