พิจารณาการจับคู่ $\mathbb{e}: \mathbb{G}_1\times \mathbb{G}_2\longrightarrow \mathbb{G}_T$ ด้วยเครื่องปั่นไฟ $g_1$, $g_2$ สำหรับ $\mathbb{G}_1$, $\mathbb{G}_2$ ตามลำดับ กลุ่ม $\mathbb{G}_1$, $\mathbb{G}_2$, $\mathbb{G}_T$ เป็นคำสั่งที่สำคัญบางอย่าง $p$.
สำหรับประตูกล $s$, อนุญาต $[g_1,g_1^s,\cdots,g_1^{s^N}], [g_2,g_2^s,\cdots,g_2^{s^N}]$ เป็นสตริงอ้างอิงทั่วไป (แม้ว่าสำหรับ Snarks และโครงร่างข้อผูกมัดพหุนามบางชุด พารามิเตอร์สาธารณะจะไม่มี $g_2^{s^i}$ สำหรับ $i\geq 2$).
กำหนดองค์ประกอบ $a,b\in \mathbb{G}_1$ฉันต้องการพิสูจน์ใน ZK ว่าฉันรู้ค่าคงที่ (ตรงข้ามกับพหุนามดีกรีใหญ่) $\alpha$ ดังนั้น $a^{\alpha} = b$. วิธีที่มีประสิทธิภาพที่สุดในการทำเช่นนี้คืออะไร?
ฉันมีความคิดสองสามข้อ:
แนวคิดที่ 1:
สำหรับองค์ประกอบที่สร้างขึ้นแบบสุ่ม $a_2\in \mathbb{G}_2$ (ความท้าทาย) Prover ส่งองค์ประกอบ $b_2:= a_2^{\alpha}$.
Verifier ทำการตรวจสอบการจับคู่ $\mathbb{e}(a,b_2) = \mathbb{e}(a_2,b)$
ไอเดียที่ 2
Prover พิสูจน์ด้วยความรู้ที่เป็นศูนย์ว่าเขารู้พหุนาม $ฉ(X)$ ดังนั้น $a^{f(s)} = b$ (มีวิธีง่ายๆ ในการทำเช่นนี้ ไม่ต่างจากโปรโตคอลของ Schnorr สำหรับ PoK ของบันทึกแยก)
Prover ส่งองค์ประกอบ $b_2:= g_2^{s^N\cdot \alpha}$ (ซึ่งเป็นไปไม่ได้หาก $\alpha = f(s)$ สำหรับพหุนามที่ไม่คงที่บางตัว $ฉ(X)$).
ผู้ตรวจสอบยืนยันหลักฐานที่ส่งในขั้นตอนที่ 1
Verifier ทำการตรวจสอบการจับคู่ $\mathbb{e}(a,b_2) = \mathbb{e}(b,g_2^{s^N}) $
มีโปรโตคอลที่มีประสิทธิภาพมากกว่านี้ที่จะทำงานนี้หรือไม่? ฉันไม่ชอบความคิดที่จะพึ่งพาอัลกอริธึมการแฮชที่สร้างองค์ประกอบแบบสุ่มของกลุ่ม $\mathbb{G}_2$ เป็นความท้าทาย