ลงชื่อโดยไม่ทราบรหัสส่วนตัวใน ECDSA

โพสต์นี้เผยแพร่ครั้งแรกเมื่อ กลาง.

เราสาธิตวิธีการสร้างลายเซ็นที่ถูกต้อง ไม่มี รู้จักคีย์ส่วนตัวโดยใช้อัลกอริทึมลายเซ็นดิจิทัล Elliptic Curve (ECDSA)

การลงนาม ECDSA

อลิซจึงมีรหัสส่วนตัว (d) และกุญแจสาธารณะ (ถาม = ดีจี). เธอเซ็นข้อความ (m) โดยมีขั้นตอนดังต่อไปนี้:

  1. แฮชข้อความ: ชั่วโมง = แฮช(ม.).
  2. สร้างตัวเลขสุ่ม k และคำนวณ R = กิโลกรัม. หา Rพิกัด x ของ r.
  3. คำนวณ s = (h + ถ)/k.

ลายเซ็นเป็นคู่ (ร ส). ทั้งสอง r และ  s เป็นเพียงตัวเลขสเกลาร์

รหัสส่วนตัว

ลงชื่อโดยไม่ทราบรหัสส่วนตัว

ตามอัตภาพ อลิซจะต้องรู้รหัสส่วนตัวเพื่อสร้างลายเซ็นที่ถูกต้องกับรหัสสาธารณะ น่าสังเกตที่สามารถสร้างลายเซ็นที่ถูกต้องได้โดยไม่ต้องรู้รหัสส่วนตัวดังนี้:

  1. สร้างตัวเลขสุ่ม r. หากไม่มีสาระ R บนทางโค้งด้วย r เนื่องจากพิกัด x ของมัน ก็ลองค่าอื่นของ r.
  2. สร้างตัวเลขสุ่ม s.
  3. แก้หากุญแจสาธารณะเป็น Q = (เอสอาร์ – เอชจี)/อาร์.

(ร ส) เป็นลายเซ็นที่ถูกต้องสำหรับคีย์สาธารณะ Q และข้อความ m เพื่อดูว่าทำไมเราสามารถหามาได้ Q ดังต่อไปนี้:

s = (h + ถ)/k
sk = h + ถ
skG = เอชจี + rdG
เอสอาร์ = เอชจี + อาร์คิว
Q = (เอสอาร์ – เอชจี)/อาร์

เราเรียก Q a keyless พับลิกคีย์ เนื่องจากไม่ได้มาจากคีย์ส่วนตัวที่รู้จัก ในสัญญา ให้เราเรียกกุญแจสาธารณะ คีย์ หากมาจากคีย์ส่วนตัวที่รู้จัก ดังที่ทำโดยทั่วไป

โปรดทราบว่าลายเซ็นจะถูกสร้างขึ้นก่อน ก่อน ได้รับคีย์สาธารณะซึ่งตรงกันข้ามกับการลงนาม ECDSA ทั่วไป

ผลกระทบ

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

กุญแจแบบไม่ใช้กุญแจและแบบใช้กุญแจ

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

โดยดูจากกุญแจสาธารณะ คนเดียวไม่สามารถระบุได้ว่าเป็นแบบไม่ใช้กุญแจหรือแบบใช้กุญแจ

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

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

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

ใช้ใน Bitcoin

มันถูกกล่าวหาว่ากุญแจสาธารณะ (แสดงว่าเป็น ถาม₀) ในธุรกรรม Genesis Coinbase ของ Bitcoin เป็นแบบไร้กุญแจ หากเป็นเช่นนั้น ใครก็ตามที่มีลายเซ็นสามารถเซ็นชื่อหนึ่งข้อความ ซึ่งเป็นข้อความที่ใช้ในการคำนวณ ถาม₀. เขาไม่สามารถลงนามในข้อความอื่นใดได้

อย่างไรก็ตาม ลายเซ็นนั้นใช้ได้เฉพาะนอกเครือข่ายเท่านั้น แต่ไม่สามารถใช้บนเครือข่ายได้. เหรียญที่ส่งไปยัง Q₀ นั้นไม่สามารถใช้กับลายเซ็นดังกล่าวได้ รวมถึงเหรียญที่ส่งหลังจากบล็อก Genesis ด้วย ดูว่าทำไมเราต้องดูว่าข้อความอะไร m ลงนามเมื่อสร้างธุรกรรม โดยทั่วไปจะรวมธุรกรรมการใช้จ่ายในปัจจุบันบวกกับผลผลิตที่ใช้ไป ผลลัพธ์ประกอบด้วย ถาม₀ ในส่วนของสคริปต์ ความหมาย m ขึ้นอยู่กับ ถาม₀. อย่างไรก็ตาม ถาม₀ ขึ้นอยู่กับตัวมันเอง hmแฮชของ การพึ่งพาแบบวงกลมนี้ (เพื่อรับ ถาม₀, คุณต้องการ m อันดับแรก; แต่จะได้รับ m, คุณต้องการ ถาม₀ ขั้นแรก) คล้ายกับลายเซ็นที่ไม่สามารถเซ็นชื่อใน Bitcoin ได้ ซึ่งจะป้องกันการสร้าง ถาม₀.

โปรดทราบว่าสิ่งนี้ใช้ได้กับกุญแจสาธารณะใดๆ ที่เป็น Bitcoin ไม่ใช่แค่เท่านั้น ถาม₀.

การดำเนินงาน

ด้านล่างนี้เป็นตัวอย่างการทำงานแบบเต็มที่สร้างลายเซ็นโดยไม่ทราบรหัสส่วนตัว

ทุกคนสามารถเรียกใช้และตรวจสอบได้โดยอิสระ การทดสอบการทำงานแสดงอยู่ด้านล่าง

รหัสในแบ็กเอนด์รหัสในแบ็กเอนด์

อ้างอิง

  1. Blake, IF, Seroussi, G. และ Smart, NP (บรรณาธิการ) (2005) ความก้าวหน้าในการเข้ารหัส Elliptic Curve. เคมบริดจ์: สำนักพิมพ์มหาวิทยาลัยเคมบริดจ์ (ชุดบันทึกการบรรยายของสมาคมคณิตศาสตร์ลอนดอน)
  2. เครดิตกราฟ: Buchanan, William J (2024) อัลกอริธึมลายเซ็นดิจิทัล Elliptic Curve (ECDSA) Asecuritysite.com. https://asecuritysite.com/ecdsa/ecdsa2

***

[1] เอาต์พุต Coinbase ในบล็อก Genesis ไม่สามารถใช้งานได้แม้ว่าจะคีย์สาธารณะในบล็อกนั้นก็ตาม เนื่องจากไม่ได้รวมอยู่ในชุด UTXO https://gist.github.com/msinkec/5eaf5aa97ed0f5e8d66e7e32fd8b1a0a

ดู: ข้อมูลประจำตัวดิจิทัล สินทรัพย์ดิจิทัลเปิดใช้งาน Web3

วิดีโอ YouTubeวิดีโอ YouTube

ใหม่สำหรับ blockchain? ตรวจสอบส่วน Blockchain สำหรับผู้เริ่มต้นของ CoinGeek คู่มือทรัพยากรขั้นสูงสุดเพื่อเรียนรู้เพิ่มเติมเกี่ยวกับเทคโนโลยี blockchain

ที่มา: https://coingeek.com/sign-without-knowing-the-private-key-in-ecdsa/