NepCTF2023 Crypto wp
random_RSA
先通过类似boneh and durfee attack获得p,q,d,后面爆破一下p,q的位置,然后随机数预测就行
boneh and durfee attack
二元cop解一下就行
后面常规的随机数预测
enigma
两个enigma其实挺简单的。
crib:
https://www.101computing.net/enigma-crib-analysis/
逐位对齐,然后判断加密结果是不是明文本身。
Rejewski:
就用题目上这个人的攻击思路就ok。
遍历密钥空间,然后判断环是否与给定的加密结果的环相同。
ABCABC
当然这里注意,要判断ABC每个数生成的环的数量,长度相等,可以筛选掉大部分值
recover
这个没注意到P和的线性无关条件,复杂度没降下来,也是稍微改了下原代码就出了
粘一下exp
from Crypto.Util.number import *
from string import ascii_lowercase
from itertools import product
import hashlib
from itertools import product
import hashlib
P =
M=Matrix(GF(2),64,64)
for i in range(64):
for p in P[i]:
M[i,p]=1
mm=#明文二进制列表
cc=#密文二进制列表
P3=M^3
P2=M^2
P1=M^1
P0=identity_matrix(GF(2),64)
t0=vector(GF(2),cc[0])-P3*vector(GF(2),mm[0])
#t1=vector(GF(2),cc[1])-P3*vector(GF(2),mm[1])
# assert t0==t1
Res=[]
for _ in range(0,8):
PP=P2[_*8:_*8+8,_*8:_*8+8].augment(P1[_*8:_*8+8,_*8:_*8+8], subdivide=True)
PP=PP.augment(P0[_*8:_*8+8,_*8:_*8+8], subdivide=True)
PP
TT=[int(i) for i in t0[_*8:_*8+8]]
for i in range(0,3*8,8):
TT.extend([0,1,1])
for j in range(3):
tt=Matrix(GF(2),1,24)
tt[0,i+j]=1
PP=block_matrix([[PP], [tt]])
TT=vector(GF(2),TT)
res=PP.solve_right(TT)
print(res)
RR=[]
Ker=PP.right_kernel()
r=Ker.dimension()
print("Kernel dimension=",r)
for i in range(0,1<<r):
tmp=res+Ker[i]
flag=blist2dec(list(tmp.change_ring(ZZ))).decode()
if all(i in ascii_lowercase+'{}' for i in flag):
RR.append(flag)
Res.append(RR)
#flag{}头尾筛选,这里代码写的烂,不想改了
R1=[]
for index,i in enumerate(Res[:5]):
temp=[]
for j in i:
if index==0 and j[0]=='f':
temp.append(j)
if index==1 and j[0]=='l':
temp.append(j)
if index==2 and j[0]=='a':
temp.append(j)
if index==3 and j[0]=='g':
temp.append(j)
if index==4 and j[0]=='{':
temp.append(j)
R1.append(temp)
temp=[]
for i in Res[-1]:
if i[2]=='}':
temp.append(i)
Res=R1+Res[5:-1]+[temp]
print(Res)
for i in product(*Res):
flag=[0]*24
for index,j in enumerate(i):
flag[index]=ord(j[0])
flag[index+8]=ord(j[1])
flag[index+16]=ord(j[2])
if hashlib.md5(bytes(flag)).hexdigest().startswith('3fe04'):
print(bytes(flag))
SecureAgg
稍微看一下源代码就发现漏洞点吧???
simple_des
没做,看起来恢复一下轮密钥就出了,解的人挺多
random_rsa和enigma需要exp的话,评论区dd我