ข้ามไปยังเนื้อหา

การโจมตี Stake Grinding: การบิดเบือนความสุ่มของ Proof of Stake

Stake grinding ค้นหาผลลัพธ์ที่เอื้อประโยชน์จากคีย์ บล็อก หรือส่วนร่วมความสุ่มที่อนุญาต เพื่อเพิ่มโอกาสได้รับเลือกในอนาคต บทความนี้อธิบายเส้นทางโจมตี ความได้เปรียบ และการป้องกันเฉพาะโปรโตคอล

อัปเดต

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

คำตอบโดยตรง

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

Grinding เป็นกลุ่มการโจมตี ในการบดบล็อกหรือ seed ผู้ผลิตเปลี่ยนเนื้อหาหรือบรรพบุรุษที่อนุญาตเมื่อแฮชผลลัพธ์ถูกใช้สร้างความสุ่มในอนาคต การบดคีย์สร้างคีย์จำนวนมากก่อนลงทะเบียนและเก็บเฉพาะตัวตนที่มีสิทธิ์เหมาะสม ส่วนการเปิดเผยแบบเลือกจะระงับหรือเผยแพร่ commitment, reveal, ลายเซ็น หรือบล็อกหลังทราบผลต่อ seed แล้ว

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

เส้นทางการโจมตีและวิเคราะห์

  1. ตรึงกฎการเลือก บันทึกเครือข่าย เวอร์ชัน epoch หรือรอบ snapshot ของ Stake การสร้าง seed การทดสอบสิทธิ์ fork choice รางวัล และบทลงโทษ
  2. แจกแจงตัวเลือกของฝ่ายตรงข้าม รวมคีย์ก่อนลงทะเบียน ลำดับธุรกรรมที่ถูกต้อง ฟิลด์เสริม parent ผู้สมัคร การเผยแพร่ reveal และการยกเลิก โดยสนใจเฉพาะสิ่งที่เปลี่ยนสถานะหรือ seed ที่ยอมรับ
  3. วัดงบการค้นหา ประเมินจำนวนผู้สมัครก่อนกำหนด ความเป็นอิสระ และต้นทุนการคำนวณ รางวัลที่เสีย เงินฝาก ความล่าช้า หรือการกระทำที่ถูก slash ได้
  4. เชื่อม seed กับอำนาจในอนาคต ระบุระยะล่วงหน้าในการเลือก proposer หรือคณะกรรมการ ผู้โจมตีเห็นผลก่อน commit หรือไม่ และผลที่ดีเปิดโอกาส grinding ใหม่หรือไม่
  5. ประเมินการยอมรับและการสะสม ผู้สมัครต้องผ่านกฎการเปลี่ยนสถานะ เวลา ลายเซ็น และ fork choice สร้างแบบจำลองที่มีสถานะ ไม่สมมติว่าทุกรอบเป็นอิสระ
  6. ทดสอบการป้องกันแต่ละชนิด Seed หน่วงเวลา, VRF, กฎลงทะเบียน, บทลงโทษ, threshold beacon และฟังก์ชันหน่วงเวลาที่ตรวจสอบได้รองรับความสามารถและสมมติฐานต่างกัน

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

ตัวอย่างคำนวณ

สมมติโปรโตคอลอย่างง่ายให้ผู้โจมตีมีโอกาส 10% เป็น proposer คนถัดไป หากมี seed คงที่หนึ่งค่า โอกาสคือ 0.10 แต่ข้อบกพร่องทำให้ประเมิน seed ที่ถูกต้องและเป็นอิสระ 20 ค่าแทบไม่มีต้นทุน แล้วเลือกเผยแพร่หนึ่งค่า

โอกาสที่อย่างน้อยหนึ่งค่าจะเลือกผู้โจมตีคือ 1 - (1 - 0.10)^20 หรือประมาณ 87.8% ไม่ได้แปลว่าผู้โจมตีถือ Stake 87.8% แต่โปรโตคอลเผลอให้จับสลาก 20 ครั้งและเลือกหลังเห็นผล

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

การป้องกันและรายการตรวจสอบ

การสร้างความสุ่ม

  • สร้างความสุ่มจากอินพุตที่ commit ก่อนผู้เข้าร่วมจะรู้หรือควบคุมการมอบหมายได้
  • แยกเวลาของส่วนร่วม commitment, reveal และการใช้ เพื่อไม่ให้ผู้นำค้นหา seed ของผู้สืบทอดได้ราคาถูก
  • คำนึงถึงผู้เปิดเผยคนสุดท้าย เพราะ commit-reveal ยังถูกบิดเบือนได้หากการระงับเปิดทางให้เลือกผล
  • ใช้ threshold หรือ distributed beacon พร้อมสมมติฐานชัดเจนเรื่องความซื่อสัตย์ liveness การกู้คืน และสมาชิก

สิทธิ์และตัวตน

  • ผูกคีย์ VRF และ Stake กับ snapshot ก่อนรู้ seed มิฉะนั้นการสร้างคีย์ออฟไลน์จะเป็น key grinding
  • แยกโดเมนตาม chain เวอร์ชัน รอบ บทบาท และวัตถุประสงค์เพื่อป้องกันการใช้หลักฐานข้ามบริบท
  • ใช้สิทธิ์แบบส่วนตัวเมื่อเหมาะสม โดยเข้าใจว่าลดการเล็งเป้าล่วงหน้าแต่ไม่แก้ seed ที่มีอคติ
  • จำกัดการเปลี่ยนตัวตนราคาถูก และกำหนดการเข้าร่วมของ Stake ที่มอบหมาย pool และ validator set ที่เปลี่ยนไป

เศรษฐศาสตร์และการดำเนินงาน

  • ประเมินบล็อกและรางวัลที่เสีย เงินทุนที่ล็อก equivocation ที่ตรวจพบ และโทษสัมพันธ์ อย่าเรียกทุกตัวเลือกที่ชอบด้วยกฎว่า slashable
  • เฝ้าดูส่วนร่วม reveal ที่ล้มเหลว ผู้สมัครผิดปกติ ความถี่ proposer และความหลากหลายซอฟต์แวร์ในช่วงที่มีนัยสำคัญ
  • แยกความสุ่มสำคัญจาก builder, relay หรือการเรียงธุรกรรมตามดุลพินิจ เว้นแต่พิสูจน์แล้วว่าไม่เป็นอันตราย
  • ทดสอบ fallback กลไกที่ไร้อคติเฉพาะเมื่อทุกฝ่ายตอบอาจแลกด้วยความล้มเหลวด้าน liveness

ความเข้าใจผิดที่พบบ่อย

  • แฮชสุ่ม จึง grinding ไม่ได้ แฮชที่คาดเดาไม่ได้สำหรับอินพุตคงที่ยังถูกบิดเบือนได้เมื่อเลือกจากหลายอินพุต
  • VRF กำจัด grinding ทั้งหมด มันพิสูจน์เอาต์พุต แต่คีย์ seed เวลาลงทะเบียน และการเผยแพร่แบบเลือกยังเป็นคนละปัญหา
  • Commit-reveal ไร้อคติโดยอัตโนมัติ ผู้เข้าร่วมคนสุดท้ายอาจเลือกระหว่าง reveal กับยกเลิกหากไม่ทำให้ตัวเลือกนี้เป็นกลาง
  • ต้องมี Stake ส่วนใหญ่ ส่วนน้อยที่ได้ลองราคาถูกหลายครั้งเพิ่มโอกาสได้ แต่ความล้มเหลวด้านความปลอดภัยต้องมีเงื่อนไขอื่น
  • การเสนอหลายครั้งติดกันพิสูจน์การบิดเบือน ความสุ่มทำให้เกิดชุดต่อเนื่อง จึงต้องมีแบบจำลองสถิติและหลักฐานเทคนิค
  • Grinding กับ nothing at stake เหมือนกัน อย่างแรกบิดเบือนความสุ่มหรือสิทธิ์ อย่างหลังเกี่ยวกับแรงจูงใจให้สนับสนุนประวัติที่แข่งขันกัน

หัวข้อที่เกี่ยวข้อง

แหล่งข้อมูล

การนำทาง

ค้นหาในวิกิ...