HASH & BINARY TREE

Ketika kita mengikuti seminar atau membaca buku tentang blockchain kita sering kali mendengar atau menyinggung istilah hash dan hashing. Mungkin bagi beberapa orang mengangap istilah tersebut bukanlah hal yang berarti. Namun bagi anda yang penasaran pasti akan bertanya – tanya apasih hash  atau hashing itu? Hashing adalah teknik yang digunakan untuk menyimpan kunci dan mengambil kunci dengan cepat. Hashing merupakan suatu proses yang menghasilkan suatu output yang terenkripsi yang ukurannya sama dan tetap dari inputan variable yang ukurannya berbeda- beda . Atau hash bisa juga di artikan sebagai aktivitas untuk mengubah suatu objek  menjadi serangkaian angka / karakter atau sejenisnya yang terenkripsi. Ada beberapa hash yang melibatkan penggunaan kriptografi yang merupakan inti dari cryptocurrency. Hal tersebut yang membuat sistem seperti blockchain memiliki keamanan yang signifikan.

Cara kerja Hash
Hash dengan fungsi yang berbeda akan menghasilkan output dengan ukuran yang berbeda dari input. Tetapi setiap algoritma hashing kemungkinan akan memiliki output dengan ukuran yang konstan. Nilai yang di return oleh fungsi hash disebut nilai hash, kode hash, jumlah hash, atau hanya hash. Kita ambil contoh algoritma SHA-1 dengan SHA-256. SHA-256 selalu menghasilkan output 256 bits sedangkan SHA-1 selalu menghasilkan 160 bits.
Ketika kita menginput menggunakan algoritma SHA-256 outputnya akan seperti berikut:
Input                     Output
Hello                185F8DB32271FE25F561A6FC938B2E264306EC304EDA518007D1764826381969
hello             2CF24DBA5FB0A30E26E83B2AC5B9E29E1B161E5C1FA7425E73043362938B9824
h                 AAA9402664F1A41F40EBBC52C9993EB66AEB366602958FDFAA283B71E64DB123
H                 44BD7AE60F478FAE1061E11A7739F4B94D1DAF917982D33B6FC8A01A63F89C21

Berapa banyakpun karakter yang kita input mau itu melebihi 64 atau kurang dari 64 akan tetap menghasilkan output 64 karakter seperti contoh yang di atas. Jika dari inputan yang kita berikan terdapat spasi maka spasi akan tertap dihitung. Walaupun yang kita input hanya berbeda huruf besar pada awalan sebuah kata tetap saja menghasilkan output yang berbeda. Namun tetap saja karena menggunakan algoritma SHA-256 maka tetap akan menghasilkan output 64 karakter.
Kita lihat apa yang terjadi ketika kita menggunakan algoritma SHA-1
Input                     Output
Hello                     F7FF9E8B7BB2E09B70935A5D785E0CC5D9D0ABF0
hello                     C4D871AD13AD00FDE9A7BB7FF7ED2543AEC54241
h                            244AA7266B3F5A08321B403B2C59BAEBA5539B19
H                           7CF184F4C67AD58283ECB19349720B0CAE756829           
Berbeda dengan algoritma SHA-256, ketika kita memasukan input ke SHA-1 maka outputnya tidak berupa 64 karakter walaupun tetap ukuranya tetap konstan.

Fungsi kriptografi HASH
Agar fungsi kriptografi berjalan denga baik terdapat 3 syarat yang harus dipenuhi:
•             Collision resistance
•             Fast Computing
•             Preimage resistance

Collision Resistance
Dalam fungsi hash ada yang dikenal dengan tabrakan. Apa itu tabrakan? Tabrakan itu ketika sebuah inputan yang berbeda menghasilkan output yang sama. Sedangkan hal ini tidak boleh terjadi agar menjamin sistem keamanan. Namun karena terdapat kemungkinan input yang tak terbatas tetapi outputnya terbatas maka kemungkinan terjadinya tabrakan selalu ada. Maka ketika sebuah fungsi jarang sekali ditemukan tabrakan maka fungsi tersebut sudah bisa dikatakan collision resistance.

Fast Computing
Fungsi hash harus bisa men-return inputan dengan cepat jika tidak cepat maka sistem tidak efisien.

Preimage resistance
Berbeda dengan tabrakan tadi, Preimage resistance ini merupakan sifat fungsi yang aman ketika seseorang mencoba mencari sebuah nilai alsi dengan mengamati dari outputnya.

Implementasi pada blockchain

Blockchain sebenarnya adalah linked list yang isinya adalah data dan pointer hash yang menunjuk ke blok sebelumnya, jadi terlihat seperti rantai. Sebuah pointer hash mirip dengan sebuah pointer, Pointer hash tidak hanya berisi alamat dari blok sebelumnya tetapi juga berisi hash dari data di dalam blok sebelumnya . Jika seseorang mencoba mengubah sebuah data ke 2 dari rantai tersebut maka karena sifat hash yang ketika ada sebuah perubahan data yang kecil maka akan terjadi perubahan total pada hash sehingga akan terjadi perubahan hash blok ke 1.


TREES & BINARY TREES
Tree: Salah satu dari bentuk struktur data yang tidak linear. Seperti bentuknya, trees mengambarkan hubungan one to many antar elemen. Tiap-tiap node yang terdapat pada tree tidak perlu disimpan secara bersebelahan atau berdekatan melainkan bisa disimpan dimana saja dan dihubungkan menggunakan pointer seperti linked list..Berikut adalah istilah-istilah yang terdapat pada tree.
https://miro.medium.com/max/677/1*Z89j_NoDx9HkFcPHy3rPZg.png
Predesesor: Node yang berada diatas node tertentu. (contoh: 99 predesesor dari 44 dan 11)
Succesor: Node yang berada dibawah node tertentu.(contoh: 44 dan 11 adalah successor dari 99)
Ancestor: Seluruh node yang terletak sebelum node tertentu dan terletak pada jalur yang sama. (contoh 2 dan 10 adalah ancestor dari 87).
Descendant: Seluruh node yang terletak sesudah node tertentu dan terletak pada jalur yang sama. (ContohL 87 dan 77 merupakan descendant dari 2).
Parent: Predesesor satu level diatas satu node.(contoh 9 merupakan parent dari 2).
Child: Succesor satu level dibawah satu node. (contoh: 2 merupakan child dari 9).
Sibling: Node yang memiliki parent yang sama dengan satu node.(Contoh : 55 merupakan sibling dari 87).
Subtree: Bagian dari tree yang berupa suatu node beserta descendant-nya.(contoh: subtree 99, 44 , 11 dan subtree 10,55,87)
Size: Banyaknya node dalam suatu tree.(contoh size dari tree tersebut adalah 14)
Height: Banyaknya tingkat/level dalam suatu tree.(contoh: height tree tersebut adalah 3)
Root (Akar): Node khusus dalam tree yang tidak memiliki predesesor. (contoh: rootnya adalah 2)
Leaf (Daun): Node-node dalam tree yang tidak memiliki daun. (contoh: 2,1,7,2,8 ,44,11,55, 87).
Degree (Derajat): Banyaknya child yang dimiliki oleh suatu node.

Binary tree: merupakan sebua tree dengan setiap node hanya boleh memiliki masksimal 2 anak yang bisa dibedakan dengan left child dan right child. Berikut merupakan beberapa tipe dalam binary tree:
-        Pohon biner penuh: Semua simpul selain daunmemiliki 2 anak dan tiap cabang memiliki panjang ruas yang sama.
-        Pohon biner lengkap: semua simpul selain daun memiliki 2 anak tetapi tiap cabang memiliki panjang ruas berbeda.
-        Pohon biner miring: Dua pohon yang semua simpulnya mempunyai satu anak / turunan kecuali daun.
-        Pohon biner seimbang: Pohon biner di mana tidak ada daun yang lebih jauh dari akar daripada daun lainnya.


Dalam binary tree kita mengenal kunjungan preorder, inorder, postorder. Dengan itu kita bisa membuat prefix, infix, dan postfix.

Kunjungan Preorder : Kunjungan ini mencetak dengan urutan (P L R) Parent - > Left -> Right
                                   Dengan kunjungan preorder kita bisa menghasilkan prefix.
Kunjungan InOrder   : Kunjungan ini mencetak dengan urutan (L P R) Left -> Parent - > Right.
                                   Dengan iini kita bisa menghasilkan infix.
Kunjungan PostOrder:  Kunjungan ini mencetak dengan urutan (L R P) Left -> Right -> Parent.
                                      Dengan itu kita bisa menghasilkan postfix. 


Referensi:
https://saragusti22.wordpress.com/2015/05/04/pengantar-struktur-data-tree-dan-binary-tree/
https://selembardigital.com/apa-itu-hashing-di-bawah-tudung-blockchain/
https://www.binance.vision/id/blockchain/what-makes-a-blockchain-secure
https://www.geeksforgeeks.org/difference-between-general-tree-and-binary-tree/

Komentar

Postingan populer dari blog ini

AVL Tree

Linked List