กันกระสุนเป็นข้อโต้แย้งสั้นๆ เกี่ยวกับความรู้ที่ไม่มีความรู้ ซึ่งไม่จำเป็นต้องมีการตั้งค่าที่เชื่อถือได้ ระบบอาร์กิวเมนต์เป็นระบบพิสูจน์ที่มีความถูกต้องในการคำนวณ
กันกระสุนเหมาะสำหรับการพิสูจน์ข้อความเกี่ยวกับค่าที่กระทำ เช่น การพิสูจน์ช่วง ซัฟเฟิลที่ตรวจสอบได้ วงจรเลขคณิต ฯลฯ โดยอาศัยสมมติฐานลอการิทึมแบบไม่ต่อเนื่อง และถูกทำให้ไม่สามารถโต้ตอบได้โดยใช้การวิเคราะห์พฤติกรรมของ Fiat-Shamir
อัลกอริธึมหลักของ Bulletproofs คืออัลกอริธึมผลิตภัณฑ์ภายในที่นำเสนอโดย Groth [2] อัลกอริธึมให้ข้อโต้แย้งเกี่ยวกับความรู้เกี่ยวกับข้อผูกพันเวกเตอร์ Pedersen ที่มีผลผูกพันสองข้อที่ตอบสนองความสัมพันธ์ของผลิตภัณฑ์ภายในที่กำหนด ระบบกันกระสุนสร้างขึ้นจากเทคนิคของ Bootle และคณะ [3] เพื่อแนะนำการพิสูจน์ผลิตภัณฑ์ภายในที่มีประสิทธิภาพในการสื่อสารซึ่งจะช่วยลดความซับซ้อนในการสื่อสารโดยรวมของการโต้แย้งให้เหลือเพียงเท่านั้น ที่ไหน คือมิติของเวกเตอร์สองตัวของพันธะ
กันกระสุนนำเสนอแนวทางปฏิบัติสำหรับการดำเนินการพิสูจน์ในระยะสั้นและสรุปรวมได้ พวกเขาเข้ารหัสการพิสูจน์ช่วงของจำนวนที่กำหนดในผลคูณภายในโดยใช้พหุนาม การพิสูจน์ช่วงคือการพิสูจน์ว่าค่าลับอยู่ในช่วงเวลาหนึ่ง การพิสูจน์ช่วงจะไม่ทำให้ข้อมูลใดๆ เกี่ยวกับค่าลับรั่วไหล นอกเหนือจากข้อเท็จจริงที่ว่ามันอยู่ในช่วงเวลา
อัลกอริธึมการพิสูจน์สามารถร่างออกมาได้ใน 5 ขั้นตอน:
อนุญาต เป็นค่าใน และ เวกเตอร์บิตแบบนั้น - ส่วนประกอบของ เป็นเลขฐานสองของ - เราสร้างเวกเตอร์เสริม และต้องการสิ่งนั้น ถือ
- ที่ไหน และ มองไม่เห็นคำมั่นสัญญาของ Pedersen และ -
- ผู้ตรวจสอบส่งการท้าทาย และ เพื่อแก้ไข และ -
- ที่ไหน และ เป็นข้อผูกพันต่อค่าสัมประสิทธิ์ ของพหุนาม สร้างจากค่าที่มีอยู่ในโปรโตคอล
-
- ผู้ตรวจสอบท้าทาย Prover ด้วยคุณค่า -
- Prover ส่งข้อผูกพันหลายประการที่ผู้ตรวจสอบจะตรวจสอบ
ดู Prover.hs สำหรับรายละเอียดการใช้งาน
การโต้ตอบที่อธิบายไว้นั้นทำให้ไม่มีการโต้ตอบโดยใช้ Fiat-Shamir Transform โดยที่ความท้าทายแบบสุ่มที่ทำโดย V จะถูกแทนที่ด้วยแฮชของการถอดเสียงจนถึงจุดนั้น
ขนาดของปรู๊ฟจะลดลงอีกโดยใช้ประโยชน์จากขนาดกะทัดรัด หลักฐานผลิตภัณฑ์ภายใน
อาร์กิวเมนต์ผลิตภัณฑ์ภายในในโปรโตคอลช่วยให้สามารถพิสูจน์ความรู้เกี่ยวกับเวกเตอร์ได้ และ ซึ่งมีผลิตภัณฑ์ภายในอยู่ และความมุ่งมั่น คือความมุ่งมั่นของเวกเตอร์สองตัวนี้ เราจึงสามารถแทนที่การส่ง ( ) โดยมีการโอน ( ) และการดำเนินการอาร์กิวเมนต์ผลิตภัณฑ์ภายใน
แล้วแทนที่จะแบ่งปัน และ ซึ่งมีต้นทุนการสื่อสารอยู่ที่ องค์ประกอบอาร์กิวเมนต์ผลิตภัณฑ์ภายในส่งเท่านั้น องค์ประกอบ โดยรวมแล้วสุภาษิตส่งเท่านั้น องค์ประกอบกลุ่มและ 5 องค์ประกอบใน
เราสามารถสร้างหลักฐานเดียวสำหรับช่วงของค่าหลายค่า ในขณะที่ต้องเสียค่าพื้นที่เพิ่มเติมเพียงเท่านั้น สำหรับ ค่าเพิ่มเติม ซึ่งตรงข้ามกับตัวประกอบการคูณของ เมื่อสร้าง การพิสูจน์ช่วงอิสระ
การพิสูจน์ช่วงรวมใช้อาร์กิวเมนต์ผลิตภัณฑ์ภายใน มันใช้ ( ) องค์ประกอบกลุ่มและ 5 องค์ประกอบใน -
ดูตัวอย่างการพิสูจน์หลายช่วง
หลักฐานช่วงเดียว
นำเข้า Data.Curve.Weierstrass.SECP256K1 (Fr) นำเข้า Bulletproofs.RangeProof ที่ผ่านการรับรองเป็น RPimport Bulletproofs.Utils (กระทำ) testSingleRangeProof :: Integer -> (Fr, Fr) -> IO BooltestSingleRangeProof upperBound (v, vBlinding) = ให้ vCommit = กระทำ v vBlinding - สุภาษิต proofE <- runExceptT (RP.generateProof upperBound (v, vBlinding)) -- ตัวตรวจสอบกรณี proofE ของ Left err -> panic (แสดงข้อผิดพลาด) Right [email protected]{..} -> pure (RP.verifyProof upperBound vCommit proof )
หลักฐานหลายช่วง
นำเข้า Data.Curve.Weierstrass.SECP256K1 (Fr) นำเข้า Bulletproofs.MultiRangeProof ที่ผ่านการรับรองเป็น MRPimport Bulletproofs.Utils (กระทำ) testMultiRangeProof :: Integer -> [(Fr, Fr)] -> IO BooltestMultiRangeProof upperBound vsAndvBlindings = ให้ vCommits = fmap ( การกระทำที่ไม่แน่นอน) vsAndvBlindings -- สุภาษิต proofE <- runExceptT (MRP.generateProof upperBound vsAndvBlindings) -- ตัวตรวจสอบกรณี proofE ของ Left err -> panic (แสดงข้อผิดพลาด) Right [email protected]{..} -> pure (MRP.verifyProof upperBound vCommits proof)
โปรดทราบว่าขอบเขตบน จะต้องเป็นเช่นนั้น , ที่ไหน ยังเป็นกำลังของ 2 เช่นกัน การใช้งานนี้ใช้เส้นโค้งวงรี secp256k1 ซึ่งเป็นเส้นโค้ง Koblitz ซึ่งมีความปลอดภัย 128 บิต ดูตัวอย่างการพิสูจน์ช่วงสำหรับรายละเอียดเพิ่มเติม
วงจรเลขคณิตเหนือสนามและตัวแปร เป็นกราฟอะไซคลิกแบบกำกับซึ่งมีจุดยอดเรียกว่าเกต
วงจรเลขคณิตสามารถอธิบายอีกวิธีหนึ่งเป็นรายการประตูการคูณพร้อมชุดสมการความสอดคล้องเชิงเส้นที่เกี่ยวข้องกับอินพุตและเอาต์พุตของเกต วงจรใดๆ ที่อธิบายว่าเป็นกราฟอะไซคลิกสามารถแปลงเป็นคำอธิบายทางเลือกนี้ได้อย่างมีประสิทธิภาพ
Bulletproofs นำเสนอโปรโตคอลเพื่อสร้างอาร์กิวเมนต์ความรู้เป็นศูนย์สำหรับวงจรเลขคณิตโดยใช้อาร์กิวเมนต์ผลคูณภายในซึ่งช่วยให้ได้รับการพิสูจน์ขนาด องค์ประกอบและรวมค่าที่คอมมิตเป็นอินพุตของวงจรเลขคณิต
ในระเบียบการ สุภาษิตพิสูจน์ว่าผลิตภัณฑ์ฮาดามาร์ดของ และ และชุดของข้อจำกัดเชิงเส้นคงอยู่ ค่าอินพุต ที่ใช้ในการสร้างหลักฐานจะถูกส่งมอบและแบ่งปันกับผู้ตรวจสอบ
import Data.Curve.Weierstrass.SECP256K1 (Fr)import Data.Field.Galois (rnd)import Bulletproofs.ArithmeticCircuitimport Bulletproofs.Utils (hadamard, commit)-- ตัวอย่าง:-- ข้อจำกัดเชิงเส้น 2 ข้อ (q = 2):-- aL [0] + อัล[1] + อัล[2] + อัล[3] = v[0]-- aR[0] + aR[1] + aR[2] + aR[3] = v[1]---- ข้อจำกัดการคูณ 4 แบบ (โดยนัย) (n = 4):-- aL[ 0] * aR[0] = aO[0]-- aL[1] * aR[1] = aO[1]-- aL[2] * aR[2] = aO[2]-- aL[3] * aR[3] = aO[3]---- 2 ค่าอินพุต (m = 2)arithCircuitExample :: ArithCircuit FrarithCircuitExample = ArithCircuit { น้ำหนัก = GateWeights { wL = [[1, 1, 1, 1] ,[0, 0, 0, 0]] , WR = [[0, 0, 0, 0] ,[1, 1, 1, 1]] , ว = [[0, 0, 0, 0] ,[0, 0, 0, 0]] - , ความมุ่งมั่นน้ำหนัก = [[1, 0] ,[0, 1]] , ซีเอส = [0, 0] }testArithCircuitProof :: ([Fr], [Fr]) -> ArithCircuit Fr -> IO BooltestArithCircuitProof (aL, aR) arithCircuit = do ให้ m = 2 -- ข้อจำกัดการคูณ ให้ aO = aL `hadamard` aR -- ข้อจำกัดเชิงเส้น v0 = ผลรวมอัล v1 = ผลรวม aR commitBlinders <- จำลอง M m rnd ให้ความมุ่งมั่น = zipWith กระทำ [v0, v1] commitBlinders ให้ arithWitness = ArithWitness { การมอบหมาย = การมอบหมาย aL aR aO , ข้อผูกพัน = ข้อผูกพัน , commitBlinders = คอมมิตบลินเดอร์ - พิสูจน์ <- GenerateProof arithCircuit arithWitness บริสุทธิ์ (ตรวจสอบข้อผูกพันพิสูจน์หลักฐาน arithCircuit)
ดูตัวอย่างวงจร Aritmetic สำหรับรายละเอียดเพิ่มเติม
อ้างอิง :
Bunz B., Bootle J., Boneh D., Poelstra A., Wuille P., Maxwell G. "กันกระสุน: หลักฐานสั้นๆ สำหรับการทำธุรกรรมที่เป็นความลับและอื่นๆ" สแตนฟอร์ด, ยูซีแอล, บล็อกสตรีม, 2017
Groth J. "พีชคณิตเชิงเส้นพร้อมอาร์กิวเมนต์ความรู้เป็นศูนย์ย่อยเชิงเส้น" มหาวิทยาลัยคอลเลจลอนดอน, 2552
Bootle J., Cerully A., Chaidos P., Groth J, Petit C. "อาร์กิวเมนต์ Zero-Knowledge ที่มีประสิทธิภาพสำหรับวงจรเลขคณิตในการตั้งค่าบันทึกแบบไม่ต่อเนื่อง" มหาวิทยาลัยคอลเลจลอนดอน และมหาวิทยาลัยออกซ์ฟอร์ด 2559
สัญกรณ์ :
: ผลิตภัณฑ์ฮาดามาด
:สินค้าภายใน
: เวกเตอร์
นี่คือโค้ดทดลองสำหรับโปรเจ็กต์ระดับการวิจัยเท่านั้น กรุณาอย่าใช้รหัสนี้ในการผลิตจนกว่ารหัสจะครบกำหนดอย่างมีนัยสำคัญ
Copyright 2018-2022 Stephen Diehl Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.