撲克學院 上桌玩

本站指南

怎麼確認這桌沒有作弊:逐張可驗證洗牌

入門閱讀 4 分鐘

牌是伺服器發的,你憑什麼相信河牌沒被換掉?這裡每一手都能由你的瀏覽器自己驗證。也講清楚它證明不了什麼。

線上撲克最常被問的一句話:「是不是被控牌了?」

這個問題很合理。牌是伺服器發的,你看不到洗牌。所以我們做了一件事:讓你自己驗證,不用相信我們。

做法:先蓋章,後揭曉

想像發牌員在發牌前,把整副牌的順序每一張分別寫在一張紙上,各自封進信封,信封全部攤在桌上給大家看。牌局結束後,把翻開過的那幾張牌對應的信封拆開,大家對一下:跟當初封進去的一不一樣?

站上的做法一樣,只是信封換成數學:

  1. 發牌之前,伺服器對 52 個位置上的每一張牌各算一個雜湊(一串像亂碼的數字,公布給所有人)。
  2. 雜湊有一個特性:從牌算出雜湊很容易,但從雜湊反推是哪張牌做不到,而且換一張牌,雜湊就完全不同。
  3. 牌局結束後,伺服器揭露那些公開過的牌和計算用的資料。
  4. 你的瀏覽器自己重算一次雜湊,跟發牌前公布的比對。

對得上,就代表這些牌在第一張牌發出去之前就已經定在那個位置了。

為什麼是「每一張」各自封

如果整副牌只做一個雜湊,驗證時就得公開整副牌的順序,連蓋牌的人的底牌都會被看到。真實牌桌上蓋掉的牌永遠不該被翻開:那會讓人知道對手棄掉了什麼。

每一張各自封起來,就可以只拆開公開過的那幾封,其他的永遠不打開。

每張牌還加了一段隨機的「鹽」再算雜湊。不加的話,位置只有 52 種、牌也只有 52 種,總共 2704 種組合,任何人一秒內就能全部算出來反查,信封就等於透明的。

在哪裡看

牌桌上方有一個洗牌驗證按鈕。每打完一手,裡面會出現那一手的結果:

  • 「✓ 幾張牌都符合承諾」:全部對得上。
  • 「✗ 幾張對不上」:有牌跟發牌前公布的不一樣。這不應該發生,如果你看到了,請截圖回報。

它證明什麼、不證明什麼

把界線講清楚,比喊「絕對公平」有用。

它證明:牌的順序在任何人行動之前就固定了。 伺服器不可能因為你全押了、或看到你的底牌,就在中途換掉轉牌或河牌。這是大家最擔心的那種控牌。

它不證明:伺服器在洗牌那一刻沒有挑一副對某人有利的牌。 要擋這個,需要每位玩家也提供一個隨機數一起參與洗牌,那是之後的計畫。

小測驗

點一個答案就會看到解說。

  1. 1「先公布雜湊、後揭露牌」主要能防止什麼?

  2. 2為什麼每張牌各自算雜湊,而不是整副牌算一個?

  3. 3這個機制能不能證明伺服器洗牌時沒有挑牌?