백개먼 주사위 공정성: 서버 쪽 RNG는 실제로 어떻게 작동하는가

온라인으로 백개먼을 두는 사람이라면 누구나 한 번쯤 같은 검색어를 쳐 봤습니다. 주사위가 조작된 건 아닐까? 이 물음에는 광고 문구로 어깨를 으쓱하는 대신 진짜 답이 필요합니다. 여기 그 기술적인 답을 적습니다. 디지털 주사위는 어디에서 나오는지, 무엇이 실제로 잘못될 수 있는지, 그리고 제대로 지은 게임이 어떻게 약속이 아니라 구조로 굴린 주사위를 모두의 손이 닿지 않는 곳에 두는지에 대한 이야기입니다.

디지털 주사위는 어디에서 태어나는가

실제 주사위를 무작위로 만드는 것은 물리입니다. 구르고, 튕기고, 천에 부딪힙니다. 디지털 주사위는 난수 생성기(RNG)가 내놓는 숫자입니다. 흔히 하드웨어의 도움을 받는 소프트웨어이고, 하는 일은 하나입니다. 아무도 예측하거나 재현할 수 없는 값을 내놓는 것입니다.

그러나 생성기가 다 같지는 않습니다. 음악 재생 목록을 섞는 데 쓰는 정도의 평범한 의사난수 생성기는 시작값, 곧 시드 하나로 수열 전체가 완전히 결정됩니다. 시드와 알고리즘을 알면 그 생성기가 앞으로 내놓을 모든 「무작위」 숫자를 알 수 있습니다. 재생 목록에는 충분하지만 걸린 것이 있는 게임에는 쓸모가 없습니다. 진지한 게임은 암호학적으로 안전한 생성기(CSPRNG)를 씁니다. 하드웨어 잡음, 시간의 미세한 흔들림, 운영체제 이벤트의 혼돈처럼 현실 세계의 엔트로피로 계속 다시 시드를 받는 물건입니다. 이것을 정의하는 성질이 바로 주사위 게임에 필요한 그 성질입니다. 이전 출력을 전부 지켜본 공격자조차 다음 값을 예측할 수 없습니다.

더 중요한 질문: 그것이 어디에서 도는가

여기서부터가 대부분의 플레이어가 물어볼 생각조차 하지 않는 대목입니다. 어떤 생성기가 여러분의 주사위를 만드는지보다 그것이 어디에서 도는지가 훨씬 중요합니다. 주사위가 플레이어의 기기에서 만들어진다면, 알고리즘이 아무리 훌륭해도 그 게임은 구조부터 망가져 있습니다. 손댄 클라이언트는 마음에 드는 결과가 나올 때까지 다시 굴릴 수도, 메모리 안의 값을 바꿔치기할 수도, 수를 확정하기 전에 값을 미리 들여다볼 수도 있습니다. 기기 쪽 주사위는 약속일 뿐이고, 약속은 앱에서 패치로 걷어낼 수 있습니다.

올바른 구조는 서버가 권한을 갖는 것입니다. 굴림은 게임 서버에서, 어떤 플레이어의 하드웨어도 닿지 못하는 환경에서 일어납니다. 여러분의 기기는 이미 존재하는 굴림을 받아 화면에서 굴러가는 모습을 보여 줄 뿐입니다. 우리 게임에서는 공정한 플레이 페이지에서 설명하듯 이것이 주사위를 넘어섭니다. 서버가 시도된 모든 수를 규칙에 비추어 검사하고, 양쪽 앱은 서버가 갱신마다 함께 보내는 지문과 자기 판을 끊임없이 대조합니다. 중요한 무엇에 대해서도 플레이어의 기기를 믿어 주는 순간은 없습니다.

이 설계 하나가 부정행위의 여러 갈래를 한꺼번에 없앱니다. 굴림이 자기 차례보다 먼저 존재하므로 누구도 다시 굴릴 수 없습니다. 다음 숫자가 자기 기기에 없으므로 누구도 그것을 미리 읽을 수 없습니다. 그리고 서버와 어긋나는 판은 버려지고 한 번의 왕복 안에 다시 맞춰지므로, 누구도 판을 슬쩍 구부릴 수 없습니다.

「증명 가능하게 공정함」이 실제로 뜻하는 것

오랫동안 업계가 「주사위는 정직한가」라는 물음에 내놓은 답은 인증서였습니다. 실험실이 생성기를 한 번 들여다보고 도장을 찍어 주면, 여러분에게는 그것을 믿으라고 합니다. 우리는 도장보다 더 단단한 것을 받으실 자격이 있다고 생각합니다. 증명 가능하게 공정하다는 말은 우리를 전혀 믿지 않아도 된다는 뜻입니다. 굴림마다 자신의 증거를 지니고 다니기 때문입니다. 방식은 커밋먼트와 차례마다의 교환이며, 모습은 이렇습니다. 양쪽 플레이어가 각자 봉인한 링크 한 묶음, 그리고 우리가 봉인한 봉투 하나입니다.

  • 잠그기. 첫 주사위가 떨어지기 전에 서버가 비밀 시드를 만들고, 결과가 아직 아무에게도 알려지지 않은 그 시점에 그 시드의 암호학적 지문을 여러분에게 건넵니다. 같은 순간 양쪽 앱도 번호를 매긴 자기 링크 묶음을 봉인하고 그 묶음의 지문만 공개합니다. 세 지문은 하나의 기록에 함께 얼어붙습니다. 그래서 나중에 어느 하나도 다른 것으로 바꿔치기할 수 없고, 어느 하나도 자기가 감춘 것을 흘리지 않습니다.
  • 교환. 주사위는 미리 정해져 있지 않습니다. 고정된 공개 수식으로 하나씩 만들어지고, 하나를 만들 때마다 양쪽 묶음에서 링크가 하나씩 필요합니다. 매 차례, 굴릴 사람이 자기 다음 링크를 먼저 공개하고, 상대는 그것이 잠긴 뒤에야 자기 것을 내놓으며, 주사위는 두 링크와 봉인된 시드에서 마지막으로 계산됩니다. 각 링크의 봉인은 자기 묶음의 다음 링크에서 나오므로, 사후에 링크를 바꿔치기할 수 없습니다. 그리고 마지막 미지의 입력이 언제나 판 건너편에 있기 때문에, 그 주사위를 아직 바꿀 수 있는 결정이 하나라도 열려 있는 동안에는 우리를 포함해 누구도 그 주사위를 알 수 없습니다.
  • 확인. 대국이 끝나면 서버가 봉투를 열어 시드를 보여 주고 기록 전체가 공개됩니다. 여러분은 시드를 해시하여, 처음에 건네받은 지문과 맞는지 확인합니다. 시드가 한 번도 바뀌지 않았다는 증거입니다. 그리고 각 링크가 그 편이 커밋한 묶음에 속하는지 확인한 다음, 같은 공개 수식을 직접 돌려 모든 굴림을 스스로 다시 도출합니다. 주사위 하나라도 슬쩍 밀렸다면 재계산이 맞지 않을 것이고, 조작은 부인할 수 없게 드러납니다.

「우리 인증서를 믿으세요」와 「직접 확인해 보세요」의 차이가 이것으로 전부입니다. 우리 주사위가 정직하다고 믿으실 필요는 없습니다. 끝난 대국을 한 판씩, 누구나 돌릴 수 있는 수학으로 확인하실 수 있습니다. 공정한 플레이 페이지에 바로 그 일을 하는 도구가 있습니다. 끝난 대국 하나를 넣어 보시면 공개된 기록에서 모든 굴림이 눈앞에서 다시 도출되는 것을 보실 수 있습니다. 공개된 페이지가 할 수 없는 단 한 가지는 그 기록이 여러분의 대국이 맞다고 확인해 주는 일입니다. 첫 굴림 전에 잠긴 그 지문들의 사본은 여러분의 기기만 가지고 있기 때문입니다. 그 마지막 대조는 앱 안에 있습니다.

증거가 바꾸지 못하는 정직한 사실 하나. 증명 가능하게 공정한 주사위도 여전히 매끄럽지도, 예의 바르지도, 사이좋게 번갈아 나오지도 않습니다. 검증 가능한 시드는 확률이 예측하는 바로 그 빈도로 뭉침과 연속과 가뭄을 만들어 냅니다. 연속이 전혀 없는 흐름이야말로 수상한 쪽입니다. 진짜 무작위는 울퉁불퉁하고, 그래서 그토록 자주 조작처럼 느껴집니다.

공정한 주사위가 조작처럼 느껴지는 이유

여기서 심리 이야기로 넘어갑니다. 주사위가 조작되지 않았을 때에도 조작된 것 같은 느낌은 진짜이기 때문입니다. 잘 알려진 세 가지 편향이 그 일을 합니다.

선택적 기억. 네 차례 연속으로 바에서 댄스한 그 밤은 기억에 남습니다. 그 앞에 있었던 수백 번의 평범한 진입은 기억나지 않습니다. 아픈 결과가 더 진하게 새겨지기 때문에, 오래 둔 플레이어일수록 억울한 순간만 모아 둔 개인 박물관을 하나씩 가지고 다니고 평범한 순간의 기록은 하나도 없습니다.

작은 수의 법칙. 사람은 아주 작은 표본도 장기 평균처럼 생겼기를 기대합니다. 36번 굴리면 각각이 한 번씩 나와야 「할 것」 같지만, 실제 36번 표본은 터무니없이 고르지 않습니다. 어떤 숫자는 아예 없고 어떤 숫자는 세 배로 나옵니다. 백개먼 한 저녁은 아주 작은 표본입니다. 그것을 지배하는 것은 분산이고, 분산은 개인적인 악의처럼 느껴집니다.

손실의 비대칭. 36가지 중 17가지가 나를 맞히면 그것은 부당하게 느껴집니다. 나머지 19가지가 빗나갈 때는 아무 느낌도 없습니다. 백개먼은 30에서 70퍼센트짜리 사건을 끊임없이 판정하므로, 「말도 안 되는」 결과가 정확히 말이 되는 빈도로 꾸준히 공급됩니다.

해독제는 진짜 숫자를 아는 것입니다. 특정한 숫자 하나는 36가지 중 11가지에 나옵니다. 더블은 여섯 번에 한 번꼴로 옵니다. 여섯 핍 떨어진 블롯은 거의 절반의 확률로 맞습니다. 확률 기초 안내서가 표 전체를 펼쳐 놓았고, 그 숫자들이 머리에 자리 잡고 나면 「조작」이라고 느꼈던 순간의 대부분은 그저 평범한 화요일로 분류가 바뀝니다.

동기라는 질문

정직하게 하나 더. 백개먼 운영자에게 조작된 주사위는 얻을 것이 없고 잃을 것만 있습니다. 몇 년씩 남는 경쟁적인 플레이어들이야말로 확률을 세고 이상 징후를 알아채는 바로 그 사람들입니다. 레이팅 시스템은 공개 감사 기록 노릇도 합니다. 주사위가 누군가를 체계적으로 편들었다면 레이팅 분포가 측정 가능한 방식으로 흘러갔을 것입니다. 공정한 주사위는 우리가 연기하는 미덕이 아니라, 실력 게임이 가질 수 있는 유일하게 안정된 사업 모델입니다.

스스로 납득하는 방법

어떤 운영자의 말도 그대로 믿지 마십시오. 우리 말도 마찬가지입니다. 확률 안내서에서 기본 확률을 익히시고, 그 숫자를 머리에 둔 채 자기 대국을 지켜보십시오. 포인트 두 개를 만든 홈보드를 상대로 한 진입 확률, 긴 한 판에서의 더블 빈도, 직접 샷의 적중률 같은 것들 말입니다. 정직한 주사위는 놀라울 만큼 빠르게 표의 예측으로 수렴합니다. 구조의 세부가 궁금하시다면, 커밋먼트와 차례마다의 교환, 서버에서 이뤄지는 굴림, 수마다의 판 검증, Glicko-2 매칭까지, 공정한 플레이 페이지가 우리 테이블이 어떻게 지어졌는지에 대한 완전한 진술이며 검증 도구도 그 안에 있습니다. 그러고 나면 대국을 가르는 변수는 마땅히 그래야 할 그것, 곧 받은 주사위를 얼마나 잘 두는가가 됩니다. 전략 안내서가 바로 그것을 위한 것입니다.

실전에서 연습해 보세요

백개먼을 가장 빨리 배우는 방법은 직접 플레이하는 것입니다. 브라우저에서 바로 실제 플레이어와 대전하세요: 무료, 설치 불필요, 가입도 필요 없습니다.

무료로 백개먼 플레이브라우저에서 · 설치 불필요