Tôi đang sao chép một cuộc tấn công điểm không hợp lệ vào ECC bằng cách sử dụng các đường cong Weierstrass ngắn. Đối với điều này, tôi đã viết một triển khai "câm" không xác thực các điểm nằm trên đường cong trước khi đi vào phép nhân vô hướng. Đối với phác thảo của cuộc tấn công, tôi đang vay mượn rất nhiều từ mô tả xuất sắc của Samuel Neves mà anh ấy đã đưa ra ở đây: Hiểu Twist Security đối với các đường cong Weierstrass ngắn
Tôi có thể sao chép điều này mà không gặp vấn đề gì khi $d = -1$ là một không dư bậc hai trong $\mathbb{F}_p$, thì mọi thứ sẽ hoạt động vượt trội. Tuy nhiên, khi $p$ là như vậy $-1$ là dư lượng bậc hai và do đó tôi cần chọn một giá trị khác cho $d$, mọi thứ sụp đổ.
Để đơn giản, trong lần chạy đầu tiên tôi không sử dụng các đường cong trong $\mathbb{F}_{p^2}$ vì nhỏ $p$ liệt kê đầy đủ để tìm điểm thứ tự thấp không phải là một vấn đề.
Ví dụ, giả sử đường cong của tôi được xác định trên $\mathbb{F}_{101}$; đây, $-1$ là mod dư bậc hai $p$, từ $10 \cdot 10 = -1 \mod 101$. Đường cong của tôi được đưa ra bởi
$E: y^2 = x^3 + 13x + 29$
Và với $d = 2$, một mod không dư bậc hai 101,
$E^d: y^2 = x^3 + 52x + 30$
Lệnh của $E^d$ Là $111 = 3 \cdot 37$. Tôi đã chọn hai điểm trên $E^d$ có thứ tự 3 và 37 tương ứng:
$P_1 = (28, 62)$
$P_2 = (8, 7)$
Khi tôi chạy các giá trị này thông qua phép nhân vô hướng mà không cần xác thực điểm (đối với khóa riêng tư $d = 58$, tôi nhận được đầu ra sau:
$S_1 = (94, 53)$
$S_2 = (32, 14)$
Không $S_1$ cũng không $S_2$ là một điểm trên đường xoắn bậc hai $E^d$. Tôi có thể nâng tọa độ X trong $E^d$, nhưng sau đó thứ tự của các điểm là sai.
Đây là mã ví dụ của tôi:
Fp = GF(101)
D = Fp(2)
print(D, "là hình vuông?", D.is_square())
(a, b) = (13, 29)
E = EllipticCurve(Fp, [a, b])
Et = EllipticCurve(Fp, [ a*D^2, b*D^3 ])
print("Et.order()", factor(Et.order()))
điểm tấn công = [
Và (28, 62),
Và (8, 7),
]
in(E)
in(và)
cho P trong attack_points:
in(P, P.thứ tự())
# khóa riêng d = 58
mul_results = [
Và (94, 53),
Và (32, 14),
]
#print(Et.lift_x(94).order())
#print(Et.lift_x(32).order())
Đầu ra nào:
2 là hình vuông? Sai
Et.order() 3 * 37
Đường cong elip được xác định bởi y^2 = x^3 + 13*x + 29 trên Trường hữu hạn có kích thước 101
Đường cong elip được xác định bởi y^2 = x^3 + 52*x + 30 trên Trường hữu hạn có kích thước 101
(28 : 62 : 1) 3
(8 : 7 : 1) 37
TypeError: Tọa độ [94, 53, 1] không xác định điểm trên Đường cong Elliptic được xác định bởi y^2 = x^3 + 52*x + 30 trên Trường hữu hạn có kích thước 101
Làm cách nào tôi có thể thực hiện cuộc tấn công này cho một bước ngoặt bậc hai trong đó $d \neq -1$?