เมื่อฉันเซ็นข้อความ/ธุรกรรม¹ ด้วยคีย์ส่วนตัว
และฉันได้รับข้อความ/ลายเซ็นการทำธุรกรรม¹
ที่สำคัญ มันใช้คู่คีย์สาธารณะ/ส่วนตัวที่แตกต่างกันในสองสิ่งนี้ คำถามที่เหลือไม่มีอะไรเกี่ยวกับข้อแรกในสองข้อนี้ ทุกอย่างเกี่ยวกับการตรวจสอบลายเซ็นในส่วนที่สองของสิ่งเหล่านี้ โดยเทียบกับรหัสสาธารณะของคู่รหัสสาธารณะ/ส่วนตัวที่ผู้ลงนามใช้ในสิ่งที่สองดังกล่าว รหัสสาธารณะดังกล่าวจะถือว่าพร้อมใช้งานสำหรับผู้ตรวจสอบ คีย์ส่วนตัวที่ตรงกันไม่ใช่
เมื่อใช้คู่คีย์ส่วนตัว/คีย์สาธารณะ ประเด็นของเทคโนโลยีคือคุณไม่สามารถทำวิศวกรรมย้อนกลับคีย์ส่วนตัวจากคีย์สาธารณะได้
ถูกต้อง. มีรายละเอียดมากกว่านี้เล็กน้อย: ด้วยคีย์สาธารณะ เป็นไปไม่ได้ที่จะดำเนินการสิ่งที่คีย์ส่วนตัวตั้งใจให้ดำเนินการ
อะไรคือความแตกต่างระหว่างการทำวิศวกรรมย้อนกลับระหว่างคีย์ส่วนตัวกับคีย์สาธารณะ และการตรวจสอบว่าต้องมีคีย์ส่วนตัวเพื่อสร้างลายเซ็นข้อความที่สอดคล้องกับคีย์สาธารณะ เป็นไปได้อย่างไร แต่ไม่ใช่อีกอันหนึ่ง
ลายเซ็นทำงานตามแผนภาพนี้:
และโดยก หนังสือเรียนที่ทันสมัย
- $1^n$ เข้ารหัสจำนวนเต็ม $n$ การกำหนดขนาดของคีย์ ในทางปฏิบัติ $n$ ได้รับการแก้ไขและเป็นสาธารณะ
- $(\mathrm{pk},\mathrm{sk})$ เป็นเอาต์พุตคู่คีย์สาธารณะ/ส่วนตัวโดยอัลกอริธึมการสร้างคีย์ $\mathrm{Gen}$. สันนิษฐานว่า $\mathrm{sk}$ ถูกเก็บเป็นความลับโดยเจ้าของคู่กุญแจที่ได้รับมอบหมายซึ่งส่วนใหญ่มักจะเป็นคนที่วิ่ง $\mathrm{Gen}$.
- $m$ เป็นข้อความที่จะลงนาม (บิตสตริงตามอำเภอใจ อาจบันทึกสำหรับข้อกำหนดด้านขนาด)
- $\sigma$ เป็นลายเซ็นของข้อความ ผลิตจาก $\mathrm{sk}$ และ $m$ โดยอัลกอริทึมลายเซ็น $\mathrm{เครื่องหมาย}$.
- $ข$ เป็นตัวบ่งชี้ความสมบูรณ์ซึ่งรับค่าใดค่าหนึ่งจากสองค่า ถูกต้อง หรือ ไม่ถูกต้อง. ผลิตจาก $\mathrm{pk}$, $m$ และ $\sigma$ โดยอัลกอริทึมการตรวจสอบ $\mathrm{Vrfy}$.
รูปแบบลายเซ็นถูกต้องเมื่อมีสิ่งต่าง ๆ ตามรูปวาด $ข$ อยู่เสมอ ถูกต้อง. มันปลอดภัย²เมื่อศัตรูให้มา $\mathrm{pk}$ และความสามารถในการรับ $\sigma_i$ สำหรับใดๆ $m_i$ เห็นสมควรไม่สามารถจัดแสดงได้ $(m,\sigma)$ คู่กับ $\mathrm{Vrfy}(\mathrm{pk},m,\sigma)$ ถูกต้อง, และ $m\ne m_i$ สำหรับใดๆ $i$. มีรายละเอียดทางเทคนิคเพิ่มเติมเล็กน้อย
น่าแปลกใจที่มีรูปแบบลายเซ็นที่ถูกต้องและปลอดภัย การประดิษฐ์นั้นใช้เวลานานในการสร้าง แต่ก็ไม่น่าแปลกใจมากไปกว่าความเป็นไปได้ของการเข้ารหัสคีย์สาธารณะ หากคนส่วนใหญ่ใส่ใจในการทำความเข้าใจ ใช้ ของลายเซ็น ตัวเลือกคือการยอมรับว่ามีรูปแบบลายเซ็นดังกล่าว
อีกทางเลือกหนึ่งคือการศึกษาอย่างใดอย่างหนึ่ง ฉันแนะนำ ลายเซ็น Schnorr (อื่น ๆ รุ่น) ซึ่งหลักการที่ใช้ในสกุลเงินดิจิทัลบางสกุลอาจเป็นวิธีที่ง่ายที่สุด และมีการลดการรักษาความปลอดภัยเชิงปริมาณที่ค่อนข้างง่ายสำหรับความแข็งของปัญหาลอการิทึมแบบไม่ต่อเนื่องในกลุ่มที่ใช้ ภายใต้แบบจำลอง oracle แบบสุ่มของแฮช การเปิดเผยจะมีความยาวประมาณสามเท่าของคำตอบ
¹ ในบริบทของสกุลเงินดิจิทัล ข้อความอาจอธิบายการทำธุรกรรม
² โดย Existentially UnForgeable ภายใต้เกณฑ์ Chosen Message Attack ซึ่งมักเป็นเพียงสิ่งเดียวที่กล่าวถึงในการอธิบายเบื้องต้นสมัยใหม่ มีเกณฑ์ความปลอดภัยลายเซ็นที่มีประโยชน์อื่นๆ
³ $\mathrm{Gen}$, $\mathrm{เครื่องหมาย}$, $\mathrm{Vrfy}$ และฝ่ายตรงข้ามถูกจำลองเป็นอัลกอริทึมเวลาพหุนามที่น่าจะเป็น ข้อเสนอระบุไว้สำหรับการแก้ไขใด ๆ $(\mathrm{pk},\mathrm{sk})$ จับคู่เอาต์พุตโดย $\mathrm{Gen}$และยกเว้นด้วยความน่าจะเป็นเล็กน้อย $p(n)$, นั่นคือ $p(n)$ เช่นนั้นสำหรับพหุนามใดๆ $คิว(n)$ มันถือ $\displaystyle 0=\lim_{n\to\infty} p(n)\,Q(n)$. ในทางปฏิบัติ $n$ ได้รับเลือกสูงพอที่จะทำให้ความน่าจะเป็นนั้นแทบไม่มีนัยสำคัญ