커밋먼트 스킴이란?
커밋먼트 스킴은 플레이어와 플랫폼이 선택한 비밀 값을 다른 사람에게 숨긴 채 안전하게 확정(커밋)할 수 있도록 해 주는 기능입니다.
이 값들은 나중에 공개되므로, 제3자가 커밋된 내용이 공개된 값과 일치하는지 확인할 수 있습니다. 커밋먼트 스킴은 카지노의 검증 가능성을 보장합니다.
커밋먼트 스킴은 커밋(Commit) 단계와 공개(Reveal) 단계, 두 단계로 이루어집니다.
커밋 단계:
커밋 단계의 목적은 게임 결과를 생성하기 위해 플레이어와 운영자가 만든 특정 값들을 확정하고 고정하는 것입니다.
간단히 설명하면, 3개의 값이 커밋되어 게임 결과를 생성하는 데 사용됩니다. 값이 한 번 커밋되면 공개 단계 전까지 변경할 수 없습니다. 커밋 과정에서는 조작을 방지하기 위해 해싱이 이루어집니다.
활성 클라이언트 시드
활성 서버 시드(해시되지 않은 원본)
논스
Output = Commit(Active_Client_Seed, Active_Server_Seed, Nonce)
활성 클라이언트 시드: 해시되지 않은 값이며, 플레이어가 정하는 값입니다.
활성 서버 시드(해시되지 않은 원본): 서버가 생성하며 비밀로 유지됩니다. 이 비밀 값은 해시 처리되며, 운영자와 플레이어에게는 해시된 값만 표시됩니다.
논스는 아직 게임이 진행되지 않았으므로 처음에는 0으로 설정됩니다. 이후 게임을 플레이할 때마다 1씩 증가합니다.
이 3가지 변수의 조합으로 커밋 결과값은 항상 달라집니다.
공개 단계:
공개 단계의 목적은 해시되지 않은 서버 시드를 공개하는 것입니다. 해시되지 않은 시드와 논스를 알게 되면, 사용자는 자신의 게임 결과를 직접 검증할 수 있습니다.
플레이어가 자신의 결과를 검증하려면 먼저 서버 시드와 클라이언트 시드 쌍을 교체(로테이션)해야 합니다.
교체가 완료되면 플랫폼은 이전에 활성화되어 있던 서버 시드의 해시되지 않은 원본을 공개합니다. 이제 플레이어와 운영자, 그리고 모든 제3자가 클라이언트 시드, 서버 시드, 논스의 3가지 정보를 모두 알 수 있게 됩니다.
알려진 클라이언트 시드, 서버 시드, 그리고 해당 라운드의 논스를 입력하면, 특정 게임과 라운드의 결과를 언제든지 증명할 수 있습니다.
서버 시드
서버 시드는 시스템에서 64자리의 무작위 16진수 문자열로 생성됩니다. 이 시드는 SHA-256 해싱 과정을 거치며, 해시된 값이 표시됩니다. 해싱에는 두 가지 목적이 있습니다.
부정행위 방지: 해시값으로부터 해시되지 않은 원래의 서버 시드를 알아내는 것은 계산상 불가능하므로(역상 저항성), 플레이어의 부정행위를 방지합니다.
조작 방지: SHA-256의 충돌 저항성으로 인해 같은 해시 결과를 만드는 서로 다른 두 입력값을 찾는 것은 계산상 불가능하므로, 운영자가 플레이어를 속이는 것을 방지합니다.
게임이 완료되고 사용자가 시드를 교체한 경우에만 카지노는 검증을 위해 해시되지 않은 서버 시드를 공개합니다.
클라이언트 시드
클라이언트 시드는 플레이어인 여러분의 것으로, 모든 게임 결과의 무작위성에 여러분이 직접 영향을 미칠 수 있도록 해 줍니다.
처음에는 브라우저에서 클라이언트 시드가 무작위로 생성되지만, 원하는 값으로 직접 변경하시는 것을 권장합니다. 이렇게 하면 플레이어인 여러분이 게임 결과에 직접 관여할 수 있습니다.
논스
암호학에서 논스(Nonce)는 '한 번만 사용되는 숫자(number once)'를 의미합니다. 동일한 서버 시드와 클라이언트 시드 조합으로 새 베팅을 할 때마다 값이 증가하는 숫자입니다.
이를 통해 서버 시드, 클라이언트 시드, 논스의 조합이 매 게임마다 달라지며, 커밋먼트 스킴의 결과값도 달라지게 됩니다.
이 값들이 코드에서 어떻게 구현되는지 자세히 알아보세요.


