Curve25519 และ Ed25519
ก เส้นโค้งมอนต์โกเมอรี่ ที่กำหนดไว้ในฟิลด์ $K$ กำหนดเป็น; $$M_{A,B}: Bv^2 = u^3 + Au^2 + u$$
แน่นอน $A,B \ใน K$ และด้วย $B(A^2-4) \neq 0$.
Curve25519 ใช้นายก $q = 2^{255} â 19$ เพื่อสร้างเขตข้อมูลจำกัด $\mathbb{F}_q$ และกำหนดครั้งแรกสำหรับ ECDH และตั้งชื่อในภายหลัง X25519. สมการมอนต์โกเมอรีคือ $$v^2 = u^3+486662 u^2+u$$ กับ $486664$ เป็นรูปสี่เหลี่ยมจัตุรัส $\mathbb{Z}_p$เช่น เป็น Quadratic Residue (QR) $u = 9$ ได้เลือกเป็นฐาน แบบฟอร์ม Weierstrass (สิ่งที่จำเป็นสำหรับ SageMath)
$$y^2 = x^3 + A x + B $$
เส้นโค้ง âCurve25519â คือ เทียบเท่ากัน เกิน $\mathbb{Z}_p$ ถึงโค้งเอ็ดเวิร์ด เอ็ด25519 $$x^2 + y^2 = 1 + (121665/121666)x^2y^2$$ กับ;
$$x = \frac{\sqrt{486664}u}{v}, \quad y = \frac{(u â 1)}{(u + 1)}$$
การดำเนินการย้อนกลับคือ;
$$u = \frac{(y + 1)}{(1 - y)}, \quad v = \frac{\sqrt{486664}u}{x}$$
รูปร่างเอ็ดเวิร์ดมีเส้นโค้งแบบไอโซมอร์ฟิค
$$-x^2 + y^2 = 1 - (121665/121666)x^2y^2$$ เนื่องจาก $-1$ คือ QR ใน a $\mathbb Z_p$
คำถาม
montgomeryX = (edwardsY + 1)*ผกผัน(1 - edwardsY) mod p
เป็นไปได้ที่จะขนส่งจุดเส้นโค้ง edwards (คีย์สาธารณะ ed25519) ไปยังเส้นโค้งมอนต์โกเมอรี่
ใช่ ตามที่ระบุข้างต้น จากมอนต์โกเมอรีถึงเอ็ดเวิร์ด $$u = \frac{(y + 1)}{(1 - y)}$$
มีผลข้างเคียงหรือไม่หากคีย์สาธารณะ ed25519 ไม่ถูกต้อง ในกรณีของกลุ่มย่อยขนาดเล็กหรือการโจมตีแบบโค้งที่ไม่ถูกต้อง เป็นต้น
คีย์ Edward25519 สามารถแปลงเป็น Curve25519 ได้ และหากสร้างคีย์ลับแล้วด้วย ความรับผิดชอบของผู้ใช้ที่ถูกต้องตามกฎหมาย
- ผู้ใช้ที่ถูกต้องตามกฎหมายจะถือว่าสร้างรหัสลับแบบสุ่มที่เป็นอิสระจากกัน ตัวอย่างเช่น ผู้ใช้สามารถสร้าง 32 ไบต์แบบสุ่มแบบเดียวกัน ล้างบิต 0, 1, 2 ของไบต์แรก ล้างบิต 7 ของไบต์สุดท้าย และตั้งค่าบิต 6 ของไบต์สุดท้าย
ในคำจำกัดความที่ตั้งไว้ เราต้องการให้รหัสลับของ X25519 เป็น
$$\{n: n \in 2^{254} +8\{0,1,2,\dots,2^{251}-1 \}\},$$ กล่าวอีกนัยหนึ่ง ให้เลือกหมายเลขสุ่มที่เหมือนกันระหว่าง $[0,2^{251}-1]$ คูณด้วย $8$ กว่าเพิ่ม $2^{254}$.
ลำดับของจุดฐานคือ (little-endian);
edd3f55c1a631258d69cf7a2def9de1400000000000000000000000000000010
การหักบัญชี $0,1,2$ ตรวจสอบให้แน่ใจว่า
ด้านล่างคือค่าสูงสุด (little-endian) และเราจะเห็นว่ามีคีย์ส่วนตัวสองคีย์สามารถมีคีย์สาธารณะเดียวกันได้ อย่างไรก็ตาม นี่เป็นเหตุการณ์เล็กน้อยแต่หาได้
0x8ffffffffffffffffffffffffffffffffffffffffffffffffffffffff7
จึงไม่มีความจำเป็นเนื่องจากความเท่าเทียมกันแบบทวิภาคจะสร้างคะแนนที่ไม่มีลำดับเล็กน้อยหากผู้ใช้ที่ถูกต้องใช้กฎอยู่แล้ว
ภายใต้การสมมูลแบบสองเหตุผลของ Curve25519 และ edwards25519 คีย์สาธารณะ X25519 แต่ละคีย์จะสอดคล้องกับคีย์สาธารณะ Ed25519 ที่เป็นไปได้สองคีย์). X25519 ใช้เท่านั้น $x$ ประสานงาน (ที่มาของชื่อ) และ เอ็ด25519 ใช้พิกัดของจุด เมื่อเรามีเพียง $x$ พิกัดของจุด มีสองจุดที่เป็นไปได้ $(x,y)$ และ $(x,-y)$ ยกเว้น $y=0$.
และถ้าใช่ อะไรจะเป็นทางออกที่ดีที่สุดในการจัดการอย่างถูกต้อง?
ไม่มีอันตรายจาก ตรวจสอบคะแนน.
พิเศษบางอย่าง
โดยใช้คีย์เดียวกัน
ฉันไม่สามารถพูดได้โดยตรงว่าไม่ปลอดภัย อย่างไรก็ตาม กฎทั่วไปของเราคือไม่ใช้คีย์เดียวกันเพื่อวัตถุประสงค์ที่แตกต่างกัน จนกว่าจะพิสูจน์ได้ว่าไม่มีอันตรายใดๆ ที่ทำให้ตัวคุณอยู่ห่างจากการใช้รหัสเดียวกันเพื่อวัตถุประสงค์ที่แตกต่างกัน
อาจดีกว่าถ้ามีคีย์สุ่ม 256 บิตหนึ่งชุดและได้สองคีย์ที่มี HKDF-expand สำหรับทั้ง X25519 และ Ed25519
X25519
โปรดจำไว้ว่ารหัสสาธารณะได้รับการแก้ไขและเมื่อคุณเรียกใช้ DHKE หมายความว่าคุณมี DHKE แบบคงที่ สิ่งนี้ไม่มีความลับส่งต่อ สิ่งที่ดีกว่าคือสิ่งที่ Signal protocol ทำ วงล้อคู่ และคุณสามารถลงนามรหัสสาธารณะใหม่ด้วย Ed25519