Score:3

ในทางทฤษฎีเป็นไปได้หรือไม่ที่จะมอบหมายการสร้างคีย์สาธารณะ

ธง in

ลองนึกภาพสถานการณ์ต่อไปนี้:

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

ทั้งหมดนี้ควรจะขึ้นอยู่กับ อี.ซี.ซีคือส่วนขยายของ ECDSA อัลกอริทึมเพื่อที่จะพูด
แต่ตามที่อธิบายไว้ในตัวอย่าง cryptocurrency เฉพาะบุคคลที่สร้างรหัสสาธารณะเท่านั้นที่ได้รับอนุญาตให้ลงนามในข้อความสำหรับรหัสสาธารณะนี้หรือถอดรหัสข้อมูลที่เข้ารหัสด้วยรหัสสาธารณะนี้

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

การเปลี่ยนแปลงทางเทคนิคเท่านั้นที่ควรพิจารณามีดังนี้:

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

พารามิเตอร์ จากอัลกอริทึม ECDSA:

  • $d$ = รหัสส่วนตัวที่สร้างขึ้นแบบสุ่ม
  • $G$ = จุดฐานของเส้นโค้งวงรี

การเปลี่ยนแปลง:

  • ช่วงเวลาที่ใช้ได้สำหรับคีย์ส่วนตัวจะลดลงจาก $[1, n - 1]$ ถึง $[1, \frac{n}{2} - 1]$
  • เช่นเดียวกับการสร้างคีย์สาธารณะ ประเด็น $พี$ คำนวณได้ดังนี้ $P = d \คูณ G$. ประเด็นนี้ $พี$ สร้างรหัสการสร้างที่อยู่ที่ได้รับมอบสิทธิ์ (DAG Key)
  • ในการสร้างที่อยู่ (คีย์สาธารณะ) สำหรับบุคคลอื่น คีย์แบบสุ่มที่เรียกว่าที่อยู่แบบสุ่ม (คีย์ AR) ($i$) ด้วยช่วงเวลาเดียวกันกับของคีย์ส่วนตัว ($[1, \frac{n}{2} - 1]$) จะต้องสร้างขึ้น
  • หากต้องการสร้างที่อยู่สำหรับบุคคลที่ต้องการ ให้กดแป้น DAG ($พี$) ของบุคคลนี้เพิ่มด้วยการคูณคีย์ AR ($i$) และจุดฐาน ($G$): $Q = P + i \คูณ G$. เนื่องจาก $พี$ เป็น $d \คูณ G$ต้องถือสิ่งต่อไปนี้: $Q = P + i \times G = (d + i) \times G$. ประเด็นนี้ $คิว$ สร้างที่อยู่ใหม่สำหรับผู้ที่ใช้คีย์ DAG ในการคำนวณ

ตัวอย่าง:

  1. อลิซสร้างคีย์ส่วนตัวที่สร้างขึ้นแบบสุ่ม ($d$).
  2. อลิซใช้คีย์ส่วนตัวของเธอเพื่อสร้างคีย์ DAG ($พี$)
  3. อลิซทำให้รหัส DAG เป็นแบบสาธารณะ
  4. Bob ต้องการสร้างที่อยู่ (คีย์สาธารณะ) สำหรับอลิซและรับคีย์ DAG จากอลิซเพื่อดำเนินการดังกล่าว
  5. Bob สร้างคีย์ AR ที่สร้างขึ้นแบบสุ่ม
  6. Bob สร้างที่อยู่ใหม่สำหรับ Alice โดยใช้คีย์ DAG ของ Alice และคีย์ AR ที่สร้างขึ้นในขั้นตอนที่แล้ว
  7. Bob ส่งจำนวนเงินไปยังที่อยู่ที่สร้างขึ้นใหม่
  8. บ็อบส่งคีย์ AR ให้อลิซ
  9. เฉพาะอลิซเท่านั้นที่สามารถส่งเงินจากที่อยู่นี้ได้ เพราะเธอเป็นคนเดียวที่สามารถสร้างลายเซ็นที่ถูกต้องสำหรับที่อยู่ที่สร้างขึ้นใหม่ (คีย์สาธารณะ) ในการทำเช่นนี้ เธอเพียงแค่ต้องคำนวณคีย์ส่วนตัวของที่อยู่นี้ดังนี้: $d + i$ (นอกเหนือจากคีย์ส่วนตัวของเธอ $d$ และปุ่ม AR $i$ สร้างโดยบ๊อบ)

คำถาม:

เป็นไปได้ในทางทฤษฎีหรือไม่ที่จะมอบหมายการสร้างรหัสสาธารณะ

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

หรือมีแนวทางที่ดีกว่าในการแก้ปัญหานี้หรือไม่?

meshcollider avatar
gb flag
BIP-32 และรูปแบบการสร้างที่อยู่ที่กำหนดขึ้นตามลำดับชั้นอื่นๆ อนุญาตให้มีการมอบหมายการสร้างคีย์สาธารณะ
in flag
ขอบคุณ @meshcollider ฉันจะตรวจสอบมัน คุณรู้หรือไม่ว่ามันทำงานคล้ายกับที่ฉันเสนอหรือไม่?
meshcollider avatar
gb flag
คล้ายๆกันใช่มะ ข้อแตกต่างหลัก ๆ คือมันเป็นการกำหนดขึ้นเอง (ใช้ฟังก์ชันแฮชเพื่อเลือกสิ่งที่คุณเรียกว่า AR เพื่อให้อลิซสามารถสร้างมันได้คนเดียว) และคุณไม่จำเป็นต้องจำกัดช่วงของคีย์ส่วนตัว (กลุ่มเป็นวงจร ดังนั้นหากคุณเพิ่มขนาดใหญ่ คีย์มันจะ "ล้อมรอบ" โมดูโลคำสั่งกลุ่ม)
in flag
สมเหตุสมผลดี! มันเจ๋งจริงๆ ขอบคุณมาก @meshcollider ที่ช่วยฉันได้มาก! และใช่ ฉันไม่รู้ว่าจะตั้งชื่อ "กุญแจ" เหล่านี้ว่าอย่างไร
Score:3
ธง es

หากฉันเข้าใจแผนการของคุณถูกต้อง Alice ก็ต้องการช่องทางที่ปลอดภัยแยกต่างหากเพื่อสื่อสาร $i$ ถึงบ๊อบ

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

ผู้รับมีคู่คีย์สองคู่: $(a, A=aG)$ และ $(b, B=bG)$, ที่ไหน $G$ เป็นจุดฐานที่รู้จักกันดี

ผู้ส่งสร้างคู่คีย์ชั่วคราว $(r, R=rG)$ และเผยแพร่ $R$.

รหัสสาธารณะปลายทางแบบใช้ครั้งเดียวคือ $H(rA)G+B$, ที่ไหน $H$ เป็นแฮชที่ปลอดภัยในการเข้ารหัสซึ่งส่งคืนค่าสเกลาร์

คีย์ส่วนตัวที่เกี่ยวข้องสามารถกู้คืนได้โดยผู้รับเท่านั้น $H(aR)+b$.

เหตุผลที่ผู้รับมีสองคู่คีย์คือต้องการเฉพาะคีย์ส่วนตัวเท่านั้น $a$ จำเป็นสำหรับการสแกนเงินที่เข้ามา และต้องการคีย์ส่วนตัวที่สองเพิ่มเติมเท่านั้น $ข$ เมื่อจำเป็นต้องใช้เงิน อย่างไรก็ตาม หากคุณไม่ต้องการความแตกต่างนี้ ผู้รับสามารถมีคู่คีย์ได้เพียงคู่เดียว $(ก,ก)$ จากนั้นคีย์สาธารณะปลายทางแบบใช้ครั้งเดียวจะเป็น $H(rA)G+A$ และคีย์ส่วนตัวที่เกี่ยวข้องจะเป็น $H(aR)+a$.

คุณสามารถอ่านเกี่ยวกับการใช้งานที่อยู่แบบครั้งเดียวของ Monero ได้ในหัวข้อ 4.2 ที่นี่ และหน้าที่ 7 ของเอกสารรายงาน CryptoNote ต้นฉบับ ที่นี่.

kelalaka avatar
in flag
ที่น่าขันก็คือเมื่อเงินเข้ามาถึง $A$ คุณต้องโอนไปยังการใช้จ่ายของคุณ $B$
knaccc avatar
es flag
@kelalaka ใน Monero ไม่มีอะไรถูกโอนจาก $A$ ถึง $B$ ที่อยู่กระเป๋าเงินเดียวคือการเชื่อมโยงของคีย์สาธารณะ $A$ และ $B$ เงินจะถูกใช้โดยตรงโดยอ้างอิงคีย์สาธารณะแบบใช้ครั้งเดียวในลายเซ็นเสียงเรียกเข้า ฉันแค่ต้องการระบุว่าคุณต้องการเพียง $a$ และ $B$ เพื่อสแกนหาเงินที่เข้ามา และคุณจะต้องรู้ $b$ เพิ่มเติมในเวลาที่ใช้จ่ายเท่านั้น สิ่งนี้ทำให้การเข้าถึง $b$ ถูกจำกัดอย่างเข้มงวด เนื่องจากจำเป็นต้องทราบเมื่อจำเป็นต้องใช้เงินเท่านั้น
kelalaka avatar
in flag
ใช่ ฉันทราบข้อบ่งชี้ของคุณแล้ว คุณสามารถให้ลิงค์เพื่ออ่านจาก Monero ได้หรือไม่?
knaccc avatar
es flag
@kelalaka แน่นอน มันคือส่วน "4.2 ที่อยู่แบบครั้งเดียว" ที่นี่: https://www.getmonero.org/library/Zero-to-Monero-2-0-0.pdf ในสัญกรณ์ของฉัน $a$ เป็นแบบส่วนตัว คีย์มุมมอง และ $b$ เป็นคีย์การใช้จ่ายส่วนตัว
knaccc avatar
es flag
@kelalaka ขอบคุณเพิ่ม
knaccc avatar
es flag
@kelalaka ฉันได้เพิ่มลิงก์ไปยังสำเนาของเอกสารนั้น เนื่องจากลิงก์ cryptonote.org ล้มเหลวเมื่อฉันพยายามคลิก โปรดทราบว่าเอกสาร CryptoNote มีข้อผิดพลาดเนื่องจากกำหนด $H_s()$ เป็นการสร้างองค์ประกอบฟิลด์ ซึ่งควรสร้างสเกลาร์น้อยกว่าขนาดกลุ่มของจุดฐานแทน
in flag
@knaccc ว้าว สุดยอดเลย! สิ่งที่ฉันกำลังมองหาและดีกว่าที่ฉันคิดไว้มาก ขอบคุณมาก! สิ่งเดียวที่ฉันยังไม่เข้าใจ: เหตุใดฉันจึงต้องรวม (แฮชที่ปลอดภัยด้วยการเข้ารหัส) เมื่อสร้างคีย์ และต้องแฮชอะไรเพื่อให้ได้มา ?
knaccc avatar
es flag
@E.Bramtergan $H(rA)$ หมายถึงการคูณสเกลาร์จุดเส้นโค้งวงรีของ $r$ ด้วย $A$ ให้ถือว่าผลลัพธ์เป็นลำดับไบต์และใช้แฮช (เช่น SHA-512/256) ในค่าปกติ ทาง แล้วทำ $mod\ \ell$ กับผลลัพธ์ โดยที่ $\ell$ คือลำดับของจุดฐาน และจะขึ้นอยู่กับเส้นโค้งที่คุณเลือก เหตุผลที่คุณต้องการ $H()$ คือการแปลง Diffie-Hellman ความลับที่ใช้ร่วมกัน $rA==aR$ เป็นสเกลาร์ ดังนั้นจึงสามารถใช้เป็นคีย์ส่วนตัวในสมการได้เอกสาร Monero ที่ฉันเชื่อมโยงอธิบายทั้งหมดนี้โดยละเอียด
in flag
@knacc ฉันเห็น ดีจริงๆรักมัน ขอบคุณอีกครั้ง!

โพสต์คำตอบ

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