} .leaderboard{ padding-top: 20px; margin-bottom: -10px; }

Apa itu Hashing? Di bawah Tudung Blockchain

Apa itu Hashing? Di bawah Tudung Blockchain

Penting untuk mengetahui cara kerja Hash blockchain. Untuk melakukan itu, kita harus terlebih dahulu memahami salah satu prinsip inti yang digunakan dalam pembuatan blockchain .Teknologi Blockchain adalah salah satu penemuan paling inovatif dan terdefinisi pada abad terakhir. Melihat pengaruh yang dimilikinya selama beberapa tahun terakhir dan dampaknya di masa depan, tentu tidak berlebihan untuk mengatakan itu. Untuk memahami bagaimana berbagai cryptocurrency seperti fungsiEthereum dan Bitcoin .

Jadi, apa hashing itu?

Secara sederhana, hashing berarti mengambil string input dengan panjang berapa pun dan memberikan output dengan panjang tetap .Dalam konteks cryptocurrency seperti Bitcoin, transaksi diambil sebagai input dan dijalankan melalui algoritma hashing ( Bitcoin menggunakan SHA-256 ) yang memberikan output dengan panjang tetap.

Mari kita lihat bagaimana proses hashing bekerja. Kami akan memasukkan input tertentu. Untuk latihan ini, kita akan menggunakan SHA-256 (Secure Hashing Algorithm 256).

Seperti yang Anda lihat, dalam kasus SHA-256 , tidak peduli seberapa besar atau kecil input Anda, output akan selalu memiliki panjang 256-bit tetap. Ini menjadi penting ketika Anda berurusan dengan sejumlah besar data dan transaksi. Jadi pada dasarnya, alih-alih mengingat input data yang bisa jadi besar, Anda bisa mengingat hash dan terus melacak. Sebelum kita melangkah lebih jauh, kita perlu terlebih dahulu melihat berbagai properti fungsi hashing dan bagaimana mereka diimplementasikan di blockchain.

Fungsi hash kriptografis

Fungsi hash kriptografi adalah kelas khusus fungsi hash yang memiliki berbagai properti sehingga ideal untuk kriptografi. Ada sifat-sifat tertentu yang harus dimiliki oleh fungsi hash kriptografis agar dianggap aman. Mari kita jalankan satu per satu.

Properti 1: Deterministik

Ini berarti bahwa tidak peduli berapa kali Anda mem-parsing melalui input tertentu melalui fungsi hash Anda akan selalu mendapatkan hasil yang sama. Ini sangat penting karena jika Anda mendapatkan hash yang berbeda setiap kali tidak mungkin untuk melacak input.

Properti 2: Komputasi Cepat

Fungsi hash harus mampu mengembalikan hash input dengan cepat. Jika prosesnya tidak cukup cepat maka sistem tidak akan efisien.

Properti 3: Resistensi Pra-Gambar

Apa pra-gambar resistensi menyatakan bahwa diberikan H (A) itu tidak layak untuk menentukan A, di mana A adalah input dan H (A) adalah hash output. Perhatikan penggunaan kata “tidak layak” alih-alih “tidak mungkin”. Kita sudah tahu bahwa bukan tidak mungkin untuk menentukan input asli dari nilai hash-nya . Mari kita ambil contoh.

Misalkan Anda melempar dadu dan hasilnya adalah hash dari angka yang muncul dari dadu. Bagaimana Anda bisa menentukan nomor aslinya? Sederhana saja yang harus Anda lakukan adalah mengetahui hash semua angka dari 1-6 dan membandingkan. Karena fungsi hash bersifat deterministik, hash dari input tertentu akan selalu sama, sehingga Anda dapat dengan mudah membandingkan hash dan mencari tahu input asli.

Tapi ini hanya berfungsi ketika jumlah data yang diberikan sangat kurang. Apa yang terjadi ketika Anda memiliki sejumlah besar data? Misalkan Anda berurusan dengan hash 128-bit. Satu-satunya metode yang Anda harus menemukan input asli adalah dengan menggunakan ” metode brute-force “. Metode brute-force pada dasarnya berarti bahwa Anda harus mengambil input acak, hash dan kemudian membandingkan output dengan hash target dan ulangi sampai Anda menemukan kecocokan.

Jadi, apa yang akan terjadi jika Anda menggunakan metode ini?

  • Skenario kasus terbaik: Anda mendapatkan jawaban pada percobaan pertama itu sendiri. Anda harus benar-benar menjadi orang paling beruntung di dunia untuk ini terjadi. Peluang terjadinya ini adalah astronomi.
  • Skenario kasus terburuk: Anda mendapatkan jawaban setelah 2 ^ 128 – 1 kali. Pada dasarnya, itu berarti bahwa Anda akan menemukan jawaban Anda di akhir semua data.
  • Skenario rata-rata: Anda akan menemukannya di suatu tempat di tengah jadi pada dasarnya setelah 2 ^ 128/2 = 2 ^ 127 kali. Untuk memasukkannya ke dalam perspektif, 2 ^ 127 = 1,7 X 10 ^ 38. Dengan kata lain, ini adalah jumlah yang sangat besar.

Jadi, walaupun dimungkinkan untuk memecah resistansi pra-gambar melalui metode brute force, butuh waktu lama sehingga tidak masalah.

Properti 4: Perubahan Kecil Pada Input Mengubah Hash.

Bahkan jika Anda membuat perubahan kecil pada input Anda, perubahan yang akan tercermin dalam hash akan sangat besar. Mari kita mengujinya menggunakan SHA-256:

Kamu melihatnya? Meskipun Anda baru saja mengubah huruf alfabet pertama input, lihat seberapa besar yang memengaruhi hash output. Ini adalah fungsi kritis karena sifat hashing ini mengarah ke salah satu kualitas terhebat blockchain, ketidakberubahannya (lebih lanjut tentang itu nanti.)

Properti 5: Tahan Tabrakan

Mengingat dua input A dan B yang berbeda di mana H (A) dan H (B) adalah hash masing-masing, maka tidak mungkin H (A) sama dengan H (B). Apa artinya itu adalah bahwa sebagian besar, setiap input akan memiliki hash uniknya sendiri. Mengapa kami mengatakan “sebagian besar”? Mari kita bicara tentang konsep yang menarik yang disebut “The Birthday Paradox”.

Apa itu Paradoks Ulang Tahun?

Jika Anda bertemu orang asing acak di jalan-jalan kemungkinan sangat rendah bagi Anda berdua untuk memiliki ulang tahun yang sama. Faktanya, dengan asumsi bahwa semua hari dalam setahun memiliki kemungkinan yang sama untuk berulang tahun, kemungkinan orang lain membagikan ulang tahun Anda adalah 1/365 yang merupakan 0,27%. Dengan kata lain, ini sangat rendah.

Namun, setelah mengatakan itu, jika Anda mengumpulkan 20-30 orang di satu ruangan, kemungkinan dua orang yang berbagi ulang tahun yang sama persis naik secara astronomis. Bahkan, ada peluang 50-50 untuk 2 orang berbagi ulang tahun yang sama dalam skenario ini!

Mengapa itu terjadi? Itu karena aturan sederhana dalam probabilitas yang berjalan sebagai berikut. Misalkan Anda memiliki N kemungkinan yang berbeda bahkan terjadi, maka Anda perlu akar kuadrat dari item acak N agar mereka memiliki kemungkinan tabrakan 50%.

Jadi menerapkan teori ini untuk ulang tahun, Anda memiliki 365 kemungkinan ulang tahun yang berbeda, jadi Anda hanya perlu Sqrt (365), yaitu ~ 23 ~, orang yang dipilih secara acak untuk kemungkinan 50% dari dua orang yang berbagi ulang tahun.

Apa aplikasi ini dalam hashing?

Misalkan Anda memiliki hash 128-bit yang memiliki 2 ^ 128 kemungkinan berbeda. Dengan menggunakan paradoks ulang tahun, Anda memiliki peluang 50% untuk memecah resistensi tabrakan di sqrt (2 ^ 128) = instance 2 ^ 64.

Seperti yang Anda lihat, jauh lebih mudah untuk mematahkan resistensi tabrakan daripada untuk mematahkan resistensi preimage. Tidak ada fungsi hash yang bebas dari tabrakan, tetapi biasanya membutuhkan waktu yang lama untuk menemukan tabrakan. Jadi, jika Anda menggunakan fungsi seperti SHA-256, aman untuk mengasumsikan bahwa jika H (A) = H (B) maka A = B.

Properti 6: Puzzle Friendly

Sekarang, ini adalah properti yang menarik, dan aplikasi serta dampak yang dimiliki properti ini pada cryptocurrency sangat besar (lebih banyak tentang itu nanti ketika kita membahas teka-teki mining dan crypto). Pertama mari kita mendefinisikan properti, setelah itu kita akan membahas setiap istilah secara rinci.

Untuk setiap output “Y”, jika k dipilih dari distribusi dengan entropi min tinggi, tidak mungkin menemukan input x sedemikian rupa sehingga H (k | x) = Y.

Itu mungkin melintas di kepala Anda! Tapi tidak apa-apa, mari kita sekarang mengerti apa arti definisi itu.

Apa arti dari “min-entropi tinggi”?

Ini berarti bahwa distribusi dari mana nilai dipilih sangat banyak didistribusikan sehingga kita memilih nilai acak memiliki probabilitas yang dapat diabaikan. Pada dasarnya, jika Anda diminta memilih angka antara 1 dan 5, itu adalah distribusi min-entropi yang rendah. Namun, jika Anda memilih angka antara 1 dan trilyun, itu adalah distribusi min-entropi yang tinggi.

Apa arti “k | x”?

“|” Menunjukkan penggabungan. Penggabungan berarti menambahkan dua string bersama. Misalnya. Jika saya menyatukan “BLUE” dan “SKY” bersama-sama, maka hasilnya adalah “BLUESKY”.

Jadi sekarang mari kita kembali definisi.

Misalkan Anda memiliki nilai output “Y”. Jika Anda memilih nilai acak “k” dari distribusi luas, tidak mungkin menemukan nilai X sehingga hash dari gabungan k dan x akan memberikan output Y.

Sekali lagi, perhatikan kata “tidak mungkin”, bukan tidak mungkin karena orang melakukan ini setiap saat. Bahkan, seluruh proses penambangan bekerja atas ini (lebih lanjut tentang itu nanti).

Contoh fungsi hash kriptografis

  • MD 5: Ini menghasilkan hash 128-bit. Resistensi tabrakan rusak setelah ~ 2 ^ 21 hash.
  • SHA 1: Menghasilkan hash 160-bit. Resistensi tabrakan pecah setelah ~ 2 ^ 61 hash.
  • SHA 256: Menghasilkan hash 256-bit. Ini sedang digunakan oleh Bitcoin.
  • Keccak-256: Menghasilkan hash 256-bit dan saat ini digunakan oleh Ethereum.

Hashing dan struktur data

Struktur data adalah cara khusus menyimpan data. Ada dua properti struktur data yang sangat penting jika Anda ingin memahami cara kerja blockchain. Mereka:

  1. Pointer.
  2. Daftar Tertaut.

Pointer

Pointer adalah variabel dalam pemrograman yang menyimpan alamat variabel lain. Biasanya variabel normal dalam bahasa pemrograman menyimpan data.

Misalnya. int a = 10, berarti ada variabel “a” yang menyimpan nilai integer. Dalam hal ini, ia menyimpan nilai integer yaitu 10. Ini adalah variabel normal.

Pointer, bagaimanapun, bukannya menyimpan nilai akan menyimpan alamat variabel lain. Itulah sebabnya mereka disebut pointer, karena mereka secara harfiah menunjuk ke lokasi variabel lain.

Daftar Tertaut

Daftar tertaut adalah salah satu item paling penting dalam struktur data. Seperti inilah daftar tertaut:

Ini adalah urutan blok, masing-masing berisi data yang ditautkan ke blok berikutnya melalui pointer. Variabel pointer, dalam hal ini, berisi alamat node berikutnya di dalamnya dan karenanya koneksi dibuat. Node terakhir, seperti yang Anda lihat, memiliki pointer nol yang berarti tidak memiliki nilai.

Satu hal penting yang perlu diperhatikan di sini, pointer di dalam setiap blok berisi alamat dari blok berikutnya. Itulah bagaimana pointing dicapai. Sekarang Anda mungkin bertanya apa artinya itu untuk blok pertama dalam daftar? Di mana penunjuk tetap blok pertama?

Blok pertama disebut “blok genesis” dan penunjuknya terletak pada sistem itu sendiri. Ini terlihat seperti ini:

Jika Anda bertanya-tanya apa artinya “hash pointer”, kita akan sampai di sana sebentar lagi.

Seperti yang mungkin sudah Anda duga sekarang, berdasarkan struktur blokchain ini. Rantai blok pada dasarnya adalah daftar tertaut. Mari kita lihat seperti apa struktur blockchain:

Blockchain adalah daftar tertaut yang berisi data dan pointer hash yang menunjuk ke blok sebelumnya, sehingga menciptakan rantai. Apa itu hash pointer? Sebuah pointer hash mirip dengan sebuah pointer, tetapi bukan hanya berisi alamat dari blok sebelumnya tetapi juga berisi hash dari data di dalam blok sebelumnya . Tweak kecil ini adalah apa yang membuat blockchains sangat luar biasa andal dan trailblazing.

Bayangkan ini sebentar, seorang hacker menyerang blok 3 dan mencoba mengubah data. Karena sifat fungsi hash, sedikit perubahan dalam data akan mengubah hash secara drastis. Ini berarti bahwa setiap perubahan kecil yang dibuat di blok 3, akan mengubah hash yang disimpan di blok 2, sekarang pada gilirannya akan mengubah data dan hash blok 2 yang akan menghasilkan perubahan di blok 1 dan seterusnya dan seterusnya . Ini sepenuhnya akan mengubah rantai, yang tidak mungkin. Inilah tepatnya bagaimana blockchain mencapai keabadian.

Jadi seperti apa tampilan header blok?

Header blok berisi:

  • Versi: Nomor versi blokir.
  • Waktu: cap waktu saat ini.
  • Target sulit saat ini. (Lebih lanjut tentang ini nanti).
  • Hash dari blok sebelumnya.
  • Nonce (lebih lanjut tentang ini nanti).
  • Hash dari Merkle Root.

Sekarang, mari kita fokus pada Hash of the Merkle Root. Tetapi sebelum itu, kita perlu memahami apa itu Pohon Merkle.

Apa itu Pohon Merkle?

Diagram di atas menunjukkan seperti apa bentuk pohon Merkle. Dalam pohon Merkle, setiap simpul non-daun adalah hash dari nilai-nilai simpul anak mereka.

Node Daun: Node daun adalah node di tingkat terendah pohon. Jadi gambar diagram di atas, node daun akan menjadi L1, L2, L3 dan L4.

Child Nodes: Untuk sebuah node, node di bawah tier yang diumpankan ke dalamnya adalah child node-nya. Pada diagram, node berlabel “Hash 0-0” dan “Hash 0-1” adalah simpul anak dari simpul yang berlabel “Hash 0”.

Root Node: Simpul tunggal pada tingkat tertinggi berlabel “Top Hash” adalah simpul root.

Jadi apa hubungannya Pohon Merkle dengan blockchains?

Setiap blok berisi ribuan transaksi. Akan sangat tidak efisien waktu untuk menyimpan semua data di dalam setiap blok sebagai suatu seri. Melakukannya akan membuat menemukan transaksi tertentu sangat rumit dan memakan waktu. Namun, jika Anda menggunakan pohon Merkle, Anda akan sangat mengurangi waktu yang diperlukan untuk mengetahui apakah transaksi tertentu termasuk dalam blok itu atau tidak.

Mari kita lihat ini dalam sebuah contoh. Pertimbangkan pohon Merkle berikut:

Sekarang anggaplah saya ingin mengetahui apakah data tertentu ini termasuk dalam blok atau tidak:

Alih-alih melalui proses rumit melihat setiap hash individu dan melihat apakah itu milik data atau tidak, saya bisa melacaknya dengan mengikuti jejak hash yang mengarah ke data:

Melakukan hal ini secara signifikan mengurangi waktu yang diperlukan.

Hashing in mining: The crypto puzzle.

Ketika kita mengatakan “menambang”, itu pada dasarnya berarti mencari blok baru untuk ditambahkan di blockchain. Penambang dari seluruh dunia terus bekerja untuk memastikan bahwa rantai itu terus tumbuh. Sebelumnya dulunya mudah bagi orang untuk menambang menggunakan hanya laptop mereka, tetapi seiring waktu, orang mulai membentuk kolam penambangan untuk menggabungkan kekuatan komputer mereka dan menambang lebih efisien.

Namun, ini bisa menjadi masalah. Ada batasan untuk setiap mata uang digital, misalnya. untuk bitcoin, hanya 21 juta. Hanya ada 21 juta bitcoin di luar sana. Jika para penambang diizinkan untuk melanjutkan, pada tingkat ini, mereka akan menangkap semua bitcoin yang ada. Selain itu, perlu ada batas waktu khusus di antara pembuatan setiap blok. Untuk bitcoin, batas waktu di antara pembuatan blok adalah 10 menit. Jika blok diizinkan dibuat lebih cepat, itu akan menghasilkan:

  • Lebih banyak tabrakan: Lebih banyak fungsi hash akan dihasilkan yang pasti akan menyebabkan lebih banyak tabrakan.
  • Lebih banyak blok yatim: Jika banyak penambang kelebihan penambangan, mereka akan menghasilkan blok baru secara bersamaan. Ini akan menghasilkan atau lebih banyak blok tidak menjadi bagian dari rantai utama dan menjadi blok yatim.

Jadi, untuk membatasi pembuatan blok, tingkat kesulitan tertentu diatur. Penambangan seperti permainan, Anda memecahkan teka-teki dan Anda mendapatkan hadiah. Kesulitan pengaturan membuat teka-teki itu jauh lebih sulit untuk dipecahkan dan karenanya lebih memakan waktu. Bitcoin WRT target kesulitan adalah string 64-karakter (yang sama dengan output SHA-256) yang dimulai dengan sekelompok nol. Sejumlah nol meningkat seiring meningkatnya tingkat kesulitan. Tingkat kesulitan berubah setelah setiap blok 2016.

Proses penambangan

Catatan: Kami terutama akan berbicara tentang penambangan Bitcoin di sini.

Ketika perangkat lunak penambangan Bitcoin ingin menambahkan blok baru ke blockchain, ini adalah prosedur yang diikuti. Setiap kali blok baru tiba, semua isi blok pertama kali di-hash. Jika hash kurang dari target kesulitan, maka ditambahkan ke blockchain dan semua orang di komunitas mengakui blok baru.

Namun, tidak sesederhana itu. Anda harus sangat beruntung mendapatkan blok baru begitu saja. Di sinilah notce masuk. Nonce adalah string arbitrer yang digabungkan dengan hash dari blok . Setelah itu string ini digabung lagi dan dibandingkan dengan tingkat kesulitan. Jika tidak kurang dari tingkat kesulitan, maka angka diubah dan ini terus berulang jutaan kali sampai akhirnya, persyaratan dipenuhi. Ketika itu terjadi, blok ditambahkan ke rantai blok.

Jadi untuk rekap:

  • Hash dari isi blok baru diambil.
  • Nonce (string acak) ditambahkan ke hash.
  • String baru di-hash lagi.
  • Hash terakhir kemudian dibandingkan dengan tingkat kesulitan dan dilihat apakah itu sebenarnya kurang dari itu atau tidak.
  • Jika tidak, maka nonce diubah dan proses berulang lagi.
  • Jika ya, maka blok ditambahkan ke rantai dan buku besar publik diperbarui dan diberitahu tentang penambahan.
  • Para penambang yang bertanggung jawab atas ini diberi bitcoin.

Ingat properti nomor 6 dari fungsi hash? Teka-teki keramahan?

Untuk setiap output “Y”, jika k dipilih dari distribusi dengan entropi min tinggi, tidak mungkin menemukan input x sedemikian rupa sehingga H (k | x) = Y.

Jadi, ketika datang ke penambangan bitcoin:

  • K = Nonce
  • x = hash dari blok
  • Y = target kesulitan

Seluruh proses ini sepenuhnya acak, tidak ada proses pemikiran di balik pemilihan nonces. Itu hanya kekuatan kasar murni di mana perangkat lunak terus menghasilkan string secara acak sampai mereka mencapai tujuan mereka. Seluruh proses mengikuti protokol Proof Of Work yang pada dasarnya berarti:

  • Pemecahan teka-teki harusnya sulit.
  • Namun, memeriksa jawabannya harus mudah bagi semua orang. Ini dilakukan untuk memastikan bahwa tidak ada metode curang yang digunakan untuk menyelesaikan masalah.

Berapa tingkat hash?

Hash rate pada dasarnya berarti seberapa cepat operasi hashing ini berlangsung saat penambangan. Tingkat hash yang tinggi berarti lebih banyak orang dan perangkat lunak yang ikut serta dalam proses penambangan dan sebagai hasilnya, sistem berjalan dengan lancar. Jika tingkat hash terlalu cepat tingkat kesulitan meningkat. Jika tingkat hash menjadi terlalu lambat maka tingkat kesulitan berkurang.

Kesimpulan

Hashing benar-benar mendasar dalam penciptaan teknologi blockchain. Jika seseorang ingin memahami apa itu blockchain, mereka pasti harus mengerti apa artinya hashing.