News

Как проверить, что твои кости были честными

Каждая партия Orion фиксирует кости через SHA-256 до первого броска. Вставь идентификатор партии на orion.arthea.ai/verify, и браузер пересчитает всё сам.

provably fairdiceguide

Кости в нардах проверяются обещанием, данным до партии и проверенным после неё. Orion публикует обязательство SHA-256 на секретное зерно до твоего первого броска, раскрывает зерно, когда партия заканчивается, и позволяет браузеру пересчитать каждый бросок на orion.arthea.ai/verify по одному лишь идентификатору партии. Если всё сходится, значит кости были зафиксированы до начала игры и никто, включая нас, ими не управлял.

Это чувство знакомо каждому онлайн-игроку. Ты три хода танцуешь на баре. Соперник находит единственное число, которое бьёт и закрывает. За деревянной доской ты бы пожал плечами, потому что видел, как кости вышли из стакана. Онлайн тебя просят поверить числу, рождения которого ты не видел. Мы не хотели просить такого доверия. Мы хотели сделать его проверяемым.

Что на самом деле означает commit-reveal?

Представь запечатанный конверт. Прежде чем ты сядешь, дом записывает внутрь все кости вечера, запечатывает конверт и отдаёт тебе фотографию печати. Когда игра кончается, конверт вскрывают. Если содержимое совпадает с печатью, значит броски существовали раньше самой партии и ничего нельзя было выбрать по ходу дела тебе во вред. Commit-reveal и есть этот конверт, построенный из арифметики. Печать это хеш SHA-256, и никто не может подобрать другое зерно, которое ему соответствует. Четыре шага несут доказательство от нашего сервера к твоему браузеру.

До партии. Сервер берёт секретное случайное зерно и хеширует его через SHA-256. Этот хеш и есть обязательство, и он прикрепляется к твоей партии до первого броска. С этого момента все кости партии уже определены. Сервер опубликовал обещание, которое больше не может править.

Во время партии. Каждый бросок выводится из зерна через HMAC-SHA256: на входе зерно и номер броска, на выходе два кубика. Позиция, счёт, куб, кто вот-вот выиграет: ничто из этого в вычисление не входит. Сервер не выбирает броски. Он зачитывает список, к которому обязался до того, как ты сыграл.

Когда партия заканчивается. Зерно раскрывается и сохраняется вместе с записью партии. Это вскрытие конверта. Любой может захешировать раскрытое зерно и сравнить с обязательством, опубликованным до первого хода, и они обязаны совпасть в точности.

Проверь сам. Открой orion.arthea.ai/verify в любом браузере и введи идентификатор партии. Страница пересчитывает всё локально через Web Crypto, криптографию, встроенную в сам браузер: сначала SHA-256 раскрытого зерна против исходного обязательства, затем каждый бросок партии, кубик за кубиком. Без аккаунта, без приложения, примерно минута.

Полное совпадение устанавливает сразу три факта:

  • Раскрытое зерно хешируется ровно в то обязательство, что было опубликовано до первого броска
  • Каждый бросок партии выводится из этого зерна через HMAC-SHA256, значит ничего не перебрасывали и не подменяли
  • Кости никогда не подстраивались ни под позицию, ни под счёт, ни под игрока

Что доказало бы несовпадение?

Несовпадение было бы не ошибкой отображения. Оно было бы уликой. Если раскрытое зерно не хешируется в обязательство, кости меняли после начала партии. Если хоть один бросок не проходит проверку HMAC, значит кости, которые ты видел, не были теми, к которым обязались. Любой из этих сбоев это доказательство вмешательства, которое каждый может воспроизвести из той же записи, на любой машине, когда угодно.

Именно поэтому ты и не должен его увидеть. Обязательство публикуется первым, до того как сдвинется хоть одна шашка. Дому, который захотел бы подстроить эту партию, пришлось бы заранее опубликовать улику собственной подтасовки, а затем вручить каждому игроку инструмент, чтобы её найти. Мы не просим верить, что мы честны. Мы построили систему так, чтобы это было не нужно.

Никто не может нацелить бросок, запечатанный до начала партии.

Если кости доказуемо честны, почему мне всё равно выпадает плохо?

Потому что честные кости остаются костями. Тебя закроют на баре. Тебе будет нужно что угодно, кроме 2-1, и выпадет 2-1. За тысячи партий числа выравниваются к истинному распределению, но один вечер не обещает ничего. Проверка убирает не невезение, а вопрос под ним. Тот чудесный бросок был зафиксирован до того, как вы оба коснулись шашек, и он не был нацелен на тебя. Знание этого броска не смягчит. Но оно позволяет перестать вести следствие над вселенной и вернуться к позиции.

Кости самое громкое подозрение, но не единственное. Тот же сервер, который обязуется по твоим броскам, ещё и проверяет каждый живой ход у источника, так что изменённый клиент не сможет поставить шашку туда, где правила это запрещают. Честные броски и законные ходы идут от одной и той же власти.

Можно ли попробовать верификатор прямо сейчас?

Да. Верификатор работает уже сегодня на orion.arthea.ai/verify, и в нём есть демонстрационный повтор, так что можно посмотреть полную проверку на примере партии, ничего не устанавливая и не создавая аккаунт. Дверь на orion.arthea.ai/go несёт ссылки на App Store и Google Play и всегда показывает то, что доступно прямо сейчас.