ทำไม Hashing Algorithm ใน Blockchain ถึงสำคัญ

สำหรับบล็อกนี้เป็นบล็อกแรกใน Blockchain Fundamental Series ที่กำลังจะเขียนเรื่อยๆ จะเป็นการปูพื้นฐานสิ่งที่ควรจะรู้/keyword สำคัญๆสำหรับ blockchain ไม่ว่าจะเป็น concept / การทำงาน / การคำนวนต่างๆ เพื่อให้ครอบคลุมและเอาไปต่อยอดในอนาคตกันได้

Blockchain Fundamental Series

ก่อนเราจะเข้าเรื่อง blockchain กัน มีหนึ่งเรื่องที่สำคัญเกี่ยวข้องกับ blockchain มากที่สุดคือการ hash ข้อมูลบน blockchain

แล้วการ hash ข้อมูล คืออะไรกันนะ ?

การ hash ข้อมูล คือ การเปลี่ยนข้อมูลต่างๆ ข้อมูลอะไรก็ได้ที่อยู่บนโลกของ digital ให้อยู่ในรูปของ bit ที่มีขนาดแน่นอนตายตัว

เช่น

"Hello" ----hashing_algo_1--> "0123ABC35"
" " --------hashing_algo_1--> "0A32A1C5F"
music.mp3 --hashing_algo_1--> "1A9C2A1D5"
ส่วนใหญ่จะให้ hex แทน bit กันเนาะ

ซึ่งการ hash ข้อมูลเราใช้กันมานานมากแล้ว เช่น MD5 ที่ใช้ตรวจสอบความสมบูรณ์ของ file ต่างๆบนโลก digital เป็น hash ยอดฮิตเลยก็ว่าได้

แล้วทำไมต้อง hash ข้อมูลให้มันยุ่งยากหละ ?

คำตอบมีอยู่ 4 ข้อหลักๆด้วยกัน คือ

1. ต้องการใช้เป็น ID ใหักับข้อมูล (unique)

เมื่อ hash แล้วคุณจะได้ output ที่มีโอกาสซ้ำกันน้อยมากๆๆๆ และไม่ว่าคุณจะ hash ด้วยข้อมูลเดิมกี่ครั้งคุณจะได้ hashing output แบบเดิมเสมอ การ hashing เลยไว้ใช้ระบุตัวตนของข้อมูลกันนั่นเอง

เช่น ใน blockchain จะใช้เป็นค่าอ้างอิงของ block นั้นๆ

EXTRA: ที่บอกว่าซ้ำกันน้อยมาก เพราะบาง hashing algorithm ยังเจอปัญหา collision attacks อยู่ครับ คือมี 2 ค่าที่คำนวนผ่าน Hash Function แล้วได้ค่าเดียวกัน

2. ต้องการความเร็วในการคำนวน

ถ้าเราต้องการเทียบ file หรือ ข้อมูลขนาด 1000 GB เราต้องใช้เวลากี่นาที? เราจึงต้องทำการ hash ข้อมูลให้อยู่ในรูปอย่างง่ายก่อนเพื่อเอาไปคำนวนหาสิ่งที่ต้องการต่อไป เช่น เปรียบเทียบข้อมูล, ตรวจสอบความถูกต้องของข้อมูล, …

3. ส่วนใหญ่ต้องการ one-way function

นั่นหมายความว่าคุณไม่สามารถ de-hash ข้อมูลเดิมกลับมาได้ มีทางเดียวคือคุณจะต้อง brute-force output ไปเรื่อยๆจนกว่าจะได้ค่าที่เท่ากับค่า hashing output เดิม

ตัวอย่าง one-way function เช่น SHA256 เป็นต้น

4. เปลี่ยนข้อมูลแค่นิดเดียวแต่ hash output ต่างกันราวฟ้ากับดิน

เช่น

"test" ---SHA256---> 9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08"Test" ---SHA256---> 532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25

เป็นที่มาว่า blockchain ที่เกิดขึ้นบนโลกทั้งหมด “hash ข้อมูลกันตลอด

ซึ่งบนโลกมีวิธีการ hash กันมากมาย ตัวอย่างที่ cryptocurrencies blockchain ใช้กัน เช่น

  • Bitcoin: จะใช้ SHA256
  • Ethereum: จะใช้ Ethash
  • เป็นต้น

งั้นเรามาดูสองตัวนี้กันดีกว่าว่ามีลักษณะเป็นอย่างไร

SHA256

การเข้ารหัสข้อมูลแบบหนึ่ง ที่ทำให้เราได้ข้อมูลออกมาใหม่ในขนาด 256 bit / 32 byte / HEX 64 ตัว เช่น

" " ---SHA256---> 36A9 E7F1 C95B 82FF B997 43E0 C5C4 CE95 D83C 9A43 0AAC 59F8 4EF3 CBFA B614 5068 (hex 64 digit)NOTE: hex 2 digits = 1 byte = 8 bits

EXTRA: SHA256 Hash Generator

ทำไม bitcoin ถึงเลือก SHA256 ในการ hash ข้อมูล ?

1. เป็น one-way hash function

คุณไม่สามารถ de-hashing ข้อมูลเดิมกลับมาได้ ยกเว้นจะ brute-force output ไปเรื่อยๆ

2. เพื่อจุดประสงค์ในการ Mining

SHA256 เหมาะกับการขุดแบบ Proof-of-Work มาก เพราะถ้ามี super computer ที่สามารถ brute-force การ hash ข้อมูลได้มากกว่า 1,000,000 hashต่อวินาที ก็สามารถถอด SHA256 ได้คับ ซึ่งพิสูจแล้วโดยคนทั้งโลกที่ขุดกันอยู่ในตอนนี้

all bitcoin hashrate in the world

EXTRA: SHA256 สามารถ brute-force ได้ อ่านต่อ

3. เหมาะกับการนำมาสร้าง Wallet address เป็นที่สุด

เนื่องจากการสร้าง wallet address ต้องประกอบด้วย 2 อย่างคือ

1. public key

2. private key

EXTRA: อ่านเรื่อง public key / private keyต่อได้ใน wiki

ซึ่ง public key มันยาววววมาก

[ตัวอย่าง]Public Key: 3048 0241 00C9 18FA CF8D EB2D EFD5 FD37 89B9 E069 EA97 FC20 5E35 F577 EE31 C4FB C6E4 4811 7D86 BC8F BAFA 362F 922B F01B 2F40 C744 2654 C0DD 2881 D673 CA2B 4003 C266 E2CD CB02 0301 0001

จึงต้องย่อให้ public key สั้นลงก่อน โดยหนึ่งในกระบวกการการย่อ public key ของ bitcoin คือการ hash ด้วย SHA256

อ่านเพิ่ม: https://en.bitcoin.it/wiki/Technical_background_of_version_1_Bitcoin_addresses

เพราะฉะนั้น public key ที่ผ่านกระบวนการย่อแล้วจะอยู่ในรูปที่สั้น และดูง่าย(มั้ง 🤣) และเราจะเรียกมันว่า wallet address นั่นเอง

[ตัวอย่าง wallet address]34K5Qqeb6FP1zgSVbgpQRbN2GH6AsECV1P (โอนมาได้นะไม่ว่ากัน 😁)

ทั้งหมดคือเหตุผลที่ bitcoin เลือก SHA256 ในการ hash ข้อมูลครับ

Ethash

Ethash algorithm ของฝั่ง Ethereum ที่ใช้นั้นซับซ้อนกว่าของ bitcoin อยู่หลายเท่ามาก มันไม่ใช่แค่การเอาข้อมูลมา hash ธรรมดาอีกต่อไป

เนื่องจากมีสิ่งที่เรียกว่า Directed Acyclic Graph (DAG) เพิ่มเข้ามา

DAG คืออะไร?

คือ กราฟทางคณิตศาสตร์แบบหนึ่งที่ถูกสร้างขึ้นจาก 2 algorithm คือ 1. Vitalik Buterin’s Dagger algorithm และ 2. Thaddeus Dryja’s Hashimoto algorithm.

โอ้โหแค่คำนิยามมันก็งงแล้วครับ 🤪 งั้นเราขอพูดให้ง่ายกว่านี้นิดนึง

DAG เป็นข้อมูลขนาดใหญ่ที่ถูกสร้างจากความยาวของ Etereum blockchain และจำเป็นต่อการคำนวนใน mix-hash function

ซึ่ง DAG จะถูกเพิ่มขนาดทุกๆ 30,000 blocks (หรือประมาณ 5 วันโดยประมาณ) ณ ปัจจุบันขนาดพุ่งไปที่ 2GB เป็นที่เรียบร้อยแล้ว

https://investoon.com/tools/dag_size

แล้ว mix-hash function คืออะไร ?

เป็น hash function ที่ทาง Ethereum คิดขึ้นมาเองโดยหลักๆจะใช้ SHA3 + DAG ในการ hashing data และไม่ได้ hash แค่ครั้งเดียวทำถึง 64 ครั้ง 😱 ทำให้การ hashing แบบ Ethash ต่างจาก SHA256 ของ Bitcoin อย่างมาก

ref: https://www.vijaypradeep.com/blog/2017-04-28-ethereums-memory-hardness-explained/

Ethash เราไม่สามารถเขียนเป็นบล็อกอธิบาย algorithm ตัวนี้ได้หมดเพียงแค่พามารู้จักเท่านั้น เพราะเป็นเรื่องที่ซับซ้อนมาก

สามารถเข้าไปศึกษาเพิ่มเติมได้ที่ DAG และ เหตุผลที่ใช้ ETHASH ใน wiki ของ Ethereum ต่อกันได้

สรุป

มาสรุปกันอีกรอบเหตุผลหลักๆที่ blockchain ต้องการ hash ข้อมูล

  1. ต้องการใช้เป็น ID ให้กับข้อมูล (unique)
  2. ต้องการความเร็วในการคำนวน/เปรียบเทียบ
  3. ต้องการ one-way function ที่ไม่สามารถถอดกลับเป็นข้อมูลเดิมได้
  4. เปลี่ยนข้อมูลแค่เสี้ยวเดียวแต่ hashing output ต่างกันราวฟ้ากับเหว

บล็อกต่อไปจะเป็นการอธิบายเกี่ยวกับ Block ข้อมูลที่อยู่ใน Blockchain ว่ามีค่าอะไรที่สำคัญบ้าง

EXTRA: hash สมการเบื้องหลัง bitcoin (blockchain)

วันนี้พอแค่นี้เจอกันบล็อกหน้าเนาะ 😎

กด like กด share ทาง facebook กันได้เลย

เข้าไปติดตามกันได้ https://www.facebook.com/thekhaeng.io/

อย่าลืม 👏 ข้างล่าง และ shareให้มนุษย์ blockchain คนอื่นด้วยหละ 😎

--

--

Nonthawit 👨🏻‍🚀 (น้ำแข็ง)
Dcen.io

Tech CEO & Co-founder of The Existing Company┃Software Engineer┃Designer ┃Product Coach ┃Public Speaker ┃ Blogger┃Notion Expert