Điểm:1

Tấn công điểm không hợp lệ mang lại kết quả sai cho các điểm có thứ tự thấp

lá cờ ma

Gần đây tôi đã cố gắng lặp lại kết quả của câu hỏi mà Ruggero đã hỏi và câu hỏi mà Samuel Neves đã trả lời tại đây: Hiểu Twist Security đối với các đường cong Weierstrass ngắn

Trong nỗ lực tái tạo điều này, tôi thấy rằng cuộc tấn công không hoạt động ở một số điểm. Ban đầu giả định của tôi là điều này là do hệ số xoắn $d$ trong trường hợp của tôi không phải là $-1 \mod p$. Do đó, tôi đã hỏi câu hỏi này: Tấn công điểm không hợp lệ trên xoắn bậc hai của Đường cong Elliptic khi -1 là dư lượng bậc hai. Tuy nhiên, khi tôi khám phá thêm, tôi thấy rõ rằng đây không phải là lý do khiến cuộc tấn công không hoạt động. Thay vào đó, với chính mã của câu trả lời ban đầu, tôi cũng có thể chứng minh một cách đáng tin cậy rằng việc triển khai thực tế thang chỉ X hoạt động đối với các điểm có thứ tự 100+, nhưng không (đáng tin cậy) hoạt động đối với các điểm có thứ tự thấp hơn.

Tôi đã sửa đổi tập lệnh của Samuel ở đây để hiển thị một cách xác định hành vi này cho một điểm theo thứ tự 7:

# Trường thiết lập
p = 2^127-1
d = -1 # không vuông trong trường
K = GF(p)
K2.<z> = GF(p^2)

# đường cong này có bậc nguyên tố, nhưng xoắn trơn 2^44
một = -3
b = 2045
E = EllipticCurve(K, [a, b])
Et = EllipticCurve(K, [d^2*a, d^3*b])
E2 = Đường cong elip(K2, [a, b])

# tính toán trước đơn hàng
in (E.order().factor());
in (Et.order().factor());
in (E2.order().factor());

# tạo logarit rời rạc để giải
s = 123456789123456789123456789
P = E([0, 26743016104147931148362869907315104519])
Q = s * P

P_ = E2.lift_x(K(163965092228135290549051973720749297665))

thực tế = 7

P_ *= Et.order() // sự thật

in(P_)

Q_ = s * P_ # truy vấn -- giả sử điều này được thực hiện với bậc thang chỉ x

# giải quyết nhật ký trực tiếp trên E2
x1 = P_[0]
in("x1_p2", x1)
x2 = Q_[0]
s_ = E2.lift_x(x1).discrete_log(E2.lift_x(x2))

# ánh xạ tới Et (tùy chọn) và giải quyết
x1 = d * P_[0]
in("x1_t", x1)
x2 = d * Q_[0]
s__ = Et.lift_x(x1).discrete_log(Et.lift_x(x2))

cho kết quả trong [ 153050600407045353908344231774077597412, 109343643823296263382915152331234715795 ]:
    cho x trong [ K(kết quả), K(kết quả) * d ]:
        cho c trong [ Et, E2 ] :
            cố gắng:
                P = c.lift_x(x)
            ngoại trừ ValueError như e:
                in(e)
                tiếp tục
            in(P, P.thứ tự())


in (s% thực tế)
print (s_, -s_ % fact) # cái này hay cái kia
in (s__, -s__ % fact) # cái này hay cái kia

Các giá trị 15305... và 1093... là những giá trị mà việc triển khai bậc thang chỉ có X đưa ra khi được cung cấp tọa độ x1_p1 hoặc x1_t.

Lưu ý rằng mã này và triển khai thang chỉ X của tôi hoạt động hoàn hảo cho tất cả các điểm có thứ tự 73 trở lên. Nó chỉ không hoạt động đối với các đơn đặt hàng 3 hoặc 7. Đây là đầu ra của tập lệnh:

170141183460469231713519983870624230867
3 * 7^2 * 73 * 207464639 * 4221589732069 * 18102941371909
3 * 7^2 * 73 * 207464639 * 4221589732069 * 18102941371909 * 170141183460469231713519983870624230867
(31638283026303721859929793126783073834 : 8180858091114185696092778095200036260*z + 4090429045557092848046389047600018130 : 1)
x1_p2 31638283026303721859929793126783073834
x1_t 138502900434165509871757510589101031893
No point with x-coordinate 153050600407045353908344231774077597412 on Elliptic Curve defined by y^2 = x^3 + 170141183460469231731687303715884105724*x + 170141183460469231731687303715884103682 over Finite Field of size 170141183460469231731687303715884105727
(153050600407045353908344231774077597412 : 120638375417041763806996747829917991029*z + 145389779438755497769342025772901048378 : 1) 56713727820156410583284874520381326863
(17090583053423877823343071941806508315 : 41244633631159509998704366741778119200 : 1) 56713727820156410583284874520381326863
(17090583053423877823343071941806508315 : 28961826547573943769330362324255518848 : 1) 170141183460469231713519983870624230867
No point with x-coordinate 109343643823296263382915152331234715795 on Elliptic Curve defined by y^2 = x^3 + 170141183460469231731687303715884105724*x + 170141183460469231731687303715884103682 over Finite Field of size 170141183460469231731687303715884105727
(109343643823296263382915152331234715795 : 127120934962706688155967022405858199927 : 1) 170141183460469231713519983870624230867
No point with x-coordinate 60797539637172968348772151384649389932 on Elliptic Curve defined by y^2 = x^3 + 170141183460469231731687303715884105724*x + 170141183460469231731687303715884103682 over Finite Field of size 170141183460469231731687303715884105727
(60797539637172968348772151384649389932 : 17145369941110587676988010143957064222 : 1) 170141183460469231713519983870624230867
1
1 6
1 6

Tại sao cuộc tấn công này hoạt động trên lý thuyết (như phép nhân Q_ = s * P_ mô phỏng) nhưng chỉ hoạt động trong thực tế đối với các điểm có thứ tự cao hợp lý?

lá cờ pe
Tôi nghĩ rằng một thành phần còn thiếu của câu hỏi này là bạn đang sử dụng thang chỉ $x$ nào để đạt được những điểm đó?
lá cờ ma
Xin chào Samuel, tôi đang sử dụng triển khai Brier và Joye "Weierstraà Elliptic Curves and Side-Channel Attacks", Hình 3 với các công thức (6) và (7). Tôi cũng đã tìm thấy trong một bài báo khác một công thức cộng tọa độ điểm X nhân, nhưng nó mang lại kết quả chính xác giống như công thức cộng của Brier và Joye. Có bất kỳ thuật toán nào khác mà tôi nên sử dụng không? Và đó sẽ là cách chính xác, sử dụng tọa độ X của E_t hoặc E_p² làm đầu vào? Tôi chỉ bối rối vì cách tiếp cận của tôi hoạt động cho tất cả các điểm có thứ tự cao, nó chỉ thất bại cho những điểm đặt hàng rất thấp này.
lá cờ pe
Tôi không thể xác minh điều này ngay bây giờ, nhưng dường như tôi nhớ lại rằng các công thức Brier-Joye không phải là không có ngoại lệ và với các điểm có thứ tự thấp, bạn có khả năng gặp phải một ngoại lệ như vậy khiến kết quả không chính xác (ví dụ: xử lý điểm ở vô cực).
lá cờ ma
Đăng! Chính xác! Tôi đã thực hiện một số sửa lỗi chi tiết và những gì bạn mô tả chính xác là như vậy. Cụ thể, có những trường hợp trong đó các giá trị trung gian trở thành điểm ở vô cực và nếu không được xử lý như một trường hợp đặc biệt, phép tính sẽ là rác. Cũng lưu ý rằng khả năng này được tăng lên bởi các điểm thứ tự thấp. Cảm ơn bạn rất nhiều, bạn là một huyền thoại! Tất cả hoạt động hoàn hảo ngay bây giờ!

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.