RSA là hệ mật mã khóa công khai kinh điển. Với hai số nguyên tố p,q, ta tính n=p⋅q và φ(n)=(p−1)(q−1). Số mũ công khai e thỏa gcd(e,φ(n))=1; số mũ bí mật d là nghịch đảo modulo của e: e⋅d≡1(modφ(n)).
Trong bài toán "textbook RSA" (giáo trình, không đệm/padding) đơn giản dùng trong nhiều bài CTF nhập môn, mỗi ký tự m của flag (mã ASCII, 0≤m<n) được mã hóa độc lập thành c=memodn. Việc giải mã dùng công thức m=cdmodn.
Cho p,q,e và danh sách các số nguyên mã hóa từng ký tự của flag, hãy tìm lại flag gốc.
Ví dụ: với p=61,q=53,e=17 (nên n=3233), danh sách mã hóa 2790 ứng với ký tự duy nhất A (vì 6517mod3233=2790 và 27902753mod3233=65, với d=2753 là nghịch đảo của 17 theo modulo φ(3233)=3120).
Dòng 1: ba số nguyên p q e cách nhau bởi khoảng trắng (p,q là số nguyên tố, 1<e<φ(n), gcd(e,φ(n))=1). Dòng 2: danh sách số nguyên c1 c2 … cL cách nhau bởi khoảng trắng, mỗi số là mã hóa RSA của một ký tự (mã ASCII) của flag, theo đúng thứ tự.
In ra một dòng duy nhất là flag đã giải mã (chuỗi ký tự ASCII, ghép theo đúng thứ tự).
Ví dụ:
Đầu vào:
61 53 17
641 2159 325 855 1859 2680 2790 1516
Đầu ra:
CTF{RSA}
Đầu vào:
61 53 17
641 2159 325 855 2412 1230 1632 119 2570 1632 1230 3179 281 119 624 2906 1516
Đầu ra:
CTF{rsa_basic_01}
Đang tải editor...