rsa easy

Files

main.py

output.py

Phân tích

File main.py không hề có trick gì trong này cả. pq được tạo ra bằng 1 cách rất tự nhiên để tránh việc factor được n một cách dễ dàng.

Do đó, việc tạo d bằng cách lấy e^-1 mod (p-1)*(q-1) rồi tính pow(c, d, n) để lấy flag là điều hoàn toàn bất khả thi nha 😗 (khả thi nếu mình có tầm 300 triệu năm gì đó để sống theo Google :))) Vì vậy, về mặt lí thuyết thì thuật toán này là bất khả xâm phạm. Nhưng mà, vấn đề lại nằm ở cái flag được mã hóa :3

l là độ dài của flag và bằng 43 bytes. Điều này suy ra được là flag chỉ có vỏn vẹn 43*8=344 bits thôi, dẫn đến việc flag^5 có tầm 344*5 = 1720 bits, nhỏ hơn n2048 bits. Một số có 1720 chữ số thì đương nhiên là phải nhỏ hơn số có 2048 chữ số rồi ;)

Mà ta lại có:

c=flag5modn

do flag5<n nên ta có thể suy ra được flag5modn=flag5 hay c=flag5 luôn.

Vì vậy, để lấy flag, ta chỉ cần tính flag=c5 là ra.

flag