ฉันจำลองการโจมตีจุดที่ไม่ถูกต้องบน ECC โดยใช้เส้นโค้ง Short Weierstrass สำหรับสิ่งนี้ ฉันได้เขียนการใช้งานแบบ "งี่เง่า" ที่ไม่ได้ตรวจสอบจุดที่อยู่บนเส้นโค้งก่อนที่จะเข้าสู่การคูณแบบสเกลาร์ สำหรับเค้าโครงของการโจมตี ฉันขอยืมอย่างมากจากคำอธิบายที่ยอดเยี่ยมของซามูเอล เนเวส ซึ่งเขาให้ไว้ที่นี่: ทำความเข้าใจกับ Twist Security เกี่ยวกับเส้นโค้ง Weierstrass สั้น ๆ
ฉันสามารถทำซ้ำได้โดยไม่มีปัญหาเมื่อ $d = -1$ เป็นกำลังสองที่ไม่ตกค้างใน $\mathbb{F}_p$จากนั้นทุกอย่างจะทำงานนอกกรอบ อย่างไรก็ตามเมื่อ $p$ เป็นอย่างนั้น $-1$ เป็นเศษเหลือกำลังสอง ดังนั้นฉันจึงต้องเลือกค่าอื่นสำหรับ $d$ทุกอย่างแตกสลาย
เพื่อความง่ายในการเรียกใช้ครั้งแรกฉันไม่ได้ใช้เส้นโค้ง $\mathbb{F}_{p^2}$ เพราะสำหรับตัวเล็ก $p$ การแจงนับอย่างถี่ถ้วนเพื่อค้นหาจุดที่สั่งซื้อต่ำไม่ใช่ปัญหา
ตัวอย่างเช่น สมมติว่าเส้นโค้งของฉันถูกกำหนดไว้ $\mathbb{F}_{101}$; ที่นี่, $-1$ เป็น mod กากเศษกำลังสอง $p$, เนื่องจาก $10 \cdot 10 = -1 \mod 101$. เส้นโค้งของฉันถูกกำหนดโดย
$E: y^2 = x^3 + 13x + 29$
และด้วย $d = 2$, mod ที่ไม่ตกค้างกำลังสอง 101
$E^d: y^2 = x^3 + 52x + 30$
คำสั่งของ $E^d$ เป็น $111 = 3 \cdot 37$. ฉันได้เลือกสองจุดบน $E^d$ ซึ่งมีคำสั่งที่ 3 และ 37 ตามลำดับ ดังนี้
$P_1 = (28, 62)$
$P_2 = (8, 7)$
เมื่อฉันเรียกใช้ค่าเหล่านี้ผ่านการคูณสเกลาร์โดยไม่มีการตรวจสอบจุด (สำหรับรหัสส่วนตัว $d = 58$ฉันได้รับผลลัพธ์ต่อไปนี้:
$S_1 = (94, 53)$
$S_2 = (32, 14)$
ไม่ใช่ทั้งสองอย่าง $S_1$ ก็ไม่เช่นกัน $S_2$ เป็นจุดบนการบิดกำลังสอง $E^d$. ฉันสามารถยกพิกัด X อย่างใดอย่างหนึ่งเข้ามา $E^d$แต่แล้วคำสั่งของคะแนนก็ผิด
นี่คือรหัสตัวอย่างของฉัน:
Fp = GF(101)
D = Fp(2)
พิมพ์ (D, "เป็นรูปสี่เหลี่ยมจัตุรัส?", D.is_square())
(ก, ข) = (13, 29)
E = EllipticCurve(Fp, [a, b])
Et = EllipticCurve(Fp, [ a*D^2, b*D^3 ])
พิมพ์ ("Et.order ()", ปัจจัย (Et.order ()))
โจมตีจุด = [
เอต(28, 62),
เอต(8, 7),
]
พิมพ์(อี)
พิมพ์ (Et)
สำหรับ P ใน Attack_points:
พิมพ์(P, P.order())
# รหัสส่วนตัว d = 58
mul_results = [
เอต(94, 53),
เอต(32, 14),
]
#พิมพ์(Et.lift_x(94).คำสั่ง())
#พิมพ์(Et.lift_x(32).คำสั่ง())
ผลลัพธ์ใด:
2 เป็นสี่เหลี่ยม? เท็จ
Et.order() 3 * 37
Elliptic Curve กำหนดโดย y^2 = x^3 + 13*x + 29 บน Finite Field ขนาด 101
Elliptic Curve กำหนดโดย y^2 = x^3 + 52*x + 30 บน Finite Field ขนาด 101
(28 : 62 : 1) 3
(8 : 7 : 1) 37
TypeError: พิกัด [94, 53, 1] ไม่ได้กำหนดจุดบน Elliptic Curve ที่กำหนดโดย y^2 = x^3 + 52*x + 30 บน Finite Field ขนาด 101
ฉันจะทำการโจมตีนี้สำหรับการบิดกำลังสองได้อย่างไร $d \neq -1$?