🤯MT19937训练
2023-7-20
| 2023-7-26
0  |  0 分钟
type
status
date
summary
password
category
slug
icon
📘
认真学完梅森旋转,来训练啦
复习一下(啦啦啦)
求后随机数
求前随机数

📝 GKCTF 2021 Random

题目

notion image

题解

random.getrandbits(32)生成32位随机数
random.getrandbits(64)生成64位随机数
random.getrandbits(96)生成96位随机数
MT生成的是32位随机数,那该如何生成64,96位呢
96位
notion image
64位同理
生成一个32位随机数a,然后再生成一个32位随机数b,将b左移32位去加上a,得到一个64位的随机数
notion image
每次循环给出(32+64+96)//32=6组32位随机数,共给了6*104=624组
flag是下一位随机数
 

wp

📝 HGMAE 2022 week4 PRNG

题目

题解

通过预测后随机数,与密文异或,获得flag

wp

 

📝 第五空间2021 data_protection

题目

题解

flag是五段明文拼接
encrypt1
msg1 = bytes_to_long(name)
encrypt1(msg1)
n很小,直接分解
 
notion image
然后rsa
encrypt2
msg2 = bytes_to_long(phone + long_to_bytes(random.getrandbits(160)))
encrypt2(msg2)
没看懂nq是干嘛的
notion image
p,q相差很小
但这里n,p都给出来了,直接解
encrypt3
msg3 = [x for x in mail]
encrypt3(msg3)
solve_right求解矩阵即可
求矩阵X满足XA=B , X = A.solve_right(B)
 
encrypt4
msg4 = address
encrypt4(msg4)
key是随机产生的128位的随机数,通过上几轮加密,
第一轮
a = random.getrandbits(96) b = random.getrandbits(96) p = next_prime(a) q = next_prime(b)
泄露96*2//32=6个随机数
遍历寻找前6个随机数
for a in tqdm(range(prep1,p1)): for b in range(preq1,q1):
第二轮
q = random.randrange(11616788973244169211540879051135531683500013311175857700532973853592727185033846064980717918194540453710515251945345524986932165003196804187526561468278997,11616788973244169211540879051135531683500013311175857700532973853592727185033846064980717918194540453710515251945345524986932165003196804187526563615762644)
msg2 = bytes_to_long(phone + long_to_bytes(random.getrandbits(160)))
泄露6个
第12个:
由q=11616788973244169211540879051135531683500013311175857700532973853592727185033846064980717918194540453710515251945345524986932165003196804187526563112454006
 
第三轮 产生了Key(上一轮的key)*msg(34*18 ,612)个随机数
所以共泄露了624个随机数,预测下一随机数
encrypt5
所有参数都可知,可预测,求个乘法逆元即可
 

flag

 

📝 DASCTF 一见如故

题目

题解

魔改MT19937
循环移位异或
 

wp

🤗 总结归纳

简单的题直接randcrack,很牛的,给他624组state
难的话,有魔改的,这个就自由发挥了,不会写
还有和别的类型结合,需要发现泄露的624组state
 

📎参考

 
💡
某人说很简单,写了两天😱😱🐋🐳
日常训练
循环移位异或加密New attacks on RSA
目录