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

Table of contents

Nonthawit
CEO | Engineer | Designer
VIEW
16.5k
CATEGORY
LAST UPDATED
May 5, 2018
สำหรับบล็อกนี้เป็นบล็อกแรกใน Blockchain Fundamental Series ที่กำลังจะเขียนเรื่อยๆ จะเป็นการปูพื้นฐานสิ่งที่ควรจะรู้/keyword สำคัญๆสำหรับ blockchain ไม่ว่าจะเป็น concept / การทำงาน / การคำนวนต่างๆ เพื่อให้ครอบคลุมและเอาไปต่อยอดในอนาคตกันได้
ก่อนเราจะเข้าเรื่อง 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 ข้อหลักๆด้วยกัน คือ
เมื่อ hash แล้วคุณจะได้ output ที่มีโอกาสซ้ำกันน้อยมากๆๆๆ และไม่ว่าคุณจะ hash ด้วยข้อมูลเดิมกี่ครั้งคุณจะได้ hashing output แบบเดิมเสมอ การ hashing เลยไว้ใช้ระบุตัวตนของข้อมูลกันนั่นเอง
เช่น ใน blockchain จะใช้เป็นค่าอ้างอิงของ block นั้นๆ

EXTRA: ที่บอกว่าซ้ำกันน้อยมาก เพราะบาง hashing algorithm ยังเจอปัญหา collision attacks อยู่ครับ คือมี 2 ค่าที่คำนวนผ่าน Hash Function แล้วได้ค่าเดียวกัน
ถ้าเราต้องการเทียบ file หรือ ข้อมูลขนาด 1000 GB เราต้องใช้เวลากี่นาที? เราจึงต้องทำการ hash ข้อมูลให้อยู่ในรูปอย่างง่ายก่อนเพื่อเอาไปคำนวนหาสิ่งที่ต้องการต่อไป เช่น เปรียบเทียบข้อมูล, ตรวจสอบความถูกต้องของข้อมูล, …
นั่นหมายความว่าคุณไม่สามารถ de-hash ข้อมูลเดิมกลับมาได้ มีทางเดียวคือคุณจะต้อง brute-force output ไปเรื่อยๆจนกว่าจะได้ค่าที่เท่ากับค่า hashing output เดิม
ตัวอย่าง one-way function เช่น SHA256 เป็นต้น
เช่น
"test" ---SHA256---> 9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08
"Test" ---SHA256---> 532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25

เป็นที่มาว่า blockchain ที่เกิดขึ้นบนโลกทั้งหมด “hash ข้อมูลกันตลอด”
ซึ่งบนโลกมีวิธีการ hash กันมากมาย ตัวอย่างที่ cryptocurrencies blockchain ใช้กัน เช่น
งั้นเรามาดูสองตัวนี้กันดีกว่าว่ามีลักษณะเป็นอย่างไร
การเข้ารหัสข้อมูลแบบหนึ่ง ที่ทำให้เราได้ข้อมูลออกมาใหม่ในขนาด 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 ข้อมูล ?
คุณไม่สามารถ de-hashing ข้อมูลเดิมกลับมาได้ ยกเว้นจะ brute-force output ไปเรื่อยๆ
SHA256 เหมาะกับการขุดแบบ Proof-of-Work มาก เพราะถ้ามี super computer ที่สามารถ brute-force การ hash ข้อมูลได้มากกว่า 1,000,000 hashต่อวินาที ก็สามารถถอด SHA256 ได้คับ ซึ่งพิสูจแล้วโดยคนทั้งโลกที่ขุดกันอยู่ในตอนนี้

EXTRA: SHA256 สามารถ brute-force ได้ อ่านต่อ
เนื่องจากการสร้าง wallet address ต้องประกอบด้วย 2 อย่างคือ
1. public key
2. private key
ซึ่ง 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

เพราะฉะนั้น public key ที่ผ่านกระบวนการย่อแล้วจะอยู่ในรูปที่สั้น และดูง่าย(มั้ง 🤣) และเราจะเรียกมันว่า wallet address นั่นเอง
[ตัวอย่าง wallet address]
34K5Qqeb6FP1zgSVbgpQRbN2GH6AsECV1P (โอนมาได้นะไม่ว่ากัน 😁)
ทั้งหมดคือเหตุผลที่ bitcoin เลือก SHA256 ในการ hash ข้อมูลครับ
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 เป็นที่เรียบร้อยแล้ว

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

Ethash เราไม่สามารถเขียนเป็นบล็อกอธิบาย algorithm ตัวนี้ได้หมดเพียงแค่พามารู้จักเท่านั้น เพราะเป็นเรื่องที่ซับซ้อนมาก
สามารถเข้าไปศึกษาเพิ่มเติมได้ที่ DAG และ เหตุผลที่ใช้ ETHASH ใน wiki ของ Ethereum ต่อกันได้
มาสรุปกันอีกรอบเหตุผลหลักๆที่ blockchain ต้องการ hash ข้อมูล
บล็อกต่อไปจะเป็นการอธิบายเกี่ยวกับ Block ข้อมูลที่อยู่ใน Blockchain ว่ามีค่าอะไรที่สำคัญบ้าง
วันนี้พอแค่นี้เจอกันบล็อกหน้าเนาะ 😎

เข้าไปติดตามกันได้ https://www.facebook.com/thekhaeng.io/
อย่าลืม share ให้มนุษย์ blockchain คนอื่นด้วยหละ 😎
KNOWLEDGE


Nonthawit
CEO | Engineer | Designer
เข้าใจการทำ Selector แบบ Ripple effect


Nonthawit
CEO | Engineer | Designer
20 สิ่ง ที่ได้หลังจากเป็น Android developer ที่ Nextzy 3 เดือน
บทความนี้แชร์ประสบการณ์ 3 เดือนแรกของการทำงานเป็น Android Developer ที่ Nextzy ครอบคลุมทั้งด้าน technical เช่น MVP architecture, Android Lifecycle, ProGuard, Git workflow และการเขียน Unit Test รวมถึงด้าน soft skill อย่างการสื่อสารกับทีม, การแชร์ความรู้, และการเขียนโค้ดให้ readable และยืดหยุ่น นอกจากนี้ยังสะท้อนวัฒนธรรมองค์กรที่เน้นทีมเวิร์ค การ review โค้ด และบรรยากาศการทำงานที่สนุกสนาน ซึ่งล้วนช่วยลด learning curve และพัฒนาทักษะได้เร็วกว่าการเรียนรู้คนเดียว
![[Tip/Trick] วิธีติดต่อกับ WebView ผ่าน JavascriptInterface มันเท่มาก](https://image.nextzy.tech/1_Aleix_TFC_7yz_Qh_Q_Sx_GV_Rqxw_a29e28219a.png)

Nonthawit
CEO | Engineer | Designer
[Tip/Trick] วิธีติดต่อกับ WebView ผ่าน JavascriptInterface มันเท่มาก