From 9939378130ec5572e0f957d16cfb5f1cbc132199 Mon Sep 17 00:00:00 2001 From: h7x4 Date: Sat, 4 Jul 2026 19:24:40 +0900 Subject: [PATCH] crypto/shared_secrets --- crypto/shared_secrets/encryption.py | 30 +++++++++++++++++++++++++++++ crypto/shared_secrets/message.txt | 5 +++++ crypto/shared_secrets/solve.py | 13 +++++++++++++ 3 files changed, 48 insertions(+) create mode 100644 crypto/shared_secrets/encryption.py create mode 100644 crypto/shared_secrets/message.txt create mode 100755 crypto/shared_secrets/solve.py diff --git a/crypto/shared_secrets/encryption.py b/crypto/shared_secrets/encryption.py new file mode 100644 index 0000000..7ecbc0e --- /dev/null +++ b/crypto/shared_secrets/encryption.py @@ -0,0 +1,30 @@ +from Crypto.Util.number import getPrime +from random import randint + +# Public parameters +g = 2 +p = getPrime(1048) + +# Server's secret +a = randint(2, p-2) +A = pow(g, a, p) + +# Client secret +b = '???' + +B = pow(g, b, p) + +# Shared key +shared = pow(A, b, p) + +# Encrypt flag +flag = b"picoCTF{...}" +enc = bytes([x ^ (shared % 256) for x in flag]) + +# Write challenge info +with open("file.txt", "w") as f: + f.write(f"g = {g}\n") + f.write(f"p = {p}\n") + f.write(f"A = {A}\n") + f.write(f"b = {b} \n") + f.write(f"enc = {enc.hex()}\n") diff --git a/crypto/shared_secrets/message.txt b/crypto/shared_secrets/message.txt new file mode 100644 index 0000000..c68b4e9 --- /dev/null +++ b/crypto/shared_secrets/message.txt @@ -0,0 +1,5 @@ +g = 2 +p = 2353855297163603230718659874235969189211904801854831749272164556125452734594903161934794163403497762726605985627409234420965176613218858624400366466853770681834062810872998733968827992223178685800438220675248064587881077258421057484096470778462916510705650691145000008812988897851274637295629476960165825128891910793 +A = 30068494220298681891330724690865821714005524540061986470484739235070782982875821399659951687122702703103707881496322805008910484300535488856317760253374747778591137899431437661178126794196697625682849937450966265318752778435469929326325997632296225043026449906879570022308070668814741550246868893784772044251768510 +b = 2252298426168643058908675994457951125000150972241848576912471697630407791150123415344081881294633730616725212738161375429295138914772118107750191302567546774258844274932453145325172167340764005882111243473134993891638369747707408050760320040529699904616084248365714753162172475940998916650267854128138430013641052250 +enc = 839a909cb0a7b588979bac80c09081c087acc291c1c696c2ca958e diff --git a/crypto/shared_secrets/solve.py b/crypto/shared_secrets/solve.py new file mode 100755 index 0000000..8760bc2 --- /dev/null +++ b/crypto/shared_secrets/solve.py @@ -0,0 +1,13 @@ +#!/usr/bin/env python3 + +g = 2 +p = 2353855297163603230718659874235969189211904801854831749272164556125452734594903161934794163403497762726605985627409234420965176613218858624400366466853770681834062810872998733968827992223178685800438220675248064587881077258421057484096470778462916510705650691145000008812988897851274637295629476960165825128891910793 +A = 30068494220298681891330724690865821714005524540061986470484739235070782982875821399659951687122702703103707881496322805008910484300535488856317760253374747778591137899431437661178126794196697625682849937450966265318752778435469929326325997632296225043026449906879570022308070668814741550246868893784772044251768510 +b = 2252298426168643058908675994457951125000150972241848576912471697630407791150123415344081881294633730616725212738161375429295138914772118107750191302567546774258844274932453145325172167340764005882111243473134993891638369747707408050760320040529699904616084248365714753162172475940998916650267854128138430013641052250 +enc = "839a909cb0a7b588979bac80c09081c087acc291c1c696c2ca958e" + +shared = pow(A, b, p) + +enc_bytes = [int(enc[i:i+2], 16) for i in range(0, len(enc), 2)] +flag = bytes([x ^ (shared % 256) for x in enc_bytes]) +print(flag.decode())