News

공정한 서버는 누구도 믿지 않는다, 우리조차

서버 권위란 무엇인가. 서버가 판을 쥐고 모든 수를 근원에서 검증하며, 커밋 방식 주사위가 하우스까지 정직하게 붙든다.

engineeringfairnessmultiplayer

서버 권위란 의미 있는 유일한 대국 사본을 서버가 보관한다는 뜻입니다. 당신의 기기는 두고 싶은 수를 보내고, 서버는 그것을 자기 주사위와 자기 규칙에 비추어 검사하며, 그 뒤에야 판이 바뀝니다. 변조된 앱은 무엇이든 주장할 수 있지만, 진실은 그것이 닿을 수 없는 곳에 삽니다.

백개먼은 이 엄격함을 받을 자격이 있습니다. 사다리와 판돈이 있는 주사위 게임이며, 그것은 속이는 길이 둘이라는 뜻입니다. 수를 위조하거나, 굴림을 구부리거나. 공정한 서버는 두 문을 모두 닫아야 합니다. 두 번째 문에는 우리도 포함되며, 곧 그 이야기를 하겠습니다.

서버 권위란 실제로 무엇을 뜻하는가

진행 중인 모든 Orion 대국은 정확히 한 곳에 존재합니다. 우리 서버 위입니다. 당신 휴대전화의 판은 창이지 대국이 아닙니다. 말을 끌어도 앱이 그것을 옮기지 않습니다. 짧은 메시지를 보낼 뿐입니다. 이렇게 두고 싶다고. 서버는 그 의도를 자기 판 위에서, 자기 규칙 엔진으로, 그 턴을 위해 자기가 굴린 주사위로 다시 실행합니다. 합법적인 수는 대국을 진행시키고 두 플레이어가 같은 새 국면을 받습니다. 불법적인 수는 아예 일어나지 않았습니다.

모두를 위한 하나의 서버입니다. iOS 앱은 네이티브 SwiftUI, 안드로이드 앱은 네이티브 Jetpack Compose이며, 둘 다 같은 백엔드와 같은 플레이어 풀을 향한 창입니다. 유리는 다르고 진실은 같습니다.

클라이언트를 믿는 게임은 왜 속임수에 당하나

상대의 기기는 상대의 것이기 때문입니다. 그 위에서 도는 것은 무엇이든 바꿀 수 있습니다. 패치된 클라이언트는 결코 합법이 아니었던 수를 보낼 수 있습니다. 메모리 편집기는 숫자를 그 자리에서 다시 쓸 수 있고, 화면은 그 거짓말을 충실히 보여줍니다. 이 중 무엇도 이색적이지 않습니다. 도구는 무료이고 문서화되어 있으며 스마트폰보다 오래되었습니다.

클라이언트를 믿는 게임은 모든 플레이어에게 보닛을 열어보지 않겠다고 약속하라 요구하는 셈입니다. 누군가는 열어봅니다. 그래서 우리는 클라이언트의 의견을 무의미하게 만들었습니다. Orion에서 앱의 일은 정확히 셋입니다.

  • 그리기: 판, 말, 큐브, 타이머.
  • 요청하기: 서버에 수를 두어달라고 하고, 더블을 제안하고, 기권하기.
  • 받기: 서버가 진짜라고 말하는 국면을 표시하기.

주사위 굴리기, 합법성 판단하기, 동전 한 닢 옮기기는 그 목록에 없습니다. 결과를 정하는 어떤 것도 기기에서 태어나지 않습니다.

내가 수를 두면 무슨 일이 일어나나

당신이 둡니다.. 앱이 의도를 보냅니다. 이 말, 이 지점들. 당신 기기의 무엇도 진짜 판을 바꾸지 않습니다.

서버가 다시 실행합니다.. 우리 규칙 엔진이 그 수를 서버의 판과 서버의 주사위에 대고 돌립니다. 합법이면 대국이 진행됩니다. 아니면 어떤 앱이 보냈든 근원에서 거부됩니다.

양쪽이 같은 진실을 받습니다.. 새 국면이 두 플레이어에게 갑니다. 연결이 끊겨도 턴 타이머의 재접속 유예가 당신의 자리를 지키고, 당신은 휴대전화가 마지막으로 기억한 판이 아니라 실제 그대로의 판으로 돌아옵니다.

판돈도 같은 규칙을 따릅니다. 참가비가 있는 대국이 시작되면 서버가 양쪽의 참가비를 예치합니다. 판돈은 서버 위 하나의 장부에 살고, 대국이 끝나면 그곳에서 정산됩니다. 어떤 클라이언트에게도 얼마를 이겼다고 생각하는지 묻지 않습니다. 코인과 젬은 가상이며 현실의 가치가 없고 현금화도 되지 않지만, 우리는 여전히 그 장부를 귀한 것이 든 것처럼 운영합니다. 실제로 그렇기 때문입니다. 점수에 대한 당신의 신뢰가 들어 있으니까요.

서버 자신의 속임수는 무엇이 막나

이것이 올바른 질문이고, 대부분의 게임은 당신이 결코 묻지 않기를 바랍니다. 몰래 주사위를 굴리는 서버는 편드는 쪽에 상냥하게 굴릴 수 있고, 당신은 결코 보지 못합니다. 모든 굴림이 그럴듯해 보입니다. 주사위란 그런 것입니다.

그래서 우리는 그 힘을 우리 자신에게서 거두었습니다. 대국이 시작되기 전에 서버가 비밀 시드를 만들고 그것에 대한 SHA-256 커밋먼트를 공개합니다. 이후 모든 굴림은 HMAC-SHA256으로 그 시드에서 한 번에 하나씩, 순서대로 유도됩니다. 대국이 끝나면 서버가 시드를 공개합니다. 누구나 그 시드가 첫 굴림 이전에 만들어진 커밋먼트와 맞는지, 그리고 대국의 모든 굴림이 거기서 따라 나오는지 확인할 수 있습니다. 암호학적 의미에서 당신의 주사위는 어느 플레이어도 말에 손대기 전에 고정되어 있었습니다. 우리는 0번 굴림에서 공개한 약속을 깨지 않고는 12번 굴림을 구부릴 수 없습니다.

이 가운데 무엇도 우리 말을 믿을 필요가 없습니다. orion.arthea.ai/verify의 검증 페이지가 대국의 공개 기록으로부터, 당신의 기계에서, Web Crypto를 써서 전체 사슬을 다시 계산합니다. 계정도 설치도 없습니다. orion.arthea.ai/go의 문은 App Store와 Google Play 링크를 지니며 지금 이용할 수 있는 것을 항상 보여줍니다.