Score:0

สามารถคำนวณ Recovery ID โดยตรงจากข้อความ ลายเซ็น และรหัสสาธารณะใน ECDSA/secp256k1 ได้หรือไม่

ธง ca

ปัญหา

สมมติว่าฉันได้รับลายเซ็น $(ร,ส)$คีย์สาธารณะที่เกี่ยวข้องและข้อความที่ลงนาม ฉันไม่สามารถเข้าถึงคีย์ส่วนตัวได้ ฉันต้องรู้ว่าอะไรคือ ท่อง (รหัสการกู้คืน) คือที่สอดคล้องกับรหัสสาธารณะ สิ่งหนึ่งที่ฉันทำได้คือกู้คืนรหัสสาธารณะจากลายเซ็นโดยใช้ห้องสมุดจำนวนมากและพยายามทำทุกวิถีทาง ท่อง ค่า (0 หรือ 1 น้อยมาก 2 หรือ 3) แต่ฉันสงสัยว่าทำไมฉันถึงลองหลายตัวเลือกแทนที่จะคำนวณโดยตรง

ตอนนี้ตามบทความนี้... http://coders-errand.com/ecrecover-signature-verification-ethereum/

... ฉันสามารถกลับสูตรและเติมค่าคงที่ทั้งหมดของ secpk256k1 เส้นโค้ง: https://en.bitcoin.it/wiki/Secp256k1

ดังนั้นฉันจึงพยายามคิดว่าจะดำเนินการอย่างไร ข้อแตกต่างระหว่างบทความกับสถานการณ์ของฉันคือฉันมีรหัสสาธารณะอยู่แล้ว $คิว$. ฉันสนใจใน $y$ความเท่าเทียมกันของจุด $[k]G$ ($X$ ในบทความ) ฉันสามารถคำนวณ $X$ เพราะฉันมี $คิว$, $R$, $S$ และค่าคงที่ทั้งหมดที่กำหนดในวิกิ แต่ฉันจะต้องคำนวณสองจุดอีกครั้ง:

\begin{จัด} X &= \frac{(eG + rQ)}{s} \bmod n\ -X &= \frac{(eG + rQ)}{-s} \bmod n\ \end{แนว}

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

คำถาม

คำถามของฉันคือวิธีเดียวที่จะกู้คืนรหัสสาธารณะสำหรับหลายรายการ ท่อง ค่าและจำกัดให้แคบลง ท่อง สำหรับรหัสสาธารณะของคุณเอง? หรือสามารถคิดสูตรได้ที่ไหน ท่องอยู่ด้านหนึ่งและอีกเงื่อนไขอยู่อีกด้านหนึ่ง เช่น $ท่องจำ$ $=$ $คิว$... $G$... $r$ $s$... $e$

kelalaka avatar
in flag
คุณไม่มีรหัสสาธารณะที่กล่าวถึง $y$ แล้วใช่หรือไม่
CoderApprentice avatar
ca flag
@kelalaka ตามที่ฉันเข้าใจ เลข resid เกี่ยวข้องกับ y-parity ของจุด kG = (x,y) = X (โดยที่ k ถูกสุ่มเลือกระหว่างการเซ็นชื่อและ G เป็นตัวกำเนิดของ secp256k1) ไม่ใช่ y-parity ของคีย์สาธารณะ
Score:1
ธง gb

น่าเสียดายที่ฉันไม่คิดว่าจะเป็นไปได้หากไม่เพียงแค่ทดสอบว่าอันไหนใช้ได้ผล นั่นเป็นเพราะ $[s]฿ และ $[-s](-R)$ เป็นจุดโค้งเดียวกันและทั้งสอง $R$ และ $-R$ มีพิกัด x เท่ากัน $r$, ดังนั้น $(ร, ส)$ และ $(r, -s)$ เป็นทั้งลายเซ็นที่ถูกต้องภายใต้รหัสสาธารณะเดียวกัน $คิว$. ไม่มีทางที่จะตัดสินจากลายเซ็นดังกล่าวได้ $R$ หรือ $-R$ จำเป็นต้องใช้ในการกู้คืนเพราะคุณไม่รู้ความลับเลย $k$. ดังนั้นคุณเพียงแค่ต้องทดสอบความเป็นไปได้ทั้งสองอย่างและค้นหาสิ่งที่ใช้ได้ผล

(ถ้าใครรู้วิธีที่ชาญฉลาดในการทำเช่นนี้ที่ฉันพลาดไป ฉันยินดีที่จะแก้ไข!)

CoderApprentice avatar
ca flag
นั่นก็สมเหตุสมผลดี ฉันเดาว่าสิ่งที่ฉันกำลังทำอยู่นี้กำลังคำนวณพิกัด 2 พิกัดที่ใช้ได้กับรหัสสาธารณะเดียวกันทั้งคู่ แต่จริงๆ แล้ว ฉันต้องค้นหาว่ารหัสสาธารณะใดที่สอดคล้องกับรหัสส่วนตัวที่ลงนามในข้อความ ฉันพยายามหาสูตรที่ recid = แต่การท่องไม่ได้เป็นส่วนหนึ่งของสูตร ดังนั้น (x,y) ที่เราต้องการขึ้นอยู่กับว่า `k` ใดถูกเลือกระหว่างการเซ็นชื่อ? และนั่นคือตัวเลขที่เราไม่สามารถทราบได้หากเราไม่มีรหัสส่วนตัว
meshcollider avatar
gb flag
ถูกต้อง. ฉันไม่แน่ใจด้วยซ้ำว่า recid เป็นมาตรฐานทุกที่หรือขึ้นอยู่กับการนำไปใช้งาน ฉันรู้ว่า [libsecp256k1](https://github.com/bitcoin-core/secp256k1) ใช้บิตแรกเพื่อระบุพิกัด y แปลก (เมื่อตั้งค่าเป็น 1) และบิตที่สอง (เมื่อ recid = 2 หรือ 3) แสดงว่าพิกัด x เกินลำดับกลุ่ม

โพสต์คำตอบ

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