1. 모든 결과는 암호학적 난수 생성기에서
Spinvolta는 모든 최신 브라우저와 운영체제에 들어 있는 암호학적으로 안전한 난수 생성기 crypto.getRandomValues()로 결과를 정해요. 암호 키를 만들 때 쓰는 바로 그 출처예요. 무언가를 결정할 때 Math.random()은 절대 쓰지 않아요(꽃가루가 날아가는 방향 같은 순수한 장식에만 써요).
2. 나머지 편향 없음
32비트 난수는 예를 들어 7개 선택지로 항상 똑같이 나눠지지 않아요. 4,294,967,296은 7의 배수가 아니라서 단순한 number % 7 방식은 일부 선택지를 아주 조금 더 잘 나오게 해요. Spinvolta는 기각 샘플링을 써요. 숫자가 범위 끝의 고르지 않은 나머지 구간에 떨어지면 버리고 새로 뽑아요. 그래서 선택지가 몇 개든 모두 정확히 같은 확률이에요.
3. 가중치는 정확하게
가중치 모드에서는 1, 2.5, 0.125 같은 가중치를 같은 척도의 정수로 바꿔 정확히 더해요. 합계에 대한 한 번의 균등 추첨으로 당첨을 정하므로, 가중치 2인 항목은 가중치 1인 항목보다 정확히 두 배 잘 나오고, 돌림판의 칸 크기가 그 정확한 확률을 보여줘요.
4. 중복 없이 여러 명 당첨
여러 명 당첨, 팀 나누기, 순서 정하기, 카드 섞기, 경품 추첨은 치우침 없는 피셔–예이츠 셔플(같은 기각 샘플링 포함)을 써서, 가능한 모든 순서나 당첨 조합이 같은 확률이에요.
5. 결과가 먼저, 애니메이션은 나중
돌리기를 누르면 돌림판이 움직이기 전에 당첨이 정해져요. 그다음 계산기가 움직임 — 당기기, 속도, 회전 수, 마지막의 살짝 흔들림 — 을 계산해 당첨 칸 안, 가장자리에서 떨어진 무작위 위치에 정확히 멈추게 해요. 세게 튕기기, 오래 돌리기, 직접 멈추기는 보이는 모습만 바꿔요. 자동 테스트로 수천 번의 랜덤 회전을 확인해 애니메이션이 항상 미리 뽑힌 결과에 멈추고 옆 칸으로 밀려나지 않는지 검사해요.
6. 경품 추첨과 방을 위한 증명 가능한 공정 추첨
경품 추첨(그리고 신뢰가 중요한 모든 추첨)에서는 저희나 호스트를 믿지 않아도 되도록 한 걸음 더 나아가요.
- 추첨 전에 브라우저가 정확한 응모 명단과 설정을 고정하고 지문을 공개해요. 명단, 설정, 비밀 시드의 SHA-256 해시예요. 서버는 언제 받았는지 기록해요.
- 지문에는 drand League of Entropy 난수 비콘의 앞으로 올 라운드가 지정돼요. 전 세계 독립 기관들이 3초마다 만드는 공개 값으로, 누구도 예측하거나 고를 수 없어요.
- 그 라운드가 공개되면 지문, 비콘 값, 시드로 당첨자를 계산해요.
- 증명 페이지에 모든 게 나와요. 누구나 검증을 눌러 비콘의 암호 서명 확인까지 포함해 자기 브라우저에서 다시 계산할 수 있어요.
명단을 고정할 때 비콘 값은 존재하지 않았으므로 호스트는 당첨자를 고를 수 없어요. 저희도 지문이 고정되기 전에 시드를 보지 못하고 drand를 통제하지 않으니 고를 수 없어요. 비콘에 연결할 수 없으면 이를 분명히 표시한 커밋-공개 방식 추첨으로 바뀌어요.
7. 통계로 검증
테스트 모음은 변경할 때마다 수십만 번의 모의 추첨에 카이제곱 적합도 검정을 돌리고, 전체 테스트에서는 백만 번 이상을 검정해요. 균등 선택, 가중치 선택, 셔플, 여러 명 당첨의 각 위치가 대상이에요. 공정성 테스트 페이지에서 직접 해 볼 수 있어요.
우리가 증명할 수 없는 것
평소 돌림판을 돌릴 때는 브라우저에서 실행되는 코드가 저희가 설명한 그대로라고 믿어 주셔야 해요. 코드는 전부 내 기기에서 실행되고, 브라우저 개발자 도구로 직접 볼 수 있어요. 경품이나 공개 추첨처럼 중요한 경우에는 아무도 믿을 필요 없는 증명 가능한 공정 추첨을 쓰세요.
자주 묻는 질문
돌림판을 조작할 수 있나요?
애니메이션으로는 불가능해요. 결과가 먼저 공정하게 정해지고, 움직임은 그걸 보여주도록 계산돼요. 확률을 바꾸는 유일한 방법은 가중치 모드인데, 이때는 ‘가중치 돌림판’ 배지가 뜨고 칸 크기도 확률대로 그려져요.
같은 이름이 두 번 연속 나온 이유는?
진짜 랜덤에는 연속이 있기 때문이에요. 항목이 10개면 같은 항목이 두 번 연속 나올 확률은 10%예요. 항목마다 한 번씩만 나오게 하려면 하나씩 제외 모드를 쓰세요.
drand가 뭔가요?
drand는 독립 대학, 기업, 단체로 이루어진 League of Entropy가 운영하는 분산 난수 비콘이에요. 몇 초마다 검증 가능한 새 난수를 공개해요.