Academy
Penjelasan Tentang Merkle Tree dan Merkle Root
Daftar Isi
Apa yang dimaksud dengan Merkle tree?
Konsep Merkle tree atau pohon Merkle pertama kali diajukan pada awal tahun 1980-an oleh Ralph Merkle, seorang ahli komputer yang dikenal atas karyanya dalam bidang kriptografi kunci publik.
Merkle tree adalah sebuah struktur yang digunakan untuk secara efisien memverifikasi integritas data dalam kumpulan data tertentu. Ini menjadi sangat relevan dalam konteks jaringan peer-to-peer, di mana para peserta perlu berbagi dan memvalidasi informasi secara independen.
Pada intinya, Merkle tree bergantung pada fungsi hash, jadi disarankan untuk memahami konsep hashing terlebih dahulu sebelum melanjutkan pembahasan ini.
Bagaimana Merkle tree bekerja?
Bayangkan Anda ingin mengunduh file yang cukup besar. Dalam kasus ini, dengan perangkat lunak open-source yang umumnya digunakan, Anda akan memeriksa apakah hash dari file yang Anda unduh sesuai dengan hash yang diterbitkan oleh pengembangnya. Jika sesuai, Anda memiliki keyakinan bahwa file yang Anda miliki di komputer Anda identik dengan yang mereka miliki. Namun, jika hash-nya tidak cocok, maka ada masalah.
Masalah ini dapat bermacam-macam, mulai dari kemungkinan Anda mengunduh file berbahaya yang menyamar sebagai perangkat lunak yang diinginkan, hingga kesalahan dalam proses pengunduhan yang menyebabkan kerusakan pada file. Jika ini yang terjadi, Anda harus mengulangi proses pengunduhan, yang bisa sangat membuang waktu.
Nah, inilah saatnya Merkle tree masuk ke dalam permainan. Dengan Merkle tree, file yang ingin Anda unduh dibagi menjadi beberapa bagian kecil. Misalnya, jika file berukuran 50GB, Anda dapat membaginya menjadi seratus bagian, masing-masing berukuran 0,5GB. Kemudian, Anda akan mengunduh bagian-bagian ini satu per satu. Proses ini mirip dengan cara kerja torrent.
Dalam konteks Merkle tree, sumber data akan memberikan Anda hash yang dikenal sebagai Merkle root. Hash tunggal ini mewakili setiap bagian data yang membentuk file tersebut. Dengan adanya Merkle root, proses verifikasi data menjadi lebih mudah.
Untuk lebih mudah dipahami, mari kita ambil contoh penggunaan file 8GB yang dibagi menjadi delapan bagian, kita beri nama A hingga H. Setiap bagian ini akan melewati fungsi hash, menghasilkan delapan hash yang berbeda.
Nah, sekarang mungkin sudah lebih jelas. Anda memiliki hash dari setiap bagian data, jadi jika ada yang salah, Anda dapat mendeteksinya dengan membandingkannya dengan hash yang diberikan oleh sumber, bukan? Namun, cara ini tidak efisien jika file memiliki ribuan bagian. Apakah Anda benar-benar akan melakukan hashing untuk semua bagian tersebut dan membandingkannya satu per satu? Tentu tidak.
Di sinilah Merkle tree menjadi sangat berguna. Sebaliknya, Anda akan mengambil dua hash, menggabungkannya, dan kemudian melakukan hashing sekali lagi. Proses ini akan dilakukan terhadap hash hA + hB, hC + hD, hE + hF, dan hG + hH, menghasilkan empat hash. Kemudian, Anda akan melakukan hashing lagi untuk menggabungkan keempat hash tersebut, dan ini akan menghasilkan hanya dua hash. Terakhir, Anda akan melakukan hashing sekali lagi untuk kedua hash tersebut, dan hasilnya adalah hash utama yang disebut Merkle root.
Kini, Anda memiliki Merkle root yang mewakili seluruh file yang Anda unduh. Anda dapat dengan mudah membandingkan Merkle root ini dengan yang diberikan oleh sumber. Jika cocok, maka semuanya berjalan lancar. Namun, jika hash berbeda, ini menandakan bahwa data telah dimodifikasi. Dengan kata lain, salah satu atau lebih bagian data telah menghasilkan hash yang berbeda. Kecilnya perubahan pada data dapat menghasilkan Merkle root yang benar-benar berbeda.
Keuntungannya adalah ada cara yang efisien untuk menentukan bagian mana yang bermasalah. Misalnya, katakanlah bagian yang salah adalah hE. Anda dapat memulai dengan meminta dua hash yang membentuk Merkle root (hABCD dan hEFGH) dari teman sejawat Anda. Nilai hABCD akan cocok dengan milik mereka karena tidak ada masalah pada subtree itu. Namun, hEFGH tidak akan cocok, sehingga Anda tahu di mana letak kesalahan. Kemudian, Anda bisa meminta hEF dan hGH, membandingkannya dengan yang Anda miliki, dan mengetahui bahwa hEF adalah sumber masalahnya. Terakhir, Anda membandingkan hash hE dengan hF. Sekarang Anda tahu bahwa hE adalah bagian yang salah, dan Anda bisa mengunduh ulang bagian tersebut.
Intinya, Merkle tree diciptakan dengan membagi data menjadi banyak bagian dan melakukan serangkaian hashing berulang untuk membentuk Merkle root. Ini memungkinkan Anda untuk secara efisien memeriksa apakah ada bagian data yang bermasalah. Seperti yang akan kita lihat, ada juga berbagai aplikasi menarik lainnya.
Mengapa Merkle Root Penting dalam Bitcoin?
Merkle tree adalah sebuah konsep yang memiliki berbagai penggunaan, namun, kita akan fokus pada keberartian struktur ini dalam dunia blockchain, khususnya dalam konteks Bitcoin. Merkle tree adalah komponen penting yang dapat ditemukan di header setiap blok dalam blockchain Bitcoin, dan berperan besar dalam proses penambangan mata uang kripto serta verifikasi transaksi.
Penambangan
Blok Bitcoin terdiri dari dua komponen utama. Bagian pertama adalah header blok, yang merupakan segmen dengan ukuran tetap yang mengandung metadata blok. Bagian kedua adalah daftar transaksi yang ukurannya bervariasi, seringkali jauh lebih besar daripada bagian header.
Para penambang perlu melakukan hashing berulang kali untuk menghasilkan output yang memenuhi persyaratan tertentu agar blok yang mereka tambang dianggap valid. Mereka dapat melakukan triliunan percobaan dengan mengubah angka acak di dalam header blok (disebut sebagai nonce) untuk mencari output yang berbeda. Namun, banyak aspek dari blok yang tetap tidak berubah, seperti daftar transaksi. Meskipun ada ribuan transaksi dalam satu blok, penambang masih harus melakukan hashing berulang kali terhadap seluruh blok.
Inilah di mana Merkle root memainkan peranannya. Sebelum memulai proses penambangan, penambang mengumpulkan semua transaksi yang ingin dimasukkan ke dalam blok dan membentuk struktur Merkle tree. Hash akar dari Merkle tree ini, yang dikenal sebagai Merkle root (berukuran 32 byte), kemudian dimasukkan ke dalam header blok. Selama proses penambangan, penambang tidak perlu melakukan hashing ulang terhadap seluruh blok, melainkan hanya terhadap header blok.
Proses ini efektif karena Merkle root memiliki sifat yang tidak dapat dimodifikasi (tamper-proof). Dengan demikian, seluruh daftar transaksi dalam blok tersingkat menjadi satu representasi hash tunggal. Ini mencegah seseorang untuk menemukan header blok yang valid dan kemudian mengubah daftar transaksi, karena itu akan menghasilkan Merkle root yang berbeda. Ketika blok tersebut diteruskan ke node lain dalam jaringan, Merkle root dihitung ulang dari daftar transaksi. Jika tidak cocok dengan nilai yang tertera di header blok, maka blok tersebut akan ditolak.
Verifikasi
Selain manfaatnya dalam penambangan, Merkle tree juga memberikan keunggulan yang penting dalam hal verifikasi, terutama untuk klien ringan (node yang tidak memiliki salinan lengkap dari seluruh blockchain). Jika Anda menjalankan node di perangkat dengan sumber daya terbatas, tidak mungkin untuk mengunduh dan melakukan hashing terhadap seluruh daftar transaksi dalam blok. Alih-alih, Anda dapat meminta apa yang disebut sebagai Merkle proof – bukti yang diberikan oleh node penuh (full node) untuk menunjukkan bahwa transaksi Anda ada dalam suatu blok. Proses ini lebih dikenal dengan istilah Verifikasi Pembayaran Sederhana atau Simplified Payment Verification (SPV), yang dijelaskan secara mendalam oleh Satoshi Nakamoto dalam whitepaper Bitcoin.
Bayangkan jika Anda ingin memverifikasi informasi mengenai sebuah transaksi dengan TXID hD. Jika Anda telah menerima hC, Anda dapat memeriksa hCD. Selanjutnya, Anda perlu hAB untuk menghitung hABCD. Akhirnya, dengan hEFGH, Anda dapat memeriksa apakah Merkle root yang dihasilkan cocok dengan nilai yang ada di header blok. Jika cocok, maka itu membuktikan bahwa transaksi tersebut ada dalam blok, dan hampir mustahil bagi seseorang untuk menghasilkan hash yang sama dengan data yang berbeda.
Dalam contoh di atas, kita hanya perlu melakukan hashing sebanyak tiga kali. Tanpa Merkle proof, kita akan perlu melakukan hashing sebanyak tujuh kali. Mengingat bahwa blok-blok saat ini mengandung ribuan transaksi, penggunaan Merkle proof sangat menghemat waktu dan sumber daya komputasi.
Kesimpulan
Merkle tree telah terbukti sangat berharga dalam berbagai aplikasi ilmu komputer, dan struktur ini memainkan peran penting dalam dunia blockchain. Dalam sistem terdistribusi, Merkle tree memfasilitasi verifikasi informasi tanpa harus mengirimkan seluruh data yang tidak perlu melalui jaringan.
Tanpa Merkle tree (dan Merkle root), blok-blok dalam Bitcoin dan mata uang kripto lainnya akan menjadi lebih rumit dan berukuran jauh lebih besar daripada sekarang. Meskipun klien ringan memiliki beberapa kekurangan dalam hal privasi dan keamanan, Merkle proof memungkinkan pengguna untuk memeriksa apakah transaksi mereka sudah dimasukkan ke dalam blok dengan biaya pengeluaran yang minimal.
Jika kamu ingin mengetahui lebih dalam mengenai aset kripto atau cryptocurrency, bisa baca artikel “Belajar Crypto untuk Pemula Mulai Dari Sini.”
Sumber: Binance Academy Indonesia