공정한 주사위, 페어플레이
마지막 굴림의 더블에 진 백개먼 플레이어라면 누구나 한 번쯤 생각했을 것입니다. 이 주사위는 공정한가? 그것은 어떤 백개먼 앱에든 던져야 할 올바른 질문입니다. 여기, 우리 주사위가 정확히 어떻게 생성되는지, 왜 우리를 포함해 그 누구도 그것을 기울일 수 없는지, 그리고 게임의 나머지 부분은 어떻게 정직하게 유지되는지를 설명합니다.
완료된 게임을 직접 검증하세요
말은 값싼 법이니, 여기 직접 실행해 볼 수 있는 부분을 보여 드립니다. 경기가 끝나면 우리는 그 서버 시드와, 첫 번째 굴림 이전에 공개했던 커밋먼트, 그리고 양편이 대국 중에 공개한 모든 링크를 공개합니다. 아래에 공개 번들을 붙여 넣거나 경기를 ID로 조회해 보십시오. 이 페이지는 그 기록에서 모든 주사위를 다시 도출합니다. 우리 서버가 실행한 것과 정확히 같은 계산이며, 저장된 값이 맞는지 굴림마다 보여 드립니다. 그 어느 대목에서도 우리 말을 믿으실 필요는 없습니다. 계산은 공개되어 있고 누구나 그대로 반복할 수 있습니다. 이 페이지가 일부러 하지 않는 한 가지는 초록색 「증명 가능하게 공정함」 배지를 주는 일입니다. 정직하게는 그것을 받을 자격이 없기 때문입니다. 첫 굴림 전에 당신의 기기가 적어 두고 잠근 값을 이 페이지는 결코 보지 못하며, 사슬 전체가 정교한 위조로 바뀐 기록도 여기서는 똑같이 완벽하게 다시 도출됩니다. 그것을 배제할 수 있는 것은 기기가 잠근 값과의 바이트 단위 대조뿐이고, 그 값은 오직 당신의 앱만 가지고 있습니다. 그래서 이 페이지의 정직한 상한은 「일관됨」이며, 가장 강한 판정은 앱의 「검증」 화면이 내려 줄 수 있습니다.
주사위: 증명 가능하게 공정하며, 서버에서 굴려집니다
종료된 온라인 대국의 모든 굴림은 우리 게임 서버에서 만들어지며, 우리를 믿으실 필요 없이 증명 가능하게 공정합니다. 첫 굴림 전에 우리는 주사위가 나올 비밀 시드에 대한 커밋먼트를 공개하고, 두 플레이어의 앱도 각자 자기 사슬에 커밋합니다. 이 모두는 누구도 굴리기 전에 하나의 기록으로 고정됩니다. 그다음부터 굴림마다 양편의 사슬에서 새 링크가 하나씩 소모됩니다. 차례인 플레이어가 자기 링크를 턴 시작에 공개하고, 상대는 그것이 잠긴 뒤에야 자기 링크를 내놓으며, 주사위는 맨 마지막에 도출됩니다. 그래서 어떤 주사위든 마지막까지 알 수 없는 입력은 언제나 판 건너편에 있습니다. 시작 주사위도 예외가 아니어서, 양편이 각자 기여하기 전에는 둘 중 어느 것도 존재하지 않습니다. 따라서 각 주사위는 미리 커밋된 값들의 결정론적 결과입니다. 우리를 포함해 누구도 주사위를 고르거나, 다른 값으로 바꾸거나, 조용히 다시 굴릴 수 없습니다. 이는 이미 나온 주사위의 값에 대한 주장이며 거기서 멈춥니다. 대국이 취소되는지, 메시지가 도착하는지, 누구의 시간이 끝났는지는 그 밖의 일입니다. 위의 도구는 끝난 대국의 모든 주사위를 공개된 기록에서 다시 도출합니다. 누구나 같은 계산을 반복할 수 있습니다. 도구가 할 수 없는 일은 그 기록이 당신의 대국임을 확인하는 것입니다. 그러려면 대국 전에 당신의 기기가 잠근 값이 필요하고 그 값은 당신의 앱만 가지고 있으므로, 마지막 한 걸음은 앱의 「검증」 화면에서 이루어집니다.
그에 못지않게 중요한 것은 굴림이 어디에서 일어나는가입니다. 주사위는 결코 당신의 기기에서 생성되지 않으며, 당신의 휴대폰은 서버가 이미 굴린 결과를 표시할 뿐입니다. 이 하나의 설계 결정이 주사위 부정행위의 온 가족을 제거합니다. 변조된 앱은 다시 굴릴 수 없고, 지연 스파이크는 굴림을 복제할 수 없으며, 어떤 클라이언트 측 술수도 다음 숫자를 엿볼 수 없습니다. 다음 숫자는 읽어 갈 수 있는 형태로 당신의 기기에 놓여 있지 않기 때문입니다. 그 숫자는 서버에서, 그것도 양편이 그 턴의 링크를 내놓은 뒤에야 도출됩니다.
그리고 굴림은 결코 조정되지 않습니다. 「참여 곡선」도, 역전 장치도, 연패 중인 플레이어를 위한 밀어주기도 없습니다. 생성기는 누가 이기고 있는지 알지도, 신경 쓰지도 않습니다.
보드: 모든 수마다 검증됩니다
보드 자체가 어긋나거나 조작될 수 있다면 공정한 주사위도 의미가 거의 없을 것입니다. 그래서 게임은 엄격한 서버 권위 모델로 돌아갑니다. 당신의 기기는 보드가 어떻게 생겼는지 서버에 결코 알리지 않고, 오직 당신의 의도만 보냅니다(「이 말을 13포인트에서 8포인트로 옮겨라」). 서버는 그 수를 공식 규칙과 공식 보드에 비추어 검증하며, 규칙에 어긋나는 수는 변조된 클라이언트가 무엇을 주장하든 그냥 거부됩니다.
그다음 이중 확인이 이어집니다. 상태가 갱신될 때마다 서버는 진짜 보드 위치의 간결한 지문(해시)을 방송합니다. 당신의 기기는 자신의 로컬 보드에서 같은 지문을 계산해 비교합니다. 말이 하나라도 다르면, 클라이언트는 자신의 사본을 버리고 서버로부터 다시 동기화합니다. 이렇게 두 플레이어가 언제나 같은 게임을 보고 있음이 증명되고, 어긋남은 한 번의 왕복으로 스스로 치유되며, 오래되었거나 조작된 보드로 플레이할 수 있는 틈은 존재하지 않습니다.
상대: Glicko-2 매치메이킹
공정함은 당신이 누구를 상대하는가와도 관련됩니다. 이곳의 레이팅은 Glicko-2를 사용합니다. Elo의 현대적 후계로, 당신의 실력과 그 추정에 대한 시스템의 신뢰도를 함께 추적하므로, 새 플레이어는 쉰 판 동안 남의 디딤돌이 되는 대신 자신의 진짜 수준으로 빠르게 수렴합니다. 매치메이킹은 당신을 비슷한 레이팅의 상대와 짝지어 주고, 레이팅 대상 결과는 매 게임 후 시스템에 다시 반영됩니다.
그 결과, 이겼을 때는 동급의 상대를 앞선 것입니다. 졌을 때는 배울 진짜 무언가가 있으며, 대개는 전략 가이드에 있습니다.
공정한 주사위는 실제로 어떤 느낌인가
여기 불편한 진실이 있습니다. 진정으로 무작위인 주사위는 대부분의 사람이 예상하는 것보다 기복이 심하게 느껴집니다. 진짜 무작위성은 네 번 연속 더블, 1포인트 보드를 앞둔 진입 실패의 연속, 그리고 마지막 굴림의 기적을, 확률이 예측하는 바로 그 빈도로 만들어 냅니다. 17/36의 샷이 두 번 연속 빗나가는 일은 네 번 중 한 번보다 더 자주 일어납니다. 기억은 어이없는 일을 간직하고 평범한 것은 버립니다. 그래서 노련한 온라인 플레이어라면 누구나 「조작된 주사위」 이야기를 하나쯤 갖고 있지만, 이곳에서는 어떤 통계 감사도 그중 하나조차 뒷받침한 적이 없습니다.
직감을 보정하고 싶다면, 확률 기초 가이드가 진짜 숫자를 펼쳐 놓습니다. 36가지 조합, 모든 거리에서의 적중 확률, 바에서의 진입 확률. 특정한 어떤 숫자든 36번 중 11번 나온다는 것을 알면, 「불가능한 불운」은 「그저 흔한 화요일」로 바뀝니다.
더 깊은 기술적 내용, 즉 생성기의 종류, 커밋-리빌 증명이 작동하는 방식, 그리고 「조작된」 연속에 얽힌 심리를 원하시나요? 블로그에 있습니다. 서버 측 RNG가 실제로 어떻게 작동하는지.
우리의 약속
- 서버에서 생성되는, 증명 가능하게 공정한 주사위: 기기에서 굴려지는 일이 결코 없고, 어떤 플레이어나 상황에도 맞춰 조정되지 않으며, 양편이 첫 굴림 전에 커밋한 입력에서 도출됩니다. 대국이 끝나면 모든 주사위를 공개된 기록에서 다시 도출할 수 있고, 그 대국이 당신의 것이었다는 확인은 앱이 해 줍니다.
- 근원에서의 규칙 집행: 모든 수는 서버가 검증하며, 변조된 클라이언트는 아무것도 얻지 못합니다.
- 지속적인 보드 검증: 갱신마다 해시로 대조하고, 불일치가 있으면 스스로 치유합니다.
- 실력 기반 짝짓기: Glicko-2 레이팅과 레이팅 기반 매치메이킹.
공정한 주사위란, 테이블에 남은 유일한 우위가 실력이라는 뜻이며, 실력은 배울 수 있습니다. 규칙으로 시작하고, 전략으로 다듬은 뒤, 실전에서 시험해 보세요. 아래 테이블은 무료이고, 브라우저에서, 설치 없이 이용할 수 있습니다.