News

Adil bir oyun sunucusu neden kimseye güvenmez, bize dahil

Sunucu yetkili ne demek: tahtayı sunucu tutar, her hamleyi kaynağında doğrular ve commit-reveal zarlar evin kendisini bile dürüst tutar.

fair playengineeringprovably fair

Sunucu yetkili demek, oyunun sayılan tek kopyasını sunucunun tutması demektir. Cihazınız oynamak istediğiniz hamleyi gönderir, sunucu onu kendi zarlarına ve kendi kurallarına göre denetler, ve tahta ancak o zaman değişir. Değiştirilmiş bir uygulama istediğini iddia edebilir: gerçek, onun ulaşamayacağı bir yerde yaşar.

Tavla bu disiplini hak eder. Merdiveni ve potu olan bir zar oyunudur; yani hile yapmanın iki yolu vardır: hamlelerinizi sahtelemek ya da atışları bükmek. Adil bir sunucu iki kapıyı da kapatmak zorundadır. İkinci kapı bizi de içerir, ona da geleceğiz.

Sunucu yetkili aslında ne demek?

Her canlı Orion maçı tam olarak tek bir yerde vardır: bizim sunucumuzda. Telefonunuzdaki tahta bir penceredir, oyun değil. Bir pulu sürüklediğinizde uygulama onu hareket ettirmez. Küçük bir mesaj gönderir: oynamak istediğim şey bu. Sunucu bu niyeti kendi tahtasına karşı, kendi kural motoruyla ve o tur için attığı zarlarla yeniden oynar. Kurallı hamleler oyunu ilerletir ve iki oyuncu da aynı yeni pozisyonu alır. Kuraldışı hamleler hiç olmamıştır.

Bu, herkes için tek bir sunucudur. iOS uygulaması yerel SwiftUI, Android uygulaması yerel Jetpack Compose ve ikisi de aynı arka uca ve aynı oyuncu havuzuna açılan pencerelerdir. Farklı cam, aynı gerçek.

İstemciye güvenen oyunlar neden hileye uğrar?

Çünkü rakibinizin cihazı rakibinize aittir. Üzerinde çalışan her şey değiştirilebilir. Yamalanmış bir istemci hiç kurallı olmamış hamleler gönderebilir. Bir bellek düzenleyici bir sayıyı yerinde yeniden yazabilir ve ekran bu yalanı sadakatle gösterir. Bunların hiçbiri egzotik değil. Araçlar ücretsiz, belgelenmiş ve akıllı telefonlardan eski.

İstemciye güvenen bir oyun, her oyuncudan kaportanın altına bakmayacağına söz vermesini ister. Bazıları bakar. Biz de istemcinin görüşünü önemsiz kıldık. Orion'da uygulamanın tam olarak üç işi vardır:

  • Çizmek: tahtayı, pulları, dabıl zarını, süreyi.
  • İstemek: sunucudan bir hamle oynamasını, dabıl önermesini, çekilmeyi rica etmek.
  • Almak: sunucunun gerçek dediği pozisyonu göstermek.

Zar atmak, kurallılığı yargılamak ve tek bir pulu oynatmak bu listede yok. Bir sonucu belirleyen hiçbir şey bir cihazda doğmaz.

Bir hamle oynadığımda ne olur?

Siz oynarsınız.. Uygulamanız niyeti gönderir: şu pul, şu haneler. Cihazınızda hiçbir şey gerçek tahtayı değiştirmez.

Sunucu onu yeniden oynar.. Kural motorumuz hamleyi sunucunun tahtasına ve sunucunun zarlarına karşı çalıştırır. Kurallıysa oyun ilerler. Değilse, hangi uygulama göndermiş olursa olsun kaynağında reddedilir.

İki taraf da aynı gerçeği alır.. Yeni pozisyon iki oyuncuya da gider. Bağlantınız koparsa, tur saatinin yeniden bağlanma payı koltuğunuzu tutar ve tahtaya gerçekte olduğu haliyle dönersiniz, telefonunuzun son hatırladığı haliyle değil.

Bahisler de aynı kurala uyar. Girişli bir maç başladığında sunucu iki anteyi de emanete alır. Pot tek bir defterde, sunucuda yaşar ve oyun bitince orada kapanır. Hiçbir istemciye ne kazandığını sandığı asla sorulmaz. Altınlar ve mücevherler sanaldır, gerçek karşılığı ve nakde çevrimi yoktur; yine de o defteri değerli bir şey taşıyormuş gibi tutarız, çünkü öyle: skora duyduğunuz güveni taşır.

Sunucunun kendisinin hile yapmasını ne engelliyor?

Doğru soru bu ve çoğu oyun bunu hiç sormamanızı umar. Zarları gizlice atan bir sunucu, kayırdığı taraf için nazikçe atabilir ve siz bunu asla göremezsiniz. Her atış makul görünür. Zarlar bunu yapar.

Bu yüzden o gücü kendimizden aldık. Bir oyun başlamadan önce sunucu gizli bir tohum üretir ve ona SHA-256 taahhüdü yayınlar. Sonra her atış o tohumdan HMAC-SHA256 ile, sırayla, teker teker türetilir. Oyun bitince sunucu tohumu açıklar. Herkes tohumun ilk atıştan önce verilen taahhütle eşleştiğini ve oyundaki her atışın ondan çıktığını kontrol edebilir. Kriptografik anlamda zarlarınız, iki oyuncudan hiçbiri pula dokunmadan önce sabitlenmişti. On ikinci atışı, sıfırıncı atışta yayınladığımız sözü kırmadan bükemezdik.

Bunların hiçbiri için bize güvenmek zorunda değilsiniz. orion.arthea.ai/verify adresindeki doğrulayıcı tüm zinciri tarayıcınızda, Web Crypto ile, sizin makinenizde, oyunun kamuya açık kaydından yeniden hesaplar. Hesap gerekmez. Uygulama gerekmez.

İki yarım nasıl birbirine kenetlenir?

Sunucu yetkisi ve commit-reveal zarlar tek bir tasarımın iki yarısıdır ve her biri diğerinin kör noktasını kapatır. Hamleleri doğrulayan ama gizlice zar atan bir sunucu size eve güvenmenizi söyler. Güvenen bir sunucudaki taahhütlü zarlar ise her yabancının uygulamasına güvenmenizi ister. Birlikte döngüyü kapatırlar. İstemci bir hamleyi sahteleyemez, çünkü sunucu her hamleyi kaynağında yeniden oynar. Sunucu bir atışı ayarlayamaz, çünkü her atış oyundan önce yayınlanan bir taahhüde zincirlidir. Masadaki hiç kimsenin, onu inşa edenler dahil, sonuç üzerinde denetlenmemiş gücü yoktur.

İstemci hamle sahteleyemez. Sunucu atış sahteleyemez. Geri kalan her şey süstür.

orion.arthea.ai/go kapısı App Store ve Google Play bağlantılarını taşır ve şu anda neyin mevcut olduğunu her zaman gösterir. Doğrulayıcı bilerek önce geldi: adilliğin kanıtı, ilk gerçek pot oynanmadan önce var olmalı.

Türkçe yazılar