รูปแบบลายเซ็นดั้งเดิมของ Schnorr ได้รับผลกระทบจากการโจมตีคีย์ที่เกี่ยวข้อง (RKA) ตามที่อธิบายไว้ โมริตะและคณะ. ผู้เขียนบทความนี้จึงแนะนำให้แก้ไขอัลกอริทึมลายเซ็นเพื่อป้องกัน RKA ดังนี้:
- ชุด $\psi \ลูกศรซ้าย g^x$, ที่ไหน $x$ เป็นคีย์ส่วนตัว (การเซ็นชื่อ) สำหรับโครงร่าง
- ตั้งค่าแฮชความท้าทายเป็น $h \leftarrow H(M || r || \psi)$.
ขั้นตอนที่สองข้างต้นแตกต่างจากโครงร่าง Schnorr ดั้งเดิม (ที่นี่) ที่ต้องการเท่านั้น $h \leftarrow H(r || M)$.
การปรับเปลี่ยนนี้สมเหตุสมผล แต่บทความโดย Morita และคณะ พูดว่า (ในหน้า 9):
"โปรดทราบว่าขั้นตอนที่สองของอัลกอริทึมการลงนาม การคำนวณของ $\psi \ลูกศรซ้าย g^x$ไม่ควรเปลี่ยนแปลงเพื่อใช้คีย์การยืนยันเพียงอย่างเดียว $y$ เช่น $\psi$."
ผู้เขียนไม่ได้อธิบายว่าทำไม $y$ (รหัสสาธารณะ / การยืนยัน) ไม่สามารถใช้แทนได้ $\psi$แม้ว่าจะมีค่าเท่ากันทุกประการ - มีเหตุผลสำหรับเรื่องนี้หรือไม่?
สิ่งที่ทำให้สับสนมากยิ่งขึ้นคือการเพิ่ม Schnorr ลงใน Bitcoin ใน Taproot soft fork นักพัฒนา Bitcoin Core ได้เขียนการใช้งานของตนเองสำหรับลายเซ็น Schnorr (ตามที่อธิบายไว้ใน BIP340) รวมถึงการบรรเทาผลกระทบสำหรับ RKA อย่างไรก็ตามใน BIP340 พวกเขาตัดสินใจใช้ $y$ ในการแฮชโอเวอร์ความท้าทาย $\psi$ขัดกับคำแนะนำจากก่อนหน้านี้
การใช้งานนี้ผิดหรือไม่?