''' n = 127060392619341060272126983366487069092712215979664340339428955285201267724168574813227106020122399594060458777939446978632526348867806863618885370221957087197582864380885199290793062293120324984868138488667017882272415668310242448870352699380394381756621677031459335310964085476227148301120850021800822495119 e = 65537 ct = 18305235107479382231970252522433686185039231184629854177334609960907102735540326234277108553640185845164498239822263821349544015918443334769445559622730315115384134147808359107914969010678607157349844717217781801237935737980608575612421610972048739840839726108493286994232100086338529591086935374295281642738 gift = 8312456126096895497368692810699639462746223116345115761188530231045483000989605820 '''
from Crypto.Util.number import * from tqdm import *
n = 127060392619341060272126983366487069092712215979664340339428955285201267724168574813227106020122399594060458777939446978632526348867806863618885370221957087197582864380885199290793062293120324984868138488667017882272415668310242448870352699380394381756621677031459335310964085476227148301120850021800822495119 e = 65537 ct = 18305235107479382231970252522433686185039231184629854177334609960907102735540326234277108553640185845164498239822263821349544015918443334769445559622730315115384134147808359107914969010678607157349844717217781801237935737980608575612421610972048739840839726108493286994232100086338529591086935374295281642738 gift = 8312456126096895497368692810699639462746223116345115761188530231045483000989605820
r = bytes_to_long(b'n1junior2025') G = gift << 750 PR.<x> = PolynomialRing(RealField(1000)) for i in trange(2200, 5000): f = (2025*x + r*r)*x^2 - i*(x-1)*(n-x) - x*G res = f.roots() res = int(res[-1][0]) >> 230 << 230 P.<y> = PolynomialRing(Zmod(n)) g = res + y ress = g.small_roots(X=2^230, beta=0.499, epsilon=0.04) if(ress != []): print(i, ress) p = int(int(ress[0]) + res) break
q = n // p print(long_to_bytes(int(pow(ct, inverse(e, (p-1)*(q-1)), n))))
#flag{ec6f23afd0b7453bb8224146b6aad196}
BabyAES
题目
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
from Crypto.Cipher import AES from random import randbytes import os
FLAG = "flag{REDACTED}" pad = lambda x: x+randbytes(16-len(x)%16) cipher = AES.new(os.urandom(16), AES.MODE_CBC, iv=randbytes(16))
from Crypto.Util.number import * from extend_mt19937_predictor import ExtendMT19937Predictor from pwn import * from tqdm import trange from os import urandom
context.log_level = "critical" sh = remote("39.106.16.204", 46046)
sh.recvuntil(b"msg: ") sh.sendline(urandom(19968//8-16).hex().encode()) sh.recvuntil(b"ct:") res = bytes_to_long(bytes.fromhex(sh.recvline().strip().decode())[::-1]) sh.recvuntil(b"[+] ") sh.sendline(b"1")
predictor = ExtendMT19937Predictor() for _ inrange(624): x = res & 0xffffffff res >>= 32 predictor.setrandbits(x, 32)
for i in trange(127): sh.recvuntil(b"msg: ") predictor.predict_getrandbits(16*8) temp = predictor.predict_getrandbits(19968) sh.sendline(urandom(19968//8-16).hex().encode()) sh.recvuntil(b"ct:") res = bytes_to_long(bytes.fromhex(sh.recvline().strip().decode())[::-1]) sh.recvuntil(b"[+] ")
from Crypto.Util.number import * from random import * from secret import flag defgen_pubkey(n, k, l): L = (matrix(Permutations(n).random_element())*vector([i for i inrange(n)])).list()[:3*l] gen_col1 = lambda x: [x^(i+1) for i inrange(l)]+[0]*(k-l) gen_col2 = lambda x: [x^(i+1) for i inrange(k)] G = matrix(F,[gen_col1(Integer(randint(1,p-1))) if i in L else gen_col2(Integer(randint(1,p-1))) for i inrange(n)]).T S = random_matrix(F,k,k) pubkey = S*G privkey = L,G return (pubkey,privkey)
defencrypt(pubkey, L, message): x = random_matrix(F,1,k) e = [0for i inrange(n)] for i inrange(20): s = randint(0,n-1) if s notin L: e[s] = randint(1,p-1) c = x*pubkey+message*matrix(F,[1for i inrange(n)])+matrix(F,e) return c p = 8605605879820394929871171704526267558076275882769290613301265383544615884789835912139373711919931926389028123698181386695814578808144200282148287377501923 F = GF(p)
m = bytes_to_long(flag) n, k, l = 128, 84, 12
pubkey, privkey = gen_pubkey(n,k,l) c = encrypt(pubkey,privkey[0],m) save(pubkey.list(),'P.sobj') save(c.list(),'c.sobj')
p = 8605605879820394929871171704526267558076275882769290613301265383544615884789835912139373711919931926389028123698181386695814578808144200282148287377501923 F = GF(p) n, k, l = 128, 84, 12
pk = Matrix(F, k, n, pk) c = vector(F, c)
RKer = pk.right_kernel().basis() M = vector(F, [1for i inrange(n)])
L = Matrix(F, n+1, n+1) R = vector(F, n+1) for i inrange(1, len(RKer)): L[i, 0] = M*RKer[i] L[i, 1:] = RKer[i] R[i] = c*RKer[i] L = L[1:len(RKer), :] R = R[1:len(RKer)] print(L.dimensions())
from Crypto.Util.number import * from qiskit import QuantumCircuit from qiskit_aer import AerSimulator from Crypto.Cipher import AES import os, random FLAG = "flag{REDACTED}"
SIM = AerSimulator() classQuantumVM: def__init__(self): self.qc = QuantumCircuit(256) for i inrange(128): self.qc.h(i) defexec(self, code): ip = 0 param = random.sample(range(128,256), 128) while ip<len(code): op = code[ip]; ip += 1 num = code[ip]; ip += 1 match op: case0: self.qc.x(num) case1: self.qc.y(num) case2: self.qc.z(num) case3: self.qc.cx(num, param[num]) case _: ValueError("Invalid Operation :(") for i inrange(128): if random.randint(0,1): self.qc.x(i) else: self.qc.x(param[i]) self.qc.measure_all() returnint(SIM.run(self.qc,shots=1,memory=True).result().get_memory()[0],2)
code = [] for i inrange(128): code.append(3) code.append(i) code = bytes(code).hex().encode()
from Crypto.Util.number import * from Crypto.Cipher import AES from tqdm import * from pwn import *
sh = remote("39.106.16.204", 20010)
c = [] for i in trange(150): sh.recvuntil(b"Quantum Code > ") sh.sendline(code) sh.recvuntil(b"\xe2\x9a\x99\xef\xb8\x8f ") c.append(int(sh.recvline()))
C = [] m, n = 32*8, 150 for i inrange(len(c)): temp = bin(c[i])[2:].zfill(m) vec = [] for j in temp: if(j == "0"): vec.append(1) else: vec.append(-1) C.append(vec)
C = Matrix(ZZ,C).T L = block_matrix( [ [C,identity_matrix(m)] ] ) L[:,:n] *= 2^20
res = L.BKZ(block_size=14)[0] m = res[n:] flag1 = "" flag2 = "" for i in m: if(i == 1): flag1 += "0" flag2 += "1" else: flag1 += "1" flag2 += "0"