Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 9 additions & 0 deletions NNSCTF2025_Origami/description.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
name: Origami
authors:
- Zukane
original_ctf: NNS CTF 2025
year: 2025
description: >-
Origami is a ntruly marvellous artform
base64_flag: Tk5Te2szM3BfZjBsZDFuZ180bmRfZjBsZDFuZ19sMWszXzRuXzByMWc0bTFfbTRzdDNyfQ==
flag_format: 'NNS{FLAG}'
2 changes: 2 additions & 0 deletions NNSCTF2025_Origami/release_files/output.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
pk = [126, 74, 108, 97, 86, 46, 112, 34, 101, 40, 119, 70, 112, 77, 71, 15, 77, 30, 102, 93, 64, 22, 1, 119, 35, 67, 70, 54, 45, 116, 67, 53, 55, 53, 6, 46, 72, 116, 113, 32, 55, 56, 83, 32, 10, 52, 77, 94, 61, 18, 99, 55, 65, 80, 13, 38, 17, 104, 88, 115, 24, 60, 1, 31, 65, 105, 120, 37, 91, 29, 113, 9, 108, 115, 66, 16, 33, 77, 40, 22, 122, 74, 18, 63, 6, 17, 124, 110, 71, 93, 106, 74, 25, 108, 24, 119, 96, 117, 10, 78, 65, 64, 115, 59, 3, 110, 39, 64, 93, 123, 88, 95, 48, 34, 86, 12, 82, 67, 117, 118, 90, 107, 12, 17, 102, 52, 0, 16, 71, 2, 26, 26, 43, 55, 113, 63, 15, 27, 48, 90, 115, 16, 25, 126, 104, 28, 12, 90, 108, 20, 108, 46, 45, 101, 88, 4, 126, 115, 32, 0, 72, 6, 5, 112, 14, 49, 58, 64, 21, 64, 90, 79, 96, 90, 71, 35, 3, 77, 5, 27, 72, 69, 70, 87, 38, 98, 46, 51, 15, 78, 90, 13, 14, 56, 120, 74, 59, 95, 56, 96, 52, 69, 45, 33, 82, 44, 111, 90, 105, 45, 45, 17, 111, 9, 58, 19, 106, 30, 66, 119, 95, 50, 21, 104, 10, 103, 93, 47, 109, 16, 5, 67, 98, 126, 13, 2, 105, 121, 40, 108, 91, 111, 96, 86, 41, 98, 10, 34, 114, 33, 15, 53, 121, 4, 115, 47]
ct = [89, 49, 11, 57, 106, 101, 122, 57, 34, 67, 63, 35, 21, 72, 84, 23, 65, 4, 91, 79, 51, 86, 68, 94, 81, 50, 102, 8, 18, 64, 28, 7, 69, 91, 82, 13, 2, 17, 29, 12, 88, 81, 98, 26, 94, 102, 18, 94, 82, 30, 79, 118, 55, 41, 101, 109, 44, 78, 124, 118, 9, 79, 110, 94, 75, 62, 52, 116, 46, 13, 55, 24, 43, 89, 46, 119, 11, 1, 33, 83, 117, 80, 35, 109, 39, 44, 114, 0, 59, 86, 13, 29, 14, 93, 124, 17, 30, 29, 67, 67, 79, 30, 46, 35, 38, 33, 58, 120, 112, 68, 74, 85, 110, 57, 27, 3, 107, 42, 70, 105, 12, 16, 101, 17, 4, 125, 19, 57, 70, 35, 114, 28, 111, 108, 123, 31, 49, 95, 74, 77, 82, 44, 123, 62, 47, 6, 87, 116, 17, 68, 39, 24, 26, 107, 75, 20, 33, 10, 17, 55, 101, 4, 115, 92, 98, 101, 22, 23, 95, 91, 19, 15, 111, 60, 29, 124, 113, 60, 28, 15, 74, 107, 76, 78, 81, 115, 118, 15, 93, 117, 72, 46, 81, 18, 44, 37, 126, 24, 77, 27, 31, 67, 99, 60, 96, 66, 93, 112, 13, 10, 91, 0, 80, 12, 67, 46, 115, 53, 37, 64, 43, 120, 116, 27, 58, 3, 62, 14, 79, 41, 39, 30, 103, 39, 50, 56, 123, 21, 2, 55, 110, 99, 100, 24, 62, 20, 10, 102, 80, 44, 51, 9, 100, 31, 79, 92]
46 changes: 46 additions & 0 deletions NNSCTF2025_Origami/release_files/source.sage
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
from Crypto.Util.number import bytes_to_long, long_to_bytes

n,p,q,df,dg,dr=[512,2,127,35,35,22]
R.<x> = ZZ[]
Rq.<x> = Integers(q)[]
Rqn = Rq.quotient(x^n-1)
Rp.<w> = Integers(p)[]
Rpn = Rp.quotient(w^n-1)

def random_poly(d):
f = R(0)
for i in sample(range(n),d):
f += R(x**i)
return f

def secretkey_gen():
f,g = [0,0]
while not Rpn(f).is_unit() or not Rqn(f).is_unit():
f = random_poly(df)
g = random_poly(dg)
return f,g

def publickey_gen(f,g):
h = Rqn(g)/Rqn(f)
return h

def encrypt(h,m):
r = random_poly(dr)
c = p * h * Rqn(r) + Rqn(m)
return c

def encode(val):
poly = R(0)
for i in range(n):
poly += (val & 1) * x^i
val >>= 1
return poly

f,g = secretkey_gen()
pk = publickey_gen(f,g)

flag = encode(bytes_to_long(b"NNS{???????????????????????????????????????????????}"))
ct = encrypt(pk,flag)

print(f"pk = {pk.lift().coefficients(sparse=False)}")
print(f"ct = {ct.lift().coefficients(sparse=False)}")