Provably Fair

바카라 게임의 모든 결과는 암호학적으로 검증 가능합니다

🤔 Provably Fair란 무엇인가요?

Provably Fair(증명 가능한 공정성)는 온라인 게임의 결과가 조작되지 않았음을 수학적으로 증명할 수 있는 시스템입니다.

📨 쉽게 이해하기: "봉인된 봉투" 비유

1. 게임 전: 서버가 봉인된 봉투에 "이번 게임의 카드 순서"를 적어 넣습니다. 그리고 봉투 겉면의 사진(해시)만 보여줍니다.

2. 베팅: 당신은 봉투 안을 볼 수 없으니 결과를 모릅니다. 서버도 당신이 설정한 클라이언트 시드가 있어야 최종 카드가 정해지므로 서버도 결과를 바꿀 수 없습니다.

3. 게임 후: 시드를 교체하면 봉투를 열어 원본을 공개합니다. 봉투의 사진(해시)과 실제 봉투(서버 시드)가 일치하면 조작이 없었음이 증명됩니다!

🔧 기술적 원리

  1. 게임 시작 전: 서버가 비밀 시드를 생성하고, 그 해시값만 공개
  2. 베팅 시: 유저는 해시값만 알고, 원본 시드는 모름
  3. 게임 후: 시드 교체 시 이전 원본 시드 공개
  4. 검증: 공개된 시드의 해시값이 미리 본 해시와 일치하는지 확인
🔒
서버가 조작 불가
해시값이 미리 공개되므로
베팅 후 결과 변경 불가
🎲
유저가 예측 불가
서버 시드 원본을 모르므로
결과를 미리 알 수 없음
누구나 검증 가능
공개된 정보로
직접 결과 재계산 가능

📋 게임 진행 과정 (Step by Step)

1

첫 게임 시작 전 - 시드 생성

서버가 64자리 랜덤 서버 시드를 생성합니다.
이 시드의 SHA256 해시값만 유저에게 공개됩니다.
예: a3f2c1... → 해시: 7b9e4d...

2

유저가 클라이언트 시드 설정

유저는 자신만의 클라이언트 시드를 설정할 수 있습니다.
이 시드는 결과 계산에 함께 사용되어 서버 단독 조작을 방지합니다.

3

베팅 및 게임 진행

유저가 베팅 후 게임이 시작됩니다.
서버 시드 + 클라이언트 시드 + Nonce로 카드가 결정됩니다.
Nonce는 해당 시드 조합으로 진행한 게임 횟수입니다.

4

시드 교체 시 - 원본 공개

게임 페이지에서 "새 시드 생성"을 하면:
• 이전 서버 시드 원본이 공개됩니다
• 새로운 서버 시드가 생성되고 해시만 공개됩니다
• 이전 게임들을 모두 검증할 수 있게 됩니다

5

검증하기

공개된 서버 시드로 직접 카드를 계산해보세요!
계산 결과가 실제 게임 결과와 일치하면 공정성이 증명됩니다.

🃏 바카라 카드 생성 원리

각 카드는 서버 시드 + 클라이언트 시드 + 논스 + 카드 위치를 조합하여 결정됩니다. 6덱(312장) 슈에서 카드가 뽑히며, 표준 바카라 룰에 따라 게임이 진행됩니다.

카드 순서 (cardPosition)

Position 0
Player 1번째
Position 1
Player 2번째
Position 2
Banker 1번째
Position 3
Banker 2번째
Position 4
Player 3번째*
Position 5
Banker 3번째*

* 3번째 카드는 바카라 룰에 따라 필요한 경우에만 사용됩니다.

카드 계산 공식

// 1. 입력값 조합 combined = serverSeed + ":" + clientSeed + ":" + nonce + ":" + cardPosition // 2. HMAC-SHA256 해시 생성 hash = HMAC_SHA256(combined, serverSeed) // 3. 해시에서 카드 인덱스 추출 (0-311 범위) offset = (cardPosition * 8) % 56 cardIndex = parseInt(hash.substring(offset, offset+8), 16) % 312 // 4. 인덱스를 카드로 변환 suits = ['H', 'D', 'C', 'S'] // ♥ ♦ ♣ ♠ ranks = ['A','2','3','4','5','6','7','8','9','10','J','Q','K'] suitIndex = Math.floor((cardIndex % 52) / 13) rankIndex = cardIndex % 13 card = suits[suitIndex] + ranks[rankIndex]

바카라 룰

플레이어 3번째 카드 룰

플레이어 점수 행동
0-5드로우 (3번째 카드)
6-7스탠드
8-9내추럴 (양측 스탠드)

뱅커 3번째 카드 룰

플레이어가 스탠드(6-7)한 경우: 뱅커 0-5 드로우, 6-7 스탠드

플레이어가 드로우한 경우, 플레이어의 3번째 카드 값에 따라:

뱅커 점수 드로우 조건 스탠드 조건
0-2 항상 드로우 -
3 P3 = 0-7, 9 P3 = 8
4 P3 = 2-7 P3 = 0, 1, 8, 9
5 P3 = 4-7 P3 = 0-3, 8, 9
6 P3 = 6, 7 P3 = 0-5, 8, 9
7 - 항상 스탠드

* P3 = 플레이어 3번째 카드의 값 (A=1, 2-9=액면가, 10/J/Q/K=0)

❓ 자주 묻는 질문

Q: 왜 현재 게임은 바로 검증할 수 없나요?

서버 시드 원본이 공개되면 다음 게임 결과를 미리 알 수 있기 때문입니다. "새 시드 생성" 후에 이전 시드로 진행한 모든 게임을 검증할 수 있습니다.

Q: 서버가 해시값을 바꿀 수는 없나요?

해시값은 게임 시작 전에 유저에게 이미 표시되어 있습니다. 나중에 공개되는 서버 시드의 해시가 이와 다르면 조작된 것입니다.

Q: 클라이언트 시드는 왜 필요한가요?

유저가 결과 생성에 직접 참여하기 위함입니다. 서버 시드만 사용하면 서버가 유리한 시드를 미리 선택할 가능성이 있지만, 유저의 시드가 결합되면 불가능합니다.

Q: Nonce(논스)란 무엇인가요?

같은 시드 조합으로 몇 번째 게임인지 나타내는 숫자입니다. 1, 2, 3... 순서대로 증가하며, 같은 시드라도 Nonce가 다르면 결과가 다릅니다.

Q: 게임 전에 모든 카드가 이미 정해져 있나요?

네! 서버 시드, 클라이언트 시드, Nonce가 정해지는 순간 1번째부터 100번째 카드까지 모두 수학적으로 결정됩니다. 단, 서버 시드를 모르기 때문에 미리 알 수는 없습니다.

Q: Tie(무승부) 시 베팅금은 어떻게 되나요?

Player 또는 Banker에 베팅했는데 Tie가 나오면 베팅금이 그대로 반환됩니다 (Push). Tie에 베팅한 경우에만 9배 배당을 받습니다.

🔍 게임 검증하기

PLAYER

0

BANKER

0
-
서버 시드 해시: -