Merkle Trees เป็นองค์ประกอบพื้นฐานของบล็อกเชนที่สนับสนุนการทำงานของพวกเขา ช่วยให้สามารถตรวจสอบโครงสร้างข้อมูลขนาดใหญ่ได้อย่างมีประสิทธิภาพและปลอดภัย และในกรณีของบล็อกเชน ชุดข้อมูลที่อาจไร้ขอบเขต
การนำ Merkle tree มาใช้งานในบล็อกเชนนั้นมีผลกระทบหลายอย่าง ช่วยให้พวกเขาปรับขนาดได้ในขณะเดียวกันก็จัดเตรียมสถาปัตยกรรมแบบแฮชเพื่อรักษาความสมบูรณ์ของข้อมูลและวิธีง่ายๆ ในการตรวจสอบความสมบูรณ์ของข้อมูล
ฟังก์ชันแฮชที่เข้ารหัสลับเป็นเทคโนโลยีพื้นฐานที่ช่วยให้ทรี Merkle ทำงานได้ ดังนั้นก่อนอื่น สิ่งสำคัญคือต้องเข้าใจว่าฟังก์ชันแฮชที่เข้ารหัสคืออะไร
คำตัดสินฉบับย่อ: ต้นไม้ Merkle เป็นโครงสร้างข้อมูลที่ประกอบด้วยแฮชการเข้ารหัสที่ช่วยให้การตรวจสอบความสมบูรณ์และการแมปชุดข้อมูลขนาดใหญ่มีประสิทธิภาพ ทำให้พวกมันกลายเป็นองค์ประกอบสำคัญของระบบ เช่น บล็อกเชน และการควบคุมเวอร์ชันแบบกระจาย
ข้อมูลด่วน
ประเด็นสำคัญ | รายละเอียด |
---|---|
ฟังก์ชันแฮชการเข้ารหัส | ฟังก์ชันแฮชที่รับอินพุตทุกขนาดและส่งออกค่าแฮชที่มีความยาวคงที่ ใช้ในต้น Merkle |
โครงสร้างต้นไม้แมร์เคิล | โครงสร้างข้อมูลแบบต้นไม้โดยที่แต่ละโหนดที่ไม่ใช่ลีฟเป็นแฮชของโหนดย่อย ช่วยให้สามารถแมปและตรวจสอบชุดข้อมูลขนาดใหญ่ได้อย่างมีประสิทธิภาพ |
แฮชรูท | แฮชที่ด้านบนของต้น Merkle ซึ่งแสดงถึงแฮชของต้นไม้ทั้งหมด ทำหน้าที่เป็นลายนิ้วมือให้กับชุดข้อมูลทั้งหมด |
บทพิสูจน์ของ Merkle | อนุญาตให้มีการตรวจสอบความสมบูรณ์ของข้อมูลและตำแหน่งในแผนผังโดยไม่จำเป็นต้องใช้ชุดข้อมูลทั้งหมด เฉพาะแฮชรูตเท่านั้น |
การดำเนินการใน Bitcoin | Merkle 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 ที่ถูกเก็บไว้ในส่วนหัวของบล็อก การออกแบบนี้มีคุณประโยชน์ที่แตกต่างกันหลายประการ
สิ่งที่โดดเด่นที่สุดตามที่ระบุไว้ในเอกสารไวท์เปเปอร์ ช่วยให้มีโหนด 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/