加载中
275 字
1 分钟
RSA低加密指数攻击
2023-09-08 09:28

RSA低加密指数

加密指数指的是e,e一般选取65535,当e很小,可直接破解。

这类攻击在CTF题中,一般是 e=3

低加密指数攻击

出题脚本

import libnum
import gmpy2
# 生成随机素数
p = libnum.generate_prime(1024)
q = libnum.generate_prime(1024)
e = 3
m = "flag{20d6e2da95dcc1fa5f5432a436c4be18}"
# 字符串转数字
m = libnum.s2n(m)
n = p * q
phi_n = (p - 1) * (q - 1)
# 求逆元
d = gmpy2.invert(e, phi_n) # 有时候会产生报错,原因是 m 的 e 次方大于 n,产生了 kn,此时用解题脚本解出来的 k 大于 0
c = pow(m, e, n)
print("n =", n)
print("e =", e)
print("c =", c)
n = 23105329531391813039857038751759647421701879162157586444059568794756947846845619711257672423138072854368191473941408490675041910516220287268738419197085545593640690042851038958459082636027503020145121067743621057319157668572937555617991820769644356793370144913254693167843447643520568918503014547707423847499024934732454939604070884375533813963410754914255228523531200176094005390332608451072983943869756948680994580888606169182116541174820743647000251438931026219013443295569889175238977262300118077215856077047625850386254036155706263626271497906374837188016565385117208226099206854554180090481529558002796375531451
e = 3
c = 2217344750798294937344050117513831761010547351781457575945714176628679412650463329423466955026804439931765627111856888102133234836914006818023839994342283023142702993182665344445325734299047409223354338948863171846780674244925724334091153701697864918695050507247415283070309
Traceback (most recent call last):
File "D:\Tools\Jetbrains\Pycharm\PyCharm_workspace\PyCharm_workspace\CTF\crypto_demo\低加密指数攻击\出题.py", line 20, in <module>
d = gmpy2.invert(e, phi_n) # 有时候会产生报错,原因是 m 的 e 次方大于 n,产生了 kn
ZeroDivisionError: invert() no inverse exists

解题脚本

import gmpy2
import libnum
def decode(c, e, n):
k = 0
while True:
mm = c + k * n
result, flag = gmpy2.iroot(mm, e)
if flag:
# print(k)
return result
k += 1
n = 23105329531391813039857038751759647421701879162157586444059568794756947846845619711257672423138072854368191473941408490675041910516220287268738419197085545593640690042851038958459082636027503020145121067743621057319157668572937555617991820769644356793370144913254693167843447643520568918503014547707423847499024934732454939604070884375533813963410754914255228523531200176094005390332608451072983943869756948680994580888606169182116541174820743647000251438931026219013443295569889175238977262300118077215856077047625850386254036155706263626271497906374837188016565385117208226099206854554180090481529558002796375531451
e = 3
c = 2217344750798294937344050117513831761010547351781457575945714176628679412650463329423466955026804439931765627111856888102133234836914006818023839994342283023142702993182665344445325734299047409223354338948863171846780674244925724334091153701697864918695050507247415283070309
m = decode(c, e, n)
# print(m)
print(libnum.n2s(int(m)))
b'flag{20d6e2da95dcc1fa5f5432a436c4be18}'
RSA低加密指数攻击
/posts/2023/09/rsa-low-encrypt-attack/
作者
dacj4n
发布于
2023-09-08
许可协议
CC BY-NC-SA 4.0

部分信息可能已经过时