ต้นไม้ Merkle คืออะไร? คู่มือสำหรับผู้เริ่มต้นใช้งานส่วนประกอบ Blockchain นี้

Merkle Trees เป็นองค์ประกอบพื้นฐานของบล็อกเชนที่สนับสนุนการทำงานของพวกเขา ช่วยให้สามารถตรวจสอบโครงสร้างข้อมูลขนาดใหญ่ได้อย่างมีประสิทธิภาพและปลอดภัย และในกรณีของบล็อกเชน ชุดข้อมูลที่อาจไร้ขอบเขต

การนำ Merkle tree มาใช้งานในบล็อกเชนนั้นมีผลกระทบหลายอย่าง ช่วยให้พวกเขาปรับขนาดได้ในขณะเดียวกันก็จัดเตรียมสถาปัตยกรรมแบบแฮชเพื่อรักษาความสมบูรณ์ของข้อมูลและวิธีง่ายๆ ในการตรวจสอบความสมบูรณ์ของข้อมูล

ฟังก์ชันแฮชที่เข้ารหัสลับเป็นเทคโนโลยีพื้นฐานที่ช่วยให้ทรี Merkle ทำงานได้ ดังนั้นก่อนอื่น สิ่งสำคัญคือต้องเข้าใจว่าฟังก์ชันแฮชที่เข้ารหัสคืออะไร

คำตัดสินฉบับย่อ: ต้นไม้ Merkle เป็นโครงสร้างข้อมูลที่ประกอบด้วยแฮชการเข้ารหัสที่ช่วยให้การตรวจสอบความสมบูรณ์และการแมปชุดข้อมูลขนาดใหญ่มีประสิทธิภาพ ทำให้พวกมันกลายเป็นองค์ประกอบสำคัญของระบบ เช่น บล็อกเชน และการควบคุมเวอร์ชันแบบกระจาย


ข้อมูลด่วน

ประเด็นสำคัญรายละเอียด
ฟังก์ชันแฮชการเข้ารหัสฟังก์ชันแฮชที่รับอินพุตทุกขนาดและส่งออกค่าแฮชที่มีความยาวคงที่ ใช้ในต้น Merkle
โครงสร้างต้นไม้แมร์เคิลโครงสร้างข้อมูลแบบต้นไม้โดยที่แต่ละโหนดที่ไม่ใช่ลีฟเป็นแฮชของโหนดย่อย ช่วยให้สามารถแมปและตรวจสอบชุดข้อมูลขนาดใหญ่ได้อย่างมีประสิทธิภาพ
แฮชรูทแฮชที่ด้านบนของต้น Merkle ซึ่งแสดงถึงแฮชของต้นไม้ทั้งหมด ทำหน้าที่เป็นลายนิ้วมือให้กับชุดข้อมูลทั้งหมด
บทพิสูจน์ของ Merkleอนุญาตให้มีการตรวจสอบความสมบูรณ์ของข้อมูลและตำแหน่งในแผนผังโดยไม่จำเป็นต้องใช้ชุดข้อมูลทั้งหมด เฉพาะแฮชรูตเท่านั้น
การดำเนินการใน BitcoinMerkle tree จัดเก็บธุรกรรมเป็นบล็อก แฮชรูตที่เก็บไว้ในส่วนหัวของบล็อกทำให้โหนด SPV สามารถตรวจสอบธุรกรรมได้
การใช้งานบล็อคเชนอื่น ๆใช้ในบล็อกเชนจำนวนมาก เช่น Ethereum ซึ่งใช้ Merkle Patricia Trees ที่ซับซ้อนกว่า
ระบบกระจายอนุญาตให้ระบบควบคุมเวอร์ชันเช่น Git และ IPFS ตรวจสอบข้อมูลที่แชร์ระหว่างเพียร์ได้อย่างง่ายดาย

ฟังก์ชันแฮชเข้ารหัส

พูดง่ายๆ ก็คือ ฟังก์ชันแฮชคือฟังก์ชันใดๆ ที่ใช้ในการจับคู่ข้อมูลที่มีขนาดตามต้องการ (อินพุต) กับเอาต์พุตที่มีขนาดคงที่ อัลกอริธึมการแปลงแป้นพิมพ์ถูกนำไปใช้กับอินพุตข้อมูล และเอาต์พุตความยาวคงที่ที่ได้จะเรียกว่าแฮช

อัลกอริธึมการแฮชจำนวนมากนั้นเปิดเผยต่อสาธารณะอย่างกว้างขวางและสามารถเลือกได้ตามความต้องการของคุณ

แฮชผลลัพธ์จากอินพุตที่กำหนดเองไม่เพียงแต่กำหนดความยาวเท่านั้น แต่ยังมีเอกลักษณ์เฉพาะตัวในอินพุตอีกด้วย และฟังก์ชันเองก็ถูกกำหนดไว้ด้วย นั่นคือไม่ว่าคุณจะเรียกใช้ฟังก์ชันบนอินพุตเดียวกันกี่ครั้ง ผลลัพธ์ก็จะเหมือนเดิมเสมอ

ตัวอย่างเช่น หากคุณมีชุดข้อมูลต่อไปนี้เป็นอินพุต ผลลัพธ์ที่ได้จะไม่ซ้ำกันสำหรับแต่ละอินพุต โปรดสังเกตว่าในตัวอย่างที่สองและสาม แม้ว่าความแตกต่างของอินพุตจะมีเพียงคำเดียว แต่ผลลัพธ์ที่ได้จะแตกต่างกันโดยสิ้นเชิง

สิ่งนี้สำคัญมากเนื่องจากช่วยให้สามารถ "พิมพ์ลายนิ้วมือ" ของข้อมูลได้

ฟังก์ชันแฮชที่เข้ารหัส รูปภาพจาก Wikipedia

เนื่องจากความยาวเอาต์พุต (ผลรวมแฮชในตัวอย่าง) จะเท่ากันเสมอตามที่กำหนดโดยอัลกอริธึมแฮชที่ใช้ ข้อมูลจำนวนมากจึงสามารถระบุได้ผ่านการแฮชผลลัพธ์เท่านั้น

ด้วยระบบที่มีข้อมูลจำนวนมหาศาล ประโยชน์ของความสามารถในการจัดเก็บและระบุข้อมูลด้วยเอาต์พุตที่มีความยาวคงที่ จะช่วยประหยัดพื้นที่จัดเก็บข้อมูลได้มหาศาลและช่วยเพิ่มประสิทธิภาพ

ภายในบล็อคเชน อัลกอริธึมการแฮชถูกใช้เพื่อกำหนดสถานะของบล็อคเชน

บล็อกเชนคือรายการลิงก์ที่มีข้อมูลและตัวชี้แฮชที่ชี้ไปยังบล็อกก่อนหน้า ทำให้เกิดห่วงโซ่ของบล็อกที่เชื่อมต่อกัน จึงเป็นที่มาของชื่อ "บล็อกเชน"

แต่ละบล็อกเชื่อมต่อถึงกันผ่านตัวชี้แฮช ซึ่งเป็นแฮชของข้อมูลภายในบล็อกก่อนหน้าพร้อมกับที่อยู่ของบล็อกก่อนหน้า ด้วยการเชื่อมโยงบล็อกข้อมูลในรูปแบบนี้ แต่ละแฮชผลลัพธ์ของบล็อกก่อนหน้าแสดงถึงสถานะทั้งหมดของบล็อกเชน เนื่องจากข้อมูลที่แฮชทั้งหมดของบล็อกก่อนหน้าถูกแฮชเป็นแฮชเดียว

สิ่งนี้จะแสดง (ในกรณีของอัลกอริทึม SHA-256) โดยเอาต์พุต (แฮช) เช่นนี้

b09a57d476ea01c7f91756adff1d560e579057ac99a28d3f30e259b30ecc9dc7

แฮชด้านบนคือลายนิ้วมือของสถานะทั้งหมดของบล็อคเชนก่อนหน้านั้น สถานะของบล็อคเชนก่อนบล็อกใหม่ (เป็นข้อมูลที่แฮช) คืออินพุต และแฮชผลลัพธ์คือเอาต์พุต

แม้ว่าจะเป็นไปได้ที่จะใช้แฮชการเข้ารหัสโดยไม่มีแผนผัง Merkle แต่ก็ไม่มีประสิทธิภาพอย่างยิ่งและไม่สามารถปรับขนาดได้ การใช้แฮชเพื่อจัดเก็บข้อมูลในบล็อกในรูปแบบอนุกรมนั้นใช้เวลานานและยุ่งยาก

ดังที่คุณจะเห็น แผนผัง Merkle ช่วยให้สามารถแก้ไขความสมบูรณ์ของข้อมูลได้เพียงเล็กน้อย เช่นเดียวกับการแมปข้อมูลนั้นผ่านแผนผังทั้งหมดโดยใช้การพิสูจน์ Merkle


ต้นไม้ Merkle และ Merkle Proofs

ตั้งชื่อตาม Ralph Merkle ผู้จดสิทธิบัตรแนวคิดนี้ในปี 1979 ต้นไม้ Merkle โดยพื้นฐานแล้วเป็นต้นไม้โครงสร้างข้อมูล โดยแต่ละโหนดที่ไม่ใช่ลีฟจะเป็นแฮชของโหนดลูกตามลำดับ

โหนดใบเป็นโหนดระดับต่ำสุดในต้นไม้ ในตอนแรกอาจฟังดูเข้าใจยาก แต่เมื่อดูตามรูปด้านล่างจะเข้าใจได้ง่ายขึ้นมาก

แฮชทรี

ตัวอย่างของต้นไม้แฮชไบนารี รูปภาพจาก Wikipedia

ที่สำคัญ ให้สังเกตว่าโหนดที่ไม่ใช่ลีฟหรือ "กิ่งก้าน" (แสดงโดย Hash 0-0 และ Hash 0-1) ทางด้านซ้ายเป็นแฮชของลูก L1 และ L2 ตามลำดับ นอกจากนี้ ให้สังเกตว่าสาขา Hash 0 เป็นแฮชของลูกที่ต่อกันอย่างไร สาขา Hash 0-0 และ Hash 0-1

ตัวอย่างข้างต้นเป็นรูปแบบทั่วไปและเรียบง่ายของต้นไม้ Merkle ที่เรียกว่า Binary Merkle Tree อย่างที่คุณเห็น มีแฮชบนสุดที่เป็นแฮชของต้นไม้ทั้งหมด เรียกว่ารูทแฮช โดยพื้นฐานแล้ว ต้นไม้ Merkle เป็นโครงสร้างข้อมูลที่สามารถรับแฮชจำนวน “n” และแสดงด้วยแฮชเดียว

โครงสร้างของแผนผังช่วยให้สามารถแมปข้อมูลจำนวนมากได้อย่างมีประสิทธิภาพ และช่วยให้ระบุได้ง่ายว่าการเปลี่ยนแปลงของข้อมูลนั้นเกิดขึ้นที่ใด แนวคิดนี้ช่วยให้สามารถพิสูจน์ Merkle ได้ ซึ่งบางคนสามารถตรวจสอบได้ว่าการแฮชข้อมูลมีความสอดคล้องกันตลอดทางขึ้นไปบนแผนผังและอยู่ในตำแหน่งที่ถูกต้อง โดยไม่ต้องดูแฮชทั้งชุดจริงๆ

แต่สามารถตรวจสอบได้ว่าก้อนข้อมูลสอดคล้องกับรูทแฮชโดยการตรวจสอบเพียงชุดย่อยเล็กๆ ของแฮช แทนที่จะตรวจสอบชุดข้อมูลทั้งหมด

ตราบใดที่รูทแฮชเป็นที่รู้จักและเชื่อถือได้ต่อสาธารณะ ก็เป็นไปได้สำหรับใครก็ตามที่ต้องการค้นหาคีย์-ค่าบนฐานข้อมูลเพื่อใช้หลักฐาน Merkle เพื่อตรวจสอบตำแหน่งและความสมบูรณ์ของข้อมูลภายในฐานข้อมูลที่มี รากเฉพาะ

เมื่อรูทแฮชพร้อมใช้งาน สามารถรับแผนผังแฮชจากแหล่งที่ไม่น่าเชื่อถือใดๆ และสามารถดาวน์โหลดสาขาของแผนผังได้ครั้งละหนึ่งสาขาพร้อมการตรวจสอบยืนยันความสมบูรณ์ของข้อมูลทันที แม้ว่าทั้งแผนผังจะยังไม่พร้อมใช้งานก็ตาม

ประโยชน์ที่สำคัญที่สุดประการหนึ่งของโครงสร้างต้นไม้ Merkle คือความสามารถในการตรวจสอบชุดข้อมูลขนาดใหญ่โดยพลการผ่านกลไกการแฮชที่คล้ายกันซึ่งใช้ในการตรวจสอบข้อมูลจำนวนน้อยกว่ามาก

แผนผังนี้มีข้อได้เปรียบในการกระจายชุดข้อมูลขนาดใหญ่ไปยังส่วนเล็กๆ ที่สามารถจัดการได้ โดยที่อุปสรรคในการตรวจสอบความสมบูรณ์จะลดลงอย่างมาก แม้ว่าข้อมูลโดยรวมจะมีขนาดใหญ่กว่าก็ตาม

แฮชรูตสามารถใช้เป็นลายนิ้วมือสำหรับชุดข้อมูลทั้งหมด รวมถึงฐานข้อมูลทั้งหมด หรือเป็นตัวแทนสถานะทั้งหมดของบล็อกเชน ในส่วนต่อไปนี้ เราจะหารือว่า Bitcoin และระบบอื่นๆ ใช้งาน Merkle tree อย่างไร


ต้นไม้ Merkle ใน Bitcoin

ฟังก์ชันแฮชการเข้ารหัสที่ใช้โดย Bitcoin คืออัลกอริธึม SHA-256 ซึ่งย่อมาจาก “Secure Hashing Algorithm” ซึ่งเอาต์พุตมีความยาวคงที่ 256 บิต หน้าที่พื้นฐานของ Merkle tree ใน Bitcoin คือการจัดเก็บและตัดธุรกรรมในทุกบล็อคในที่สุด

ตามที่กล่าวไว้ข้างต้น บล็อกในบล็อกเชนเชื่อมต่อผ่านแฮชของบล็อกก่อนหน้า ใน Bitcoin แต่ละบล็อกประกอบด้วยธุรกรรมทั้งหมดภายในบล็อกนั้น รวมถึงส่วนหัวของบล็อกซึ่งประกอบด้วย:

  • หมายเลขเวอร์ชันบล็อก
  • บล็อกก่อนหน้า Hash
  • timestamp
  • เป้าหมายความยากในการขุด
  • nonce
  • แฮชราก Merkle

ภาพด้านล่างมาจากเอกสารทางเทคนิคของ Bitcoin และแสดงให้เห็นว่าต้นไม้ Merkle เข้ากับแต่ละบล็อกได้อย่างไร

ต้นไม้ Merkle

ธุรกรรมจะรวมอยู่ในบล็อกโดยนักขุดและถูกแฮชเป็นส่วนหนึ่งของแผนผัง Merkle ซึ่งนำไปสู่ราก Merkle ที่ถูกเก็บไว้ในส่วนหัวของบล็อก การออกแบบนี้มีคุณประโยชน์ที่แตกต่างกันหลายประการ

สิ่งที่โดดเด่นที่สุดตามที่ระบุไว้ในเอกสารไวท์เปเปอร์ ช่วยให้มีโหนด Simple Payment Verification (SPV) หรือที่เรียกว่า "ไคลเอ็นต์แบบ lightweight" ได้ โหนดเหล่านี้ไม่จำเป็นต้องดาวน์โหลดบล็อกเชน Bitcoin ทั้งหมด เฉพาะส่วนหัวบล็อกของเชนที่ยาวที่สุดเท่านั้น

โหนด SPV สามารถบรรลุสิ่งนี้ได้โดยการสอบถามโหนดเพียร์ของตนจนกว่าพวกเขาจะเชื่อว่าส่วนหัวของบล็อกที่เก็บไว้ที่พวกเขากำลังดำเนินการอยู่นั้นเป็นส่วนหนึ่งของห่วงโซ่ที่ยาวที่สุด โหนด SPV สามารถกำหนดสถานะของธุรกรรมได้โดยใช้การพิสูจน์ Merkle เพื่อแมปธุรกรรมกับแผนผัง Merkle เฉพาะด้วยแฮชรูทของแผนผัง Merkle ตามลำดับในส่วนหัวของบล็อกที่เป็นส่วนหนึ่งของห่วงโซ่ที่ยาวที่สุด

นอกจากนี้ การนำต้นไม้ Merkle ไปใช้ของ Bitcoin ยังช่วยให้สามารถตัดบล็อกเชนเพื่อประหยัดพื้นที่ได้ นี่เป็นผลจากการเก็บเฉพาะ root hash ไว้ในส่วนหัวของบล็อก ดังนั้น บล็อกเก่าจึงสามารถตัดออกได้โดยการเอากิ่งที่ไม่จำเป็นของต้น Merkle ออก ในขณะเดียวกันก็รักษาเฉพาะกิ่งที่จำเป็นสำหรับการพิสูจน์ Merkle เท่านั้น


การใช้งาน Merkle Trees ในบล็อกเชนและระบบอื่น ๆ

แม้ว่า Bitcoin จะเป็นบล็อกเชนแรกที่ใช้ Merkle tree แต่บล็อกเชนอื่นๆ จำนวนมากใช้โครงสร้าง Merkle tree ที่คล้ายกันหรือแม้แต่เวอร์ชันที่ซับซ้อนกว่านั้น

นอกจากนี้ การนำ Merkle tree ไปใช้ไม่ได้จำกัดเพียงบล็อกเชนเท่านั้น แต่ยังนำไปใช้กับระบบอื่นๆ ที่หลากหลายอีกด้วย

Ethereum ซึ่งเป็นสกุลเงินดิจิทัลที่เป็นที่รู้จักมากที่สุดอีกตัวหนึ่ง ยังเป็นตัวอย่างที่ดีของการนำ Merkle tree ไปใช้อีกด้วย เนื่องจาก Ethereum เสร็จสมบูรณ์แล้วในฐานะแพลตฟอร์มสำหรับการสร้างแอปพลิเคชันที่ซับซ้อนมากขึ้น จึงใช้ Merkle tree เวอร์ชันที่ซับซ้อนกว่าที่เรียกว่า Merkle Patricia Tree ซึ่งจริงๆ แล้วเป็น Merkle tree 3 ต้นที่แยกจากกันซึ่งใช้สำหรับวัตถุสามประเภท คุณสามารถเรียนรู้เพิ่มเติมเกี่ยวกับต้นไม้เหล่านี้ได้ที่นี่

สุดท้าย Merkle tree เป็นองค์ประกอบสำคัญของระบบควบคุมเวอร์ชันแบบกระจาย เช่น Git และ IPFS ความสามารถของพวกเขาในการรับรองและตรวจสอบความสมบูรณ์ของข้อมูลที่แบ่งปันระหว่างคอมพิวเตอร์ในรูปแบบ P2P ได้อย่างง่ายดาย ทำให้สิ่งเหล่านี้มีคุณค่าต่อระบบเหล่านี้


สรุป

ต้นไม้ Merkle เป็นองค์ประกอบสำคัญของบล็อกเชน และช่วยให้พวกมันทำงานได้อย่างมีประสิทธิภาพโดยมีความไม่เปลี่ยนรูปและความสมบูรณ์ของธุรกรรมที่พิสูจน์ได้

การทำความเข้าใจบทบาทที่พวกเขาเล่นในเครือข่ายแบบกระจายและเทคโนโลยีพื้นฐานของฟังก์ชันแฮชการเข้ารหัสเป็นสิ่งสำคัญในการเข้าใจแนวคิดพื้นฐานภายในสกุลเงินดิจิทัล ในขณะที่สกุลเงินเหล่านี้ยังคงพัฒนาไปสู่ระบบที่ใหญ่และซับซ้อนมากขึ้น

ที่มา: https://blockonomi.com/merkle-tree/