My favourite number - PascalCTF-2025 - Crypto

Описание
Alice and Bob are playing a fun game, can you guess Alice’s favourite number too?

Файлы
my-favourite-number.py
output.txt

Содержимое файла my-favourite-number.py:

from Crypto.Util.number import getPrime,bytes_to_long
import os

FLAG = os.environ["FLAG"]
assert FLAG.startswith("pascalCTF{")
assert FLAG.endswith("}")

e = 65537

alice_p, alice_q = getPrime(1024), getPrime(1024)
alice_n = alice_p * alice_q

print(f"hi, i'm Alice, my public parameters are:\nn={alice_n}\ne={e}")

def sendToAlice(msg):
    pt = bytes_to_long(msg.encode())
    assert pt < alice_n
    ct = pow(pt, e, alice_n)
    print(f"bob: {ct}")

bob_p, bob_q = getPrime(1024), getPrime(1024)
bob_n = bob_p * bob_q

print(f"hi Alice! i'm Bob, my public parameters are:\nn={bob_n}\ne={e}")

def sendToBob(msg):
    pt = bytes_to_long(msg.encode())
    assert pt < bob_n
    ct = pow(pt, e, bob_n)
    print(f"alice: {ct}")


alice_favourite_number = bytes_to_long(FLAG.encode())
assert alice_favourite_number < 2**500

sendToBob("let's play a game, you have to guess my favourite number")

upperbound = 2**501
lowerbound = 0
while upperbound - lowerbound > 1:
    mid = (upperbound + lowerbound) // 2
    sendToAlice(f"Is your number greater than {mid}?")
    if alice_favourite_number > mid:
        sendToBob(f"Yes!, my number is greater than {mid}")
        lowerbound = mid
    else:
        sendToBob(f"No!, my number is lower or equal to {mid}")
        upperbound = mid

sendToAlice(f"so your number is {upperbound}?")
assert upperbound == alice_favourite_number
sendToBob("yes it is!")
sendToAlice("that's a pretty cool number")

Функция sendToAlice:

alice_p, alice_q = getPrime(1024), getPrime(1024)
alice_n = alice_p * alice_q

print(f"hi, i'm Alice, my public parameters are:\nn={alice_n}\ne={e}")

def sendToAlice(msg):
    pt = bytes_to_long(msg.encode())
    assert pt < alice_n
    ct = pow(pt, e, alice_n)
    print(f"bob: {ct}")

Числа alice_p, alice_q приватные.
Числа Nalice_, alice_e публичные.
Используя функцию sendToAlice Боб может зашифровать сообщение для Алисы, зная публичными параметры alice_N, alice_e.
Расшифровать это сообщение может тоолько Алиса. Боб не сможет расшифровать т.к. не знает alice_p, alice_q.

Как перехватить и расшифровать TLS-трафик curl

Иногда в целях отладки хочется посмотреть содержимое https трафика.
Например, клиент с помощью cURL взаимодействует с публичный API сервера.
Но иногда что-то идет не так. Клиент не получает ответ, хотя сервер залогировал, что запрос был успешно выполнен и ответ был отправлен. Выглядит что где-то среди различных проксей и различных подсетей что-то теряется.
В этом случае можно попробовать записать сетевую активность между клиентом и сервисом в разных местах, расшифровать данные, сопоставить запросы и ответы и проверить не потерялось ли что-то.

Advent of Code 2024

Advent of Code 2024 успешно завершился!

Каждый день с 1 по 25 декабря открывались по 2 задачи.
Обычно первая задача простая, для понимания всех условий задачи.
Вторая - более сложная, с измененными условиями так, что решение из первой задачи уже не подходит и приходится сильно оптимизировать алгоритм решения или использовать совершено другой подход.

Первая половина заданий была относительно простой, в то время как для решения финальных задач потребовались подсказки.

В целом, это была отличная возможность вспомнить алгоритмы.

Web server in Assembler

Для изучения ассемблера предлагается создать простой веб-сервер, который будет эмулировать базу данных key-value.

  • Сервер должен поддерживать эндпоинты:
    • GET /{key} - получить значение по ключу key.
    • POST /{key} - сохранить значение из тела запроса по ключу key.
  • Сервер должен поддерживать параллельную обработку запросов.
  • Сервер должен хранить все данные на диске.
  • Весь код сервера должен быть на ассемблере.

Т.к. писать код на ассемблере сложно и недостаточно комфортно, то допустимы упрощения.

AES-CBC - Padding Oracle Attack

Padding Oracle Attack — это криптографическая атака, которая эксплуатирует механизм паддинга в некоторых схемах шифрования, таких как CBC (Cipher Block Chaining), использующий симметричное шифрование, например AES. Она позволяет злоумышленнику расшифровывать или изменять данные, не зная ключа шифрования.

С помощью этой атаки можно:

  • Расшифровать зашифрованное сообщение
  • Зашифровать произвольное сообщение

LeetCode - One-Year Challenge

Завершился челендж ежедневного решения задач на LeetCode на протяжении года (за исключением отпусков).

За год решил 707 задач. Из них: 261 - легкий уровень, 365 - средний уровень, 81 - сложный уровень.

В основном решал ежедневные задачи и среди “избранных” тем. Самые интересные темы: Trie, Dynamic Programming, Design.

Почти все задачи решены на языке C++.
Пробовал решать на Go. Go не подходит для алгоритмических задач, слишком ограничен. Язык C++ поддерживает намного больше концепций, позволяющих решить задачу более красиво и оптимальнее.

Решал задачи для подготовки к алгоритмическим секциям на интерью. Все секции успешно пройдены.
Больше не планирую заниматься решением задач на алгоритмы. Если хочется что-то порешать, то лучше попробовать CTF задачи. Это намного практичнее и разнообразнее.

amyasnikov - LeetCode Profile

Мой профиль: amyasnikov - LeetCode Profile

CTF - Прометей 2077 - Tinkoff 2024

Ссылка на задачу
Прометей 2077

Описание
Греческие боги наносят ответный удар.
Они забрали у всех пользователей интернета эмодзи 🔥 и запечатали его в надёжной таблице Sacred рядом с другими артефактами.
Герой с ником Prometheus решил выкрасть огонёк. Помогите ему и верните огонь в интернеты и переписки.

Форум
t-fire-oudjc9cv.spbctf.net

Исходный код форума
fire_64f7cd8.tar.gz

CTF - Галера - Tinkoff 2024

Ссылка на задачу
Галера

Описание
Аутстафф-компания заманила разработчиков интересными задачами, а потом заперла их на настоящей галере, приковала к вёслам и отправила в плавание.
Освободите команду.

Приложение программы корпоративной лояльности: Galera_be1756d.ipa

Приложение
galera.zip

CTF - robotrickster - Reverse - Tinkoff

Ссылка на задачу
Робошулер

Описание
В космопоездах беда: появился обаятельный андроид-шулер, который обыгрывает всех в наперстки и обирает до нитки
Совершите маленькую шалость — выиграйте у робошулера весь миллион монет, которые звенят в его карманах.

Android приложение
robotrickster.zip

CTF - luckyticket - Cryptography - Tinkoff

Ссылка на задачу
Счастливый билетик

Описание
Талантливый разработчик хочет устроиться в бигтех, но боится неудачи. Он планирует съесть сто счастливых билетиков. И у него нет времени их искать, да и в кармане только 5000 ₽.
Заставьте терминал городского транспорта выдать ему пачку счастливых билетов — с равной суммой первых и последних трех цифр.

Терминал
t-luckyticket-w8mg6qr0.spbctf.ru

Исходный код терминала
luckyticket.tar.gz

CTF - ROSSAU - Cryptography - osu!gaming

Ссылка на задачу
crypto/ROSSAU

Описание
My friend really likes sending me hidden messages, something about a public key with n = 5912718291679762008847883587848216166109 and e = 876603837240112836821145245971528442417.
What is the name of player with the user ID of the private key exponent? (Wrap with osu{})

CTF - Alice doesn't know algebra - Cryptography - Codeby.games

Ссылка на задачу
Alice doesn’t know algebra

Описание
Alice took a long time to decide which exponent to choose when encrypting the key. In the end, she decided to use both…

Сложность
Medium

Сервер
62.173.***.***:11***

Файлы
Alice_doesnt_know_algebra.zip