ENTR

Hilesiz tavla: kontrol edebileceğin zarlar

Her oyunun zarları oyun başlamadan mühürlenir. Kimse, biz bile, bu zarları değiştiremez. Oyun bitince cihazın her atışı mühürle karşılaştırır.

Çizim: lacivert bir masada iki beyaz zar ve yuvarlak bir İznik çini rozeti.

Zar mührü nasıl çalışır?

  1. Mühürlenir. İlk zardan önce oyunun bütün zarları kilitlenir. Sen mührü görürsün: küçük bir çini rozeti ve 5J8Z-XF1R gibi kısa bir mühür kodu. Mühür zarları göstermeden sabitler.
  2. Karıştırılır. İki oyuncunun cihazı da karışıma kendi rastgele sayısını ekler. Ne oyunculardan biri ne de tek başına sunucu zarları seçebilir.
  3. Açılır ve kontrol edilir. Oyun bitince mührün arkasındaki gizli sayı açıklanır. Cihazın mühür kodunu bundan yeniden hesaplar ve her atışı tek tek tekrarlar. Kod, oyundan önce gördüğün kodla aynı olmalı; her atış da oynadığın zarla eşleşmeli. Sonunda "Her atış kontrol edildi" yazısını görürsün.

Tahtanın yanındaki "Adilliği kanıtlanabilir zar" rozetine dokunarak bu adımları görebilirsin; oyundan sonra rozet kontrolün sonucunu gösterir.

Neyi kanıtlar, neyi kanıtlamaz?

  • Kanıtlar: zarlar ilk atıştan önce belirlenmiştir, oyun sırasında değiştirilemez ve hiçbir oyuncu zarları yönlendiremez.
  • Kanıtlamaz: TavlArena'da kimsenin zarlara önceden bakamayacağını. Sunucu oyun sırasında gizli sayıyı bilir; zarları değiştiremez ama ilke olarak bilebilir. Bunu açıkça söylüyoruz, çünkü bu tür her sistem için geçerlidir.
  • Bilgisayara karşı oyunlarda zarlar aynı yöntemle kendi cihazında atılır. Bu, zarların oyun başladıktan sonra değişmediğini gösterir; ama gizli sayı senin cihazında olduğu için, cihazı elinde tutanın zarlara önceden bakmasını engellemez.

"Hep rakibe düşeş geliyor"

Adil zarlar da seri yapar. İki zarla eşit olasılıklı 36 sonuç vardır:

ZarOlasılıkYaklaşık
Herhangi bir çift36'da 66'da 1
Belirli bir çift, örneğin düşeş (6-6)36'da 1%2,8
Belirli bir karışık zar, örneğin şeşbeş (6-5)36'da 2%5,6
İki zarın en az birinde 636'da 11%31

5 sayılık bir maçta onlarca kez zar atılır; art arda çift gelmesi ya da uzun süre hiç gelmemesi sık görülür. Mühür, her atışın baştan belirlenen atış olduğunu kontrol etmeni sağlar.

Teknik ayrıntılar

Mühür, iki oyuncunun da katkı verdiği bir "taahhüt et, sonra aç" (commit-reveal) yöntemidir (kodlama v1). Aşağıdaki yöntem, tamamen kendi bilgisayarında çalışan açık kaynaklı doğrulayıcının yaptığının aynısıdır.

Yöntem

  1. Taahhüt. Sunucu 32 baytlık gizli bir seed seçer ve herhangi bir katkıdan önce iki oyuncuya commitment = SHA-256(ctxCommit ‖ gameId ‖ settingsHash ‖ seat0Id ‖ seat1Id ‖ seed) değerini yayımlar. Mühür kodu, bu değerin ilk 40 bitinin Crockford base32 yazımıdır.
  2. Katkı. Her oyuncu 32 rastgele bayt gönderir; ikisi de gelene kadar gizli tutulur.
  3. Türetme. n. atış için HMAC-SHA256(anahtar = seed, ctxRoll ‖ gameId ‖ contribution0 ‖ contribution1 ‖ u32be(n) ‖ u32be(block)) hesaplanır; block 0'dan başlar. Baytlar soldan sağa okunur, 252–255 arası baytlar atlanır, kabul edilen her bayt bayt % 6 + 1 ile zara çevrilir. Kabul edilen ilk iki bayt zarları verir; blok yetmezse block 1 ile devam edilir.
  4. Açıklama. Oyun nasıl biterse bitsin seed yayımlanır; herkes taahhüdü ve her atışı yeniden hesaplayabilir.

Kodlama ayrıntıları (v1)

  • Etki alanı metinleri sonlandırıcısız UTF-8'dir: ctxCommit = "tavlarena-dice-commit-v1", ctxRoll = "tavlarena-dice-roll-v1".
  • UUID'ler, on altılık rakamların yazıldığı sırayla 16 bayttır (GUID'in küçük uçlu sırası değil). Oyuncu kimlikleri koltuk sırasına göredir.
  • settingsHash, kural sürümünü ve bütün kural ve maç ayarlarını içeren kanonik JSON'un SHA-256 özetidir. Kanonik JSON anahtarları UTF-16 kod birimlerine göre sıralar, boşluk içermez, yalnızca güvenli tam sayılara izin verir.
  • Kullanılan her atış sayacı ilerletir: ilk zardaki eşitlikler, Türk usulündeki yeniden atış ve atılan zarlar da dahil. Ek gizli değer (pepper) yoktur.

Test vektörlerinden örnek

sequential-byte-seed vektöründe seed 00'dan 1f'ye kadar baytlar, katkılar ise 20–3f ve 40–5f baytlarıdır:

settingsHashba91d0154f4719ca8065d819a50dcc7d7c3b2e0633422a88be8d4f75c3c7d471
commitment2c91febc38f87d46a87ef00cd5cb15525db8a7b00c9dae0adc98d45437f78ad2
mühür kodu5J8Z-XF1R
0. atış, block 079acb93aaa5b9f70328a4a542cb481f75f5141076d55e85b0e9e3c9e3ade6712
ilk zarlar121 ve 172 baytları → 121 % 6 + 1 = 2, 172 % 6 + 1 = 5

Vektör dosyasında, ilk baytı atlanan bir atış, eşit gelen bir ilk zar ve en büyük sayaç ve blok değerleri dahil 3 örnek vardır. Dosya, yalnızca standart kütüphaneyi kullanan ayrı bir Python uygulamasıyla üretildi.

Bir oyunu kendin kontrol et

  1. Oyundan sonra zar mührünü, ardından Teknik ayrıntılarbölümünü aç ve Kanıtı indir (.json) düğmesine dokun.
  2. Doğrulayıcıyı çalıştır (Node 22 veya üstü):
    npx tavlarena-dice --lang tr --expected-commitment <mühür özeti> tavlarena-dice-<oyun>.json
    Oyundan önce gördüğün mühür özetini gir. Makinenin okuyacağı çıktı için--json ekle. Çıkış kodu 0 ise kanıt doğrulandı; 1 geçersiz kanıt, 2 hatalı girdi demektir.

Doğrulayıcı açık kaynaklıdır (MIT lisansı): GitHub'daki kaynak kodu ve npm paketi.

Sık sorulanlar

Online tavla zarları hileli mi?

Yalnızca TavlArena adına konuşabiliriz: her oyunun zarları ilk atıştan önce mühürlenir, oyundan sonra cihazın kontrol eder ve yöntem herkesin kontrol edebilmesi için yayımlanmıştır.

TavlArena bota yardım etmek için zarı değiştirebilir mi?

Hayır. Botlar sunucuda çalışmaz: bilgisayara karşı oyunda zarları aynı mühürlü yöntemle kendi cihazın atar.

Neden bazen art arda aynı çift geliyor?

Her atış bağımsızdır. Belirli bir çift ortalama 36 atışta bir, herhangi bir çift 6 atışta bir gelir; tekrarlar normaldir.

Bunu kullanmak için kriptografi bilmem gerekir mi?

Hayır. Kontrolü rozet senin yerine yapar ve "Her atış kontrol edildi" der. Teknik kısım, kendisi kontrol etmek isteyenler içindir.

TavlArena. Güncelleme: