MACI: กรอบต่อต้านการสมรู้ร่วมคิดในการกำกับดูแลแบบออนไลน์
Eric Zhang
Architect @DoraFactory @DoraHacks
สำหรับเบื้องหลังของบทความนี้ โปรดดูที่ "Quadratic Voting and Quadratic Funding" (https://matataki.io/p/6113) หนึ่งเดือนหลังจากการเผยแพร่บทความนี้ มูลนิธิ BSC ได้เปิดตัวรอบแรกของการระดมทุนกำลังสองสำหรับระบบนิเวศ BSC (https://hackerlink.io/grant) บนแพลตฟอร์มนักพัฒนา DoraHacks HackerLink และในอีก 15 วันต่อมาก็ได้รับโครงการ ส่งโดยทีมนักพัฒนามากกว่า 60 ทีมทั่วโลก
ใน "Quadratic Voting and Quadratic Funding" ฉันได้แนะนำสามประเด็นที่กล่าวถึงในบล็อกของ Vitalik "Quadratic Payments": Identity Bribery, Colllusion, Rational Ignore Ignorance) ปัญหาทั้งสามนี้ไม่ได้จำกัดเฉพาะการลงคะแนนแบบควอดราติคเท่านั้น แต่เป็นปัญหาทั่วไปที่พบโดยกลไกการกำกับดูแลแบบออนไลน์ ดังนั้น การแก้ปัญหาเหล่านี้ไม่เพียงทำให้การลงคะแนนแบบควอดราติกปรับขนาดได้และปลอดภัยมากขึ้นเท่านั้น แต่ยังเป็นประโยชน์ต่อกลไกการกำกับดูแลแบบออนไลน์อีกด้วย
เป้าหมายของบทความนี้คือเพื่อเตรียมพร้อมสำหรับการออกแบบกลไก "การลงคะแนนกำลังสองแบบไม่ให้ความร่วมมือ" หรือ "การลงคะแนนกำลังสองแบบป้องกันการสมรู้ร่วมคิด" ในสถานการณ์นี้ ผู้มีสิทธิเลือกตั้งไม่สามารถร่วมมือกันได้ ดังนั้นจึงไม่มีความเป็นไปได้ที่จะเกิดการสมรู้ร่วมคิด กรอบพื้นฐานของกลไกนี้คือบทความ "โครงสร้างพื้นฐานต่อต้านการสมรู้ร่วมคิดขั้นต่ำ" [1] (MACI) เผยแพร่โดย Vitalik Buterin บน Ethresear ดังนั้น ก่อนอื่นเราจะอธิบายกลไกของ MACI เพื่อสำรวจเพิ่มเติมเกี่ยวกับวิธีการใช้ MACI เพื่อปรับปรุงการลงคะแนนแบบกำลังสองและกำจัดความเป็นไปได้ของการสมรู้ร่วมคิด
MACI: Minimal Anti-Collusion Infrastructure
MACI คือ "Minimization Anti-collusion Framework" สำหรับวัสดุพื้นหลัง โปรดดูบล็อกของ Vitalik Buterin https://ethresear.ch/t/minimal-anti-collusion-infrastructure/5413 และ "On Colllusion" https://vitalik.ca/general/2019/04/03/collusion .html
ติดตั้ง
ติดตั้ง
สมมติว่ามีสัญญาอัจฉริยะ \(R\) ที่มีรายการคีย์สาธารณะ\(K_1 ... K_n\),และฟังก์ชันที่จำเป็นบางอย่างในการลงทะเบียนคีย์สาธารณะเหล่านี้ในสัญญาอัจฉริยะ นอกจากนี้ เฉพาะรหัสสาธารณะของผู้เข้าร่วมที่ตรงตามเงื่อนไขสองข้อต่อไปนี้เพื่อยืนยันตัวตนเท่านั้นที่สามารถป้อน R:
บัญชีเป็นของผู้เข้าร่วม "ทางกฎหมาย" (บุคคลอิสระ สมาชิกของชุมชนบางแห่ง เช่น มีสัญชาติของประเทศใดประเทศหนึ่ง มีชื่อเสียงเพียงพอในฟอรัม ถือโทเค็นไม่น้อยกว่าจำนวนหนึ่ง .. )
คีย์ควบคุมส่วนตัวของเจ้าของบัญชี (เช่น พิมพ์เพื่อพิสูจน์ได้หากจำเป็น)
ผู้ใช้แต่ละคนจำเป็นต้องเดิมพันเงินจำนวนหนึ่ง: ถ้าใครทำรหัสส่วนตัวรั่วไหล ผู้ที่ได้รับรหัสส่วนตัวจะสามารถถอนเงินได้โดยตรง และบัญชีจะถูกลบออกจากรายการ กลไกนี้ขัดขวางไม่ให้ใครก็ตามมอบคีย์ส่วนตัวให้กับผู้อื่น
นอกจากนี้ สมมติว่ามีโอเปอเรเตอร์ (\(โอเปอเรเตอร์\)) ที่มีคีย์ส่วนตัว\(k_\omega\),และรหัสสาธารณะที่เกี่ยวข้อง\(K_\omega\).
สุดท้าย สมมติว่ามีกลไก\(M\),มันเป็นฟังก์ชั่น\(action^n \rightarrow Outputs\),ดำเนินการ
ดำเนินการ
เวลาเริ่มต้น \(T_{start}\), \(operator\) เริ่มสถานะจริง\(S_{start} = {i: (key=K_i, action = \phi)}, i \in 1...n\).
ระหว่างเวลาเริ่มต้น \(T_{start}\) และเวลาสิ้นสุด \(T_{end}\) ผู้เข้าร่วมที่ลงทะเบียนสามารถส่งข้อความถึง R ด้วยการเข้ารหัสคีย์ส่วนตัว \(k\) ของผู้เข้าร่วมเอง ข้อความมีสองประเภท:
พฤติกรรมที่เห็นด้วย: เช่น การลงคะแนนเสียง ผู้เข้าร่วมจำเป็นต้องส่งข้อความที่เข้ารหัส\(enc(msg = (i, sign(msg = action, key = k_i)), pubkey = K_\omega)\),โดยที่ \(k_i\) คือคีย์ส่วนตัวปัจจุบันของผู้เข้าร่วม และ \(i\) คือรหัสของผู้เข้าร่วมใน \(R\)
Rekey: ผู้เข้าร่วมจำเป็นต้องส่งข้อความที่เข้ารหัส\(enc(msg = (i, sign(msg = NewK_i, key = k_i)), pubkey = K_\omega)\),โดยที่ \(NewK_i\) คือรหัสสาธารณะที่จะเปลี่ยนแปลงโดยผู้เข้าร่วม\(k_i\) คือคีย์ส่วนตัวปัจจุบันของผู้เข้าร่วมรายนี้
ในขณะนี้ งานของผู้ดำเนินการคือการประมวลผลแต่ละข้อความตามลำดับที่อัปโหลดไปยังเครือข่าย ขั้นตอนการประมวลผลเฉพาะ:
ถอดรหัสข้อความโดยใช้รหัสส่วนตัวของผู้ดำเนินการ หากการถอดรหัสล้มเหลว หรือข้อมูลที่สอดคล้องกับการถอดรหัสไม่สามารถถอดรหัสเป็นข้อมูลสองประเภทข้างต้นได้ ให้ข้ามข้อมูลนี้ไปโดยตรง
ใช้ \(state[i].key\) เพื่อตรวจสอบลายเซ็นของข้อความ
หากข้อความที่ถอดรหัสเป็นลักษณะการทำงานที่ตกลงไว้ (\(การกระทำ\)) ให้ตั้งค่า\(state[i] = action\),หากข้อความที่ถอดรหัสเป็นรหัสสาธารณะใหม่ ให้ตั้งค่า\(state[i].key = NewK_i\)
หลังจาก \(T_{end}\) ผู้ดำเนินการต้องประกาศสถานะเอาต์พุต\(M(state[1].action, ... , state[n].action)\),ในเวลาเดียวกัน ZK-SNARK ได้รับเพื่อพิสูจน์ว่าผลลัพธ์นี้เป็นผลลัพธ์ที่ถูกต้อง
เหตุใดกลไกนี้จึงต่อต้านการสมรู้ร่วมคิด
สมมติว่าผู้เข้าร่วมต้องการพิสูจน์สิ่งที่เขาทำ เช่น ทำ \(การกระทำ\) \(A\) เขาสามารถอ้างถึงธุรกรรมบนห่วงโซ่ได้\(enc(msg = (i, sign(msg = A, key = k_i)),pubkey = K_\omega)\) และให้หลักฐานที่ไม่มีความรู้เพื่อตรวจสอบว่าการทำธุรกรรมมีข้อมูลที่เข้ารหัสของ \(A\) จริงๆ อย่างไรก็ตาม เขาไม่สามารถพิสูจน์ได้ว่าเขาไม่ได้ส่งธุรกรรมอื่นๆ ตัวอย่างเช่น เขาอาจส่งธุรกรรมก่อนหน้านี้และแทนที่คีย์สาธารณะด้วย \(NewK_i\) ใหม่ ดังนั้นหลักฐานก่อนหน้านี้จึงไร้ความหมายเพราะหากเขาเปลี่ยน ที่สำคัญ เขาอาจจะทำอย่างอื่นไปแล้ว
เป็นไปได้ที่ผู้เข้าร่วมจะให้รหัสส่วนตัวแก่บุคคลอื่น แต่ในการทำเช่นนั้น บุคคลนั้นสามารถพยายามแก้ไขรหัสได้ทันทีเมื่อมี ในกรณีนี้ 1) มีอัตราความสำเร็จ 50% และ 2) ผู้ที่ได้รับกุญแจจะนำเงินฝากของเงินเดิมพันก่อนหน้าออกไปโดยตรง
ปัญหาที่ไม่ได้แก้ไขกับ MACI
ผู้รับขายคีย์ส่วนตัวในสภาพแวดล้อมฮาร์ดแวร์ที่เชื่อถือได้ หรือในกรณีของลายเซ็นหลายลายเซ็นที่เชื่อถือได้
คีย์ส่วนตัวดั้งเดิมถูกโจมตีในสภาพแวดล้อมฮาร์ดแวร์ที่เชื่อถือได้ ซึ่งจะป้องกันไม่ให้คีย์ส่วนตัวถูกเปลี่ยนเป็นคีย์ส่วนตัวใดๆ ที่ผู้โจมตีไม่ทราบล่วงหน้า
ในกรณีแรก สามารถใช้กลไกลายเซ็นที่ซับซ้อนที่ออกแบบมาเป็นพิเศษได้ และการออกแบบนี้ไม่เป็นมิตรกับฮาร์ดแวร์ที่เชื่อถือได้และหลายลายเซ็น อย่างไรก็ตาม การออกแบบนี้จำเป็นต้องตรวจสอบให้แน่ใจว่าฟังก์ชันการตรวจสอบนั้นเป็นมิตรกับ ZKP
กรณีที่สองสามารถแก้ไขได้ด้วย "การพิสูจน์แบบไม่มีความรู้แบบตัวต่อตัว" ตัวอย่างเช่น ผู้เข้าร่วมสามารถแยกรหัสส่วนตัวออกเป็น \(x + y = k_i\) เผยแพร่ \(X = x*G\) และ\(Y = y*G\),และแสดงตัวตรวจสอบสองซองที่มี \(x\) และ \(y\) ตัวตรวจสอบเปิดหนึ่งซอง ตรวจสอบว่า \(Y\) ที่ประกาศนั้นถูกต้อง แล้วตรวจสอบ\(X + Y = K_i\)。
การลงคะแนนแบบควอดราติคแบบไม่ให้ความร่วมมือ
กลไกนี้สามารถใช้เพื่อปรับปรุงกลไกการกำกับดูแลบนเครือข่ายต่างๆ รวมถึงการลงคะแนนเสียง ในการระดมทุนกำลังสอง การสมรู้ร่วมคิดกลายเป็นปัญหาที่ต้องแก้ไขเมื่อขนาดกลุ่มมีขนาดใหญ่มาก หรือเมื่อมีการใช้เงินทุนกำลังสองในสถานการณ์ที่ใหญ่ขึ้น (เช่น การเลือกตั้งทั่วไป การอนุมัติงบประมาณของรัฐสภา ฯลฯ) ดังนั้นการออกแบบกลไกการระดมทุนกำลังสองแบบต่อต้านการสมรู้ร่วมคิดจึงสามารถปรับขนาดเงินทุนกำลังสองได้
[1]Vitalik Buterin, Minimal anti-collusion infrastructure,
https://ethresear.ch/t/minimal-anti-collusion-infrastructure/5413


