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.

Zar mührü nasıl çalışır?
- 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-XF1Rgibi kısa bir mühür kodu. Mühür zarları göstermeden sabitler. - 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.
- 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:
| Zar | Olasılık | Yaklaşık |
|---|---|---|
| Herhangi bir çift | 36'da 6 | 6'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 6 | 36'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
- Taahhüt. Sunucu 32 baytlık gizli bir
seedseçer ve herhangi bir katkıdan önce iki oyuncuyacommitment = 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. - Katkı. Her oyuncu 32 rastgele bayt gönderir; ikisi de gelene kadar gizli tutulur.
- Türetme.
n. atış içinHMAC-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 baytbayt % 6 + 1ile zara çevrilir. Kabul edilen ilk iki bayt zarları verir; blok yetmezse block 1 ile devam edilir. - 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:
| settingsHash | ba91d0154f4719ca8065d819a50dcc7d7c3b2e0633422a88be8d4f75c3c7d471 |
|---|---|
| commitment | 2c91febc38f87d46a87ef00cd5cb15525db8a7b00c9dae0adc98d45437f78ad2 |
| mühür kodu | 5J8Z-XF1R |
| 0. atış, block 0 | 79acb93aaa5b9f70328a4a542cb481f75f5141076d55e85b0e9e3c9e3ade6712 |
| ilk zarlar | 121 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
- Oyundan sonra zar mührünü, ardından Teknik ayrıntılarbölümünü aç ve Kanıtı indir (.json) düğmesine dokun.
- Doğrulayıcıyı çalıştır (Node 22 veya üstü):
Oyundan önce gördüğün mühür özetini gir. Makinenin okuyacağı çıktı içinnpx tavlarena-dice --lang tr --expected-commitment <mühür özeti> tavlarena-dice-<oyun>.json--jsonekle. Çı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.