nbits = 640 n = getRandomNBitInteger(nbits) s = 0 a = [] x = [] for i inrange(4): ai = getRandomNBitInteger(nbits) xi = getRandomNBitInteger(64 + 32 * i) a.append(ai) x.append(xi) s += ai * xi
k = s//n s %= n print(f"{n = }") print(f"{s = }") print(f"{a = }") flag = 'cnss{'+"".join([str(i) for i in x])+'}' print(flag) ''' n = 3904064643893390361433617712655100029912556632089667501554029429639468928393101622043906144668453264281530453865022580589294831765389441377916901119131234356458963290551834945708721353433505601 s = 3604875074795055000123916123224108624958126368977597327049275476975598192797160984462664525867166641119496011661706120902314295453633878065433943707394662052729528152546793152201914658255139867 a = [2730885493586765190463536251928549081027650544135162075248013764093382819365134392595553863394291517552006396494131206919459935145536152218329288354821904074559120766005594153544756912098945832, 2682794543299249423965520585343408877939482776908813108080125635950617712534116358263875473393216488846715164240099514620137387390122653676168840502450478268278599148289754303414710910342195076, 3056310241622299025529837725147575615329254835813066425883457571781120647010672396603486688297231719653298145480220955878347533091003144227093892753771160874705140077267221046644815086744932854, 4118287861218613731723595777607376442710273799564235506091542746021449841390393039734820750495517116647742753148077759431161482333337542591059373997816043305851015242515503798301490457740269149] flag = cnss{***} '''
# sage n = 3904064643893390361433617712655100029912556632089667501554029429639468928393101622043906144668453264281530453865022580589294831765389441377916901119131234356458963290551834945708721353433505601 s = 3604875074795055000123916123224108624958126368977597327049275476975598192797160984462664525867166641119496011661706120902314295453633878065433943707394662052729528152546793152201914658255139867 a = [2730885493586765190463536251928549081027650544135162075248013764093382819365134392595553863394291517552006396494131206919459935145536152218329288354821904074559120766005594153544756912098945832, 2682794543299249423965520585343408877939482776908813108080125635950617712534116358263875473393216488846715164240099514620137387390122653676168840502450478268278599148289754303414710910342195076, 3056310241622299025529837725147575615329254835813066425883457571781120647010672396603486688297231719653298145480220955878347533091003144227093892753771160874705140077267221046644815086744932854, 4118287861218613731723595777607376442710273799564235506091542746021449841390393039734820750495517116647742753148077759431161482333337542591059373997816043305851015242515503798301490457740269149]
W = [ 2**(162 - 64), 2**(162 - 96), 2**(162 - 128), 2**(162 - 160), 1 ] C = n M = Matrix(ZZ, [ [W[0], 0, 0, 0, 0, C * a[0]], [0, W[1], 0, 0, 0, C * a[1]], [0, 0, W[2], 0, 0, C * a[2]], [0, 0, 0, W[3], 0, C * a[3]], [0, 0, 0, 0, W[4], C * n], [0, 0, 0, 0, 0, C * (-s)] ]) res = M.LLL() if res[0][5] == 0: x = [] for i inrange(4): x.append(Integer(round(res[0][i] / W[i]))) X = [abs(val) for val in x] flag = 'cnss{' + "".join([str(val) for val in X]) + '}' print(f"Found x values: {x}") print(f"FLAG: {flag}") else: print("Not found")
三…三角函数?(🚗 narcissu)
from Crypto.Util.number import * from functools import reduce from secret import flag
P = 4 whilenot isPrime(P): lis = [getPrime(48) for i inrange(6)] P = 1 + 4 * reduce(lambda x, y: x * y, lis) x1 = getRandomInteger(6 * 48)
# sage import random from Crypto.Util.number import * from Crypto.Cipher import AES from Crypto.Util.Padding import pad from secret import flag, key
whileTrue: p=4 * prod(random.sample([*primes(3, 256)], k = 32)) - 1 if isPrime(p): break F = GF(p) ells = list(prime_divisors((p + 1) // 4))
defencrypt(A, P, ekey): E = EllipticCurve(F, [0, A, 0, 1, 0]) for (e, ell) inzip(ekey, ells): for _ inrange(e): whilenot (Q := (p + 1) // ell * E.random_element()): pass phi = E.isogeny(Q) P = phi(P) E = phi.codomain() phi = E.isomorphism_to(E.montgomery_model()) return phi(P)
m = 4 data = [] for _ inrange(4): ekey = [random.randrange(0, m) for _ in ells] E = EllipticCurve(F, [0, 0, 0, 1, 0]) P = E.random_element() Q = key * P data.append((encrypt(0, P, ekey).xy(), encrypt(0, Q, ekey).xy()))
from sage.allimport * import os import random from Crypto.Util.number import * from secret import flag
p = getPrime(150) m = int(pow(p, 1 / 3))
defpad(msg): L = 512 lenL = random.randrange(0, L - len(msg) + 1) lenR = L - len(msg) - lenL return os.urandom(lenL) + msg + os.urandom(lenR)
defencrypt(msg): s = [bytes_to_long(msg[i : i + 16]) for i inrange(0, len(msg), 16)] ls = len(s) Fp = GF(p) A = random_matrix(Fp, ls * ls, ls) s = vector(Fp, s) e = vector(Fp, [random.randrange(-m, m + 1) for _ inrange(ls * ls)]) b = A * s + e return A, b
classCurve: defgenkey(self, nbits, dbits): whileTrue: p = getPrime(nbits // 2) if(p % 3 == 1): break whileTrue: q = getPrime(nbits // 2) if(q % 3 == 1): break n = p * q whileTrue: r = getRandomRange(1,n) if((pow(r, (p-1)//3, p) != 1) and (pow(r, (q-1)//3, q) != 1)): break d = getPrime(dbits) e = inverse(d, (p * p + p + 1) * (q * q + q + 1)) return Pubkey(n, e, r), Privkey(p, q, d) def__init__(self, nbits, dbits): self.Pubkey, self.Privkey = self.genkey(nbits, dbits) defproduct(self, a, b): n, _, r = self.Pubkey if(a == Point(inf, inf)): return b if(b == Point(inf, inf)): return a if(a.y == inf): a, b = b, a u, v = a p, q = b if(q == inf): if(v == inf): return Point((u * p) % n, (u + p) % n) elif((v + p) % n): iv = inverse(v + p, n) return Point((u * p + r) * iv % n, (u + v * p) * iv % n) elif((u - v * v) % n): iv = inverse(u - v * v, n) return Point((u * p + r) * iv % n, inf) else: return Point(inf, inf) else: if((u + p + v * q) % n): iv = inverse(u + p + v * q, n) return Point((u * p + (v + q) * r) * iv % n, (v * p + u * q + r) * iv % n) elif((v * p + u * q + r) % n): iv = inverse(v * p + u * q + r, n) return Point((u * p + (v + q) * r) * iv % n, inf) else: return Point(inf, inf)
defencrypt(self, a): k = self.Pubkey.e res = Point(inf, inf) while k: if(k & 1): res = self.product(res, a) a = self.product(a, a) k >>= 1 return res defdecrypt(self, a): k = self.Privkey.d res = Point(inf, inf) while k: if(k & 1): res = self.product(res, a) a = self.product(a, a) k >>= 1 return res