怎麼確認這桌沒有作弊:逐張可驗證洗牌
牌是伺服器發的,你憑什麼相信河牌沒被換掉?這裡每一手都能由你的瀏覽器自己驗證。也講清楚它證明不了什麼。
線上撲克最常被問的一句話:「是不是被控牌了?」
這個問題很合理。牌是伺服器發的,你看不到洗牌。所以我們做了一件事:讓你自己驗證,不用相信我們。
做法:先蓋章,後揭曉
想像發牌員在發牌前,把整副牌的順序每一張分別寫在一張紙上,各自封進信封,信封全部攤在桌上給大家看。牌局結束後,把翻開過的那幾張牌對應的信封拆開,大家對一下:跟當初封進去的一不一樣?
站上的做法一樣,只是信封換成數學:
- 發牌之前,伺服器對 52 個位置上的每一張牌各算一個雜湊(一串像亂碼的數字,公布給所有人)。
- 雜湊有一個特性:從牌算出雜湊很容易,但從雜湊反推是哪張牌做不到,而且換一張牌,雜湊就完全不同。
- 牌局結束後,伺服器揭露那些公開過的牌和計算用的資料。
- 你的瀏覽器自己重算一次雜湊,跟發牌前公布的比對。
對得上,就代表這些牌在第一張牌發出去之前就已經定在那個位置了。
為什麼是「每一張」各自封
如果整副牌只做一個雜湊,驗證時就得公開整副牌的順序,連蓋牌的人的底牌都會被看到。真實牌桌上蓋掉的牌永遠不該被翻開:那會讓人知道對手棄掉了什麼。
每一張各自封起來,就可以只拆開公開過的那幾封,其他的永遠不打開。
每張牌還加了一段隨機的「鹽」再算雜湊。不加的話,位置只有 52 種、牌也只有 52 種,總共 2704 種組合,任何人一秒內就能全部算出來反查,信封就等於透明的。
在哪裡看
牌桌上方有一個洗牌驗證按鈕。每打完一手,裡面會出現那一手的結果:
- 「✓ 幾張牌都符合承諾」:全部對得上。
- 「✗ 幾張對不上」:有牌跟發牌前公布的不一樣。這不應該發生,如果你看到了,請截圖回報。
它證明什麼、不證明什麼
把界線講清楚,比喊「絕對公平」有用。
它證明:牌的順序在任何人行動之前就固定了。 伺服器不可能因為你全押了、或看到你的底牌,就在中途換掉轉牌或河牌。這是大家最擔心的那種控牌。
它不證明:伺服器在洗牌那一刻沒有挑一副對某人有利的牌。 要擋這個,需要每位玩家也提供一個隨機數一起參與洗牌,那是之後的計畫。
小測驗
點一個答案就會看到解說。
-
1「先公布雜湊、後揭露牌」主要能防止什麼?
牌序在發牌前就被「蓋章」了,之後換任何一張,雜湊都會對不上。
-
2為什麼每張牌各自算雜湊,而不是整副牌算一個?
整副牌一個雜湊的話,驗證就要公開整副牌序,蓋掉的底牌也會曝光。
-
3這個機制能不能證明伺服器洗牌時沒有挑牌?
它證明的是「發牌後沒有換牌」。洗牌那一刻的公平,需要玩家提供的隨機數一起參與。