01어떻게 동작하는가?
서버가 매일 비밀 시드(server seed)를 생성하고, 그 해시값(commit)을 하루 시작 시 미리 공개합니다. 각 회차 결과는 HMAC-SHA256(시드, "날짜:회차")로 계산됩니다. 시드는 그날이 끝난 뒤 다음날 자정에 공개되어, 누구나 결과를 재검증할 수 있습니다.
// HMAC commit / reveal 방식
1. server_seed = 랜덤 32바이트 // 비밀
2. commit = SHA256(server_seed) // 미리 공개
3. hmac = HMAC_SHA256(server_seed, "날짜:회차")
방향 = (hmac[0] & 1) ? 오른쪽 : 왼쪽
면 = (hmac[0] & 2) ? DOWN : UP
4. // 다음날 server_seed 공개 → 누구나 검증
02왜 공정한가?
- 사전 commit — 시드 해시를 미리 공개하므로, 운영자가 나중에 시드를 바꿔 결과를 조작할 수 없습니다.
- 예측 불가 — 시드가 비밀이라 공개 전까지는 누구도 다음 결과를 미리 계산할 수 없습니다.
- 사후 검증 — 다음날 시드가 공개되면, SHA256(시드)==commit 확인 후 모든 회차를 직접 재계산해 검증할 수 있습니다.
- 서버 권위 — 서버 시간 기준으로 모든 사용자가 동일한 결과를 봅니다.
03직접 검증해보기
회차 번호와 날짜를 입력하면 commit, 시드 공개 상태, HMAC 결과를 보여드립니다. 시드가 공개된 날짜는 완전히 재검증되고, 오늘 날짜는 commit만 확인됩니다(시드는 내일 공개).
04서버 배포 후 강화 (HMAC commit/reveal)
실제 서버 배포 시 한 단계 더 강화됩니다:
- 서버가 server_seed를 생성하고 그 SHA-256 해시(commit)를 미리 공개
- 결과 = HMAC-SHA256(server_seed, "날짜:회차") 의 첫 비트들로 결정
- 일정 기간 후 server_seed 자체를 공개 (reveal)
- commit + revealed seed로 누구나 사후 검증 가능