RSA作业

medium rsa

PCTF{256b_i5_m3dium}

压缩包里一个 .pem 一个 .enc,没看见 ppt 后面有介绍怎么写的,所以直接查了一下这题,才知道一开始要 openssl rsa -pubin -text -modulus -in pubkey.pem

得到 e、N,N 转为 10 进制后用 yafu 分解出 p 、q,把他们复制进 RSA-Tool 计算出 d

网上的脚本生成私钥,命令行输 openssl rsautl -decrypt -in flag.enc -inkey private.pem 出 flag

extremly hard rsa

PCTF{Sm4ll_3xpon3nt_i5_W3ak}

内容和之前一样,所以一上来还是 openssl rsa -pubin -text -modulus -in pubkey.pem

发现 e=3,ppt 里有“低加密指数攻击”,照着那一页写脚本( p,q 用 yafu 分解出, c 用 hex < flag.enc 得到)。

得到 m 简单,快速地暴力破解和输出 m 难。经过唐老板、董斌、尹大佬指点,最终脚本如下(还有问题,但反正能用):

import gmpy2
from Crypto.Util import number
from concurrent.futures import ProcessPoolExecutor

c = 0x85c0de5f # 太长,影响阅读
N = 0xB0BEE5E3 # 后面截掉了
e = 3

def breach(i):
    print(i) # 没有这句我就觉得程序没在运行
    for k in range(i, i + 2000000):
        m = gmpy2.iroot(c + k * N, e)
        m, b = m
        if True == b:
            print(number.long_to_bytes(m))

if __name__ == "__main__":
    with ProcessPoolExecutor(max_workers=4) as pool:
        #        尹大佬加的第三个参数,立刻快了许多👇
        pool.map(breach, range(0, 1000000000, 2000000))

netcat 123.207.38.247 9999

islab{RSA_i5_v5ry_eazzzzy}

问尹大佬我的多进程怎么改的时候,听到冯大佬说这是选择明文攻击,然后上网查到这篇文章。虽然不明白为啥,但跟着它做就做出来了:

  1. 选 3 ,得到 flag 加密后的 C
  2. 选 1 ,输入 0x2 ,得到的是 Ca
  3. Ca × C 得到 Cb
  4. 选 2 ,输入 Cb ,得到解密后的 Cb ,我管他叫 cbd_modn
  5. 根据 cbd_modn = cbd mod n 求 cbd(应该有很多可能值,我一开始把 cdb_modn 直接当成 cbd 用出结果了,试了试加了几倍的 n 反而不行,所以不改脚本了)
  6. 根据 cbd = flag × 2 mod n 求 flag

脚本:

from Crypto.Util import number
from concurrent.futures import ProcessPoolExecutor
import re

n = 0xe8e24510   # 太长
cbd = 0xd2e6d8c2 # 截掉

def cca(i):
    for k in range(i, i + 25):
        # 不用整除会报错float存不下,反正bytes也没小数
        m = (cbd + k * n) // 2
        m = number.long_to_bytes(m)
        if re.match(r"islab", m.decode()):
            print(m.decode())

if __name__ == "__main__":
    with ProcessPoolExecutor(max_workers=4) as pool:
        pool.map(cca, range(0, 100, 25))


如无特殊声明,本页内容采用 CC BY-NC 4.0 授权