Второй турнир Арены.

Итоги приняты личный турнир на выбывание С прокторингом

Второй легендарный турнир Арены на ctfinf.ru! В предыдущем турнире AlxGonin показал скилл в сфере ИБ и продемонстрировал быструю логику. Останется ли кубок у него? Все кубки победителя навсегда остаются в его профиле, но носить его как действующий кубок Арены сможет только последний победитель турнира.

Кубок чемпиона Арены
Победитель турнира
Победитель получил
инферы 840 +18 рейтинга
Призовой фонд инферы 1 060
Участников 6 из 30 мест
Туров 2
Награды по турам
Тур Победителю матча Проигравшему Лимит
инферырейтингинферырейтинг
Групповой тур · 3 категории инферы 120 +5 — +3 10 мин
Гранд-финал · 3 категории инферы 500 +10 инферы 100 +7 10 мин
Чемпиону турнира сверху инферы 220 +3 ———

Инферы и рейтинг начисляются одной суммой после турнира, когда админ принимает отчёт.

Регистрация закрыта.

Сетка

Сетку можно тянуть мышью ←→

Групповой тур

3 категории на выбор
Победителю тура инферы 120 +5 рейтинга
Проигравшему +3 рейтинга

Гранд-финал

3 категории на выбор
Победителю тура инферы 500 +10 рейтинга
Проигравшему инферы 100 +7 рейтинга
Сверху чемпиону турнира инферы 220 +3 рейтинга

Как всё проходит

  1. 1 Регистрация и чек-ин. В день турнира нужно нажать «Я на месте» — с 19:00 до 19:55 по Москве. Кто не отметился, в сетку не попадает, даже если был зарегистрирован.
  2. 2 Выбор категории. Отмечаясь, вы выбираете категорию первого тура. Рядом с каждой видно, сколько человек её уже выбрали, и менять выбор можно до закрытия чек-ина. Группы первого тура составляют из тех, кто выбрал одно и то же. Если по вашей категории не набралось людей на целую группу, вы попадёте в смешанную группу — она играет категорию того участника, у кого рейтинг выше. Кто не выбрал ничего, получает категорию случайно.
  3. 3 Жеребьёвка. После закрытия чек-ина состав групп определяется жребием. Жребий считается от опубликованного числа — зерна, и любой может пересчитать его сам скриптом внизу этой страницы. Никто не проходит в следующий тур без матча: если участников нечётное число, вместо пропуска появляется группа из трёх человек.
  4. 4 Первый тур — группы по 2–4 человека. Все в группе решают одну и ту же задачу. Побеждает тот, кто первым сдал верный флаг.
    Если выигрываете — проходите в следующий тур. Если проигрываете — выбываете из турнира сразу, дорешивать задачу не нужно.
  5. 5 Дальше — матчи один на один, до Гранд-финала. Перед каждым матчем вы с соперником по очереди убираете категории из списка, пока не останется одна — её задачу вы оба и решаете. Первым убирает тот, у кого рейтинг ниже; последний ход остаётся за тем, у кого рейтинг выше. Если не успели сделать ход до начала тура, его сделает система. До начала матча видны только названия категорий, сами задачи не показываются.
    Если выигрываете — проходите в следующий тур. Если проигрываете — выбываете.
  6. 6 Если задачу не решил никто. Время матча — ровно лимит тура, без продлений. Когда оно вышло и флаг никто не сдал, дальше проходит участник с бо́льшим рейтингом платформы — тем, который был зафиксирован в момент жеребьёвки. Если вы не открыли свой матч в первые 3 минут, а соперник открыл, вам засчитывается поражение.
  7. 7 Призы. По ходу турнира ничего не начисляется — страница показывает только накопленную сумму. Инферы и рейтинг приходят одним начислением после турнира, когда администратор примет отчёт.

У каждого участника свой флаг. Чужой флаг не подойдёт, а попытка сдать его видна в отчёте и засчитывается как поражение в матче. Задача открывается только при включённой демонстрации экрана, подтверждённой администратором.

Жеребьёвка — проверьте сами

Зерно d29b55dd408cf8a5bad95b7edb73c55c, проведена 03.10 19:59 (мск). Скрипт ниже воспроизводит сетку первого тура на вашей машине: если он выведет «совпало», значит состав групп получен из зерна, а не выбран руками.

Показать скрипт на Python
import hashlib, hmac

SEED = "d29b55dd408cf8a5bad95b7edb73c55c"
IDS = [254, 344, 421, 469, 475, 729]          # участники (id), как их взял сервер
SIZES = [3, 3]        # размеры групп первого тура
GROUPS = [[421, 254, 469], [344, 475, 729]]  # что получилось в сетке

def stream(seed, count):
    out, counter = [], 0
    while len(out) < count:
        block = hmac.new(seed.encode(), f"ctfinf-arena:{counter}".encode(),
                         hashlib.sha256).digest()
        out += [int.from_bytes(block[i:i + 4], "big") for i in range(0, 32, 4)]
        counter += 1
    return out[:count]

ids = sorted(IDS)
numbers = stream(SEED, len(ids) - 1)
for step, position in enumerate(range(len(ids) - 1, 0, -1)):
    target = numbers[step] % (position + 1)
    ids[position], ids[target] = ids[target], ids[position]

groups, cursor = [], 0
for size in SIZES:
    groups.append(ids[cursor:cursor + size])
    cursor += size

print(groups)
print("совпало" if groups == GROUPS else "НЕ совпало")

Нужен только стандартный Python 3 — ничего ставить не надо.

Правила

  • В матче все решают одну и ту же задачу. Проходит дальше тот, кто первым сдал верный флаг.
  • Первый тур — группы по 2–4 человека, из группы проходит один. Дальше — матчи один на один.
  • В туре несколько задач — по одной на категорию. Какую задачу играет ваш матч, определяете вы: в первом туре выбором категории на чек-ине, дальше — убирая категории по очереди с соперником.
  • Убирает первым тот, у кого рейтинг ниже, последний ход остаётся за тем, у кого рейтинг выше. Не сделанный вовремя ход система делает сама.
  • До начала матча видны только названия категорий. Названия задач не показываются.
  • Флаг у каждого участника свой. Сдача чужого флага — поражение в матче.
  • Никто не проходит в следующий тур без матча. При нечётном числе участников вместо пропуска составляется группа из трёх человек.
  • Время матча — ровно лимит тура, без автоматических продлений. Если к его концу задачу никто не решил, дальше проходит участник с бо́льшим рейтингом платформы на момент жеребьёвки.
  • Не открыл свой матч в первые 3 минут — поражение, если соперник на месте.
  • В сетку попадают только отметившиеся на чек-ине.
  • Турнир с прокторингом: задача открывается только при включённой демонстрации экрана, подтверждённой администратором.
  • Инферы и рейтинг начисляются одной суммой после турнира: до принятия отчёта админ может оштрафовать или дисквалифицировать участника.

Что происходило

  • Отчёт принят: начислено 460 инферов и 32 рейтинга.
  • Штраф maxcyou: 600 инферов, 10 рейтинга — 80% сделал chatgpt
  • Турнир завершён. Чемпион Арены — maxcyou.
  • Тур 2: maxcyou решил задачу за 3:02 и проходит дальше.
  • Тур 2 стартовал: 1 матч(ей), 10 минут.
  • Драфт тура 2 закончен досрочно — старт через 1 мин.
  • Матч 2#1: после банов играют «forensics».
  • Тур 1 завершён.
  • Тур 1: maxcyou решил задачу за 2:50 и проходит дальше.
  • Тур 1: AlxGonin решил задачу за 2:36 и проходит дальше.
  • Тур 1 стартовал: 2 матч(ей), 10 минут.
  • Статус турнира: running.
  • Жеребьёвка проведена: 6 участников, 2 тур(ов), зерно d29b55dd…
  • Статус турнира: checkin.
  • Статус турнира: registration.
  • Прокторинг включён.