Playgridia 블로그

온라인 백개먼 주사위는 조작된 걸까? 직접 검증해 보세요

온라인 백개먼의 주사위, 정말 조작되었을까라는 질문에 솔직한 답은 이겁니다: 보통은 알 수 없습니다. 왜냐하면 주사위를 던지는 쪽이 결과도 만들기 때문에 "나를 믿어"라고만 합니다. 하지만 이 판은 다릅니다 — 주사위는 커밋–리빌(commit–reveal)이라 불리는 방식으로 생성되고, 게임이 끝난 후 당신도 직접 다시 계산해서 검증할 수 있습니다.

"조작된 것 같은데"라는 느낌은 증거가 아닙니다

연속으로 두 번 더블이 나오거나 중요한 순간에 정확히 원하는 숫자가 안 나오는 건 정말 답답합니다 — 하지만 우리의 기억은 주사위에 관해서 형편없는 증인입니다. 36개의 가능성 중 하나가 일어날 확률이 36번 던지면 한 번 일어나는 게 정상이고, 연속으로 세 번 맞는 것도 마찬가지입니다. 뇌는 나쁜 일들을 기억하고 평범한 50번의 던짐은 잊습니다. 이것이 의심을 무의미하게 만들지는 않습니다 — 다만 "느꼈다"와 "증명했다"는 다른 겁니다. 아래의 방법이 후자를 줍니다.

방법: 커밋–리빌(Commit–Reveal)

게임의 첫 주사위가 던져지기 전에, 서버는 32바이트의 비밀 숫자(serverSeed)를 생성하고 그 SHA-256 해시 지문(커밋값)만 공개합니다 — 비밀 숫자 자체가 아니라요. 순서가 여기서 중요합니다: 커밋은 누구의 시드도 알려지지 않았을 때, 그리고 단 하나의 주사위도 던져지지 않은 전에 모두에게 공개됩니다. 그러므로 서버가 나중에 "사실 비밀 숫자는 이거였어"라고 거짓말할 수 없습니다 — 해시 지문이 맞지 않기 때문입니다.

그 다음에 각 플레이어가 자기 시드(client seed)를 추가합니다 — 원하는 자유 텍스트, 최대 40자; 아무것도 입력하지 않으면 8바이트의 무작위 시드가 자동 생성됩니다. 당신의 시드는 모든 주사위 계산에 들어가므로, 서버가 당신이 나중에 입력할 시드를 예측해서 그에 맞는 비밀 숫자를 고를 수 없습니다.

각 주사위 던지기는 HMAC-SHA256(serverSeed, "화이트시드:블랙시드:nonce") 공식으로 계산됩니다. 논스(nonce)는 그 던지기의 게임 내 일련 번호입니다. 두 개의 주사위는 이 HMAC 출력의 첫 두 바이트에서 도출되는데 — 하지만 모든 바이트가 아니라, 252 미만의 바이트만 사용합니다. 이유는 순수 수학입니다: 바이트 값을 직접 6으로 나눈 나머지를 취하면(byte % 6) 낮은 숫자들이 약 1.6% 더 자주 나타납니다. 256이 정확히 6으로 나누어떨어지지 않기 때문입니다. 252는 정확히 6×42이므로, 이 임계값 아래의 모든 바이트는 여섯 면을 정확히 동일한 확률로 나타냅니다. 이 세부사항은 누군가 이 일을 정말로 신경 써서 했다는 증거입니다.

게임이 끝나면 비밀 숫자(serverSeed)가 공개됩니다. 그 후로는 두 플레이어뿐 아니라 누구든지 그 게임의 모든 주사위를 다시 계산해서 공개된 해시 지문과 비교할 수 있습니다.

단계무엇이 일어나는가누가 검증할 수 있는가
1. 커밋서버가 32바이트의 비밀 숫자를 생성하고, SHA-256 해시 지문만 공개합니다모두 — 해시 지문은 첫 주사위 전에 공개됨
2. 시드각 플레이어가 최대 40자의 자유 텍스트 시드를 추가합니다플레이어들 — 자기 시드를 알고 있음
3. 던지기각 주사위는 HMAC-SHA256(비밀 숫자, 시드:논스)에서, 252 미만의 바이트로 생성됩니다미리 아무도 — 공개 후에만
4. 공개게임이 끝나면 비밀 숫자 자체가 공개됩니다모두 — 이제 공식을 가짐
5. 검증각 던지기가 다시 계산되고 해시 지문과 비교됩니다모두 — 브라우저에서, 서버를 믿지 않고

이것을 직접 어떻게 확인하나요

판 위에 공정성 패널이 있습니다: 커밋값(해시 지문)을 보여주고 비밀 숫자가 아직 공개되지 않았을 때 열쇠를 "봉인됨"으로 표시합니다. 경기가 끝난 후 리뷰 페이지가 모든 검증을 다시 실행합니다. 여기서 중요한 세부사항이 있습니다: 브라우저의 검증기 코드는 서버의 코드를 가져오지 않습니다 — 독립적으로, 브라우저의 자체 Web Crypto 인프라로 다시 작성되었습니다. 따라서 증거는 서버의 구현을 믿는 것에 달려 있지 않습니다. 당신의 브라우저가 자체 계산을 합니다. 또한 서버 끝점도 사용된 알고리즘의 이름과 함께 결과를 반환합니다 — 소스 코드의 자체 정의로 "증거 자체가 아니라, 편의입니다". 끝난 게임은 공개된 주사위 기록과 함께 400일 동안 보관되므로, 지난 시즌의 의심스러운 게임도 여전히 확인할 수 있습니다.

백개먼 판에 두 개의 주사위(4와 1)가 던져졌으며, 핍 카운트는 GrandDuke210의 경우 153, 봇 상대 AnchorAda의 경우 136으로 표시되고, 체커들이 접촉 상태로 흩어져 있습니다.
주사위 던지기는 판 자체에서 읽을 수 있습니다 — 핍 카운트는 두 플레이어의 이름 옆에 실시간으로 표시됩니다.

판 테마는 주사위를 바꿀 수 없습니다

구조적으로, 주사위 로직이 있는 파일은 그 어떤 함수에서도 판이나 테마 매개변수를 받지 않습니다 — 즉, 어떤 판 테마를 사용하든 어떤 주사위가 나올지에 영향을 줄 수 없습니다. 네 가지 다른 판 디스플레이 중 어느 것을 선택하든, 주사위를 계산하는 코드는 동일하게 유지됩니다.

누가 먼저 시작할지도 같은 시스템이 결정합니다

누가 먼저 두는가를 결정하는 오프닝 롤도 같은 검증 가능한 체인의 일부입니다. 두 사람은 한 번의 던지기의 주사위를 각각 가진 것처럼 취급됩니다 — 하나는 화이트의 주사위, 하나는 블랙의 주사위. 더 높은 숫자가 나오는 쪽이 시작하고, 오프닝에서 두 주사위를 모두 자신의 차례로 두게 됩니다. 두 주사위가 같으면 이것은 비기기로 계산되고 던지기가 반복됩니다 — 하지만 이 반복도 같은 체인의 일부입니다. 논스(nonce)가 증가되면서 기록됩니다. 실제 오프닝 전에 몇 번을 비겼는지도 클라이언트에 별도로 전송되므로, 이 숫자도 당신에게 숨겨지지 않습니다.

백개먼 판에 1과 3 주사위가 던져졌습니다. 화이트 체커 대부분이 1번 포인트에 12개 높이의 더미로 모여 있고, 블랙 상대가 오른쪽 테이블에서 체커를 베어오프하기 시작했습니다. 핍 카운트는 52대 7이고, 중앙의 더블링 큐브는 2를 보여주고, 스코어는 0-0/5입니다.
베어오프 단계에 들어간 한 판: 핍 차이(52대 7)는 경쟁이 이미 끝났다고 말해줍니다. 주사위가 검증 가능하다고 해서 진 게임을 이기게 되지는 않습니다 — 다만 그 이유가 논쟁의 여지가 없게 됩니다.

이 방법이 증명하지 못하는 것들

솔직히 말하자면: 커밋–리빌은 주사위가 커밋 이후 바뀌지 않았고 모두가 그 주사위를 다시 계산할 수 있다는 것을 증명합니다. 커밋 전에 서버가 어떤 비밀 숫자를 선택했는지 미리 알 수는 없습니다 — 하지만 이건 중요하지 않습니다. 당신의 시드도 계산에 들어가므로, 서버가 당신의 기여를 보지 않고 특정 결과를 향해 선택할 수 없습니다. 이것이 방법의 주장입니다. 더도 말고 덜도 말고; 지나친 "모든 것이 증명됨" 약속은 하지 않습니다.

당신의 운도 측정할 수 있습니다

경기 후 검토는 각 던지기에서의 운을, 당신이 정확히 그 순간에 있던 위치에서 계산합니다 — 즉, "주사위에 졌다"는 문장은 여기서 주장이 아니라 게임 자체가 당신에게 내놓은 숫자입니다. 주사위가 정말 나빴는지, 아니면 플레이가 약했는지 구분하고 싶다면, 먼저 규칙을 새로 배우기 위해 백개먼 하는 법 문서를 보고, 그 다음 당신의 수를 향상시키기 위해 백개먼 전략 가이드를 확인해 보세요. 2인 상대방을 찾고 있다면 2인용 온라인 게임 목록도 좋은 시작점입니다.

요컨대: 의심은 정당하지만, 이제 그 의문에 답이 있습니다. 게임에 대해 의심스러울 때 공정성 패널의 봉인된 열쇠를 확인하고, 게임이 끝나면 리뷰 페이지의 검증을 확인하세요. 원하면 직접 계산해도 됩니다. 주사위 자체가 논쟁의 여지가 없게 되고, 남은 유일한 논쟁점은 당신의 게임 플레이의 질입니다.

자주 묻는 질문

온라인 백개먼의 주사위가 정말 조작되었나요?

이 판에서 주사위는 커밋–리빌 방식으로 생성됩니다: 서버가 첫 주사위 전에 비밀 숫자의 SHA-256 해시 지문을 공개하고, 게임이 끝나면 비밀 숫자를 공개하며, 모두가 각 던지기를 다시 계산해서 해시 지문과 비교할 수 있습니다. 서버가 커밋을 공개한 후 결과를 바꿀 수 없습니다. 해시 지문이 맞지 않기 때문입니다.

주사위가 커밋–리빌로 생성되었다는 것을 어떻게 알아요?

판 위의 공정성 패널에서 커밋값(해시 지문)을 보실 수 있고, 비밀 숫자가 아직 공개되지 않았으면 열쇠가 '봉인됨'으로 표시됩니다. 경기가 끝난 후 리뷰 페이지가 모든 주사위를 다시 계산하고 검증합니다. 이 검증은 브라우저에서 서버 코드와 독립적으로 작성된 제어로 실행됩니다.

내 자신의 주사위 시드를 설정할 수 있나요?

네, 게임 사이에 최대 40자의 원하는 자유 텍스트를 자신의 시드(client seed)로 설정할 수 있습니다. 아무것도 설정하지 않으면 8바이트의 무작위 시드가 자동으로 생성됩니다. 어느 쪽이든 당신의 시드는 모든 주사위 계산에 들어갑니다.

판 테마나 색 선택이 주사위에 영향을 주나요?

아니요. 주사위 계산 코드는 그 어떤 함수에서도 판이나 테마 정보를 받지 않으므로, 어떤 판을 선택하든 미래의 주사위가 전혀 바뀌지 않습니다.

이전 경기의 주사위를 나중에 확인할 수 있나요?

네, 끝난 경기는 공개된 주사위 기록과 함께 400일 동안 보관됩니다. 이 기간 동안 리뷰 페이지에서 이전 경기의 모든 주사위를 다시 검증할 수 있습니다.

내 운이 정말 안 좋았는지 어떻게 알아요?

경기 후 검토는 각 던지기에서의 운을 당신이 정확히 그 시간에 있던 위치에 따라 계산하므로, '주사위에 졌다'는 문장은 여기서 주장이 아니라 게임 자체가 당신에게 내놓은 숫자입니다. 이것은 주사위가 아닌지 플레이가 결정적이었는지 구분하는 데 실질적인 숫자를 제공합니다.

백개먼

관련 아티클