검증이 해결하는 문제
모든 카지노 게임은 주장입니다: "이 결과는 무작위였으며, 우리는 당신의 베팅을 본 후에 이를 선택하지 않았습니다." 물리적 공간에서는 눈으로 그 주장을 감시합니다 — 새로운 덱, 투명한 주사위, 지켜볼 수 있는 휠. 온라인에서는 무작위성이 다른 사람의 컴퓨터에서 발생합니다. Provably fair는 딜러의 손을 보는 것에 대한 암호화 대체입니다.
핵심 메커니즘은 commit-reveal입니다. 베팅하기 전에, 하우스는 자신의 무작위성을 제자리에 잠그고 그것의 지문을 보여줍니다 — 서버 시드의 SHA-256 해시입니다. 해시는 한 방향으로 작동합니다: 하우스는 같은 지문과 일치하는 두 번째 시드를 찾을 수 없으며, 당신은 그것으로부터 시드를 읽을 수 없습니다. 시드가 나중에 공개된 후, 당신은 표시된 지문에 대해 확인하고 그것이 생성한 모든 라운드를 다시 계산합니다.
모든 라운드의 세 가지 입력
| 입력 | 누가 선택하는가 | 어떤 역할을 하는가 |
|---|---|---|
| 서버 시드 | 하우스 — 플레이 전에 해시로 커밋됨 | 하우스의 무작위성 반 |
| 클라이언트 시드 | 당신 — 공정성 패널에서 편집 가능 | 당신의 반; 하우스는 이를 예측할 수 없음 |
| 논스 | 아무도 아님 — 0, 1, 2, …로 계산됨 | 동일한 시드 하에서 모든 라운드를 고유하게 만듦 |
라운드의 원시 무작위성은 HMAC-SHA256(서버 시드, 클라이언트 시드 : 논스)입니다 — 양쪽 당사자의 입력을 혼합하는 키가 있는 해시입니다. 당신의 클라이언트 시드가 혼합에 들어가기 때문에, 하우스는 결과에 편향을 주기 위해 당신의 선택을 예측했어야 합니다; 서버 시드가 먼저 커밋되었기 때문에, 당신이 이미 보유한 지문을 깨뜨리지 않고는 나중에 바꿀 수 없습니다.
그 다이제스트로부터, 바이트는 숫자가 됩니다. 우리의 엔진은 첫 바이트를 [0,1)의 균등한 값으로 읽습니다 — 반올림은 생성기와 검증자에서 비트 단위로 동일한 방식으로 수행됩니다 — 그리고 각 게임은 균등한 값을 공개된 규칙을 통해 결과에 매핑합니다: 주사위 롤 곡선, 축소 풀에서의 카드 뽑기, 고정된 커서 위치의 친칠로 주사위.
단계별 가이드
- 원본을 열고 공정성 패널을 엽니다. 현재 서버 시드 해시를 메모합니다 — 이것이 커밋입니다. 원하면 당신의 클라이언트 시드를 설정합니다.
- 한 두 라운드를 플레이하세요. 정산된 각 라운드는 베팅 기록에 (hash, client seed, nonce) 조합을 기록합니다.
- 패널에서 시드 쌍을 로테이션하세요. 로테이션은 기존 서버 시드를 폐지하고 — 이것이 핵심 순간입니다 — 이를 공개합니다.
- 공개된 서버 시드를 SHA-256으로 해시하고 1단계의 지문과 비교하세요. 정확히 일치해야 합니다.
- 라운드를 다시 계산하세요: HMAC-SHA256(revealed seed, "clientSeed:nonce"), 다이제스트를 게임의 공개된 규칙을 통해 매핑하고, 지급받은 결과와 비교하세요.
- 4-5단계에는 독립적인 도구가 모두 작동합니다 — 온라인 SHA-256 계산기, Python 3줄, 또는 패널의 내장 검증기. 수학은 누가 실행하는지에 대해 의견이 없습니다.
ENGINE-VERIFIEDBetkyo의 구현에 대해 특이한 점이 하나 있습니다: 결과를 생성하는 데모 엔진과 이를 검증하는 공정성 패널은 동일한 파생 모듈을 가져옵니다 — 두 개가 아닌 하나의 구현입니다. 생성기와 코드를 공유하는 검증기는 이와 일치하지 않도록 벗어날 수 없습니다.
遊Limbo에서 시도해보세요 — 라운드당 하나의 숫자
Limbo는 처음 검증하기에 가장 깔끔한 게임입니다: 하나의 균일한 드로우, 하나의 배수, 즉시 재계산 가능합니다.Limbo →
검증이 주장하지 않는 것
정직함은 한계를 표시할 것을 요구합니다. Provably fair는 결과가 약속 시점에 고정되었고 공개된 규칙을 통해 매핑되었음을 증명합니다. 규칙이 관대한지는 증명하지 않습니다 — 게임은 provably fair이면서도 여전히 형편없이 지급할 수 있으므로, 우리는 모든 페이테이블과 하우스 엣지를 함께 공개합니다. 손실을 방지하거나, 연패를 단축하거나, 다음 라운드에 대한 약속을 하지 않습니다; 다음 라운드가 당신을 대상으로 선택되지 않았다는 것만 약속합니다.
그리고 볼 수 없는 것은 검증할 수 없습니다: 이 방식은 게임 결과를 다루지만, 예를 들어 라이브 외부 이벤트가 해결되는 순서는 다루지 않습니다. 우리 게임 중 하나가 외부 피드에 의존하는 경우, 공정성 페이지에서 명시적으로 명시하기보다는 주장을 확장하지 않습니다.
용어집
| 용어 | 의미 |
|---|---|
| SHA-256 | 단방향 해시: 모든 입력 → 256비트 지문; 역변환 또는 충돌이 불가능 |
| HMAC | 키가 지정된 해시 — 비밀 키(서버 시드)와 메시지(client seed : nonce)를 혼합 |
| Commit-reveal | 먼저 지문을 공개하고, 나중에 값을 공개; 지문은 값이 절대 변경되지 않았음을 증명 |
| Nonce | "한 번만 사용되는 숫자" — 각 라운드의 다이제스트를 고유하게 만드는 카운터 |
| 시드 로테이션 | 시드 쌍 폐기: 기존 서버 시드는 감사를 위해 공개되고 새로운 커밋이 시작됨 |
FAQ
라운드를 검증하기 위해 암호화를 알아야 하나요?
아니요. 공정성 패널이 모든 단계를 자동화하고, 수동 경로는 SHA-256/HMAC 계산기에 문자열을 붙여넣는 것 이상의 것이 필요하지 않습니다. 작동 원리를 이해하려면 한 문단이면 되고, 실행하는 데는 1분이 걸립니다.
라운드를 검증하기 위해 시드를 로테이션해야 하나요?
서버 시드는 여전히 라운드를 생성하는 동안 비밀로 유지되어야 하기 때문입니다. 조기에 공개하면 플레이어가 향후 결과를 계산할 수 있습니다. 로테이션은 시드의 생명을 끝내며, 이것이 정확히 그것을 공개하고 감사하는 것이 안전한 이유입니다.
하우스가 자신을 위한 운 좋은 시드를 생성할 수 있나요?
커밋이 그 유용한 버전을 차단합니다: 시드는 베팅 전에 고정되고 당신이 제어하는 클라이언트 시드와 혼합됩니다. 하우스는 당신의 시드, 베팅, 타이밍을 예측해야 합니다. 그 시점에는 더 이상 카지노를 운영하는 것이 아니라 정신 읽기 행위입니다.
Provably fair는 라이선스 또는 감사와 동일한가요?
아니요. 서로 다른 질문에 답합니다. 감사와 라이선스는 제도적 신뢰입니다. provably fair는 각 개별 결과에 대한 수학적 신뢰입니다. 우리는 수학과 전체 페이테이블을 공개하므로 두 주장이 결코 혼동되지 않습니다.
소스 & 참고자료
- HMAC — RFC 2104, 라운드별로 사용되는 키 해시 구조
- SHA-2 family — FIPS 180-4, 커밋 해시
- Betkyo engine source: 공유 RNG 프리미티브 및 단일 생성기/검증기 도출 모듈
이 문서의 게임
Limbo — 규칙 & 무료 플레이 →Dice — 규칙 & 무료 플레이 →Chinchiro — 규칙 & 무료 플레이 →