ข้อจำกัดความรับผิดชอบ: ฉันไม่มีหลักฐานความปลอดภัยสำหรับโครงการนี้ คำติชมยินดีต้อนรับ
เพื่อให้สัญกรณ์ง่ายขึ้น ฉันเรียกคู่คีย์ทั้งสอง (ส่วนตัวและสาธารณะ) $(a, A = a\cdot G)$ และ $(b, B = b\cdot G)$ บนจุดฐาน $G$. ตัวพิมพ์เล็กคือสเกลาร์ ตัวพิมพ์ใหญ่คือจุด EC $H_s()$ หมายถึงแฮชและลด (mod คำสั่งของ $G$) เป็นสเกลาร์ การดำเนินการทั้งหมดระหว่างสเกลาร์ (เช่น การลบและการคูณ) เป็นคำสั่งของ mod $G$.
ก่อนอื่นให้ประกาศ $D = a\cdot b\cdot G$.
อนุญาต $m = H_s(\text{"กำลังเซ็นข้อความ"})$ เป็นข้อความแบบครั้งเดียวที่จะป้องกันการนำลายเซ็นนี้ไปใช้ซ้ำในบริบทต่างๆ
เพื่อพิสูจน์ $D$ สร้างอย่างถูกต้องจริงๆ ใช้ลายเซ็น Schnorr แบบขยาย:
ลายเซ็นเป็น $(ง, ค, ร)$ ที่ไหน $k$ เป็นสเกลาร์แบบสุ่ม $c = H_s(m \mathbin\| k\cdot G \mathbin\| k\cdot B)$ และ $r = k - c\cdot a$.
ลายเซ็นถูกตรวจสอบโดยการตรวจสอบ $c \overset{?}{=} H_s(m \mathbin\| r\cdot G + c\cdot A \mathbin\| r\cdot B + c\cdot D)$ และโดยการตรวจสอบ $D$ เป็นจุดที่ถูกต้องและไม่ใช่จุดที่ไม่มีที่สิ้นสุด
สิ่งนี้พิสูจน์ได้ว่าทั้งสองอย่าง $a$ เป็นที่รู้จักและนั่น $a$ เป็นทั้งคีย์ส่วนตัวของจุด $A$ ที่จุดกำเนิด $G$และยังเป็นคีย์ส่วนตัวของจุด $D$ ที่จุดกำเนิด $B$. ดังนั้น $D$ ได้รับการพิสูจน์แล้วว่า $a\cdot b\cdot G$.
สุดท้าย เราต้องสร้างลายเซ็นที่สองเพื่อพิสูจน์ว่ามีคนรู้ทั้งสองอย่าง $a$ และ $ข$. เราสามารถทำได้โดยการพิสูจน์ความรู้ของคีย์ส่วนตัวของจุด $D$ บนจุดฐาน $G$ (จึงเป็นการพิสูจน์ความรู้ของ $a\cdotข$).
ลายเซ็นเป็น $(c', r')$ ที่ไหน $k'$ เป็นสเกลาร์แบบสุ่ม $c' = H_s(m \mathbin\| k'\cdot G)$ และ $r' = k' - c'\cdot a\cdot b$.
ลายเซ็นถูกตรวจสอบโดยการตรวจสอบ $c' \overset{?}{=} H_s(m \mathbin\| r'\cdot G + c'\cdot D)$.
ถ้าอลิซสมรู้ร่วมคิดกับอีฟโดยที่อีฟไม่เปิดเผย $ข$อลิซจะต้องเปิดเผยรหัสส่วนตัวของเธอ $a$ ถึงอีฟ ความรู้ของ $k'$ โดย colluder ทั้งสองจะอนุญาตให้ colluder นั้นคำนวณคีย์ส่วนตัวของ colluder อื่น ความปลอดภัยของแผนการนี้ขึ้นอยู่กับว่าอลิซไม่สามารถสมรู้ร่วมคิดกับอีฟในทางคณิตศาสตร์ได้ในทางคณิตศาสตร์ $r'$ เพื่อให้อลิซหรืออีฟสามารถกำหนดคีย์ส่วนตัวของอีกฝ่ายในทางคณิตศาสตร์ได้
ลายเซ็นโดยรวมจึงเป็น $(ง, ค, ร, ค', ร')$ และคือ $5\cdot 32 = 160$ ไบต์