Siri tentang Cryptoeconomics: Kriptografi (Bhg I)
Seperti yang dijanjikan, ini adalah sambungan kepada pengenalan tentang Cryptoeconomics. Post yang lalu penulis dah memperkenalkan definisi kriptografi dan ekonomi dalam dunia matawang kripto dan juga konsep-konsep penting yang membentuk sistem matawang kripto. Kali ini, penulis akan bercerita tentang apa itu konsep hash function dalam kriptografi.
Hash function
Hash function adalah sesuatu yang digunakan untuk menandakan apa sahaja data atau maklumat yang mempunyai saiz yang berbeza-beza. Data ini dinamakan input dan melalui hashing, sesuatu input yang mempunyai panjang berbeza-beza akan diubah kepada sesuatu output yang mempunyai panjang yang sudah ditetapkan. Output dikenali dengan pelbagai nama, termasuk hash values, hash codes atau hashes.
Dalam konteks matawang kripto, transaksi diambil sebagai input dan melalui proses algoritma hashing seperti SHA-256 untuk mengeluarkan output yang bersaiz 256 bit.
Jika anda lihat contoh di atas, perbezaan dalam input telah menyebabkan hash values berbeza. Adakah anda dapat lihat di mana perbezaan input? Perbezaannya adalah tanda noktah dalam ayat kedua. Rentetan hash values daripada kedua-dua input tersebut berbeza sama sekali walaupun hanya dengan menambah satu tanda noktah. Pada masa yang sama, saiz atau panjang hash values itu tetap sama walaupun input kedua lebih panjang daripada input pertama.
Hash functions mempunyai sifat-sifat tertentu seperti di atas, yang menjadikan ia ideal untuk kriptografi dan menjadikan ia sangat selamat. 6 sifat utama hash functions yang ideal untuk kriptografi adalah:
1. Deterministic
Makna deterministic di sini adalah untuk setiap input yang sama, nilai hash yang dikeluarkan pasti sama, tidak kira berapa kali input itu diproses. Sifat ini penting untuk memastikan input yang sama boleh dijejaki dan dalam kes Bitcoin, determinism diperlukan untuk memastikan blok baru yang dibentuk berhubung dengan blok sebelumnya.
2. Boleh dikira serta-merta
Proses hashing perlu berlaku dengan cepat dan serta-merta untuk memastikan keseluruhan sistem dapat berjalan dengan lancar. Dalam sistem Bitcoin, input adalah transaksi terbaru dan masih belum disahkan, dan perlu melalui proses hashing untuk dimasukkan ke dalam rangkaian Bitcoin. Semakin cepat proses hashing berlaku, semakin cepat transaksi Bitcoin disahkan.
3. Non-invertible
Non-invertible bermaksud ianya sangat sukar (infeasible) untuk mendapatkan kembali nilai sesuatu input, x, daripada nilai hash, h(x), melainkan dengan cara membandingkan semua kombinasi input/output dengan nilai hash tersebut.
4. Nilai hash yang berbeza untuk dua input berlainan
Jika terdapat perubahan yang kecil dalam input sekalipun, perubahan pada nilai hash akan menjadi sangat signifikan. Seperti dalam contoh gambar di atas, perbezaannya hanya dengan titik noktah, tetapi rentetan nilai hash sangat berbeza dan input tidak boleh dijejak dengan mudah.
Sifat ini menyumbang kepada immutability dalam teknologi Blockchain, di mana setiap blok dalam rantai blockchain tidak boleh dimanipulasi atau digodam. Satu-satunya cara untuk menggodam sistem blockchain adalah dengan mengambil dan mengubah keseluruhan rantai blok, bermula dengan blok yang dicari oleh penggodam. Aktiviti ini memerlukan processing power yang sangat besar dan juga masa yang sangat lama, menjadikan ia tidak berbaloi.
5. Collision resistant
Suatu hash function dianggap collision resistant apabila ianya sukar untuk mencari dua input berbeza yang mengeluarkan nilai hash yang sama. Dari istilah matematik, ia adalah dua input a dan b menjadikan
H(a) = H(b), and a ≠ b, bermaksud 9 daripada 10 kali, setiap input pasti akan mengeluarkan nilai hash tersendiri. Anda pernah dengar tentang “The Birthday Paradox”?
The Birthday Paradox
The Birthday Paradox meletakkan had atas (upper bound) untuk collision resistance. Dalam erti kata lain, jika proses hashing mengeluarkan N output, seorang penggodam boleh mengira √2N untuk mana-mana input secara rawak dan boleh menjumpai dua output yang sepadan. Kaedah mengatasi collision resistance ini dipanggil brute-force attack, dan serangan ini dianggap salah satu daripada kelemahan utama hash function.
Dalam senario Birthday Paradox, jika anda bertembung dengan sesiapa sahaja yang tidak dikenali, kemungkinan untuk mempunyai tarikh lahir yang sama adalah sangat tipis, betul? Malah, memandangkan setiap hari dalam setahun mempunyai kemungkinan yang sama untuk menjadi tarikh lahir seseorang, kemungkinan untuk seseorang mempunyai tarikh lahir yang sama dengan anda adalah 1 dalam 365, ataupun hanya 0.27 peratus.
Namun begitu, katakan kita mengumpulkan seramai 20-30 orang dalam satu bilik, kemungkinan untuk mencari orang yang mempunyai tarikh lahir yang sama menjadi lebih tinggi. Kemungkinan itu boleh menjadi setinggi 50 peratus. Inilah yang dinamakan birthday paradox, iaitu sesuatu kenyataan yang dianggap bercanggah atau tidak realistik, tetapi apabila disiasat, ditemui adalah benar.
Jadi mengapa ianya berlaku dalam kes ini? Jawapannya boleh diterangkan menggunakan matematik, khususnya dengan menggunakan salah satu rule of probability. Untuk mencari kemungkinan 50 peratus sesuatu berlaku, kita hanya perlu mengira punca kuasa dua (square root) kemungkinan N. Dalam kes birthday paradox tadi, untuk mencari kemungkinan 50 peratus dua orang mempunyai tarikh lahir yang sama, kita hanya perlu mengira √365, iaitu ~20, bermakna sekurang-kurangnya 20 orang yang dipilih secara rawak.
Apa kaitan ini dengan proses hashing?
Dengan menggunakan teori yang sama dengan birthday paradox, untuk menyelesaikan SHA-256 yang mempunyai kemungkinan sebanyak 2256, anda perlu mengira √2256 = 2128. Dalam erti kata lain, anda akan mengatasi collision resistance pada hash yang ke-3.4028237e+38. Secara realistik, ia akan mengambil masa yang sangat lama untuk mencari input daripada padanan output.
Untuk memberi anda perspekstif, dibawah adalah antara hash function yang digunakan:
-
- MD5 : mengeluarkan nilai hash bersaiz 128-bit. Collision resistance telah diatasi pada hash ke ~221
- SHA-1 : mengeluarkan nilai hash bersaiz 160-bit. Collision resistance telah diatasi pada hash ke ~261
- SHA-256 : mengeluarkan nilai hash bersaiz 256-bit. Digunakan oleh Bitcoin.
- Keccak-256 : mengeluarkan nilai hash bersaiz 256-bit. Digunakan oleh Ethereum.
Bagaimana setakat ini? Penulis tahu topik ini agak sukar dihadam memandangkan ia mempunyai banyak istilah yang sangat teknikal. Penulis sudah cuba untuk memudahkan topik ini untuk penghadaman anda. Dalam post seterusnya kita akan belajar tentang struktur data hash function dan konsep kriptografi yang lain. Jumpa anda di post yang akan datang.
Nota: Penulis mengalu-alukan komen anda tentang siri ini supaya penulis boleh menambah baik post yang akan datang. Terima kasih!