Caputchin
Caputchin 이해하기

게이밍 안티치트

방문자가 몇 초 동안 하는 게임은 당신이 보는 부분입니다. 그 아래에는 게임을 사람의 증거로 만드는 안티치트 시스템이 있습니다. Caputchin은 경쟁 멀티플레이어 게임이 치터를 상대로 쓰는 작전을 빌립니다: 서버가 모든 라운드에 대해 권위를 갖고, 게임이 잠긴 샌드박스에서 돌고, 결과가 플레이어의 입력을 리플레이해 다시 도출됩니다. 게임은 할 수 있지, 위조할 수 없습니다.

이것은 proof of work계측과 쌓인 세 번째 검증 게이트입니다. 그것은 보안 페이지에서 키별로 구성됩니다.

수명 주기

라운드는 세 단계를 거칩니다: 플레이 전에 서버에서 세워지고, 플레이 동안 브라우저에서 샌드박스로 돌고, 플레이 후에 서버에서 다시 검증됩니다.

라운드 전: 서버 권위 설정

라운드가 무엇인지 정하는 모든 것은 브라우저가 아니라 서버에서 일어납니다. 이것이 멀티플레이어 안티치트의 "클라이언트를 결코 신뢰하지 마라" 원칙입니다: 클라이언트는 의도를 보내고, 서버가 현실을 정합니다.

  • 서명된 일회용 티켓이 라운드를 발급합니다. 그것은 수명이 짧고 한 번만 쓸 수 있습니다. 붙잡힌 티켓은 두 번째 통과로 리플레이될 수 없습니다.
  • 게임과 그 무작위 시드는 서버 측에서 골라져 티켓에 실립니다. 브라우저는 더 쉬운 게임이나 더 친절한 시드를 고를 수 없는데, 그것이 그 선택을 결코 하지 않기 때문입니다.
  • 매번 자격 있는 풀에서 다른 게임. 풀이기는 어떤 게임을 마주할지 결코 모르니, 단일 정적 표적에 미리 훈련할 수 없습니다. 운영자는 회전을 좁힐 수 있지만, 서버는 늘 허용된 묶음에서 고릅니다. 풀 자체는 색인 시점 적합성 확인을 통과한 게임만 담습니다. 마켓플레이스 게임 빌드하기를 보세요.

라운드 동안: 샌드박스된 게임

게임은 방문자의 브라우저에서 돌지만, 방문자의 사이트와 라운드의 무결성을 둘 다 보호하는 경계 안에서 돕니다.

<caputchin-game>은 각 게임을 동일 오리진 접근이 없는 격리된 iframe에 마운트하니, 게임은 불투명 오리진을 갖고 호스트 페이지의 쿠키, 스토리지, DOM, 또는 동일 오리진 네트워크에 닿을 수 없습니다. 그 인라인 content-security-policy는 스크립트를 정확히 게임의 번들로 고정하고 아웃바운드 네트워크 호출을 차단하며, 번들은 돌기 전에 알려진 해시를 상대로 확인됩니다(불일치는 닫힌 채 실패). 호스트 페이지 자체의 보안 정책은 그대로입니다. 정확한 샌드박스와 정책 모양은 Caputchin이 게임을 샌드박싱하는 방법에 문서화되어 있습니다.

요점: 게임은 기본으로 신뢰되지 않고 갇혀 있습니다. 그것은 무엇도 빼낼 수 없고, 자기가 임베드된 페이지를 조작할 수 없습니다.

라운드 후: 결정론적 리플레이

방문자가 끝내면, 브라우저는 기록된 입력 트레이스를 제출합니다. 서버는 결과에 대해 브라우저의 말을 받아들이지 않습니다. 그것은 트레이스를 다시 실행합니다.

  • 라운드는 서버에서 다시 시뮬레이션됩니다, 같은 서버 도출 시드로, 네트워크 접근이 없고 단단한 시간 예산을 둔 봉인된 아이솔레이트에서. 이것은 전략 게임에서 결정론적 록스텝이 기대는 같은 속성입니다: 동일한 시드에 동일한 입력이 동일한 플레이를 재현합니다. 게임을 진짜로 풀지 않은 트레이스는 통과 결과를 재현하지 않습니다.
  • 통과 또는 실패는 그 리플레이에서 취해지지, 결코 브라우저가 보고한 숫자에서가 아닙니다. 클라이언트는 벌지 않은 점수를 주장할 수 없습니다.
  • 서명된 토큰은 리플레이가 플레이를 확인할 때만 발급됩니다. 그 토큰은 당신의 백엔드가 나중에 검증 시점에 그것을 확인할 때 그 자체로 일회용입니다.

Caputchin이 하지 않는 것

대부분의 게임과 대화형 CAPTCHA는 행동 신호에 기댑니다: 마우스 경로 엔트로피, 탭 타이밍, 봇 대 사람을 추측하는 분류기에 먹이는 기기 텔레메트리. Caputchin은 일부러 그렇게 하지 않습니다. 그것은 플레이어의 어떤 행동 프로필도 수집하지 않습니다. 입력이 어떻게 만들어졌는지 추측하는 대신, 그것이 실제로 게임을 푸는지를 근본 원리에서 다시 도출합니다. 이것은 프라이버시 자세이자 보안 자세입니다: 속일 행동 모델이 없고, 재현할 물리만 있습니다.

정직한 한계

게이트는 게임만큼만 강합니다. 안티치트 기계는 라운드가 위조가 아니라 진짜로 플레이됐음을 증명하지만, 쉬운 게임을 어렵게 만들 수는 없습니다. 사소한 게임(정적 판, DOM에서 읽히는 승리 수, "통과하려면 빨간 점을 클릭")은 스크립트가 풀기 싸고, 결정론적 리플레이는 그 스크립트 입력이 이긴다고 충실히 확인할 텐데, 실제로 이기기 때문입니다. 봇에 대한 저항은 게임 자체가 프로그램으로 풀기 어렵다는 데서 옵니다: 빠르고, 감각적이고, 찰나의 반응, DOM에 앉은 해답 없음. 안티치트 계층은 플레이가 진짜였음을 보장하고; 게임의 설계가 진짜 플레이가 자동화하기 어려웠는지를 정합니다. 그것을 염두에 두고 게임을 고르고 빌드하세요, 마켓플레이스 게임 빌드하기를 보세요.

통과 또는 실패는 각 게임 자체의 로직이 정합니다; 서버는 그 로직을 충실히 다시 실행하지만, 주어진 게임이 무엇을 승리로 여기는지를 재단하지 않습니다. 게이밍 안티치트는 proof of work, 계측, 그리고 키의 나머지 보안 설정과 조합될 때 가장 강합니다.

이 페이지에서