[PicoCTF] EVEN RSA CAN BE BROKEN???
Category:
Cryptography
Difficulty:
Easy
Description:
This service provides you an encrypted flag. Can you decrypt it with just N & e?
Connect to the program with netcat:
1
1
1
nc verbal-sleep.picoctf.net 51510
The program’s source code can be downloaded here.
題目筆記
題目提供了一個 RSA 加密的環境,只給了
N
、
e
與加密後的密文。
一般 RSA 需要將 N 分解為兩個質數 p 和 q,才可以計算私鑰並解密。
題目的關鍵:
N 是偶數
這在正常 RSA 中是不可能的(因為 p 與 q 都是奇質數),因此可以推測
其中一個質因數是 2
。
解題步驟
from Crypto.Util.number import long_to_bytes, inverse N = 23699934164118883579301772868468610522855398699101470432464301706604093983993724690398866051915307099172198837189221549627296870046186474519602638094970754 e = 65537 c = 11596761688120110826821498998827014653094511592088849547225306574877488206530053305458943666206403492895885743847965127326690553567226913671355611361014981 p = 2 q = N // p phi = (p - 1 ) * (q - 1 ) d = inverse(e, phi) m = pow (c, d, N) flag = long_to_bytes(m).decode() print (flag)
成功獲取 Flag
恭喜你拿到 Flag 了!
補充說明
如果 N 是偶數,RSA 幾乎可以瞬間被破解,因為其中一個質數是 2 , 那就可以知道另一個數字是多少。
常規 RSA 中,p 和 q 都大多是大質數且為奇數。
Python 的 Crypto.Util.number 提供了 inverse 與 long_to_bytes,方便進行 RSA 解密。