Score:1

คุณจะยืนยันความเป็นเจ้าของคีย์ส่วนตัวโดยใช้คีย์สาธารณะและลายเซ็นข้อความได้อย่างไร

ธง in

เมื่อฉันเซ็นชื่อข้อความด้วยคีย์ส่วนตัว และฉันได้รับลายเซ็นข้อความ ฉันจะสามารถ - ใช้คีย์สาธารณะที่เกี่ยวข้องได้อย่างไร - ตรวจสอบว่าลายเซ็นข้อความ/ธุรกรรมนั้นต้องสร้างโดยบุคคลที่ถือไพรเวต คีย์ที่อยู่เบื้องหลังคีย์สาธารณะที่เกี่ยวข้องหรือไม่

ความเข้าใจของฉันคือว่าด้วยคู่คีย์ส่วนตัว/คีย์สาธารณะ ประเด็นของเทคโนโลยีคือคุณไม่สามารถทำวิศวกรรมย้อนกลับคีย์ส่วนตัวจากคีย์สาธารณะได้ เป็นไปได้อย่างไรที่จะทำอย่างนั้น?

โดยพื้นฐานแล้ว อะไรคือความแตกต่างระหว่างการทำวิศวกรรมย้อนกลับระหว่างคีย์ส่วนตัวกับคีย์สาธารณะ และการตรวจสอบว่าต้องมีคีย์ส่วนตัวเพื่อสร้างลายเซ็นข้อความที่สอดคล้องกับคีย์สาธารณะ เป็นไปได้อย่างไร แต่ไม่ใช่อีกอันหนึ่ง

fgrieu avatar
ng flag
âฉันเซ็นข้อความ/ธุรกรรมด้วยคีย์ส่วนตัวâ ไม่เกี่ยวข้องกัน (ยกเว้นวิธีการที่ใช้) กับ âฉันได้รับข้อความ/ลายเซ็นธุรกรรมâโดยเฉพาะอย่างยิ่ง ไม่ได้ใช้คีย์สาธารณะ/คีย์ส่วนตัวเดียวกันในทั้งคู่ และลายเซ็น (น่าจะ) แตกต่างกัน เพื่อให้คำถามง่ายขึ้น/ชัดเจนขึ้น ฉันขอแนะนำ "เมื่อฉันได้รับข้อความ/ลายเซ็นธุรกรรม ฉันจะทำได้อย่างไร" เหตุผลนั้นเกี่ยวข้องกับลักษณะของลายเซ็น
harpomiel avatar
in flag
ไม่เกี่ยวยังไง? ฉันคิดว่านั่นเป็นจุดสำคัญของสิ่งที่ฉันถาม
fgrieu avatar
ng flag
ไม่เกี่ยวข้องกันเพราะในครั้งแรกคุณ/ฉันเซ็นชื่อด้วยคีย์ส่วนตัวของคุณ/ของฉัน และในวินาที "บุคคลที่ถือคีย์ส่วนตัว" (ซึ่งเป็นของพวกเขา ไม่ใช่ของคุณ/ของฉัน) เซ็นชื่อด้วยคีย์ส่วนตัวของพวกเขา คู่คีย์สาธารณะ/ส่วนตัวสองคู่นั้น (น่าจะ) แยกกันในมูลค่า และบางทีโดยธรรมชาติ สำหรับสิ่งที่คำถามบอกว่า คู่หนึ่งอาจเป็น RSA อีกคู่หนึ่งคือ EdDSA และนั่นมักจะเป็นสถานการณ์ในทางปฏิบัติในการโต้ตอบทางเว็บโปรดจำไว้ว่าการยืนยันลายเซ็นนั้น _not_ จำเป็นต้องมีความรู้เกี่ยวกับคีย์ส่วนตัว เฉพาะคีย์สาธารณะของผู้ลงนามเท่านั้นที่ตรงกับคีย์ส่วนตัวที่ใช้สำหรับการเซ็นชื่อ (และข้อความ ลายเซ็น)
Score:4
ธง es

ฉันจะอธิบายว่าลายเซ็นที่เกี่ยวข้องกับเส้นโค้งวงรีทำงานอย่างไร Cryptocurrencies ส่วนใหญ่ใช้เส้นโค้งวงรีเนื่องจากขนาดลายเซ็นที่เล็กกว่าซึ่งจำเป็นต้องเผยแพร่บนบล็อกเชน

เมื่อคีย์ส่วนตัวซึ่งเป็นเพียงจำนวนเต็มขนาดใหญ่ถูกแมปกับคีย์สาธารณะ (ซึ่งเป็นจุดบนเส้นโค้งวงรีที่ระบุ) การแมปนี้จะมีคุณสมบัติทางคณิตศาสตร์บางประการ โปรดทราบว่าการทำแผนที่นี้ทำในลักษณะที่เป็น "ทางเดียว" คุณสามารถแมปจากคีย์ส่วนตัวไปยังจุดโค้งวงรีของคีย์สาธารณะได้อย่างง่ายดาย แต่คุณไม่สามารถย้อนกลับการดำเนินการนั้นได้

ประการแรก จุดบนเส้นโค้งวงรีจะก่อตัวเป็น กลุ่มอาเบลเลียน ภายใต้การดำเนินการที่เราเรียกว่า "การบวก" ซึ่งหมายความว่าคุณสามารถทำสิ่งที่ดูเหมือนพีชคณิตอย่างง่ายด้วยคะแนน คุณสามารถรับคะแนน $A$ และ $B$เพิ่มพวกเขาเพื่อรับคะแนน $C$และคุณจะสามารถสังเกตได้ว่า $A+B==B+A$. โปรดทราบว่าเรากำหนดเฉพาะการบวกและการลบเท่านั้น และเราไม่สามารถ "คูณ" จุดหรือ "หาร" จุดกับจุดอื่นได้

ประการที่สอง การแม็พของจำนวนเต็มคีย์ส่วนตัวกับจุดคือ ซึ่งหมายความว่าหากคุณมีคีย์ส่วนตัว $a$ และ $ข$ซึ่งแม็พกับคีย์สาธารณะ $A$ และ $B$จากนั้นคีย์สาธารณะของ $a+b$ จะเท่ากันทั้งคู่ $ก+ข$ และ $C$.

การแมปคีย์ส่วนตัวกับคีย์สาธารณะคือการใช้คีย์ส่วนตัว $a$ และคำนวณคีย์สาธารณะ $aG$ซึ่งหมายถึงการเพิ่มจุดที่เป็นที่รู้จัก $G$ ให้กับตัวเอง $a$ ครั้ง. เนื่องจากจะใช้เวลาตลอดไปในการคำนวณโดยการเพิ่ม G ให้กับตัวมันเอง $a$ ครั้ง มีทางลัดทางคณิตศาสตร์ เนื่องจากทางลัดเหล่านี้มีไว้เพื่อทำการคูณอย่างรวดเร็วเท่านั้น แต่ไม่สามารถย้อนกลับและกำหนดคีย์ส่วนตัวจากผลลัพธ์ของการคูณใด ๆ นี่จึงกลายเป็นทางเดียว "ประตูกล" การทำงาน.

ลองจินตนาการว่าฉันมีรหัสส่วนตัว $a$ และรหัสสาธารณะ $A=aG$และคุณเสนอความท้าทายให้ฉัน คุณมากับจำนวนเต็มคีย์ส่วนตัวแบบสุ่ม $x$และคุณขอให้ฉันตอบกลับเป็นจำนวนเต็ม $y$ เพื่อให้คุณสามารถตรวจสอบได้ว่า $xA==yG$. ฉันจะผ่านความท้าทายของคุณได้ก็ต่อเมื่อฉันรู้รหัสส่วนตัว $a$ซึ่งจะช่วยให้ฉันคำนวณได้ $y=xa$. นี้จะตรวจสอบเพราะแล้ว $xA==xaG==yG$.

สิ่งที่ฉันได้อธิบายไว้ข้างต้นมีข้อบกพร่องสองประการ อย่างแรกคือเมื่อฉันผ่านการท้าทายแล้ว คุณสามารถคำนวณรหัสส่วนตัวของฉันได้อย่างง่ายดาย $a$ เช่น $y/x$.

ข้อบกพร่องประการที่สองคือฉันต้องการให้คุณมอบความท้าทายให้กับฉัน แทนที่จะให้ลายเซ็นแก่คุณโดยไม่ต้องโต้ตอบกับคุณ

ข้อบกพร่องข้อแรกได้รับการแก้ไขโดยการใส่ "blinding factor" ซึ่งช่วยให้ฉันผ่านความท้าทายได้โดยไม่ต้องเปิดเผยรหัสส่วนตัวของฉัน ตัวอย่างเช่น ด้วยลายเซ็น Schnorr ฉันเลือกคีย์ส่วนตัวแบบสุ่ม $k$เปิดเผยเท่านั้น $K=kG$แล้วขอคำท้าจากคุณ $x$. จากนั้นฉันก็สร้างมูลค่า $y$ เพื่อให้คุณสามารถตรวจสอบได้ว่า $xA==K+yG$. ตอนนี้หลังจากที่ฉันเปิดเผย $y$ กว่าจะผ่านการท้าทาย คุณก็รู้ว่าฉันทำได้แค่คำนวณเท่านั้น $y$ ด้วยความรู้เกี่ยวกับคีย์ส่วนตัวของฉัน $a$แต่คุณไม่สามารถคำนวณรหัสส่วนตัวของฉันโดยไม่ทราบปัจจัยที่ทำให้ไม่เห็นความลับของฉัน $k$.

ข้อบกพร่องที่สองได้รับการแก้ไขโดยใช้ FiatâShamir ฮิวริสติก เพื่อสร้างความท้าทายโดยใช้ฟังก์ชันที่ทำหน้าที่เป็น "ออราเคิลแบบสุ่ม" นั่นทำให้ฉันคิดโจทย์สุ่มได้โดยไม่มีทางโกง ในกรณีของ ECDSA ซิกเนเจอร์สคีม เอาต์พุตของฟังก์ชันนี้คือพิกัด x ของคีย์สาธารณะที่แมปจากอินพุตเฉพาะ ในกรณีของ Schnorr ลายเซ็น ฟังก์ชันเป็นแฮชที่มีการเข้ารหัสลับ เช่น SHA512/256

Score:2
ธง ng

เมื่อฉันเซ็นข้อความ/ธุรกรรม¹ ด้วยคีย์ส่วนตัว
และฉันได้รับข้อความ/ลายเซ็นการทำธุรกรรม¹

ที่สำคัญ มันใช้คู่คีย์สาธารณะ/ส่วนตัวที่แตกต่างกันในสองสิ่งนี้ คำถามที่เหลือไม่มีอะไรเกี่ยวกับข้อแรกในสองข้อนี้ ทุกอย่างเกี่ยวกับการตรวจสอบลายเซ็นในส่วนที่สองของสิ่งเหล่านี้ โดยเทียบกับรหัสสาธารณะของคู่รหัสสาธารณะ/ส่วนตัวที่ผู้ลงนามใช้ในสิ่งที่สองดังกล่าว รหัสสาธารณะดังกล่าวจะถือว่าพร้อมใช้งานสำหรับผู้ตรวจสอบ คีย์ส่วนตัวที่ตรงกันไม่ใช่

เมื่อใช้คู่คีย์ส่วนตัว/คีย์สาธารณะ ประเด็นของเทคโนโลยีคือคุณไม่สามารถทำวิศวกรรมย้อนกลับคีย์ส่วนตัวจากคีย์สาธารณะได้

ถูกต้อง. มีรายละเอียดมากกว่านี้เล็กน้อย: ด้วยคีย์สาธารณะ เป็นไปไม่ได้ที่จะดำเนินการสิ่งที่คีย์ส่วนตัวตั้งใจให้ดำเนินการ

อะไรคือความแตกต่างระหว่างการทำวิศวกรรมย้อนกลับระหว่างคีย์ส่วนตัวกับคีย์สาธารณะ และการตรวจสอบว่าต้องมีคีย์ส่วนตัวเพื่อสร้างลายเซ็นข้อความที่สอดคล้องกับคีย์สาธารณะ เป็นไปได้อย่างไร แต่ไม่ใช่อีกอันหนึ่ง

ลายเซ็นทำงานตามแผนภาพนี้:

ลายเซ็น และโดยก หนังสือเรียนที่ทันสมัย

  • $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$ ได้รับเลือกสูงพอที่จะทำให้ความน่าจะเป็นนั้นแทบไม่มีนัยสำคัญ

Score:-1
ธง ng

โดยพื้นฐานแล้ว อะไรคือความแตกต่างระหว่างวิศวกรรมย้อนรอย ก รหัสส่วนตัวจากรหัสสาธารณะและการตรวจสอบว่าต้องมีคน รหัสส่วนตัวเพื่อสร้างลายเซ็นข้อความที่สอดคล้องกับ กุญแจสาธารณะ? เป็นไปได้อย่างไร แต่ไม่ใช่อีกอันหนึ่ง

แทบจะเป็นไปไม่ได้เลยที่จะค้นหาคีย์ส่วนตัวตามคีย์สาธารณะ และนี่คือจุดรวมของการเข้ารหัสคีย์สาธารณะ-ส่วนตัว นี่คือความงามอันบริสุทธิ์ของคณิตศาสตร์ คำถามที่สองของคุณถามว่าลายเซ็นดิจิทัลทำงานอย่างไร ลายเซ็นดิจิทัลมักสร้างขึ้นโดยคำนวณสรุปข้อความธรรมดาของคุณก่อน (เช่น ใช้ sha256) จากนั้นเข้ารหัสสรุปโดยใช้คีย์ส่วนตัวของคุณ ข้อความรหัสของคุณข้างลายเซ็นดิจิทัลมีลักษณะดังนี้:

public_announcement, ลายเซ็น = เข้ารหัส (sha256 (public_annoucement), private_key)

เครื่องรับใด ๆ สามารถคำนวณการย่อย sha256 ของ public_annoucement และเปรียบเทียบกับ ถอดรหัส (sha256 (public_annoucement), public_key)`. หากทั้งสองไม่ตรงกัน แสดงว่าประกาศนั้นถูกดัดแปลงหรือไม่ได้ลงนามด้วยคีย์ส่วนตัวที่อ้างว่าเป็น

fgrieu avatar
ng flag
นี่ไม่ใช่วิธีอธิบายลายเซ็นที่ถูกต้อง การถอดรหัสด้วยรหัสสาธารณะเป็นความผิดพลาดทางคำศัพท์ ระบบลายเซ็นทั่วไปหลายระบบ ([EdDSA](https://en.wikipedia.org/wiki/EdDSA), [ECDSA](https://en.wikipedia.org/wiki/ECDSA), [DSA](https:/ /en.wikipedia.org/wiki/Digital_Signature_Algorithm)) ไม่ทำงานในลักษณะนี้เลย เมื่อ `เข้ารหัส' และ 'ถอดรหัส' เป็นการเข้ารหัสและถอดรหัส RSA แบบเรียน ระบบลายเซ็นที่อธิบายไว้จะเสี่ยงต่อการปลอมแปลงที่มีอยู่ รูปแบบลายเซ็น RSA ทั้งสองแบบที่ใช้กันอย่างแพร่หลายไม่สามารถอธิบายได้ด้วยวิธีนี้ด้วยรูปแบบการเข้ารหัสที่ปลอดภัยแบบ 'เข้ารหัส' และ 'ถอดรหัส'

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา