หวังว่าจะตอบสนองคำเชิญของ @fgrieu ในความคิดเห็น ฉันลองคำตอบที่มาจากการใช้งานของ Monero ที่มาของคำเหล่านี้คือ cheatsheet ที่ฉันเขียน https://getmonero.org/library/RingsCheatsheet20210301.pdf ขณะเรียน https://www.getmonero.org/library/Zero-to-Monero-2-0-0.pdf
ฉันคิดว่าสิ่งที่ถูกต้องคือการเริ่มจากลายเซ็น Schnorr ที่ไม่โต้ตอบ (ในรสชาติของ Fiat-Shamir) สำหรับปุ่มเหนือเส้นโค้งวงรี มาสรุปกันอย่างรวดเร็ว
สมมติว่า $(x,X)$ คือคู่คีย์ส่วนตัว/สาธารณะ โดยที่ $X\triangleq xG$ กับ $G$ จุดกำเนิดของ EC; $tx$ เป็นธุรกรรม/ข้อความ/สิ่งใดก็ตามที่เราต้องเซ็น การลงนาม $tx$ กับ $x$ หมายถึงสามารถสร้างคู่ $(ค,ร)$ ดังนั้น:
$H(tx, rG + cX)=c$
ที่ไหน $H$ เป็นแฮช (ไม่ว่าที่นี่อันใด) และ $ค$ และ $r$ เรียกว่า "ความท้าทาย" และ "การตอบสนอง" โดยมีเงื่อนไขมาจากสคีมาแบบโต้ตอบ $ค$ ได้มาจากการสุ่มแบบลับเฉพาะ $\alpha$ มีเพียงผู้ลงนามเท่านั้นที่ทราบ และไม่เคยใช้ซ้ำในสองลายเซ็น และความเท่าเทียมกันข้างต้นเทียบเท่ากับ:
$rG + cX = \alpha G$
(btw โดยการแทนที่คุณจะได้รับวิธีการ $ค$ ถูกกำหนด ;))
ดังนั้นเมื่อมองจากมุมสูง เราสามารถพูดได้ว่าการตรวจสอบ $tx$ ลายเซ็นโดย $x$ เป็นฟังก์ชันของสิ่งที่ลงนาม คีย์สาธารณะ ความท้าทาย และการตอบสนอง:
$f(tx, X, r, c)$
Ring signatures นั้นเกี่ยวกับการค้นหารสชาติของ schema นี้ด้วยตัวล่อ ในขณะที่ยังคงรักษาผู้ลงนาม ACTUAL ไว้เพียงตัวเดียว (จากมุมมองทางเทคนิค: ต้องการหลายตัว $X_i$ - สมมติว่า $n$- ในการตรวจสอบ algo but single $x$ ในการลงลายมือชื่อด้วย); และทั้งหมดไม่มีการประสานงานระหว่างเจ้าของกุญแจที่เกี่ยวข้อง
มีความท้าทายและคำตอบสำหรับแต่ละคน $X_i$ดังนั้นเราจึงมี $c_i$ และ $r_i$อย่างไรก็ตามสิ่งต่าง ๆ จัด ดังนั้นจาก $c_i$ เราสามารถคำนวณได้ $c_{i+1}$, กับ "ล้น" เมื่อ $i=n$ (นี่คือ "แหวน") ดังนั้น:
$H(tx, r_{i}G + c_{i}X_{i})=c_{i+1}$ กับ $1 \le ฉัน \le n-1$
$H(tx, r_{n}G + c_{n}X_{n})=c_1$ กับ $i=n$
ให้เราสามารถถอยหลังจาก $c_n$ ถึง $c_1$ เงื่อนไขข้างต้นนำไปสู่ฟังก์ชั่นการตรวจสอบลายเซ็น:
$f(tx, X_i, r_i, c_1)$
แต่ "เวทมนตร์" มาจากไหน? เป็นอย่างไร การจัดเตรียม ทำให้มี $c_i$ สร้างห่วงโซ่แบบปิดซึ่งค่าความท้าทายหนึ่งค่าคุณสามารถคำนวณค่าอื่น ๆ ทั้งหมดได้ (โปรดทราบว่าเราได้เลือกแล้ว $c_1$ เป็นคนพิเศษ แต่จริงๆ แล้วไม่มีอะไรพิเศษเลย)?
ต้องขอบคุณข้อเท็จจริงเหล่านี้:
- ถ้าเราระบุว่าเป็น $c_\pi$ ความท้าทายที่เกี่ยวข้องกับผู้ลงนามจริง $c_{\pi+1}$ คำนวณจากความลับแบบสุ่ม $\alpha$ รู้จักเฉพาะผู้ลงนามจริงเท่านั้น (จำอะไรได้บ้าง ;) );
- อื่น ๆ ทั้งหมด $c_i$ คำนวณด้วยสูตรลูกโซ่ด้านบน
- ทั้งหมด $r_i$ เป็นเพียงตัวเลขสุ่ม ยกเว้น $r_\pi$ ซึ่งเลือกที่จะปล่อยให้ $c_{\pi+1}$ ให้เคารพสูตรลูกโซ่ด้วย (แม้จะมาจาก $\alpha$)
และในที่สุดก็มาถึงคีย์อิมเมจ $X^*$! ส่วนหนึ่งจากการลงโฆษณาในการทำธุรกรรมเพื่อป้องกันการใช้จ่ายซ้ำซ้อนก็เป็นส่วนหนึ่ง $c_i$ แคลคูลัสและอีกครั้ง $\alpha$ใช้เคล็ดลับสูตร / chain: และจะเก็บเฉพาะเมื่อ Key Image $X^*$ ได้มาด้วยวิธีเฉพาะเจาะจงมาก ฟังก์ชันของคีย์ส่วนตัวและคีย์สาธารณะของผู้ลงนาม ACTUAL
นั่นเป็นเหตุผลที่คุณไม่สามารถเลือกอันที่ยังไม่ได้ใช้งานแบบสุ่มได้!
ฉันเข้าใจว่านี่เป็นเพียงบรรทัดหลักในการให้เหตุผล ไม่มีรายละเอียดมากมาย แต่ฉันหวังว่าคุณจะสามารถหาได้ใน cheatsheet ด้วยความช่วยเหลือจากคำเสริมเหล่านี้ (ฉันเดาว่าสำหรับความต้องการของคุณ คุณสามารถสนใจเฉพาะ "ไม่โต้ตอบ (Fiat -Shamir) Schnorr, "SAG" และ "bLSAG")