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.pemflag。

extremly hard RSA

PCTF{Sm4ll_3xpon3nt_i5_W3ak}

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

发现e=3,PPT里有“低加密指数攻击,照着那一页写脚本(p,qyafu分解出,chex < 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 ncbd(应该有很多可能值,我一开始把cdb_modn直接当成cbd用出结果了,试了试加了几倍的n反而不行,所以不改脚本了
  6. 根据cbd = flag × 2 mod nflag。

脚本:

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))

复制以下链接,并粘贴到你的Mastodon、MisskeyGoToSocial等应用的搜索栏中,即可搜到对应本文的嘟文。对嘟文进行的点赞、转发、评论,都会出现在本文底部。快去试试吧!

链接:https://emptystack.top/note/RSA