engineeringfairnessmultiplayer
Серверний авторитет означає, що сервер зберігає єдину копію партії, яка має значення. Твій пристрій надсилає хід, який ти хочеш зіграти, сервер перевіряє його за своїми кубиками і своїми правилами, і лише після цього дошка змінюється. Змінений застосунок може стверджувати що завгодно: правда живе там, куди він не дотягнеться.
Нарди на цю суворість заслуговують. Це гра з кубиками, драбиною і банком, а отже шахрувати можна двома способами: підробити ходи або зігнути кидки. Чесний сервер мусить зачинити обидві двері. Другі двері включають нас, і до цього ми дійдемо.
Що насправді означає серверний авторитет?
Кожен живий матч Orion існує рівно в одному місці: на нашому сервері. Дошка на твоєму телефоні це вікно, а не гра. Коли ти тягнеш шашку, застосунок її не рухає. Він надсилає коротке повідомлення: ось що я хочу зіграти. Сервер програє цей намір на своїй дошці, своїм рушієм правил, використовуючи кубики, які він кинув для цього ходу. Законні ходи рухають партію вперед, і обидва гравці отримують ту саму нову позицію. Незаконних ходів просто не було.
Це один сервер для всіх. Застосунок для iOS написаний нативним SwiftUI, застосунок для Android нативним Jetpack Compose, і обидва вони вікна в один і той самий бекенд та один і той самий пул гравців. Різне скло, одна правда.
Чому ігри, що довіряють клієнту, обманюють?
Бо пристрій суперника належить супернику. Усе, що на ньому працює, можна змінити. Пропатчений клієнт може надсилати ходи, які ніколи не були законними. Редактор пам'яті може переписати число на місці, і екран чесно покаже брехню. Нічого екзотичного тут немає. Інструменти безкоштовні, задокументовані й старші за смартфони.
Гра, що довіряє клієнту, просить кожного гравця пообіцяти не зазирати під капот. Хтось зазирне. Тому ми зробили думку клієнта несуттєвою. В Orion у застосунку рівно три завдання:
- Малювати: дошку, шашки, куб, таймер.
- Просити: попросити сервер зіграти хід, запропонувати подвоєння, здатися.
- Приймати: показувати ту позицію, яку сервер називає справжньою.
Кидати кубики, судити про законність і рухати хоч одну фішку в цьому списку немає. Ніщо, що вирішує результат, не народжується на пристрої.
Що відбувається, коли я роблю хід?
Ти граєш.. Застосунок надсилає намір: ця шашка, ці пункти. Ніщо на твоєму пристрої не змінює справжню дошку.
Сервер його програє.. Наш рушій правил проганяє хід дошкою сервера й кубиками сервера. Якщо він законний, партія рухається далі. Якщо ні, він відхиляється в джерелі, яким би застосунком його не надіслали.
Обидві сторони отримують одну правду.. Нова позиція йде обом гравцям. Якщо зв'язок обірвався, пільговий час перепідключення тримає твоє місце, і ти повертаєшся до дошки такої, яка вона є, а не такої, якою її запам'ятав твій телефон.
Ставки підпорядковані тому самому правилу. Коли починається матч зі внеском, сервер утримує обидва внески. Банк живе в одному реєстрі, на сервері, і там же розраховується після завершення партії. У жодного клієнта ніколи не питають, скільки він вважає, що виграв. Монети й самоцвіти віртуальні, не мають реальної цінності й не виводяться, і ми все одно ведемо цей реєстр так, ніби в ньому лежить щось коштовне, бо так і є: твоя довіра до рахунку.
Що заважає шахрувати самому серверу?
Це правильне питання, і більшість ігор сподівається, що ти його ніколи не поставиш. Сервер, що кидає кубики потайки, міг би кидати їх прихильно тому, кому симпатизує, і ти б цього не побачив. Будь-який кидок виглядає правдоподібно. Така природа кубиків.
Тому ми відібрали цю владу в самих себе. До початку партії сервер породжує таємне зерно й публікує зобов'язання SHA-256 на нього. Кожен кидок потім виводиться з того зерна через HMAC-SHA256, по одному, по черзі. Коли партія завершується, сервер розкриває зерно. Будь-хто може перевірити, що зерно відповідає зобов'язанню, зробленому до першого кидка, і що кожен кидок партії з нього випливає. У криптографічному сенсі твої кубики були зафіксовані до того, як гравці торкнулися шашок. Ми не змогли б зігнути дванадцятий кидок, не зламавши обіцянки, опублікованої на нульовому.
Вірити нам на слово ні в чому з цього не потрібно. Верифікатор на orion.arthea.ai/verify перераховує весь ланцюг у твоєму браузері, через Web Crypto, на твоїй машині, з публічного запису партії. Без облікового запису, без встановлення. Двері на orion.arthea.ai/go несуть посилання на App Store і Google Play та завжди показують те, що доступне просто зараз.