Giả định ta có đường cong Elliptic (E) trên trường số nguyên tố p :

Đối với các bài toán về ECC thì thông thường chúng ta cần đi giải bài toán ECDLP :

Table Of Contents

1. Attack on Curve singular

Có một cách thú vị để phát hiện curve có là singular hay không ? 😀😀😀 Đó là khai báo trong sage bằng funtion EllipticCurve. Quy ước là curve thì sẽ không được có singular point (P/s : vì nó không secure).
Đối với những loại curve singular này thì có một cách tiếp cận để giải được bài toán ECDLP mình đã trình bày ở đây

2. Smart ASS Attack

Kiểu attack này thực hiện được khi có điều kiện : P.order() == p . Khi đó chúng ta có thể giải bài toán ECDLP trong thời gian tuyến tính.
Script này mình đã lưu lại dùng đễ attack kiểu tấn công này.
Nếu bạn muốn tìm hiểu sâu hơn thì có thể đọc document này để biết thêm chi tiết.
Practice : Sharift 2016

3. Pohlig-Hellman attack

Kiểu tấn công này được well-defined trong tài liệu này.
Kiểu tấn công này thực hiện được khi P.order() có thể phân tích thành các số nguyên tố nhỏ hoặc là ta có bound của n.

Giả sử chúng ta có thể phân tích được P.order() thành các số nguyên tố :

Ý tưởng của Pollig-Hellman là làm việc với các số nguyên tố bé, sau đó dùng CRT để tìm được n.
Ok trước hết tìm x = n (mod p1^e1). Ta thực hiện theo các biến đổi sau :

k = P.order() 
P0 = P * (k // (p1^e1)) 
Q0 = Q * (k // (p1^e1)) 
x = discrete_log_lamda(Q0, P0, (0, p1^e1), '+')    

Trong sage, hàm discrete_log_lamda được dùng để giải bài toán DLP trong một khoảng giới hạn nào đó. Qua các phép biến đổi kia, ta đã giới hạn được x trong module p1^e1. Vì vậy sử dụng hàm này trong trường hợp này là vô cùng thích hợp, giúp giảm thời gian tìm kiếm đi rất nhiều.

🐣🐣🐣 Một điểm đặc biệt nữa là khi ta có vùng bound của n (n < N) thì sau khi tìm được số dư của n cho một số số nguyên tố nào đó, ta có thể tiến hành bruteforce theo module đó để tìm ra được n.

Toàn bộ ý tưởng này là mình học được từ bài CTF dưới đây. Hãy thử làm và kiểm nghiệm độ hiệu quả 😀😀😀

Pratice : UCTF

4. No Correctness Check for Input Points

🎏🎏🎏 Situation : Trong trường hợp chúng ta có một oracle cho ta nhập một điểm P’ và trả về Q’ = nP’ mà không check xem điểm P’ có thuộc đường cong (E) hay không.

🎇🎇🎇 Solutions : Input các điểm thuộc các đường cong khác. Rồi dùng phương pháp Pollig-Hellman để tìm đồng dư của n theo một module nào đó. Làm nhiều lần như vậy rồi dùng CRT để tìm ra n.

Kiểu tấn công này được document trong tài liệu này. Và được minh họa trong kì thi CTF bên dưới.

Practice : Spam the flags