Score:3

คีย์ ECDSA สองคีย์ที่อยู่ห่างกันอย่างใกล้ชิด

ธง yt

สมมติว่าใช้สองคีย์ส่วนตัว $x_1$ และ $x_2$ เพื่อสร้างคีย์ ECDSA สาธารณะสองรายการ $y_1$ และ $y_2$ (เช่น ใช้เป็นรหัสสาธารณะสำหรับที่อยู่ Bitcoin) ระยะห่างระหว่าง $x_1$ และ $x_2$ มีขนาดเล็ก (เช่น น้อยกว่า ${2^{20}}$). อะไรนะ แย่ เกี่ยวกับมัน?

ฉันรู้ว่าถ้าแตก $x_1$ย่อมนำไปสู่การแตกดับ $x_2$ ด้วยความพยายามเพียงเล็กน้อยในการค้นหา แต่สมมติว่ายกเว้น $|x_1 - x_2|$ แนวทางปฏิบัติอื่น ๆ ทั้งหมดมีความปลอดภัยเพียงเล็กน้อยเช่น อย่าใช้ nonces ของ randon ซ้ำในการเซ็นชื่อ มีผลเสียอื่นๆ อีกไหม (ยกเว้นการหักหนึ่งเหรียญก็เหมือนหักสอง)

kelalaka avatar
in flag
การโจมตีลายเซ็นหลักคือการปลอมแปลงลายเซ็น นอกจากนี้ยังมีความล้มเหลวทั้งหมดที่การโจมตีเปิดเผยกุญแจ คุณต้องการอะไรอีก?
Sean avatar
yt flag
สมมติว่ามีลายเซ็นที่มีอยู่ซึ่งสร้างขึ้นโดยใช้ $x_1$ ผู้โจมตีจะปลอมแปลงข้อมูลอื่นได้อย่างไร (สร้างขึ้นโดยใช้ $x_2$) หากไม่ทราบ nonce แบบสุ่มที่ใช้ในลายเซ็นแรก
kelalaka avatar
in flag
หากคุณเซ็นชื่อข้อความสองครั้งด้วยปุ่มทั้งสองโดยใช้ nonce ที่ต่างกัน สิ่งนี้สามารถให้ข้อมูลเกี่ยวกับระยะห่างของ nonce
Sean avatar
yt flag
แต่ถ้าคุณเซ็นข้อความเดียวกันโดยใช้คีย์เดียวกัน นั่นจะไม่เป็นการเปิดเผยระยะห่างของ nonce เช่นกัน (แย่กว่านั้นอีกหรือ) --- แล้วถ้าไม่มีใครเซ็นข้อความเดียวกันเป็นครั้งที่สองล่ะ
Score:1
ธง es

อนุญาต $d=x_2-x_1$และให้คีย์สาธารณะอยู่บนจุดฐานที่รู้จักกันดี $G$. ดังนั้นคีย์คู่จะเป็น $(x_1, X_1=x_1G)$ และ $(x_2, X_2=x_2G)$.

มูลค่า $d$ สามารถบังคับเดรัจฉานโดยใช้ ก้าวใหญ่-ก้าวเล็ก วิธีซึ่งจะใช้เวลาน้อยกว่าหนึ่งวินาทีใน CPU สมัยใหม่เมื่อ $n=20$.

หากคุณใช้ลายเซ็น Schnorr เพื่อเซ็นข้อความ $m$ โดยใช้ $X_1$คุณจะสร้างคู่ลายเซ็น $(ค, r_1)$ โดยเลือก nonce แบบสุ่มอย่างสม่ำเสมอ $k$แล้วคำนวณ $c=H(kG\mathbin\| m)$ และ $r_1=k-cx_1$.

ลายเซ็นได้รับการตรวจสอบโดยการตรวจสอบ $c\overset{?}{=}H(r_1G+cX_1 \mathbin\| ม.)$.

ผู้โจมตีซึ่งมีกำลังดุร้าย $d$จากนั้นสามารถสร้างลายเซ็นในข้อความเดียวกัน แต่ดูเหมือนว่าจะถูกเซ็นโดยคีย์ส่วนตัวอื่นของคุณ $x_2$ดังต่อไปนี้:

ค่าของ $k$ และ $ค$ จะยังคงเหมือนเดิม จากนั้นคำนวณ $r_2=r_1-cd$. ลายเซ็นปลอมเป็นของคู่กัน $(ค, r_2)$.

ลายเซ็นจะถูกตรวจสอบโดยการตรวจสอบที่ $c\overset{?}{=}H(r_2G+cX_2 \mathbin\| ม.)$.

สิ่งนี้จะตรวจสอบได้สำเร็จว่า $kG==r_2G+cX_2$ซึ่งจะเป็นจริงถ้า $k==r_2+cx_2$.

โดยแทนที่ $r_2==r_1-cd$ และ $x_2==d+x_1$เราจะเห็นว่าสิ่งนี้จะเป็นจริงด้วยการเลือกของเรา $r_2$.

การโจมตีนี้จะใช้ได้เฉพาะเมื่อแฮชหรือข้อความไม่ผูกลายเซ็นกับคีย์สาธารณะเฉพาะ หากโปรโตคอลกำหนดว่า $ค$ แทนที่จะคำนวณเป็น $c=H(kG\mathbin\| X_1\mathbin\| m)$การโจมตีจะไม่ทำงานเนื่องจากค่าของ $ค$ ไม่สามารถใช้ซ้ำระหว่างลายเซ็นได้ (เนื่องจากตัวตรวจสอบจะตรวจสอบลายเซ็นโดยการเชื่อมข้อมูล $X_2$ ภายในแฮชแทน $X_1$).

poncho avatar
my flag
"ตามคำถาม การดำเนินการนี้จะใช้เวลาไม่เกิน $2^{21}$ ซึ่งจะใช้เวลาน้อยกว่าหนึ่งชั่วโมงสำหรับ CPU สมัยใหม่"; จริงๆ แล้วสามารถทำได้โดยพยายามประมาณ $2^{11}$ (พูดโดยใช้ Big-Step-Little-Step); มันเหมือนวินาที...
poncho avatar
my flag
ไม่ ก้าวใหญ่-ก้าวน้อย แค่มีส่วนเพิ่มเติม...
knaccc avatar
es flag
@poncho ขอบคุณ ตอนแรกฉันสับสน แต่ตอนนี้ฉันเห็นได้ว่าข้อมูลเชิงลึกคือการค้นหาแบบแฮชเทเบิลนั้นเร็วกว่าการเพิ่มมาก ฉันได้นำวิธีการของคุณไปทดสอบแล้ว และได้ผลดีมาก

โพสต์คำตอบ

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